From 7bc3fef809803a9ad1f64d58b8de4e162cf4c07b Mon Sep 17 00:00:00 2001 From: Ekaanth Date: Tue, 26 Sep 2023 20:01:08 +0530 Subject: [PATCH] initial parachain-template --- .devcontainer/devcontainer.json | 25 - .dockerignore | 9 + .editorconfig | 33 +- .github/ISSUE_TEMPLATE/config.yml | 12 - .github/workflows/build-publish-image.yml | 53 - .github/workflows/build.yml | 64 + .github/workflows/check.yml | 44 - .gitignore | 29 +- rustfmt.toml => .rustfmt.toml | 14 +- .vscode/tasks.json | 37 - CODEOWNERS | 1 - Cargo.lock | 10019 +++++++++++----- Cargo.toml | 13 +- README.md | 86 +- config.toml | 20 + docs/rust-setup.md | 232 +- docs/zombienet.md | 49 + node/Cargo.toml | 146 +- node/src/benchmarking.rs | 164 - node/src/chain_spec.rs | 563 +- node/src/cli.rs | 102 +- node/src/command.rs | 626 +- node/src/lib.rs | 3 - node/src/main.rs | 4 +- node/src/rpc.rs | 42 +- node/src/service.rs | 734 +- pallets/template/Cargo.toml | 43 - pallets/template/README.md | 1 - pallets/template/src/benchmarking.rs | 20 - pallets/template/src/lib.rs | 103 - pallets/template/src/mock.rs | 58 - pallets/template/src/tests.rs | 27 - plain-parachain-chainspec.json | 194 + runtime/Cargo.toml | 129 - runtime/build.rs | 10 - runtime/common/Cargo.toml | 38 + runtime/common/src/lib.rs | 45 + runtime/devnet/Cargo.toml | 190 + runtime/devnet/build.rs | 13 + runtime/devnet/src/lib.rs | 866 ++ runtime/devnet/src/weights/block_weights.rs | 53 + .../devnet/src/weights/extrinsic_weights.rs | 53 + runtime/devnet/src/weights/mod.rs | 28 + .../devnet/src/weights/paritydb_weights.rs | 63 + runtime/devnet/src/weights/rocksdb_weights.rs | 63 + runtime/devnet/src/xcm_config.rs | 299 + runtime/mainnet/Cargo.toml | 190 + runtime/mainnet/build.rs | 13 + runtime/mainnet/src/lib.rs | 865 ++ runtime/mainnet/src/weights/block_weights.rs | 53 + .../mainnet/src/weights/extrinsic_weights.rs | 53 + runtime/mainnet/src/weights/mod.rs | 28 + .../mainnet/src/weights/paritydb_weights.rs | 63 + .../mainnet/src/weights/rocksdb_weights.rs | 63 + runtime/mainnet/src/xcm_config.rs | 299 + runtime/src/lib.rs | 792 -- scripts/frame-weight-template.hbs | 121 + scripts/init.sh | 12 - shell.nix | 35 - zombienet-config/rococo-local-config.toml | 19 + zombienet.sh | 75 + 61 files changed, 12580 insertions(+), 5521 deletions(-) delete mode 100644 .devcontainer/devcontainer.json create mode 100644 .dockerignore delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/workflows/build-publish-image.yml create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/check.yml rename rustfmt.toml => .rustfmt.toml (93%) delete mode 100644 .vscode/tasks.json delete mode 100644 CODEOWNERS create mode 100644 config.toml create mode 100644 docs/zombienet.md delete mode 100644 node/src/benchmarking.rs delete mode 100644 node/src/lib.rs delete mode 100644 pallets/template/Cargo.toml delete mode 100644 pallets/template/README.md delete mode 100644 pallets/template/src/benchmarking.rs delete mode 100644 pallets/template/src/lib.rs delete mode 100644 pallets/template/src/mock.rs delete mode 100644 pallets/template/src/tests.rs create mode 100644 plain-parachain-chainspec.json delete mode 100644 runtime/Cargo.toml delete mode 100644 runtime/build.rs create mode 100644 runtime/common/Cargo.toml create mode 100644 runtime/common/src/lib.rs create mode 100644 runtime/devnet/Cargo.toml create mode 100644 runtime/devnet/build.rs create mode 100644 runtime/devnet/src/lib.rs create mode 100644 runtime/devnet/src/weights/block_weights.rs create mode 100644 runtime/devnet/src/weights/extrinsic_weights.rs create mode 100644 runtime/devnet/src/weights/mod.rs create mode 100644 runtime/devnet/src/weights/paritydb_weights.rs create mode 100644 runtime/devnet/src/weights/rocksdb_weights.rs create mode 100644 runtime/devnet/src/xcm_config.rs create mode 100644 runtime/mainnet/Cargo.toml create mode 100644 runtime/mainnet/build.rs create mode 100644 runtime/mainnet/src/lib.rs create mode 100644 runtime/mainnet/src/weights/block_weights.rs create mode 100644 runtime/mainnet/src/weights/extrinsic_weights.rs create mode 100644 runtime/mainnet/src/weights/mod.rs create mode 100644 runtime/mainnet/src/weights/paritydb_weights.rs create mode 100644 runtime/mainnet/src/weights/rocksdb_weights.rs create mode 100644 runtime/mainnet/src/xcm_config.rs delete mode 100644 runtime/src/lib.rs create mode 100644 scripts/frame-weight-template.hbs delete mode 100755 scripts/init.sh delete mode 100644 shell.nix create mode 100644 zombienet-config/rococo-local-config.toml create mode 100755 zombienet.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 56a3c13..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Substrate Node template", - "context": "..", - "settings": { - "terminal.integrated.shell.linux": "/bin/bash", - "lldb.executable": "/usr/bin/lldb" - }, - "extensions": [ - "rust-lang.rust", - "bungcip.better-toml", - "vadimcn.vscode-lldb" - ], - "forwardPorts": [ - 3000, - 9944 - ], - "onCreateCommand": ["cargo build", "cargo check"], - "postStartCommand": "./target/debug/node-template --dev --ws-external", - "menuActions": [ - {"id": "polkadotjs", - "label": "Open PolkadotJS Apps", - "type": "external-preview", - "args": ["https://polkadot.js.org/apps/?rpc=wss%3A%2F%2F/$HOST/wss"]} - ] -} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..913065a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git +**/target/ +**/*.txt +**/*.md +/docker/ +!/target/release/polkadot-collator + +# dotfiles in the repo root +/.* diff --git a/.editorconfig b/.editorconfig index 5adac74..e8ff202 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,29 @@ root = true - [*] -indent_style=space -indent_size=2 -tab_width=2 -end_of_line=lf -charset=utf-8 -trim_trailing_whitespace=true -insert_final_newline = true - -[*.{rs,toml}] 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 + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 884336b..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,12 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Support & Troubleshooting with the Substrate Stack Exchange Community - url: https://substrate.stackexchange.com - about: | - For general problems with Substrate or related technologies, please search here first - for solutions, by keyword and tags. If you discover no solution, please then ask and questions in our community! We highly encourage everyone also share their understanding by answering questions for others. - - name: Feature Requests and PRs to be submitted upstream - url: https://github.com/paritytech/substrate/tree/master/bin/node-template - about: | - This template is generated on tagged releases upstream, it is not independently updated and maintained. - Please direct all suggestions for improvements and PRs upstream. diff --git a/.github/workflows/build-publish-image.yml b/.github/workflows/build-publish-image.yml deleted file mode 100644 index d2ee88a..0000000 --- a/.github/workflows/build-publish-image.yml +++ /dev/null @@ -1,53 +0,0 @@ -# This is an example GitHub action that will build and publish a Docker image to DockerHub -# You need to add the following secrets to your GitHub Repository or Organization to make this work -# - DOCKER_USERNAME: The username of the DockerHub account. E.g. parity -# - DOCKER_TOKEN: Access token for DockerHub, see https://docs.docker.com/docker-hub/access-tokens/. E.g. VVVVVVVV-WWWW-XXXXXX-YYYY-ZZZZZZZZZ -# The following are setup as an environment variable below -# - DOCKER_REPO: The unique name of the DockerHub repository. E.g. parity/polkadot - -name: Build & Publish Docker Image - -# Controls when the action will run. -on: - # Triggers the workflow on push events but only for the main branch - # push: - # branches: [ main ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Set an environment variable (that can be overriden) for the Docker Repo -env: - DOCKER_REPO: parity/polkadot - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - build: - # The type of runner that the job will run on - runs-on: ubuntu-22.04 - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: Check out the repo - uses: actions/checkout@v2.5.0 - - # Login to Docker hub using the credentials stored in the repository secrets - - name: Log in to Docker Hub - uses: docker/login-action@v2.1.0 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} - - # Get the commit short hash, to use as the rev - - name: Calculate rev hash - id: rev - run: echo "value=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - - # Build and push 2 images, One with the version tag and the other with latest tag - - name: Build and push Docker images - uses: docker/build-push-action@v3.2.0 - with: - context: . - push: true - tags: ${{ env.DOCKER_REPO }}:v${{ steps.rev.outputs.value }}, ${{ env.DOCKER_REPO }}:latest diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4ef7218 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,64 @@ +name: Build, test and lint + +on: + push: + branches: + - release-** + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + build: + name: "Build" + runs-on: ubuntu-latest + steps: + - name: Free up space on runner + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + - name: Rust Setup + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + target: wasm32-unknown-unknown + override: true + components: rustfmt, clippy + + - name: Install protoc + run: | + sudo apt-get install -y protobuf-compiler + protoc --version + + - uses: actions/checkout@v3 + + - name: Rustfmt + uses: actions-rs/cargo@v1 + with: + toolchain: stable + command: fmt + args: --all --check + + - name: Rust Cache + uses: Swatinem/rust-cache@v2.5.0 + with: + cache-on-failure: true + cache-all-crates: true + + - name: Check Build + run: | + cargo check --release + + - name: Run tests + run: cargo test --release --locked --verbose --all + + - name: Check try-runtime build + run: cargo check --release --features=try-runtime + + - name: Ensure benchmarking compiles + run: > + pushd node && + cargo check --release --features=runtime-benchmarks diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml deleted file mode 100644 index c735640..0000000 --- a/.github/workflows/check.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Check Set-Up & Build - -# Controls when the action will run. -on: - # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: [main] - pull_request: - branches: [main] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - check: - # The type of runner that the job will run on - runs-on: ubuntu-22.04 - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - name: Set-Up - run: sudo apt install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler - - - name: Install Rustup - run: | - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - source ~/.cargo/env - rustup default stable - rustup update nightly - rustup update stable - rustup target add wasm32-unknown-unknown --toolchain nightly - - - name: Check Build - run: | - SKIP_WASM_BUILD=1 cargo check --release - - - name: Check Build for Benchmarking - run: > - pushd node && - cargo check --features=runtime-benchmarks --release diff --git a/.gitignore b/.gitignore index 3994bab..7a7c465 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,30 @@ -# Generated by Cargo -# will have compiled files and executables +# Cargo compiled files and executables **/target/ + # These are backup files generated by rustfmt **/*.rs.bk +# Local chain databases (defalut location) +**/chains/ + +# The cache for chain data in container +.local + +# The cache for docker container dependency +/.cargo/config + .DS_Store +.idea +.vscode + +# polkadot-launch logs +*.log + +# node binaries +bin/* + +# zombienet binaries +zombienet-macos +zombient-linux-x64 -# direnv files -.envrc -.direnv +polkadot-sdk/* \ No newline at end of file diff --git a/rustfmt.toml b/.rustfmt.toml similarity index 93% rename from rustfmt.toml rename to .rustfmt.toml index 441913f..4308a7b 100644 --- a/rustfmt.toml +++ b/.rustfmt.toml @@ -2,22 +2,26 @@ hard_tabs = true max_width = 100 use_small_heuristics = "Max" + # Imports imports_granularity = "Crate" reorder_imports = true + # Consistency newline_style = "Unix" + # Format comments comment_width = 100 wrap_comments = true + # Misc -chain_width = 80 -spaces_around_ranges = false binop_separator = "Back" -reorder_impl_items = false -match_arm_leading_pipes = "Preserve" +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 +use_field_init_shorthand = true \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 55b38db..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "label": "Run ", - "type": "shell", - "command": "cargo", - "args": ["run", "--release", "--", "--dev"], - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "reveal": "always", - "panel": "new" - }, - "problemMatcher": [ - { - "owner": "rust", - "fileLocation": ["relative", "${workspaceRoot}"], - "pattern": { - "regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "endLine": 4, - "endColumn": 5, - "severity": 6, - "message": 7 - } - } - ] - } - ] -} \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 5fefbd6..0000000 --- a/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @sacha-l @lisa-parity diff --git a/Cargo.lock b/Cargo.lock index 741a644..94fa249 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,16 +18,16 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli", + "gimli 0.27.3", ] [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "gimli", + "gimli 0.28.0", ] [[package]] @@ -172,13 +172,19 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] +[[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" @@ -205,24 +211,23 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46" [[package]] name = "anstyle-parse" @@ -244,9 +249,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -254,9 +259,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "approx" @@ -275,9 +280,9 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "array-bytes" -version = "4.2.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +checksum = "d9b1c5a481ec30a5abd8dfbd94ab5cf1bb4e9a66be7f1b3b322f2f1170c200fd" [[package]] name = "arrayref" @@ -310,7 +315,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.23", + "time", ] [[package]] @@ -326,7 +331,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.23", + "time", ] [[package]] @@ -364,6 +369,35 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "assets-common" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "log", + "pallet-asset-conversion", + "pallet-asset-tx-payment", + "pallet-xcm", + "parachains-common", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime", + "sp-std", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] + [[package]] name = "async-channel" version = "1.9.0" @@ -397,46 +431,46 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener", ] [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "async-trait" -version = "0.1.71" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "asynchronous-codec" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ "bytes", "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", ] [[package]] @@ -464,16 +498,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ - "addr2line 0.20.0", + "addr2line 0.21.0", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.31.1", + "object 0.32.1", "rustc-demangle", ] @@ -503,9 +537,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "base64ct" @@ -522,6 +556,15 @@ dependencies = [ "serde", ] +[[package]] +name = "binary-merkle-tree" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "hash-db", + "log", +] + [[package]] name = "bincode" version = "1.3.3" @@ -543,13 +586,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.10", + "prettyplease 0.2.15", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -560,9 +603,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "bitvec" @@ -587,24 +630,24 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] @@ -617,7 +660,8 @@ dependencies = [ "arrayvec 0.7.4", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq", + "digest 0.10.7", ] [[package]] @@ -687,6 +731,15 @@ dependencies = [ "serde", ] +[[package]] +name = "bounded-vec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" +dependencies = [ + "thiserror", +] + [[package]] name = "bs58" version = "0.4.0" @@ -695,9 +748,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.6.0" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" dependencies = [ "memchr", "serde", @@ -732,9 +785,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" @@ -744,9 +797,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bzip2-sys" @@ -770,9 +823,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" dependencies = [ "serde", ] @@ -785,7 +838,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.18", "serde", "serde_json", "thiserror", @@ -793,11 +846,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -822,9 +876,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.3" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "215c0072ecc28f92eeb0eea38ba63ddfcb65c2828c46311d646f1a3ff5f9841c" +checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3" dependencies = [ "smallvec", ] @@ -868,28 +922,27 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] name = "cid" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" dependencies = [ "core2", "multibase", - "multihash 0.16.3", + "multihash", "serde", "unsigned-varint", ] @@ -922,6 +975,15 @@ dependencies = [ "inout", ] +[[package]] +name = "ckb-merkle-mountain-range" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" +dependencies = [ + "cfg-if", +] + [[package]] name = "clang-sys" version = "1.6.1" @@ -935,20 +997,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.11" +version = "4.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d" +checksum = "84ed82781cea27b43c9b106a979fe450a13a31aab0500595fb3fc06616de08e6" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.11" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b" +checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" dependencies = [ "anstream", "anstyle", @@ -958,21 +1019,33 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" + +[[package]] +name = "coarsetime" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "a90d114103adbc625300f346d4d09dfb4ab1c4a8df6868435dd903392ecf4354" +dependencies = [ + "libc", + "once_cell", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] [[package]] name = "codespan-reporting" @@ -984,6 +1057,27 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "color-print" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a858372ff14bab9b1b30ea504f2a4bc534582aee3e42ba2d41d2a7baba63d5d" +dependencies = [ + "color-print-proc-macro", +] + +[[package]] +name = "color-print-proc-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e37866456a721d0a404439a1adae37a31be4e0055590d053dfe6981e05003f" +dependencies = [ + "nom", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "colorchoice" version = "1.0.0" @@ -992,15 +1086,21 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "6.2.0" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" dependencies = [ "strum", "strum_macros", "unicode-width", ] +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + [[package]] name = "concurrent-queue" version = "2.2.0" @@ -1025,15 +1125,31 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] -name = "constant_time_eq" -version = "0.2.6" +name = "const-random" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "proc-macro-hack", + "tiny-keccak", +] [[package]] name = "constant_time_eq" @@ -1041,6 +1157,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[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.3" @@ -1075,6 +1197,16 @@ 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.9" @@ -1105,7 +1237,7 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli", + "gimli 0.27.3", "hashbrown 0.13.2", "log", "regalloc2", @@ -1175,7 +1307,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "itertools", + "itertools 0.10.5", "log", "smallvec", "wasmparser", @@ -1240,6 +1372,16 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -1269,9 +1411,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -1329,3906 +1471,7035 @@ dependencies = [ ] [[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +name = "cumulus-client-cli" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle", - "zeroize", + "clap", + "parity-scale-codec", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-core", + "sp-runtime", + "url", ] [[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +name = "cumulus-client-collator" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-primitives-core", + "futures", + "parity-scale-codec", + "parking_lot 0.12.1", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sc-client-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "tracing", ] [[package]] -name = "curve25519-dalek" -version = "4.0.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" +name = "cumulus-client-consensus-aura" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "cfg-if", - "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", - "subtle", - "zeroize", + "async-trait", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-interface", + "futures", + "lru 0.10.1", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-overseer", + "polkadot-primitives", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-babe", + "sc-consensus-slots", + "sc-telemetry", + "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", + "substrate-prometheus-endpoint", + "tracing", ] [[package]] -name = "cxx" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e928d50d5858b744d1ea920b790641129c347a770d1530c3a85b77705a5ee031" +name = "cumulus-client-consensus-common" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", + "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", + "substrate-prometheus-endpoint", + "tracing", ] [[package]] -name = "cxx-build" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8332ba63f8a8040ca479de693150129067304a3496674477fff6d0c372cc34ae" +name = "cumulus-client-consensus-proposer" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.25", + "anyhow", + "async-trait", + "cumulus-primitives-parachain-inherent", + "sp-consensus", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "thiserror", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5966a5a87b6e9bb342f5fab7170a93c77096efe199872afffc4b477cfeb86957" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b2dab6991c7ab1572fea8cb049db819b1aeea1e2dac74c0869f244d9f21a7c" +name = "cumulus-client-network" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", + "async-trait", + "cumulus-relay-chain-interface", + "futures", + "futures-timer", + "parity-scale-codec", + "parking_lot 0.12.1", + "polkadot-node-primitives", + "polkadot-parachain", + "polkadot-primitives", + "sc-client-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "tracing", ] [[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +name = "cumulus-client-pov-recovery" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", + "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-consensus", + "sp-maybe-compressed-blob", + "sp-runtime", + "tracing", ] [[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", +name = "cumulus-client-service" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", + "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-runtime", + "sp-transaction-pool", ] [[package]] -name = "data-encoding" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" - -[[package]] -name = "data-encoding-macro" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" +name = "cumulus-pallet-aura-ext" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "data-encoding", - "data-encoding-macro-internal", + "frame-support", + "frame-system", + "pallet-aura", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", + "sp-std", ] [[package]] -name = "data-encoding-macro-internal" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" +name = "cumulus-pallet-dmp-queue" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "data-encoding", - "syn 1.0.109", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", ] [[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +name = "cumulus-pallet-parachain-system" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", + "bytes", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "environmental", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "polkadot-parachain", + "scale-info", + "sp-core", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", + "sp-version", + "xcm", ] [[package]] -name = "der" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946" +name = "cumulus-pallet-parachain-system-proc-macro" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "const-oid", - "zeroize", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +name = "cumulus-pallet-session-benchmarking" +version = "3.0.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "sp-runtime", + "sp-std", ] [[package]] -name = "der-parser" -version = "8.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +name = "cumulus-pallet-xcm" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "asn1-rs 0.5.2", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", ] [[package]] -name = "derive-syn-parse" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +name = "cumulus-pallet-xcmp-queue" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "polkadot-runtime-common", + "rand_chacha 0.3.1", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-executor", ] [[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +name = "cumulus-primitives-aura" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "derive_builder_macro", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-primitives", + "sp-api", + "sp-consensus-aura", + "sp-runtime", + "sp-std", ] [[package]] -name = "derive_builder_core" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +name = "cumulus-primitives-core" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain", + "polkadot-primitives", + "scale-info", + "sp-api", + "sp-runtime", + "sp-std", + "sp-trie", + "xcm", ] [[package]] -name = "derive_builder_macro" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +name = "cumulus-primitives-parachain-inherent" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "derive_builder_core", - "syn 1.0.109", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", + "parity-scale-codec", + "sc-client-api", + "scale-info", + "sp-api", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-trie", + "tracing", ] [[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +name = "cumulus-primitives-timestamp" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "cumulus-primitives-core", + "futures", + "parity-scale-codec", + "sp-inherents", + "sp-std", + "sp-timestamp", ] [[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - +name = "cumulus-primitives-utility" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "log", + "parity-scale-codec", + "polkadot-runtime-common", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-builder", + "xcm-executor", +] + [[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +name = "cumulus-relay-chain-inprocess-interface" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "generic-array 0.12.4", + "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 = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +name = "cumulus-relay-chain-interface" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" dependencies = [ - "generic-array 0.14.7", + "async-trait", + "cumulus-primitives-core", + "futures", + "jsonrpsee-core", + "parity-scale-codec", + "polkadot-overseer", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-state-machine", + "thiserror", ] [[package]] -name = "digest" -version = "0.10.7" +name = "cumulus-relay-chain-minimal-node" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "array-bytes", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-rpc-interface", + "futures", + "lru 0.9.0", + "polkadot-availability-recovery", + "polkadot-collator-protocol", + "polkadot-core-primitives", + "polkadot-network-bridge", + "polkadot-node-collation-generation", + "polkadot-node-core-runtime-api", + "polkadot-node-network-protocol", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "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", + "tokio", + "tracing", +] + +[[package]] +name = "cumulus-relay-chain-rpc-interface" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures", + "futures-timer", + "jsonrpsee", + "lru 0.9.0", + "parity-scale-codec", + "polkadot-overseer", + "sc-client-api", + "sc-rpc-api", + "sc-service", + "serde", + "serde_json", + "sp-api", + "sp-authority-discovery", + "sp-consensus-babe", + "sp-core", + "sp-state-machine", + "sp-storage", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "cumulus-test-relay-sproof-builder" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-primitives-core", + "parity-scale-codec", + "polkadot-primitives", + "sp-runtime", + "sp-state-machine", + "sp-std", +] + +[[package]] +name = "curve25519-dalek" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", "subtle", + "zeroize", ] [[package]] -name = "directories" -version = "4.0.1" +name = "curve25519-dalek" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ - "dirs-sys", + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", ] [[package]] -name = "directories-next" -version = "2.0.0" +name = "curve25519-dalek" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +checksum = "622178105f911d937a42cdb140730ba4a3ed2becd8ae6ce39c7d28b5d75d4588" dependencies = [ "cfg-if", - "dirs-sys-next", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", ] [[package]] -name = "dirs-sys" -version = "0.3.7" +name = "curve25519-dalek-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ - "libc", - "redox_users", - "winapi", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "cxx" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "bbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbe" dependencies = [ - "libc", - "redox_users", - "winapi", + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", ] [[package]] -name = "displaydoc" -version = "0.2.4" +name = "cxx-build" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "c4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3" dependencies = [ + "cc", + "codespan-reporting", + "once_cell", "proc-macro2", "quote", - "syn 2.0.25", + "scratch", + "syn 2.0.33", ] [[package]] -name = "downcast" -version = "0.11.0" +name = "cxxbridge-flags" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +checksum = "20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2" [[package]] -name = "downcast-rs" -version = "1.2.0" +name = "cxxbridge-macro" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.33", +] [[package]] -name = "dtoa" -version = "1.0.8" +name = "darling" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519b83cd10f5f6e969625a409f735182bea5558cd8b64c655806ceaae36f1999" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] [[package]] -name = "dyn-clonable" -version = "0.9.0" +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ - "dyn-clonable-impl", - "dyn-clone", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", ] [[package]] -name = "dyn-clonable-impl" -version = "0.9.0" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "proc-macro2", + "darling_core", "quote", "syn 1.0.109", ] [[package]] -name = "dyn-clone" -version = "1.0.11" +name = "data-encoding" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] -name = "ecdsa" -version = "0.14.8" +name = "data-encoding-macro" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", + "data-encoding", + "data-encoding-macro-internal", ] [[package]] -name = "ecdsa" -version = "0.16.7" +name = "data-encoding-macro-internal" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" dependencies = [ - "der 0.7.7", - "digest 0.10.7", - "elliptic-curve 0.13.5", - "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "data-encoding", + "syn 1.0.109", ] [[package]] -name = "ed25519" -version = "1.5.3" +name = "der" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "signature 1.6.4", + "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] -name = "ed25519-dalek" -version = "1.0.1" +name = "der" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", + "const-oid", "zeroize", ] [[package]] -name = "ed25519-zebra" -version = "3.1.0" +name = "der-parser" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" +name = "der-parser" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", - "digest 0.10.7", - "ff 0.12.1", - "generic-array 0.14.7", - "group 0.12.1", - "hkdf", - "pem-rfc7468", - "pkcs8 0.9.0", - "rand_core 0.6.4", - "sec1 0.3.0", - "subtle", - "zeroize", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] -name = "elliptic-curve" -version = "0.13.5" +name = "deranged" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" -dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.2", - "digest 0.10.7", - "ff 0.13.0", - "generic-array 0.14.7", - "group 0.13.0", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "sec1 0.7.2", - "subtle", - "zeroize", -] +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" [[package]] -name = "encode_unicode" -version = "0.3.6" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "enum-as-inner" -version = "0.5.1" +name = "derive-syn-parse" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "heck", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "enumflags2" -version = "0.7.7" +name = "derive_builder" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" dependencies = [ - "enumflags2_derive", + "derive_builder_macro", ] [[package]] -name = "enumflags2_derive" -version = "0.7.7" +name = "derive_builder_core" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ + "darling", "proc-macro2", "quote", - "syn 2.0.25", + "syn 1.0.109", ] [[package]] -name = "env_logger" -version = "0.10.0" +name = "derive_builder_macro" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", + "derive_builder_core", + "syn 1.0.109", ] [[package]] -name = "environmental" -version = "1.1.4" +name = "derive_more" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "difflib" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] -name = "errno" -version = "0.3.1" +name = "digest" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", + "generic-array 0.12.4", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "cc", - "libc", + "generic-array 0.14.7", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] [[package]] -name = "exit-future" -version = "0.2.0" +name = "directories" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" dependencies = [ - "futures", + "dirs-sys", ] [[package]] -name = "expander" -version = "1.0.0" +name = "directories-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "blake2", - "fs-err", - "proc-macro2", - "quote", - "syn 1.0.109", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "fake-simd" -version = "0.1.2" +name = "dirs-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] -name = "fallible-iterator" -version = "0.2.0" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] -name = "fastrand" -version = "1.9.0" +name = "displaydoc" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "instant", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "fdlimit" -version = "0.2.1" +name = "docify" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +checksum = "af1b04e6ef3d21119d3eb7b032bca17f99fe041e9c072f30f32cc0e1a2b1f3c4" dependencies = [ - "libc", + "docify_macros", ] [[package]] -name = "ff" -version = "0.12.1" +name = "docify_macros" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "8b5610df7f2acf89a1bb5d1a66ae56b1c7fcdcfe3948856fb3ace3f644d70eb7" dependencies = [ - "rand_core 0.6.4", - "subtle", + "common-path", + "derive-syn-parse", + "lazy_static", + "proc-macro2", + "quote", + "regex", + "syn 2.0.33", + "termcolor", + "walkdir", ] [[package]] -name = "ff" -version = "0.13.0" +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] -name = "fiat-crypto" -version = "0.1.20" +name = "dtoa" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] -name = "file-per-thread-logger" -version = "0.1.6" +name = "dyn-clonable" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" dependencies = [ - "env_logger", - "log", + "dyn-clonable-impl", + "dyn-clone", ] [[package]] -name = "filetime" -version = "0.2.21" +name = "dyn-clonable-impl" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "finality-grandpa" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +name = "dyn-clone" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "either", - "futures", - "futures-timer", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", ] [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "ecdsa" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", + "der 0.7.8", + "digest 0.10.7", + "elliptic-curve 0.13.5", + "rfc6979 0.4.0", + "signature 2.1.0", + "spki 0.7.2", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "ed25519" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature 1.6.4", +] [[package]] -name = "flate2" -version = "1.0.26" +name = "ed25519" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", + "pkcs8 0.10.2", + "signature 2.1.0", ] [[package]] -name = "float-cmp" -version = "0.9.0" +name = "ed25519-dalek" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "num-traits", + "curve25519-dalek 3.2.0", + "ed25519 1.5.3", + "sha2 0.9.9", + "zeroize", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "ed25519-dalek" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +dependencies = [ + "curve25519-dalek 4.1.0", + "ed25519 2.2.2", + "rand_core 0.6.4", + "serde", + "sha2 0.10.7", + "zeroize", +] [[package]] -name = "fork-tree" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "parity-scale-codec", + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", ] [[package]] -name = "form_urlencoded" -version = "1.2.0" +name = "either" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "percent-encoding", + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest 0.10.7", + "ff 0.12.1", + "generic-array 0.14.7", + "group 0.12.1", + "hkdf", + "pem-rfc7468", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", ] [[package]] -name = "fragile" -version = "2.0.0" +name = "elliptic-curve" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.3", + "digest 0.10.7", + "ff 0.13.0", + "generic-array 0.14.7", + "group 0.13.0", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1 0.7.3", + "subtle", + "zeroize", +] [[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enum-as-inner" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" 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-std", - "sp-storage", - "static_assertions", + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "frame-benchmarking-cli" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "enumflags2" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ - "Inflector", - "array-bytes", - "chrono", - "clap", - "comfy-table", - "frame-benchmarking", - "frame-support", - "frame-system", - "gethostname", - "handlebars", - "itertools", - "lazy_static", - "linked-hash-map", - "log", - "parity-scale-codec", - "rand 0.8.5", - "rand_pcg", - "sc-block-builder", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-executor", - "sc-service", - "sc-sysinfo", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-externalities", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", - "thiserror", - "thousands", + "enumflags2_derive", ] [[package]] -name = "frame-executive" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "enumflags2_derive" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ - "frame-support", - "frame-system", - "frame-try-runtime", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "frame-metadata" -version = "15.1.0" +name = "enumn" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "frame-remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ - "async-recursion", - "futures", - "indicatif", - "jsonrpsee", + "atty", + "humantime", "log", - "parity-scale-codec", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "spinners", - "substrate-rpc-client", - "tokio", - "tokio-retry", + "regex", + "termcolor", ] [[package]] -name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "bitflags 1.3.2", - "environmental", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "k256", + "humantime", + "is-terminal", "log", - "once_cell", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-debug-derive", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "tt-call", + "regex", + "termcolor", ] [[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools", - "itertools", - "proc-macro-warning", - "proc-macro2", - "quote", - "syn 2.0.25", -] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.25", -] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" dependencies = [ - "cfg-if", - "frame-support", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", - "sp-weights", + "cc", + "libc", ] [[package]] -name = "frame-system-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "frame-system-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "exit-future" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "parity-scale-codec", - "sp-api", + "futures", ] [[package]] -name = "frame-try-runtime" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "expander" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-std", + "blake3", + "fs-err", + "proc-macro2", + "quote", ] [[package]] -name = "fs-err" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" - -[[package]] -name = "fs2" -version = "0.4.3" +name = "expander" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "3774182a5df13c3d1690311ad32fbe913feef26baba609fa2dd5f72042bd2ab6" dependencies = [ - "libc", - "winapi", + "blake2", + "fs-err", + "proc-macro2", + "quote", ] [[package]] -name = "fs4" -version = "0.6.6" +name = "expander" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" +checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7" dependencies = [ - "rustix 0.38.4", - "windows-sys 0.48.0", + "blake2", + "fs-err", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "funty" -version = "2.0.0" +name = "fake-simd" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] -name = "futures" -version = "0.3.28" +name = "fallible-iterator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] -name = "futures-channel" -version = "0.3.28" +name = "fastrand" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ - "futures-core", - "futures-sink", + "instant", ] [[package]] -name = "futures-core" -version = "0.3.28" +name = "fastrand" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] -name = "futures-executor" -version = "0.3.28" +name = "fatality" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "2ad875162843b0d046276327afe0136e9ed3a23d5a754210fb6f1f33610d39ab" dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", + "fatality-proc-macro", + "thiserror", ] [[package]] -name = "futures-io" -version = "0.3.28" +name = "fatality-proc-macro" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "f5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bd" +dependencies = [ + "expander 0.0.4", + "indexmap 1.9.3", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", + "thiserror", +] [[package]] -name = "futures-lite" -version = "1.13.0" +name = "fdlimit" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.10", - "waker-fn", + "libc", ] [[package]] -name = "futures-macro" -version = "0.3.28" +name = "ff" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "futures-rustls" -version = "0.22.2" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "futures-io", - "rustls 0.20.8", - "webpki 0.22.0", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "futures-sink" -version = "0.3.28" +name = "fiat-crypto" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" [[package]] -name = "futures-task" -version = "0.3.28" +name = "file-per-thread-logger" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger 0.10.0", + "log", +] [[package]] -name = "futures-timer" -version = "3.0.2" +name = "filetime" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", +] [[package]] -name = "futures-util" -version = "0.3.28" +name = "finality-grandpa" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.10", - "pin-utils", - "slab", + "either", + "futures", + "futures-timer", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", ] [[package]] -name = "fxhash" -version = "0.2.1" +name = "fixed-hash" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", ] [[package]] -name = "generic-array" -version = "0.12.4" +name = "fixedbitset" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "generic-array" -version = "0.14.7" +name = "flate2" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ - "typenum", - "version_check", - "zeroize", + "crc32fast", + "libz-sys", + "miniz_oxide", ] [[package]] -name = "gethostname" -version = "0.2.3" +name = "float-cmp" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ - "libc", - "winapi", + "num-traits", ] [[package]] -name = "getrandom" -version = "0.1.16" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "getrandom" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +name = "fork-tree" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "parity-scale-codec", ] [[package]] -name = "ghash" -version = "0.4.4" +name = "form_urlencoded" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", + "percent-encoding", ] [[package]] -name = "ghash" -version = "0.5.0" +name = "fragile" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.6.1", -] +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] -name = "gimli" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +name = "frame-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "fallible-iterator", - "indexmap 1.9.3", - "stable_deref_trait", + "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-std", + "sp-storage", + "static_assertions", ] [[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df" +name = "frame-benchmarking-cli" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "aho-corasick", - "bstr", - "fnv", + "Inflector", + "array-bytes", + "chrono", + "clap", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools 0.10.5", + "lazy_static", + "linked-hash-map", "log", - "regex", + "parity-scale-codec", + "rand 0.8.5", + "rand_pcg", + "sc-block-builder", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-service", + "sc-sysinfo", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "sp-wasm-interface", + "thiserror", + "thousands", ] [[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +name = "frame-election-provider-solution-type" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +name = "frame-election-provider-support" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ff 0.13.0", - "rand_core 0.6.4", - "subtle", + "frame-election-provider-solution-type", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-npos-elections", + "sp-runtime", + "sp-std", ] [[package]] -name = "h2" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +name = "frame-executive" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 1.9.3", - "slab", - "tokio", - "tokio-util", - "tracing", + "frame-support", + "frame-system", + "frame-try-runtime", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", ] [[package]] -name = "handlebars" -version = "4.3.7" +name = "frame-metadata" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ - "log", - "pest", - "pest_derive", + "cfg-if", + "parity-scale-codec", + "scale-info", "serde", - "serde_json", - "thiserror", ] [[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" +name = "frame-remote-externalities" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "crunchy", + "async-recursion", + "futures", + "indicatif", + "jsonrpsee", + "log", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "spinners", + "substrate-rpc-client", + "tokio", + "tokio-retry", ] [[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +name = "frame-support" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ahash 0.7.6", + "bitflags 1.3.2", + "environmental", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-core-hashing-proc-macro", + "sp-debug-derive", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-weights", + "tt-call", ] [[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +name = "frame-support-procedural" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ahash 0.8.3", + "Inflector", + "cfg-expr", + "derive-syn-parse", + "expander 2.0.0", + "frame-support-procedural-tools", + "itertools 0.10.5", + "macro_magic", + "proc-macro-warning", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "libc", + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.33", +] [[package]] -name = "hkdf" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +name = "frame-system" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "hmac 0.12.1", + "cfg-if", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", + "sp-weights", ] [[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +name = "frame-system-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +name = "frame-system-rpc-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +name = "frame-try-runtime" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "digest 0.10.7", + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std", ] [[package]] -name = "hmac-drbg" -version = "0.3.0" +name = "fs-err" +version = "2.9.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", -] +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" [[package]] -name = "hostname" -version = "0.3.1" +name = "fs2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ "libc", - "match_cfg", "winapi", ] [[package]] -name = "http" -version = "0.2.9" +name = "fs4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" dependencies = [ - "bytes", - "fnv", - "itoa", + "rustix 0.38.13", + "windows-sys 0.48.0", ] [[package]] -name = "http-body" -version = "0.4.5" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ - "bytes", - "http", - "pin-project-lite 0.2.10", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "http-range-header" -version = "0.3.0" +name = "futures-channel" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] [[package]] -name = "httparse" -version = "1.8.0" +name = "futures-core" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] -name = "httpdate" -version = "1.0.2" +name = "futures-executor" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "futures-io" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] -name = "hyper" -version = "0.14.27" +name = "futures-lite" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "bytes", - "futures-channel", + "fastrand 1.9.0", "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite 0.2.10", - "socket2 0.4.9", - "tokio", - "tower-service", - "tracing", - "want", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.13", + "waker-fn", ] [[package]] -name = "hyper-rustls" -version = "0.23.2" +name = "futures-macro" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "http", - "hyper", - "log", - "rustls 0.20.8", - "rustls-native-certs", - "tokio", - "tokio-rustls", - "webpki-roots", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "iana-time-zone" -version = "0.1.57" +name = "futures-rustls" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows 0.48.0", + "futures-io", + "rustls 0.20.9", + "webpki 0.22.1", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "futures-sink" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] -name = "ident_case" -version = "1.0.1" +name = "futures-task" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] -name = "idna" -version = "0.2.3" +name = "futures-timer" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] -name = "idna" -version = "0.4.0" +name = "futures-util" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.13", + "pin-utils", + "slab", ] [[package]] -name = "if-addrs" -version = "0.7.0" +name = "fxhash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "libc", - "winapi", + "byteorder", ] [[package]] -name = "if-watch" -version = "3.0.1" +name = "generic-array" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "rtnetlink", - "system-configuration", - "tokio", - "windows 0.34.0", + "typenum", ] [[package]] -name = "impl-codec" -version = "0.6.0" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "parity-scale-codec", + "typenum", + "version_check", + "zeroize", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "gethostname" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" dependencies = [ - "serde", + "libc", + "winapi", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "getrandom" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "getrandom" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] -name = "indexmap" -version = "2.0.0" +name = "ghash" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ - "equivalent", - "hashbrown 0.14.0", + "opaque-debug 0.3.0", + "polyval 0.5.3", ] [[package]] -name = "indicatif" -version = "0.17.5" +name = "ghash" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff8cc23a7393a397ed1d7f56e6365cba772aba9f9912ab968b03043c395d057" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", + "opaque-debug 0.3.0", + "polyval 0.6.1", ] [[package]] -name = "inout" -version = "0.1.3" +name = "gimli" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "generic-array 0.14.7", + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", ] [[package]] -name = "instant" -version = "0.1.12" +name = "gimli" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] -name = "integer-sqrt" -version = "0.1.5" +name = "glob" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] -name = "interceptor" -version = "0.8.2" +name = "globset" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" dependencies = [ - "async-trait", - "bytes", + "aho-corasick", + "bstr", + "fnv", "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", + "regex", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "group" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ - "hermit-abi 0.3.2", - "libc", - "windows-sys 0.48.0", + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", ] [[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" +name = "group" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "socket2 0.5.3", - "widestring", - "windows-sys 0.48.0", - "winreg", + "ff 0.13.0", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "ipnet" -version = "2.8.0" +name = "h2" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ - "hermit-abi 0.3.2", - "rustix 0.38.4", - "windows-sys 0.48.0", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "handlebars" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683" dependencies = [ - "either", + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "itoa" -version = "1.0.8" +name = "hash-db" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] -name = "jobserver" -version = "0.1.26" +name = "hash256-std-hasher" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" dependencies = [ - "libc", + "crunchy", ] [[package]] -name = "js-sys" -version = "0.3.64" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "wasm-bindgen", + "ahash 0.7.6", ] [[package]] -name = "jsonrpsee" -version = "0.16.2" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "jsonrpsee-core", - "jsonrpsee-http-client", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "tracing", + "ahash 0.8.3", ] [[package]] -name = "jsonrpsee-client-transport" -version = "0.16.2" +name = "hashbrown" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" -dependencies = [ - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots", -] +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" [[package]] -name = "jsonrpsee-core" -version = "0.16.2" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" -dependencies = [ - "anyhow", - "arrayvec 0.7.4", - "async-lock", - "async-trait", - "beef", - "futures-channel", - "futures-timer", - "futures-util", - "globset", - "hyper", - "jsonrpsee-types", - "parking_lot 0.12.1", - "rand 0.8.5", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "jsonrpsee-http-client" -version = "0.16.2" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc345b0a43c6bc49b947ebeb936e886a419ee3d894421790c969cc56040542ad" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core", - "jsonrpsee-types", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", + "libc", ] [[package]] -name = "jsonrpsee-proc-macros" -version = "0.16.2" +name = "hermit-abi" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" -dependencies = [ - "heck", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] -name = "jsonrpsee-server" -version = "0.16.2" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", - "serde", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", -] +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "jsonrpsee-types" -version = "0.16.2" +name = "hex-literal" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", - "tracing", -] +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] -name = "jsonrpsee-ws-client" -version = "0.16.2" +name = "hex-literal" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" -dependencies = [ - "http", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", -] +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] -name = "k256" -version = "0.13.1" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "cfg-if", - "ecdsa 0.16.7", - "elliptic-curve 0.13.5", - "once_cell", - "sha2 0.10.7", + "hmac 0.12.1", ] [[package]] -name = "keccak" -version = "0.1.4" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "cpufeatures", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] -name = "kvdb" -version = "0.13.0" +name = "hmac" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "smallvec", + "crypto-mac 0.11.1", + "digest 0.9.0", ] [[package]] -name = "kvdb-memorydb" -version = "0.13.0" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "kvdb", - "parking_lot 0.12.1", + "digest 0.10.7", ] [[package]] -name = "kvdb-rocksdb" -version = "0.19.0" +name = "hmac-drbg" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "kvdb", - "num_cpus", - "parking_lot 0.12.1", - "regex", - "rocksdb", - "smallvec", + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", ] [[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[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.147" +name = "home" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] [[package]] -name = "libloading" -version = "0.7.4" +name = "hostname" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ - "cfg-if", + "libc", + "match_cfg", "winapi", ] [[package]] -name = "libm" -version = "0.1.4" +name = "http" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] [[package]] -name = "libm" -version = "0.2.7" +name = "http-body" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite 0.2.13", +] [[package]] -name = "libp2p" -version = "0.51.3" +name = "http-range-header" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", - "futures", - "futures-timer", - "getrandom 0.2.10", - "instant", - "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-wasm-ext", - "libp2p-webrtc", - "libp2p-websocket", - "libp2p-yamux", - "multiaddr", - "pin-project", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.13", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] -name = "libp2p-allow-block-list" -version = "0.1.1" +name = "hyper-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.7", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "webpki-roots 0.23.1", ] [[package]] -name = "libp2p-connection-limits" -version = "0.1.0" +name = "iana-time-zone" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", ] [[package]] -name = "libp2p-core" -version = "0.39.2" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-identity", - "log", - "multiaddr", - "multihash 0.17.0", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "quick-protobuf", - "rand 0.8.5", - "rw-stream-sink", - "smallvec", - "thiserror", - "unsigned-varint", - "void", + "cc", ] [[package]] -name = "libp2p-dns" -version = "0.39.0" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ - "futures", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "smallvec", - "trust-dns-resolver", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "libp2p-identify" -version = "0.42.2" +name = "idna" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "asynchronous-codec", - "either", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "lru 0.10.1", - "quick-protobuf", - "quick-protobuf-codec", - "smallvec", - "thiserror", - "void", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "libp2p-identity" -version = "0.1.2" +name = "if-addrs" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d584751cecb2aabaa56106be6be91338a60a0f4e420cf2af639204f596fc1" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" dependencies = [ - "bs58", - "ed25519-dalek", - "log", - "multiaddr", - "multihash 0.17.0", - "quick-protobuf", - "rand 0.8.5", - "sha2 0.10.7", - "thiserror", - "zeroize", + "libc", + "winapi", ] [[package]] -name = "libp2p-kad" -version = "0.43.3" +name = "if-watch" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" +checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" dependencies = [ - "arrayvec 0.7.4", - "asynchronous-codec", - "bytes", - "either", + "async-io", + "core-foundation", "fnv", "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", + "if-addrs", + "ipnet", "log", - "quick-protobuf", - "rand 0.8.5", - "sha2 0.10.7", - "smallvec", - "thiserror", - "uint", - "unsigned-varint", - "void", + "rtnetlink", + "system-configuration", + "tokio", + "windows 0.34.0", ] [[package]] -name = "libp2p-mdns" -version = "0.43.1" +name = "impl-codec" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "data-encoding", - "futures", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "rand 0.8.5", - "smallvec", - "socket2 0.4.9", - "tokio", - "trust-dns-proto", - "void", + "parity-scale-codec", ] [[package]] -name = "libp2p-metrics" -version = "0.12.0" +name = "impl-serde" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ - "libp2p-core", - "libp2p-identify", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "prometheus-client", -] - -[[package]] -name = "libp2p-noise" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core", - "libp2p-identity", - "log", - "once_cell", - "quick-protobuf", - "rand 0.8.5", - "sha2 0.10.7", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", + "serde", ] [[package]] -name = "libp2p-ping" -version = "0.42.0" +name = "impl-trait-for-tuples" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "either", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.8.5", - "void", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "libp2p-quic" -version = "0.7.0-alpha.3" +name = "indexmap" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "bytes", - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-tls", - "log", - "parking_lot 0.12.1", - "quinn-proto", - "rand 0.8.5", - "rustls 0.20.8", - "thiserror", - "tokio", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] -name = "libp2p-request-response" -version = "0.24.1" +name = "indexmap" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "async-trait", - "futures", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "smallvec", + "equivalent", + "hashbrown 0.14.0", ] [[package]] -name = "libp2p-swarm" -version = "0.42.2" +name = "indicatif" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" +checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", + "console", "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm-derive", - "log", - "rand 0.8.5", - "smallvec", - "tokio", - "void", + "number_prefix", + "portable-atomic", + "unicode-width", ] [[package]] -name = "libp2p-swarm-derive" -version = "0.32.0" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "heck", - "quote", - "syn 1.0.109", + "generic-array 0.14.7", ] [[package]] -name = "libp2p-tcp" -version = "0.39.0" +name = "instant" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "log", - "socket2 0.4.9", - "tokio", + "cfg-if", ] [[package]] -name = "libp2p-tls" -version = "0.1.0" +name = "integer-encoding" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" -dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "rcgen 0.10.0", - "ring", - "rustls 0.20.8", - "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", - "yasna", -] +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] -name = "libp2p-wasm-ext" -version = "0.39.0" +name = "integer-sqrt" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "parity-send-wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", + "num-traits", ] [[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha.4" +name = "interceptor" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" dependencies = [ "async-trait", - "asynchronous-codec", "bytes", - "futures", - "futures-timer", - "hex", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-noise", "log", - "multihash 0.17.0", - "quick-protobuf", - "quick-protobuf-codec", "rand 0.8.5", - "rcgen 0.9.3", - "serde", - "stun", + "rtcp", + "rtp", "thiserror", - "tinytemplate", "tokio", - "tokio-util", - "webrtc", + "waitgroup", + "webrtc-srtp", + "webrtc-util", ] [[package]] -name = "libp2p-websocket" -version = "0.41.0" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "log", - "parking_lot 0.12.1", - "quicksink", - "rw-stream-sink", - "soketto", - "url", - "webpki-roots", + "hermit-abi 0.3.2", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "libp2p-yamux" -version = "0.43.1" +name = "ip_network" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" -dependencies = [ - "futures", - "libp2p-core", - "log", - "thiserror", - "yamux", -] +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] -name = "librocksdb-sys" -version = "0.11.0+8.1.1" +name = "ipconfig" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "tikv-jemalloc-sys", + "socket2 0.5.4", + "widestring", + "windows-sys 0.48.0", + "winreg", ] [[package]] -name = "libsecp256k1" -version = "0.7.1" +name = "ipnet" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.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", -] +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] -name = "libsecp256k1-core" -version = "0.3.0" +name = "is-terminal" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "libsecp256k1-core", + "hermit-abi 0.3.2", + "rustix 0.38.13", + "windows-sys 0.48.0", ] [[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "libsecp256k1-core", + "either", ] [[package]] -name = "libz-sys" -version = "1.1.9" +name = "itertools" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "either", ] [[package]] -name = "link-cplusplus" +name = "itoa" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] -name = "linked_hash_set" -version = "0.1.4" +name = "jobserver" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ - "linked-hash-map", + "libc", ] [[package]] -name = "linregress" -version = "0.5.2" +name = "js-sys" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de0b5f52a9f84544d268f5fabb71b38962d6aa3c6600b8bcd27d44ccf9c9c45" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ - "nalgebra", + "wasm-bindgen", ] [[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" - -[[package]] -name = "lock_api" -version = "0.4.10" +name = "jsonrpsee" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" dependencies = [ - "autocfg", - "scopeguard", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tracing", ] [[package]] -name = "log" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" - -[[package]] -name = "lru" -version = "0.8.1" +name = "jsonrpsee-client-transport" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" dependencies = [ - "hashbrown 0.12.3", + "futures-util", + "http", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots 0.25.2", ] [[package]] -name = "lru" -version = "0.10.1" +name = "jsonrpsee-core" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" dependencies = [ - "hashbrown 0.13.2", + "anyhow", + "arrayvec 0.7.4", + "async-lock", + "async-trait", + "beef", + "futures-channel", + "futures-timer", + "futures-util", + "globset", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "lru-cache" -version = "0.1.2" +name = "jsonrpsee-http-client" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" dependencies = [ - "linked-hash-map", + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "lz4" -version = "1.24.0" +name = "jsonrpsee-proc-macros" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" dependencies = [ - "libc", - "lz4-sys", + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "lz4-sys" -version = "1.9.4" +name = "jsonrpsee-server" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" dependencies = [ - "cc", - "libc", + "futures-channel", + "futures-util", + "http", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "soketto", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", ] [[package]] -name = "mach" -version = "0.3.2" +name = "jsonrpsee-types" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" dependencies = [ - "libc", + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", ] [[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.0.1" +name = "jsonrpsee-ws-client" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e" dependencies = [ - "regex-automata 0.1.10", + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", ] [[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matrixmultiply" -version = "0.3.7" +name = "k256" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ - "autocfg", - "rawpointer", + "cfg-if", + "ecdsa 0.16.8", + "elliptic-curve 0.13.5", + "once_cell", + "sha2 0.10.7", ] [[package]] -name = "md-5" -version = "0.10.5" +name = "keccak" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ - "digest 0.10.7", + "cpufeatures", ] [[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memfd" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +name = "kusama-runtime" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" dependencies = [ - "rustix 0.37.23", -] + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "kusama-runtime-constants", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-multisig", + "pallet-nis", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-society", + "pallet-staking", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "static_assertions", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] [[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +name = "kusama-runtime-constants" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" dependencies = [ - "libc", + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", ] [[package]] -name = "memoffset" -version = "0.6.5" +name = "kvdb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" dependencies = [ - "autocfg", + "smallvec", ] [[package]] -name = "memoffset" -version = "0.8.0" +name = "kvdb-memorydb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ - "autocfg", + "kvdb", + "parking_lot 0.12.1", ] [[package]] -name = "memoffset" -version = "0.9.0" +name = "kvdb-rocksdb" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ - "autocfg", + "kvdb", + "num_cpus", + "parking_lot 0.12.1", + "regex", + "rocksdb", + "smallvec", ] [[package]] -name = "memory-db" -version = "0.32.0" +name = "landlock" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +checksum = "520baa32708c4e957d2fc3a186bc5bd8d26637c33137f399ddfc202adb240068" dependencies = [ - "hash-db", + "enumflags2", + "libc", + "thiserror", ] [[package]] -name = "memory_units" -version = "0.4.0" +name = "lazy_static" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "merlin" -version = "2.0.1" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "libc" +version = "0.2.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" [[package]] -name = "miniz_oxide" -version = "0.7.1" +name = "libloading" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "adler", + "cfg-if", + "winapi", ] [[package]] -name = "mio" -version = "0.8.8" +name = "libp2p" +version = "0.51.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "bytes", + "futures", + "futures-timer", + "getrandom 0.2.10", + "instant", + "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-wasm-ext", + "libp2p-webrtc", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr", + "pin-project", ] [[package]] -name = "mockall" -version = "0.11.4" +name = "libp2p-allow-block-list" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "mockall_derive" -version = "0.11.4" +name = "libp2p-connection-limits" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "multiaddr" -version = "0.17.1" +name = "libp2p-core" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" dependencies = [ - "arrayref", - "byteorder", - "data-encoding", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-identity", "log", - "multibase", - "multihash 0.17.0", - "percent-encoding", - "serde", - "static_assertions", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec", + "thiserror", "unsigned-varint", - "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", + "void", ] [[package]] -name = "multihash" -version = "0.16.3" +name = "libp2p-dns" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive", - "sha2 0.10.7", - "sha3", - "unsigned-varint", + "futures", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "smallvec", + "trust-dns-resolver", ] [[package]] -name = "multihash" -version = "0.17.0" +name = "libp2p-identify" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" dependencies = [ - "core2", - "digest 0.10.7", - "multihash-derive", - "sha2 0.10.7", - "unsigned-varint", + "asynchronous-codec", + "either", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "lru 0.10.1", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror", + "void", ] [[package]] -name = "multihash-derive" -version = "0.8.1" +name = "libp2p-identity" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", + "bs58", + "ed25519-dalek 2.0.0", + "log", + "multiaddr", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", + "zeroize", ] [[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multistream-select" -version = "0.12.1" +name = "libp2p-kad" +version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ + "arrayvec 0.7.4", + "asynchronous-codec", "bytes", + "either", + "fnv", "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", "log", - "pin-project", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.7", "smallvec", + "thiserror", + "uint", "unsigned-varint", + "void", ] [[package]] -name = "nalgebra" -version = "0.32.3" +name = "libp2p-mdns" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", + "data-encoding", + "futures", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "rand 0.8.5", + "smallvec", + "socket2 0.4.9", + "tokio", + "trust-dns-proto", + "void", ] [[package]] -name = "nalgebra-macros" -version = "0.2.1" +name = "libp2p-metrics" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "libp2p-core", + "libp2p-identify", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "prometheus-client", ] [[package]] -name = "names" -version = "0.13.0" +name = "libp2p-noise" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core", + "libp2p-identity", + "log", + "once_cell", + "quick-protobuf", "rand 0.8.5", + "sha2 0.10.7", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", ] [[package]] -name = "netlink-packet-core" -version = "0.4.2" +name = "libp2p-ping" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ - "anyhow", - "byteorder", - "libc", - "netlink-packet-utils", + "either", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "rand 0.8.5", + "void", ] [[package]] -name = "netlink-packet-route" -version = "0.12.0" +name = "libp2p-quic" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "log", + "parking_lot 0.12.1", + "quinn-proto", + "rand 0.8.5", + "rustls 0.20.9", + "thiserror", + "tokio", ] [[package]] -name = "netlink-packet-utils" -version = "0.5.2" +name = "libp2p-request-response" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", + "async-trait", + "futures", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", ] [[package]] -name = "netlink-proto" -version = "0.10.0" +name = "libp2p-swarm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" dependencies = [ - "bytes", + "either", + "fnv", "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", "log", - "netlink-packet-core", - "netlink-sys", - "thiserror", + "rand 0.8.5", + "smallvec", "tokio", + "void", ] [[package]] -name = "netlink-sys" -version = "0.8.5" +name = "libp2p-swarm-derive" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" +dependencies = [ + "heck", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "libp2p-tcp" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ - "bytes", "futures", + "futures-timer", + "if-watch", "libc", + "libp2p-core", "log", + "socket2 0.4.9", "tokio", ] [[package]] -name = "nix" -version = "0.24.3" +name = "libp2p-tls" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.10.0", + "ring", + "rustls 0.20.9", + "thiserror", + "webpki 0.22.1", + "x509-parser 0.14.0", + "yasna", ] [[package]] -name = "node-template" -version = "4.0.0-dev" +name = "libp2p-wasm-ext" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" dependencies = [ - "clap", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-system", "futures", - "jsonrpsee", - "node-template-runtime", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc", - "sc-basic-authorship", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-grandpa", - "sc-executor", - "sc-keystore", - "sc-network", - "sc-rpc", - "sc-rpc-api", - "sc-service", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-grandpa", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-timestamp", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "try-runtime-cli", + "js-sys", + "libp2p-core", + "parity-send-wrapper", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] -name = "node-template-runtime" -version = "4.0.0-dev" +name = "libp2p-webrtc" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8" dependencies = [ - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "pallet-assets", - "pallet-aura", - "pallet-balances", - "pallet-grandpa", - "pallet-identity", - "pallet-nft-fractionalization", - "pallet-nfts", - "pallet-sudo", - "pallet-template", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-utility", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-grandpa", - "sp-core", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-version", - "substrate-wasm-builder", + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-noise", + "log", + "multihash", + "quick-protobuf", + "quick-protobuf-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", ] [[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" +name = "libp2p-websocket" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" dependencies = [ - "memchr", - "minimal-lexical", + "either", + "futures", + "futures-rustls", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "quicksink", + "rw-stream-sink", + "soketto", + "url", + "webpki-roots 0.22.6", ] [[package]] -name = "normalize-line-endings" -version = "0.3.0" +name = "libp2p-yamux" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" +dependencies = [ + "futures", + "libp2p-core", + "log", + "thiserror", + "yamux", +] [[package]] -name = "num-bigint" -version = "0.4.3" +name = "librocksdb-sys" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", ] [[package]] -name = "num-complex" -version = "0.4.3" +name = "libsecp256k1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ - "num-traits", + "arrayref", + "base64 0.13.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 = "num-format" -version = "0.4.4" +name = "libsecp256k1-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ - "arrayvec 0.7.4", - "itoa", + "crunchy", + "digest 0.9.0", + "subtle", ] [[package]] -name = "num-integer" -version = "0.1.45" +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" dependencies = [ - "autocfg", - "num-traits", + "libsecp256k1-core", ] [[package]] -name = "num-rational" -version = "0.4.1" +name = "libsecp256k1-gen-genmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", + "libsecp256k1-core", ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "libz-sys" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" dependencies = [ - "autocfg", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "link-cplusplus" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" dependencies = [ - "hermit-abi 0.3.2", - "libc", + "cc", ] [[package]] -name = "number_prefix" -version = "0.4.0" +name = "linked-hash-map" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] -name = "object" -version = "0.30.4" +name = "linked_hash_set" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" dependencies = [ - "crc32fast", - "hashbrown 0.13.2", - "indexmap 1.9.3", - "memchr", + "linked-hash-map", ] [[package]] -name = "object" -version = "0.31.1" +name = "linregress" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" dependencies = [ - "memchr", + "nalgebra", ] [[package]] -name = "oid-registry" -version = "0.4.0" +name = "linux-raw-sys" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" -dependencies = [ - "asn1-rs 0.3.1", -] +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] -name = "oid-registry" -version = "0.6.1" +name = "linux-raw-sys" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" -dependencies = [ - "asn1-rs 0.5.2", -] +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] -name = "once_cell" -version = "1.18.0" +name = "linux-raw-sys" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" [[package]] -name = "opaque-debug" -version = "0.2.3" +name = "lock_api" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] -name = "opaque-debug" -version = "0.3.0" +name = "log" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] -name = "openssl-probe" -version = "0.1.5" +name = "lru" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +dependencies = [ + "hashbrown 0.13.2", +] [[package]] -name = "p256" -version = "0.11.1" +name = "lru" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.7", + "hashbrown 0.13.2", ] [[package]] -name = "p384" -version = "0.11.2" +name = "lru-cache" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.7", + "linked-hash-map", ] [[package]] -name = "packed_simd_2" -version = "0.3.8" +name = "lz4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ - "cfg-if", - "libm 0.1.4", + "libc", + "lz4-sys", ] [[package]] -name = "pallet-assets" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", + "cc", + "libc", ] [[package]] -name = "pallet-aura" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" dependencies = [ - "frame-support", - "frame-system", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-aura", - "sp-runtime", - "sp-std", + "libc", ] [[package]] -name = "pallet-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "macro_magic" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9" dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.33", ] [[package]] -name = "pallet-balances" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "macro_magic_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "macro_magic_core_macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c12469fc165526520dff2807c2975310ab47cf7190a45b99b49a7dc8befab17b" 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", - "sp-std", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] -name = "pallet-identity" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "macro_magic_macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a" dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", + "macro_magic_core", + "quote", + "syn 2.0.33", ] [[package]] -name = "pallet-nft-fractionalization" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-assets", - "pallet-nfts", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", + "regex-automata 0.1.10", ] [[package]] -name = "pallet-nfts" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matrixmultiply" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "autocfg", + "rawpointer", ] [[package]] -name = "pallet-session" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" 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-std", - "sp-trie", + "digest 0.10.7", ] [[package]] -name = "pallet-sudo" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "memchr" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" + +[[package]] +name = "memfd" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", + "rustix 0.37.23", ] [[package]] -name = "pallet-template" -version = "4.0.0-dev" +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "libc", ] [[package]] -name = "pallet-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +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 = "merlin" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "metaquity-network-devnet-runtime" +version = "0.0.1-dev" +dependencies = [ + "assets-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", "frame-benchmarking", + "frame-executive", "frame-support", "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", "log", + "metaquity-network-runtime-common", + "pallet-assets", + "pallet-aura", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-collective", + "pallet-multisig", + "pallet-preimage", + "pallet-scheduler", + "pallet-session", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-utility", + "pallet-xcm", + "parachain-info", "parity-scale-codec", + "polkadot-parachain", + "polkadot-runtime-common", "scale-info", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", "sp-inherents", - "sp-io", + "sp-offchain", "sp-runtime", + "sp-session", "sp-std", - "sp-timestamp", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", ] [[package]] -name = "pallet-transaction-payment" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "metaquity-network-mainnet-runtime" +version = "0.0.1-dev" dependencies = [ + "assets-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "frame-benchmarking", + "frame-executive", "frame-support", "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "metaquity-network-runtime-common", + "pallet-assets", + "pallet-aura", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-collective", + "pallet-multisig", + "pallet-preimage", + "pallet-scheduler", + "pallet-session", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-utility", + "pallet-xcm", + "parachain-info", "parity-scale-codec", + "polkadot-parachain", + "polkadot-runtime-common", "scale-info", - "serde", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", "sp-core", - "sp-io", + "sp-inherents", + "sp-offchain", "sp-runtime", + "sp-session", "sp-std", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", ] [[package]] -name = "pallet-transaction-payment-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "metaquity-network-node" +version = "0.0.1-dev" dependencies = [ + "clap", + "color-print", + "cumulus-client-cli", + "cumulus-client-consensus-aura", + "cumulus-client-consensus-common", + "cumulus-client-service", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-inprocess-interface", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", + "cumulus-relay-chain-rpc-interface", + "frame-benchmarking", + "frame-benchmarking-cli", + "futures", "jsonrpsee", - "pallet-transaction-payment-rpc-runtime-api", + "log", + "metaquity-network-devnet-runtime", + "metaquity-network-mainnet-runtime", + "metaquity-network-runtime-common", + "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-consensus", + "sc-executor", + "sc-network", + "sc-network-sync", + "sc-offchain", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "serde_json", "sp-api", + "sp-block-builder", "sp-blockchain", + "sp-consensus-aura", "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-payment-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "pallet-transaction-payment", - "parity-scale-codec", - "sp-api", + "sp-io", + "sp-keystore", + "sp-offchain", "sp-runtime", - "sp-weights", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "substrate-prometheus-endpoint", + "try-runtime-cli", + "xcm", ] [[package]] -name = "pallet-utility" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "metaquity-network-runtime-common" +version = "0.0.1-dev" dependencies = [ - "frame-benchmarking", "frame-support", - "frame-system", + "parachains-common", "parity-scale-codec", + "polkadot-primitives", "scale-info", - "sp-core", - "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "parity-db" -version = "0.4.9" +name = "mick-jaeger" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dab3ac198341b2f0fec6e7f8a6eeed07a41201d98a124260611598c142e76df" +checksum = "69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532" dependencies = [ - "blake2", - "crc32fast", - "fs2", - "hex", - "libc", - "log", - "lz4", - "memmap2", - "parking_lot 0.12.1", + "futures", "rand 0.8.5", - "siphasher", - "snap", + "thrift", ] [[package]] -name = "parity-scale-codec" -version = "3.6.3" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756d439303e94fae44f288ba881ad29670c65b0c4b0e05674ca81061bb65f2c5" -dependencies = [ - "arrayvec 0.7.4", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "parity-scale-codec-derive" -version = "3.6.3" +name = "miniz_oxide" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d884d78fcf214d70b1e239fcd1c6e5e95aa3be1881918da2e488cc946c7a476" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", + "adler", ] [[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - -[[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.1.0" +name = "mio" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] [[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +name = "mmr-gadget" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "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 = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +name = "mmr-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "lock_api", - "parking_lot_core 0.9.8", + "anyhow", + "jsonrpsee", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", ] [[package]] -name = "parking_lot_core" -version = "0.8.6" +name = "mockall" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", ] [[package]] -name = "parking_lot_core" -version = "0.9.8" +name = "mockall_derive" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "libc", - "redox_syscall 0.3.5", - "smallvec", - "windows-targets 0.48.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "partial_sort" -version = "0.2.0" +name = "multiaddr" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "log", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] [[package]] -name = "paste" -version = "1.0.13" +name = "multibase" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] [[package]] -name = "pbkdf2" -version = "0.8.0" +name = "multihash" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ - "crypto-mac 0.11.1", + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.7", + "sha3", + "unsigned-varint", ] [[package]] -name = "pbkdf2" -version = "0.11.0" +name = "multihash-derive" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" dependencies = [ - "digest 0.10.7", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", ] [[package]] -name = "peeking_take_while" -version = "0.1.2" +name = "multimap" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] -name = "pem" -version = "1.1.1" +name = "multistream-select" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ - "base64 0.13.1", + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint", ] [[package]] -name = "pem-rfc7468" -version = "0.6.0" +name = "nalgebra" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" dependencies = [ - "base64ct", + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", ] [[package]] -name = "percent-encoding" -version = "2.3.0" +name = "nalgebra-macros" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "pest" -version = "2.7.0" +name = "names" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9" +checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" dependencies = [ - "thiserror", - "ucd-trie", + "rand 0.8.5", ] [[package]] -name = "pest_derive" -version = "2.7.0" +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.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" dependencies = [ - "pest", - "pest_generator", + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", ] [[package]] -name = "pest_generator" -version = "2.7.0" +name = "netlink-packet-route" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.25", + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", ] [[package]] -name = "pest_meta" -version = "2.7.0" +name = "netlink-packet-utils" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ - "once_cell", - "pest", - "sha2 0.10.7", + "anyhow", + "byteorder", + "paste", + "thiserror", ] [[package]] -name = "petgraph" -version = "0.6.3" +name = "netlink-proto" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" dependencies = [ - "fixedbitset", - "indexmap 1.9.3", + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror", + "tokio", ] [[package]] -name = "pin-project" -version = "1.1.2" +name = "netlink-sys" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ - "pin-project-internal", + "bytes", + "futures", + "libc", + "log", + "tokio", ] [[package]] -name = "pin-project-internal" -version = "1.1.2" +name = "nix" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", ] [[package]] -name = "pin-project-lite" -version = "0.1.12" +name = "nohash-hasher" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] -name = "pin-project-lite" -version = "0.2.10" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "normalize-line-endings" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] -name = "pkcs8" -version = "0.9.0" +name = "num-bigint" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ - "der 0.6.1", - "spki 0.6.0", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "num-complex" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ - "der 0.7.7", - "spki 0.7.2", + "num-traits", ] [[package]] -name = "pkg-config" -version = "0.3.27" +name = "num-format" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] [[package]] -name = "platforms" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + +[[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.2", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[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.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.2", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "orchestra" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "227585216d05ba65c7ab0a0450a3cf2cbd81a98862a54c4df8e14d5ac6adb015" +dependencies = [ + "async-trait", + "dyn-clonable", + "futures", + "futures-timer", + "orchestra-proc-macro", + "pin-project", + "prioritized-metered-channel", + "thiserror", + "tracing", +] + +[[package]] +name = "orchestra-proc-macro" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2871aadd82a2c216ee68a69837a526dfe788ecbe74c4c5038a6acdbff6653066" +dependencies = [ + "expander 0.0.6", + "itertools 0.10.5", + "petgraph", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.7", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.7", +] + +[[package]] +name = "pallet-asset-conversion" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-asset-tx-payment" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-assets" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-aura" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-authority-discovery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-authority-discovery", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-authorship" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-babe" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", + "sp-std", +] + +[[package]] +name = "pallet-bags-list" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "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-std", + "sp-tracing", +] + +[[package]] +name = "pallet-balances" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-beefy", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-beefy-mmr" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "binary-merkle-tree", + "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-std", +] + +[[package]] +name = "pallet-bounties" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-child-bounties" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bounties", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-collator-selection" +version = "3.0.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-collective" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-conviction-voting" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-democracy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-election-provider-multi-phase" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", + "sp-std", + "strum", +] + +[[package]] +name = "pallet-election-provider-support-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-system", + "parity-scale-codec", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "pallet-elections-phragmen" +version = "5.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-fast-unstake" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", + "sp-std", +] + +[[package]] +name = "pallet-identity" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-im-online" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", + "sp-std", +] + +[[package]] +name = "pallet-indices" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-membership" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-message-queue" +version = "7.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-weights", +] + +[[package]] +name = "pallet-mmr" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-multisig" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nis" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools" +version = "1.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools-benchmarking" +version = "1.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-bags-list", + "pallet-nomination-pools", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-runtime-interface", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools-runtime-api" +version = "1.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "pallet-nomination-pools", + "parity-scale-codec", + "sp-api", + "sp-std", +] + +[[package]] +name = "pallet-offences" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-offences-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", + "sp-std", +] + +[[package]] +name = "pallet-preimage" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-proxy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-ranked-collective" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-recovery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-referenda" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-scheduler" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "sp-weights", +] + +[[package]] +name = "pallet-session" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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-std", + "sp-trie", +] + +[[package]] +name = "pallet-session-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "rand 0.8.5", + "sp-runtime", + "sp-session", + "sp-std", +] + +[[package]] +name = "pallet-society" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.3.4", + "log", + "parity-scale-codec", + "rand_chacha 0.2.2", + "scale-info", + "sp-arithmetic", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-staking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "rand_chacha 0.2.2", + "scale-info", + "serde", + "sp-application-crypto", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-staking-reward-curve" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.33", +] + +[[package]] +name = "pallet-staking-reward-fn" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "log", + "sp-arithmetic", +] + +[[package]] +name = "pallet-staking-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "pallet-state-trie-migration" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-sudo" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-timestamp" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "pallet-tips" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-transaction-payment" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-transaction-payment-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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 = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-treasury" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-utility" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-vesting" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-whitelist" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-xcm" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bounded-collections", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-executor", +] + +[[package]] +name = "pallet-xcm-benchmarks" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-builder", + "xcm-executor", +] + +[[package]] +name = "parachain-info" +version = "0.1.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "parachains-common" +version = "1.0.0" +source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v1.0.0#0d17cf6bef320f156f2859d6d2b0abd4154ae1d5" +dependencies = [ + "cumulus-primitives-core", + "cumulus-primitives-utility", + "frame-support", + "frame-system", + "num-traits", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "parity-scale-codec", + "polkadot-primitives", + "scale-info", + "sp-consensus-aura", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] + +[[package]] +name = "parity-db" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab512a34b3c2c5e465731cc7668edf79208bbe520be03484eeb05e63ed221735" +dependencies = [ + "blake2", + "crc32fast", + "fs2", + "hex", + "libc", + "log", + "lz4", + "memmap2", + "parking_lot 0.12.1", + "rand 0.8.5", + "siphasher", + "snap", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +dependencies = [ + "arrayvec 0.7.4", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parity-send-wrapper" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" + +[[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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.8", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac 0.11.1", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[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 = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pest" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.33", +] + +[[package]] +name = "pest_meta" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.7", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.0.0", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.33", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.8", + "spki 0.7.2", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "platforms" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[package]] +name = "polkadot-approval-distribution" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "futures-timer", + "polkadot-node-jaeger", + "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 = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +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 = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "derive_more", + "fatality", + "futures", + "lru 0.9.0", + "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", + "sp-core", + "sp-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-recovery" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "fatality", + "futures", + "lru 0.9.0", + "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", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-cli" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "clap", + "frame-benchmarking-cli", + "futures", + "log", + "polkadot-node-core-pvf-execute-worker", + "polkadot-node-core-pvf-prepare-worker", + "polkadot-node-metrics", + "polkadot-performance-test", + "polkadot-service", + "sc-cli", + "sc-executor", + "sc-service", + "sc-storage-monitor", + "sc-sysinfo", + "sc-tracing", + "sp-core", + "sp-io", + "sp-keyring", + "sp-maybe-compressed-blob", + "substrate-build-script-utils", + "thiserror", + "try-runtime-cli", +] + +[[package]] +name = "polkadot-collator-protocol" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "always-assert", + "bitvec", + "fatality", + "futures", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-core-primitives" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "polkadot-dispute-distribution" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "derive_more", + "fatality", + "futures", + "futures-timer", + "indexmap 1.9.3", + "lru 0.9.0", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sc-network", + "sp-application-crypto", + "sp-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-erasure-coding" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-primitives", + "reed-solomon-novelpoly", + "sp-core", + "sp-trie", + "thiserror", +] + +[[package]] +name = "polkadot-gossip-support" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +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-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-network-bridge" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "always-assert", + "async-trait", + "bytes", + "fatality", + "futures", + "parity-scale-codec", + "parking_lot 0.12.1", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sc-network", + "sp-consensus", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-collation-generation" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-core", + "sp-maybe-compressed-blob", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-approval-voting" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "derive_more", + "futures", + "futures-timer", + "kvdb", + "lru 0.9.0", + "merlin", + "parity-scale-codec", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "sc-keystore", + "schnorrkel", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-runtime", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-av-store" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "futures", + "futures-timer", + "kvdb", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "sp-consensus", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-backing" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "fatality", + "futures", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "polkadot-statement-table", + "sp-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-bitfield-signing" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-keystore", + "thiserror", + "tracing-gum", + "wasm-timer", +] + +[[package]] +name = "polkadot-node-core-candidate-validation" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +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-parachain", + "polkadot-primitives", + "sp-maybe-compressed-blob", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-api" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-primitives", + "sc-client-api", + "sc-consensus-babe", + "sp-blockchain", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-selection" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "futures-timer", + "kvdb", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-dispute-coordinator" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "fatality", + "futures", + "kvdb", + "lru 0.9.0", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sc-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-parachains-inherent" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sp-blockchain", + "sp-inherents", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-provisioner" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "fatality", + "futures", + "futures-timer", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "always-assert", + "futures", + "futures-timer", + "libc", + "parity-scale-codec", + "pin-project", + "polkadot-core-primitives", + "polkadot-node-core-pvf-common", + "polkadot-node-core-pvf-execute-worker", + "polkadot-node-core-pvf-prepare-worker", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-parachain", + "polkadot-primitives", + "rand 0.8.5", + "slotmap", + "sp-core", + "sp-maybe-compressed-blob", + "sp-tracing", + "sp-wasm-interface", + "substrate-build-script-utils", + "tempfile", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-checker" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "sp-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-common" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "cpu-time", + "futures", + "landlock", + "libc", + "parity-scale-codec", + "polkadot-parachain", + "polkadot-primitives", + "sc-executor", + "sc-executor-common", + "sc-executor-wasmtime", + "sp-core", + "sp-externalities", + "sp-io", + "sp-tracing", + "substrate-build-script-utils", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-execute-worker" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "cpu-time", + "futures", + "parity-scale-codec", + "polkadot-node-core-pvf-common", + "polkadot-parachain", + "polkadot-primitives", + "rayon", + "sp-core", + "sp-maybe-compressed-blob", + "sp-tracing", + "tikv-jemalloc-ctl", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-prepare-worker" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "libc", + "parity-scale-codec", + "polkadot-node-core-pvf-common", + "polkadot-parachain", + "polkadot-primitives", + "rayon", + "sc-executor", + "sc-executor-common", + "sc-executor-wasmtime", + "sp-io", + "sp-maybe-compressed-blob", + "sp-tracing", + "tikv-jemalloc-ctl", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-runtime-api" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "futures", + "lru 0.9.0", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-primitives", + "sp-consensus-babe", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-jaeger" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "lazy_static", + "log", + "mick-jaeger", + "parity-scale-codec", + "parking_lot 0.12.1", + "polkadot-node-primitives", + "polkadot-primitives", + "sc-network", + "sp-core", + "thiserror", + "tokio", +] + +[[package]] +name = "polkadot-node-metrics" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bs58", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "polkadot-primitives", + "prioritized-metered-channel", + "sc-cli", + "sc-service", + "sc-tracing", + "substrate-prometheus-endpoint", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-network-protocol" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-channel", + "async-trait", + "derive_more", + "fatality", + "futures", + "hex", + "parity-scale-codec", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-primitives", + "rand 0.8.5", + "sc-authority-discovery", + "sc-network", + "strum", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-primitives" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bounded-vec", + "futures", + "parity-scale-codec", + "polkadot-parachain", + "polkadot-primitives", + "schnorrkel", + "serde", + "sp-application-crypto", + "sp-consensus-babe", + "sp-core", + "sp-keystore", + "sp-maybe-compressed-blob", + "sp-runtime", + "thiserror", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "polkadot-node-subsystem" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "polkadot-node-jaeger", + "polkadot-node-subsystem-types", + "polkadot-overseer", +] + +[[package]] +name = "polkadot-node-subsystem-types" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-trait", + "derive_more", + "futures", + "orchestra", + "polkadot-node-jaeger", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-primitives", + "polkadot-statement-table", + "sc-network", + "sc-transaction-pool-api", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-consensus-babe", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "polkadot-node-subsystem-util" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-trait", + "derive_more", + "fatality", + "futures", + "futures-channel", + "itertools 0.10.5", + "kvdb", + "lru 0.9.0", + "parity-db", + "parity-scale-codec", + "parking_lot 0.11.2", + "pin-project", + "polkadot-node-jaeger", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "prioritized-metered-channel", + "rand 0.8.5", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror", + "tracing-gum", +] + +[[package]] +name = "polkadot-overseer" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "lru 0.9.0", + "orchestra", + "parking_lot 0.12.1", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem-types", + "polkadot-primitives", + "sc-client-api", + "sp-api", + "sp-core", + "tikv-jemalloc-ctl", + "tracing-gum", +] + +[[package]] +name = "polkadot-parachain" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bounded-collections", + "derive_more", + "frame-support", + "parity-scale-codec", + "polkadot-core-primitives", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "polkadot-performance-test" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "env_logger 0.9.3", + "kusama-runtime", + "log", + "polkadot-erasure-coding", + "polkadot-node-core-pvf-prepare-worker", + "polkadot-node-primitives", + "polkadot-primitives", + "quote", + "sc-executor-common", + "sp-maybe-compressed-blob", + "thiserror", +] + +[[package]] +name = "polkadot-primitives" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "hex-literal 0.4.1", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain", + "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", +] + +[[package]] +name = "polkadot-rpc" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +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-epochs", + "sc-consensus-grandpa", + "sc-consensus-grandpa-rpc", + "sc-rpc", + "sc-sync-state-rpc", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-keystore", + "sp-runtime", + "substrate-frame-rpc-system", + "substrate-state-trie-migration-rpc", +] + +[[package]] +name = "polkadot-runtime" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-multisig", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-preimage", + "pallet-proxy", + "pallet-referenda", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-staking-runtime-api", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "parity-scale-codec", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-constants", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "static_assertions", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] + +[[package]] +name = "polkadot-runtime-common" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "libsecp256k1", + "log", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-election-provider-multi-phase", + "pallet-fast-unstake", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury", + "pallet-vesting", + "parity-scale-codec", + "polkadot-primitives", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "slot-range-helper", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "static_assertions", + "xcm", +] + +[[package]] +name = "polkadot-runtime-constants" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "polkadot-runtime-metrics" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bs58", + "parity-scale-codec", + "polkadot-primitives", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "polkadot-runtime-parachains" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitflags 1.3.2", + "bitvec", + "derive_more", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-message-queue", + "pallet-session", + "pallet-staking", + "pallet-timestamp", + "pallet-vesting", + "parity-scale-codec", + "polkadot-parachain", + "polkadot-primitives", + "polkadot-runtime-metrics", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rustc-hex", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "static_assertions", + "xcm", + "xcm-executor", +] + +[[package]] +name = "polkadot-service" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "async-trait", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-support", + "frame-system", + "frame-system-rpc-runtime-api", + "futures", + "hex-literal 0.4.1", + "kusama-runtime", + "kvdb", + "kvdb-rocksdb", + "log", + "lru 0.9.0", + "mmr-gadget", + "pallet-babe", + "pallet-im-online", + "pallet-staking", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-db", + "parity-scale-codec", + "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-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-provisioner", + "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-parachain", + "polkadot-primitives", + "polkadot-rpc", + "polkadot-runtime", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "polkadot-statement-distribution", + "rococo-runtime", + "rococo-runtime-constants", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-beefy", + "sc-consensus-grandpa", + "sc-consensus-slots", + "sc-executor", + "sc-keystore", + "sc-network", + "sc-network-common", + "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-inherents", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-timestamp", + "sp-transaction-pool", + "sp-trie", + "sp-version", + "sp-weights", + "substrate-prometheus-endpoint", + "thiserror", + "tracing-gum", + "westend-runtime", +] + +[[package]] +name = "polkadot-statement-distribution" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "arrayvec 0.5.2", + "fatality", + "futures", + "futures-timer", + "indexmap 1.9.3", + "parity-scale-codec", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-keystore", + "sp-staking", + "thiserror", + "tracing-gum", +] [[package]] -name = "platforms" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" +name = "polkadot-statement-table" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives", + "sp-core", +] [[package]] name = "polling" @@ -5242,7 +8513,7 @@ dependencies = [ "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "windows-sys 0.48.0", ] @@ -5283,9 +8554,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.4.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d220334a184db82b31b83f5ff093e3315280fb2b6bbc032022b2304a509aab7a" +checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" [[package]] name = "ppv-lite86" @@ -5301,7 +8572,7 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools", + "itertools 0.10.5", "normalize-line-endings", "predicates-core", "regex", @@ -5335,12 +8606,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92139198957b410250d43fad93e630d956499a625c527eda65175c8680f83387" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -5357,13 +8628,29 @@ dependencies = [ ] [[package]] -name = "proc-macro-crate" -version = "1.1.3" +name = "prioritized-metered-channel" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4" dependencies = [ + "coarsetime", + "crossbeam-queue", + "derive_more", + "futures", + "futures-timer", + "nanorand", "thiserror", - "toml 0.5.11", + "tracing", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", ] [[package]] @@ -5390,22 +8677,28 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro-warning" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -5438,13 +8731,13 @@ dependencies = [ [[package]] name = "prometheus-client-derive-encode" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.33", ] [[package]] @@ -5465,7 +8758,7 @@ checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", "heck", - "itertools", + "itertools 0.10.5", "lazy_static", "log", "multimap", @@ -5486,7 +8779,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn 1.0.109", @@ -5551,27 +8844,27 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +checksum = "f31999cfc7927c4e212e60fd50934ab40e8e8bfd2d493d6095d2d306bc0764d9" dependencies = [ "bytes", "rand 0.8.5", "ring", "rustc-hash", - "rustls 0.20.8", + "rustls 0.20.9", "slab", "thiserror", "tinyvec", "tracing", - "webpki 0.22.0", + "webpki 0.22.1", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -5698,7 +8991,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring", - "time 0.3.23", + "time", "x509-parser 0.13.2", "yasna", ] @@ -5711,7 +9004,7 @@ checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", "ring", - "time 0.3.23", + "time", "yasna", ] @@ -5744,24 +9037,37 @@ dependencies = [ "thiserror", ] +[[package]] +name = "reed-solomon-novelpoly" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0b8e056bbbda75b717e53c87f349936ef234bb84a8f665360ca4b3552a79e9" +dependencies = [ + "derive_more", + "fs-err", + "itertools 0.11.0", + "static_init", + "thiserror", +] + [[package]] name = "ref-cast" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1641819477c319ef452a075ac34a4be92eb9ba09f6841f62d594d50fdcf0bf6b" +checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bf53dad9b6086826722cdc99140793afd9f62faa14a1ad07eb4f955e7a7216" +checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -5778,14 +9084,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.3", - "regex-syntax 0.7.4", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", ] [[package]] @@ -5799,13 +9105,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", ] [[package]] @@ -5816,9 +9122,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "resolv-conf" @@ -5876,6 +9182,107 @@ dependencies = [ "librocksdb-sys", ] +[[package]] +name = "rococo-runtime" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "binary-merkle-tree", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-democracy", + "pallet-elections-phragmen", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-mmr", + "pallet-multisig", + "pallet-nis", + "pallet-offences", + "pallet-preimage", + "pallet-proxy", + "pallet-recovery", + "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", + "pallet-utility", + "pallet-vesting", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "rococo-runtime-constants", + "scale-info", + "serde", + "serde_derive", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "static_assertions", + "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", +] + +[[package]] +name = "rococo-runtime-constants" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", +] + [[package]] name = "rpassword" version = "7.2.0" @@ -5961,7 +9368,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.18", ] [[package]] @@ -6003,14 +9410,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.4" +version = "0.38.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "errno", "libc", - "linux-raw-sys 0.4.3", + "linux-raw-sys 0.4.7", "windows-sys 0.48.0", ] @@ -6029,14 +9436,26 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +dependencies = [ + "log", + "ring", + "sct 0.7.0", + "webpki 0.22.1", +] + +[[package]] +name = "rustls" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", + "rustls-webpki 0.101.5", "sct 0.7.0", - "webpki 0.22.0", ] [[package]] @@ -6057,14 +9476,34 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", +] + +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a27e3b59326c16e23d30aeb7a36a24cc0d29e71d68ff611cdfb4a01d013bed" +dependencies = [ + "ring", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rw-stream-sink" @@ -6079,15 +9518,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safe_arch" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a7484307bd40f8f7ccbacccac730108f2cae119a3b11c74485b48aa9ea650f" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" dependencies = [ "bytemuck", ] @@ -6104,7 +9543,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "sp-core", @@ -6112,10 +9551,38 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-authority-discovery" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "ip_network", + "libp2p", + "log", + "multihash", + "parity-scale-codec", + "prost", + "prost-build", + "rand 0.8.5", + "sc-client-api", + "sc-network", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "futures-timer", @@ -6138,7 +9605,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6153,7 +9620,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -6172,18 +9639,18 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "chrono", @@ -6201,7 +9668,6 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", - "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -6223,7 +9689,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "fnv", "futures", @@ -6239,7 +9705,6 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", - "sp-keystore", "sp-runtime", "sp-state-machine", "sp-statement-store", @@ -6250,7 +9715,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hash-db", "kvdb", @@ -6269,68 +9734,192 @@ dependencies = [ "sp-core", "sp-database", "sp-runtime", - "sp-state-machine", - "sp-trie", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "sc-consensus" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "libp2p-identity", + "log", + "mockall", + "parking_lot 0.12.1", + "sc-client-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-aura" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", +] + +[[package]] +name = "sc-consensus-babe" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "fork-tree", + "futures", + "log", + "num-bigint", + "num-rational", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-consensus", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-telemetry", + "sc-transaction-pool-api", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", ] [[package]] -name = "sc-consensus" +name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "async-trait", "futures", - "futures-timer", - "libp2p-identity", - "log", - "mockall", - "parking_lot 0.12.1", - "sc-client-api", - "sc-utils", + "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", - "sp-state-machine", - "substrate-prometheus-endpoint", "thiserror", ] [[package]] -name = "sc-consensus-aura" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +name = "sc-consensus-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "array-bytes", + "async-channel", "async-trait", + "fnv", "futures", "log", "parity-scale-codec", - "sc-block-builder", + "parking_lot 0.12.1", "sc-client-api", "sc-consensus", - "sc-consensus-slots", - "sc-telemetry", + "sc-network", + "sc-network-gossip", + "sc-network-sync", + "sc-utils", "sp-api", "sp-application-crypto", - "sp-block-builder", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", + "sp-consensus-beefy", "sp-core", - "sp-inherents", "sp-keystore", + "sp-mmr-primitives", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", + "wasm-timer", +] + +[[package]] +name = "sc-consensus-beefy-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-consensus-beefy", + "sc-rpc", + "serde", + "sp-consensus-beefy", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", ] [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ahash 0.8.3", "array-bytes", @@ -6352,6 +9941,7 @@ dependencies = [ "sc-network-common", "sc-network-gossip", "sc-telemetry", + "sc-transaction-pool-api", "sc-utils", "serde_json", "sp-api", @@ -6367,10 +9957,30 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-consensus-grandpa-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", +] + [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", @@ -6393,13 +10003,13 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", "sc-executor-wasmtime", + "schnellru", "sp-api", "sp-core", "sp-externalities", @@ -6415,7 +10025,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -6427,13 +10037,12 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "once_cell", "rustix 0.36.15", "sc-allocator", "sc-executor-common", @@ -6445,7 +10054,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ansi_term", "futures", @@ -6461,7 +10070,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "parking_lot 0.12.1", @@ -6475,7 +10084,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "async-channel", @@ -6490,37 +10099,33 @@ dependencies = [ "libp2p", "linked_hash_set", "log", - "lru 0.8.1", "mockall", "parity-scale-codec", "parking_lot 0.12.1", + "partial_sort", "pin-project", "rand 0.8.5", - "sc-block-builder", "sc-client-api", - "sc-consensus", "sc-network-common", - "sc-peerset", "sc-utils", "serde", "serde_json", "smallvec", - "snow", "sp-arithmetic", "sp-blockchain", - "sp-consensus", "sp-core", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "unsigned-varint", + "wasm-timer", "zeroize", ] [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-channel", "cid", @@ -6531,7 +10136,6 @@ dependencies = [ "prost-build", "sc-client-api", "sc-network", - "sc-network-common", "sp-blockchain", "sp-runtime", "thiserror", @@ -6541,45 +10145,33 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "array-bytes", "async-trait", "bitflags 1.3.2", - "bytes", "futures", - "futures-timer", "libp2p-identity", "parity-scale-codec", "prost-build", "sc-consensus", - "sc-peerset", - "sc-utils", - "serde", - "smallvec", - "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", - "zeroize", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ahash 0.8.3", "futures", "futures-timer", "libp2p", "log", - "lru 0.8.1", "sc-network", "sc-network-common", - "sc-peerset", + "schnellru", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -6588,7 +10180,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "async-channel", @@ -6600,8 +10192,6 @@ dependencies = [ "prost-build", "sc-client-api", "sc-network", - "sc-network-common", - "sc-peerset", "sp-blockchain", "sp-core", "sp-runtime", @@ -6611,7 +10201,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "async-channel", @@ -6621,7 +10211,6 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru 0.8.1", "mockall", "parity-scale-codec", "prost", @@ -6630,8 +10219,8 @@ dependencies = [ "sc-consensus", "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", + "schnellru", "smallvec", "sp-arithmetic", "sp-blockchain", @@ -6646,17 +10235,15 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "pin-project", "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", "sp-consensus", "sp-runtime", @@ -6666,7 +10253,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "bytes", @@ -6676,6 +10263,7 @@ dependencies = [ "hyper", "hyper-rustls", "libp2p", + "log", "num_cpus", "once_cell", "parity-scale-codec", @@ -6684,36 +10272,22 @@ dependencies = [ "sc-client-api", "sc-network", "sc-network-common", - "sc-peerset", + "sc-transaction-pool-api", "sc-utils", "sp-api", "sp-core", + "sp-externalities", + "sp-keystore", "sp-offchain", "sp-runtime", "threadpool", "tracing", ] -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "futures", - "libp2p-identity", - "log", - "parking_lot 0.12.1", - "partial_sort", - "sc-utils", - "serde_json", - "sp-arithmetic", - "wasm-timer", -] - [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -6722,7 +10296,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "jsonrpsee", @@ -6753,7 +10327,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6772,7 +10346,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "http", "jsonrpsee", @@ -6787,7 +10361,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "futures", @@ -6813,7 +10387,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "directories", @@ -6840,11 +10414,9 @@ dependencies = [ "sc-network-light", "sc-network-sync", "sc-network-transactions", - "sc-offchain", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", - "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -6879,7 +10451,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "parity-scale-codec", @@ -6890,23 +10462,40 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "clap", "fs4", - "futures", "log", "sc-client-db", - "sc-utils", "sp-core", "thiserror", "tokio", ] +[[package]] +name = "sc-sync-state-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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", +] + [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "libc", @@ -6925,7 +10514,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "chrono", "futures", @@ -6944,7 +10533,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ansi_term", "atty", @@ -6952,12 +10541,10 @@ dependencies = [ "lazy_static", "libc", "log", - "once_cell", "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", - "sc-rpc-server", "sc-tracing-proc-macro", "serde", "sp-api", @@ -6975,25 +10562,24 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -7013,13 +10599,15 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec", "serde", "sp-blockchain", + "sp-core", "sp-runtime", "thiserror", ] @@ -7027,7 +10615,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-channel", "futures", @@ -7105,15 +10693,15 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764cad9e7e1ca5fe15b552859ff5d96a314e6ed2934f2260168cd5dfa5891409" +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" [[package]] name = "sct" @@ -7163,12 +10751,12 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", - "der 0.7.7", + "der 0.7.8", "generic-array 0.14.7", "pkcs8 0.10.2", "subtle", @@ -7204,9 +10792,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -7217,9 +10805,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -7236,9 +10824,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" dependencies = [ "serde", ] @@ -7251,29 +10839,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2" dependencies = [ "itoa", "ryu", @@ -7370,9 +10958,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook-registry" @@ -7418,15 +11006,15 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -7437,6 +11025,27 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +[[package]] +name = "slot-range-helper" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "enumn", + "parity-scale-codec", + "paste", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.11.0" @@ -7451,14 +11060,14 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" +checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.1", + "curve25519-dalek 4.1.0", "rand_core 0.6.4", "ring", "rustc_version", @@ -7478,9 +11087,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" dependencies = [ "libc", "windows-sys 0.48.0", @@ -7506,7 +11115,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hash-db", "log", @@ -7514,6 +11123,7 @@ dependencies = [ "scale-info", "sp-api-proc-macro", "sp-core", + "sp-externalities", "sp-metadata-ir", "sp-runtime", "sp-state-machine", @@ -7526,21 +11136,21 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "Inflector", "blake2", - "expander", + "expander 2.0.0", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", @@ -7552,8 +11162,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "16.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "integer-sqrt", "num-traits", @@ -7565,11 +11175,23 @@ dependencies = [ ] [[package]] -name = "sp-block-builder" +name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-block-builder" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ "sp-api", "sp-inherents", "sp-runtime", @@ -7579,13 +11201,13 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "log", - "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", + "schnellru", "sp-api", "sp-consensus", "sp-database", @@ -7597,7 +11219,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", @@ -7612,14 +11234,13 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-inherents", "sp-runtime", @@ -7630,7 +11251,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "parity-scale-codec", @@ -7638,20 +11259,37 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-core", "sp-inherents", - "sp-keystore", "sp-runtime", "sp-std", "sp-timestamp", ] +[[package]] +name = "sp-consensus-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "lazy_static", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", + "strum", +] + [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "finality-grandpa", "log", @@ -7669,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", @@ -7680,8 +11318,8 @@ dependencies = [ [[package]] name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "21.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "bitflags 1.3.2", @@ -7719,38 +11357,37 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", + "tracing", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "blake2b_simd", "byteorder", "digest 0.10.7", "sha2 0.10.7", "sha3", - "sp-std", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -7758,18 +11395,18 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.19.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "environmental", "parity-scale-codec", @@ -7780,13 +11417,12 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core", "sp-runtime", "sp-std", "thiserror", @@ -7794,13 +11430,12 @@ dependencies = [ [[package]] name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "bytes", - "ed25519", - "ed25519-dalek", - "futures", + "ed25519 1.5.3", + "ed25519-dalek 1.0.1", "libsecp256k1", "log", "parity-scale-codec", @@ -7820,8 +11455,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "lazy_static", "sp-core", @@ -7831,13 +11466,11 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.27.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "futures", "parity-scale-codec", "parking_lot 0.12.1", - "serde", "sp-core", "sp-externalities", "thiserror", @@ -7846,16 +11479,16 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "thiserror", - "zstd 0.12.3+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -7863,10 +11496,42 @@ dependencies = [ "sp-std", ] +[[package]] +name = "sp-mmr-primitives" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ckb-merkle-mountain-range", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "sp-std", + "thiserror", +] + +[[package]] +name = "sp-npos-elections" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "sp-api", "sp-core", @@ -7875,8 +11540,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "backtrace", "lazy_static", @@ -7886,7 +11551,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "rustc-hash", "serde", @@ -7895,8 +11560,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "either", "hash256-std-hasher", @@ -7917,8 +11582,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "17.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -7935,25 +11600,26 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "11.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "Inflector", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", + "sp-keystore", "sp-runtime", "sp-staking", "sp-std", @@ -7962,8 +11628,9 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", @@ -7974,8 +11641,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.28.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hash-db", "log", @@ -7990,14 +11657,14 @@ dependencies = [ "sp-trie", "thiserror", "tracing", + "trie-db", ] [[package]] name = "sp-statement-store" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "log", "parity-scale-codec", "scale-info", "sp-api", @@ -8012,13 +11679,13 @@ dependencies = [ [[package]] name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" [[package]] name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "13.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8031,11 +11698,9 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", - "futures-timer", - "log", "parity-scale-codec", "sp-inherents", "sp-runtime", @@ -8045,8 +11710,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "10.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "sp-std", @@ -8058,7 +11723,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "sp-api", "sp-runtime", @@ -8067,10 +11732,9 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", - "log", "parity-scale-codec", "scale-info", "sp-core", @@ -8082,8 +11746,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ahash 0.8.3", "hash-db", @@ -8105,8 +11769,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8122,33 +11786,32 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "14.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", "sp-std", - "wasmi", "wasmtime", ] [[package]] name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "20.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", @@ -8194,14 +11857,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", - "der 0.7.7", + "der 0.7.8", ] [[package]] name = "ss58-registry" -version = "1.41.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc443bad666016e012538782d9e3006213a7db43e9fb1dda91657dc06a6fa08" +checksum = "5e6915280e2d0db8911e5032a5c275571af6bdded2916abd691a659be25d3439" dependencies = [ "Inflector", "num-format", @@ -8315,15 +11978,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "platforms 2.0.0", -] +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -8342,7 +12002,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hyper", "log", @@ -8354,7 +12014,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "jsonrpsee", @@ -8364,19 +12024,37 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "substrate-state-trie-migration-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +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 = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", + "parity-wasm", "sp-maybe-compressed-blob", "strum", "tempfile", - "toml 0.7.6", + "toml 0.7.8", "walkdir", "wasm-opt", ] @@ -8409,9 +12087,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.25" +version = "2.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" +checksum = "9caece70c63bfba29ec2fed841a09851b14a235c60010fa4de58089b6c025668" dependencies = [ "proc-macro2", "quote", @@ -8459,21 +12137,20 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.9" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8e77cb757a61f51b947ec4a7e3646efd825b73561db1c232a8ccb639e611a0" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ - "autocfg", "cfg-if", - "fastrand", + "fastrand 2.0.0", "redox_syscall 0.3.5", - "rustix 0.37.23", + "rustix 0.38.13", "windows-sys 0.48.0", ] @@ -8494,22 +12171,22 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -8538,32 +12215,46 @@ dependencies = [ ] [[package]] -name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" +name = "thrift" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" +checksum = "b82ca8f46f95b3ce96081fe3dd89160fdea970c254bb72925255d1b62aae692e" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" dependencies = [ - "cc", "libc", + "paste", + "tikv-jemalloc-sys", ] [[package]] -name = "time" -version = "0.1.45" +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" dependencies = [ + "cc", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", ] [[package]] name = "time" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" dependencies = [ + "deranged", "itoa", "serde", "time-core", @@ -8578,9 +12269,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" dependencies = [ "time-core", ] @@ -8604,6 +12295,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -8631,20 +12331,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "signal-hook-registry", - "socket2 0.4.9", + "socket2 0.5.4", "tokio-macros", "windows-sys 0.48.0", ] @@ -8657,7 +12356,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -8673,13 +12372,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.20.8", + "rustls 0.21.7", "tokio", - "webpki 0.22.0", ] [[package]] @@ -8689,7 +12387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tokio", "tokio-util", ] @@ -8704,7 +12402,7 @@ dependencies = [ "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tokio", "tracing", ] @@ -8720,9 +12418,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", @@ -8741,9 +12439,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.0.0", "serde", @@ -8765,18 +12463,18 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8bd22a874a2d0b70452d5597b12c537331d49060824a95f49f108994f94aa4c" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tower-layer", "tower-service", ] @@ -8801,7 +12499,7 @@ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tracing-attributes", "tracing-core", ] @@ -8814,7 +12512,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -8837,6 +12535,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-gum" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "polkadot-node-jaeger", + "polkadot-primitives", + "tracing", + "tracing-gum-proc-macro", +] + +[[package]] +name = "tracing-gum-proc-macro" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "expander 2.0.0", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.33", +] + [[package]] name = "tracing-log" version = "0.1.3" @@ -8958,7 +12679,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "clap", @@ -8969,7 +12690,6 @@ dependencies = [ "parity-scale-codec", "sc-cli", "sc-executor", - "sc-service", "serde", "serde_json", "sp-api", @@ -8989,7 +12709,7 @@ dependencies = [ "sp-version", "sp-weights", "substrate-rpc-client", - "zstd 0.12.3+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] @@ -9061,9 +12781,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -9108,9 +12828,9 @@ dependencies = [ [[package]] name = "unsigned-varint" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ "asynchronous-codec", "bytes", @@ -9126,9 +12846,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna 0.4.0", @@ -9143,9 +12863,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.10", ] @@ -9191,9 +12911,9 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -9214,12 +12934,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -9247,7 +12961,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", "wasm-bindgen-shared", ] @@ -9281,7 +12995,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9356,39 +13070,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmi" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" -dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core", -] - -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasmi_core" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" -dependencies = [ - "downcast-rs", - "libm 0.2.7", - "memory_units", - "num-rational", - "num-traits", -] - [[package]] name = "wasmparser" version = "0.102.0" @@ -9443,7 +13124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.21.2", + "base64 0.21.4", "bincode", "directories-next", "file-per-thread-logger", @@ -9468,7 +13149,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.27.3", "log", "object 0.30.4", "target-lexicon", @@ -9487,7 +13168,7 @@ dependencies = [ "anyhow", "cranelift-codegen", "cranelift-native", - "gimli", + "gimli 0.27.3", "object 0.30.4", "target-lexicon", "wasmtime-environ", @@ -9501,7 +13182,7 @@ checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" dependencies = [ "anyhow", "cranelift-entity", - "gimli", + "gimli 0.27.3", "indexmap 1.9.3", "log", "object 0.30.4", @@ -9523,7 +13204,7 @@ dependencies = [ "bincode", "cfg-if", "cpp_demangle", - "gimli", + "gimli 0.27.3", "log", "object 0.30.4", "rustc-demangle", @@ -9616,9 +13297,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" dependencies = [ "ring", "untrusted", @@ -9630,9 +13311,24 @@ version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "webpki 0.22.0", + "webpki 0.22.1", +] + +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", ] +[[package]] +name = "webpki-roots" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" + [[package]] name = "webrtc" version = "0.6.0" @@ -9659,7 +13355,7 @@ dependencies = [ "sha2 0.10.7", "stun", "thiserror", - "time 0.3.23", + "time", "tokio", "turn", "url", @@ -9691,9 +13387,9 @@ dependencies = [ [[package]] name = "webrtc-dtls" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" +checksum = "c4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267" dependencies = [ "aes 0.6.0", "aes-gcm 0.10.2", @@ -9708,12 +13404,11 @@ dependencies = [ "hkdf", "hmac 0.12.1", "log", - "oid-registry 0.6.1", "p256", "p384", "rand 0.8.5", "rand_core 0.6.4", - "rcgen 0.9.3", + "rcgen 0.10.0", "ring", "rustls 0.19.1", "sec1 0.3.0", @@ -9726,7 +13421,7 @@ dependencies = [ "tokio", "webpki 0.21.4", "webrtc-util", - "x25519-dalek 2.0.0-pre.1", + "x25519-dalek 2.0.0", "x509-parser 0.13.2", ] @@ -9842,15 +13537,123 @@ dependencies = [ "winapi", ] +[[package]] +name = "westend-runtime" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-collective", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-multisig", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-preimage", + "pallet-proxy", + "pallet-recovery", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", + "pallet-utility", + "pallet-vesting", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", + "westend-runtime-constants", + "xcm", + "xcm-builder", + "xcm-executor", +] + +[[package]] +name = "westend-runtime-constants" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", +] + [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.13", ] [[package]] @@ -9919,7 +13722,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -9937,7 +13740,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -9957,17 +13760,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "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]] @@ -9978,9 +13781,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -9996,9 +13799,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -10014,9 +13817,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -10032,9 +13835,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -10050,9 +13853,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -10062,9 +13865,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -10080,15 +13883,15 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.4.9" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ "memchr", ] @@ -10125,12 +13928,13 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0-pre.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.0", "rand_core 0.6.4", + "serde", "zeroize", ] @@ -10150,7 +13954,7 @@ dependencies = [ "ring", "rusticata-macros", "thiserror", - "time 0.3.23", + "time", ] [[package]] @@ -10168,7 +13972,76 @@ dependencies = [ "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time 0.3.23", + "time", +] + +[[package]] +name = "xcm" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "bounded-collections", + "derivative", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-weights", + "xcm-procedural", +] + +[[package]] +name = "xcm-builder" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-transaction-payment", + "parity-scale-codec", + "polkadot-parachain", + "scale-info", + "sp-arithmetic", + "sp-io", + "sp-runtime", + "sp-std", + "sp-weights", + "xcm", + "xcm-executor", +] + +[[package]] +name = "xcm-executor" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-weights", + "xcm", +] + +[[package]] +name = "xcm-procedural" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a15959ce711bb60aa79add58f560d61e9" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.33", ] [[package]] @@ -10191,7 +14064,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.23", + "time", ] [[package]] @@ -10211,7 +14084,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.33", ] [[package]] @@ -10225,11 +14098,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", + "zstd-safe 6.0.6", ] [[package]] @@ -10244,9 +14117,9 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", diff --git a/Cargo.toml b/Cargo.toml index 538fd8d..55ec224 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,11 @@ +[profile.release] +panic = "unwind" + [workspace] members = [ - "node", - "pallets/template", - "runtime", + "node", + "runtime/mainnet", + "runtime/devnet", ] -[profile.release] -panic = "unwind" + +resolver = "2" \ No newline at end of file diff --git a/README.md b/README.md index 83293e7..cb50db2 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,68 @@ -# Metaquity Node +# Metaquity network -### Build +### Rust Setup -Use the following command to build the node without launching it: +First, complete the [basic Rust setup instructions](./docs/rust-setup.md). -```sh -cargo build --release -``` - -### Embedded Docs +### Build -After you build the project, you can use the following command to explore its parameters and subcommands: +Clone the extended parachain template repository: ```sh -./target/release/node-template -h +git clone https://github.com/paritytech/extended-parachain-template ``` -You can generate and view the [Rust Docs](https://doc.rust-lang.org/cargo/commands/cargo-doc.html) for this template with this command: +Use the following command to build the node without launching it: ```sh -cargo +nightly doc --open +cargo build --release ``` -### Single-Node Development Chain +Next you will need a compatible release of [Polkadot](https://github.com/paritytech/polkadot) to run a testnet. You may also want to use [Zombienet (available for Linux and MacOS)](https://github.com/paritytech/zombienet/releases) for spinning up a testnet: -The following command starts a single-node development chain that doesn't persist state: -```sh -./target/release/node-template --dev -``` +You can find linux and macOS executables of the Zombienet CLI here: -To purge the development chain's state, run the following command: +https://github.com/paritytech/zombienet/releases +Download the Zombienet CLI according to your operating system. +Tip: If you want the executable to be available system-wide then you can follow these steps (otherwise just download the executable to your working directory): ```sh -./target/release/node-template purge-chain --dev +wget https://github.com/paritytech/zombienet/releases/download/v1.3.30/zombienet-macos +chmod +x zombienet-macos +cp zombienet-macos /usr/local/bin ``` - -To start the development chain with detailed logging, run the following command: - +Make sure Zombienet CLI is installed correctly: ```sh -RUST_BACKTRACE=1 ./target/release/node-template -ldebug --dev +./zombienet-macos --help ``` +You should see some similar output: +```sh +Usage: zombienet [options] [command] -Development chains: +Options: + -c, --spawn-concurrency Number of concurrent spawning process to launch, default is 1 + -p, --provider Override provider to use (choices: "podman", "kubernetes", "native") + -m, --monitor Start as monitor, do not auto cleanup network + -h, --help display help for command -- Maintain state in a `tmp` folder while the node is running. -- Use the **Alice** and **Bob** accounts as default validator authorities. -- Use the **Alice** account as the default `sudo` account. -- Are preconfigured with a genesis state (`/node/src/chain_spec.rs`) that includes several prefunded development accounts. +Commands: + spawn [creds] Spawn the network defined in the config + test [runningNetworkSpec] Run tests on the network defined + setup Setup is meant for downloading and making dev environment of Zombienet ready + version Prints zombienet version + help [command] display help for command +``` -To persist chain state between runs, specify a base path by running a command similar to the following: +### Setting up Zombienet config -```sh -// Create a folder to use as the db base path -$ mkdir my-chain-state - -// Use of that folder to store the chain state -$ ./target/release/node-template --dev --base-path ./my-chain-state/ - -// Check the folder structure created inside the base path after running the chain -$ ls ./my-chain-state -chains -$ ls ./my-chain-state/chains/ -dev -$ ls ./my-chain-state/chains/dev -db keystore network -``` +You may use a reference implementation from the folder `zombienet-config` or make your own. More instructions here: [Simulate parachains in a test network +](https://docs.substrate.io/test/simulate-parachains/) -### Connect with Polkadot-JS Apps Front-End +👉 Learn more about parachains [here](https://wiki.polkadot.network/docs/learn-parachains), and +parathreads [here](https://wiki.polkadot.network/docs/learn-parathreads). -Similar to other substrate-based nodes, after you start the node locally, you can interact with it using the hosted version of the [Polkadot/Substrate Portal](https://polkadot.js.org/apps/#/explorer?rpc=ws://localhost:9944) front-end by connecting to the local node endpoint. +🧙 Learn about how to use this template and run your own parachain testnet for it in the +[Devhub Cumulus Tutorial](https://docs.substrate.io/tutorials/v3/cumulus/start-relay/). \ No newline at end of file diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..087c2b9 --- /dev/null +++ b/config.toml @@ -0,0 +1,20 @@ +[relaychain] + +default_command = "./bin/polkadot-v1.0.0" +default_args = [ "-lparachain=debug" ] + +chain = "rococo-local" + + [[relaychain.nodes]] + name = "alice" + + [[relaychain.nodes]] + name = "bob" + +[[parachains]] +id = 1000 +cumulus_based = true + + [parachains.collator] + name = "parachain-A-1000-collator01" + command = "./target/release/metaquity-network-node" diff --git a/docs/rust-setup.md b/docs/rust-setup.md index 2755966..87f7b5b 100644 --- a/docs/rust-setup.md +++ b/docs/rust-setup.md @@ -1,225 +1,31 @@ ---- -title: Installation ---- +- ### Install Rust: -This guide is for reference only, please check the latest information on getting starting with Substrate -[here](https://docs.substrate.io/main-docs/install/). - -This page will guide you through the **2 steps** needed to prepare a computer for **Substrate** development. -Since Substrate is built with [the Rust programming language](https://www.rust-lang.org/), the first -thing you will need to do is prepare the computer for Rust development - these steps will vary based -on the computer's operating system. Once Rust is configured, you will use its toolchains to interact -with Rust projects; the commands for Rust's toolchains will be the same for all supported, -Unix-based operating systems. - -## Build dependencies - -Substrate development is easiest on Unix-based operating systems like macOS or Linux. The examples -in the [Substrate Docs](https://docs.substrate.io) use Unix-style terminals to demonstrate how to -interact with Substrate from the command line. - -### Ubuntu/Debian - -Use a terminal shell to execute the following commands: - -```bash -sudo apt update -# May prompt for location information -sudo apt install -y git clang curl libssl-dev llvm libudev-dev -``` - -### Arch Linux - -Run these commands from a terminal: - -```bash -pacman -Syu --needed --noconfirm curl git clang -``` - -### Fedora - -Run these commands from a terminal: - -```bash -sudo dnf update -sudo dnf install clang curl git openssl-devel -``` - -### OpenSUSE - -Run these commands from a terminal: - -```bash -sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel -``` - -### macOS - -> **Apple M1 ARM** -> If you have an Apple M1 ARM system on a chip, make sure that you have Apple Rosetta 2 -> installed through `softwareupdate --install-rosetta`. This is only needed to run the -> `protoc` tool during the build. The build itself and the target binaries would remain native. - -Open the Terminal application and execute the following commands: - -```bash -# Install Homebrew if necessary https://brew.sh/ -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" - -# Make sure Homebrew is up-to-date, install openssl -brew update -brew install openssl -``` - -### Windows - -**_PLEASE NOTE:_** Native Windows development of Substrate is _not_ very well supported! It is _highly_ -recommend to use [Windows Subsystem Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) -(WSL) and follow the instructions for [Ubuntu/Debian](#ubuntudebian). -Please refer to the separate -[guide for native Windows development](https://docs.substrate.io/main-docs/install/windows/). - -## Rust developer environment - -This guide uses installer and the `rustup` tool to manage the Rust toolchain. -First install and configure `rustup`: - -```bash -# Install +```shell curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -# Configure source ~/.cargo/env ``` +- ### Install essential dependencies for building a substrate node: -Configure the Rust toolchain to default to the latest stable version, add nightly and the nightly wasm target: - -```bash -rustup default stable -rustup update -rustup update nightly -rustup target add wasm32-unknown-unknown --toolchain nightly +Ubuntu: +```sh +sudo apt update +sudo apt install -y cmake pkg-config libssl-dev git gcc build-essential git clang libclang-dev ``` - -## Test your set-up - -Now the best way to ensure that you have successfully prepared a computer for Substrate -development is to follow the steps in [our first Substrate tutorial](https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/). - -## Troubleshooting Substrate builds - -Sometimes you can't get the Substrate node template -to compile out of the box. Here are some tips to help you work through that. - -### Rust configuration check - -To see what Rust toolchain you are presently using, run: - -```bash -rustup show +Arch Linux: +```sh +pacman -Syu --needed --noconfirm cmake gcc openssl-1.0 pkgconf git clang +export OPENSSL_LIB_DIR="/usr/lib/openssl-1.0"; +export OPENSSL_INCLUDE_DIR="/usr/include/openssl-1.0" ``` - -This will show something like this (Ubuntu example) output: - -```text -Default host: x86_64-unknown-linux-gnu -rustup home: /home/user/.rustup - -installed toolchains --------------------- - -stable-x86_64-unknown-linux-gnu (default) -nightly-2020-10-06-x86_64-unknown-linux-gnu -nightly-x86_64-unknown-linux-gnu - -installed targets for active toolchain --------------------------------------- - -wasm32-unknown-unknown -x86_64-unknown-linux-gnu - -active toolchain ----------------- - -stable-x86_64-unknown-linux-gnu (default) -rustc 1.50.0 (cb75ad5db 2021-02-10) +Mac OS: +```sh +brew update +brew install openssl cmake llvm ``` -As you can see above, the default toolchain is stable, and the -`nightly-x86_64-unknown-linux-gnu` toolchain as well as its `wasm32-unknown-unknown` target is installed. -You also see that `nightly-2020-10-06-x86_64-unknown-linux-gnu` is installed, but is not used unless explicitly defined as illustrated in the [specify your nightly version](#specifying-nightly-version) -section. - -### WebAssembly compilation - -Substrate uses [WebAssembly](https://webassembly.org) (Wasm) to produce portable blockchain -runtimes. You will need to configure your Rust compiler to use -[`nightly` builds](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) to allow you to -compile Substrate runtime code to the Wasm target. - -> There are upstream issues in Rust that need to be resolved before all of Substrate can use the stable Rust toolchain. -> [This is our tracking issue](https://github.com/paritytech/substrate/issues/1252) if you're curious as to why and how this will be resolved. - -#### Latest nightly for Substrate `master` - -Developers who are building Substrate _itself_ should always use the latest bug-free versions of -Rust stable and nightly. This is because the Substrate codebase follows the tip of Rust nightly, -which means that changes in Substrate often depend on upstream changes in the Rust nightly compiler. -To ensure your Rust compiler is always up to date, you should run: +- ### Install the `wasm` target and the `nightly` toolchain for rust -```bash -rustup update +```sh rustup update nightly rustup target add wasm32-unknown-unknown --toolchain nightly -``` - -> NOTE: It may be necessary to occasionally rerun `rustup update` if a change in the upstream Substrate -> codebase depends on a new feature of the Rust compiler. When you do this, both your nightly -> and stable toolchains will be pulled to the most recent release, and for nightly, it is -> generally _not_ expected to compile WASM without error (although it very often does). -> Be sure to [specify your nightly version](#specifying-nightly-version) if you get WASM build errors -> from `rustup` and [downgrade nightly as needed](#downgrading-rust-nightly). - -#### Rust nightly toolchain - -If you want to guarantee that your build works on your computer as you update Rust and other -dependencies, you should use a specific Rust nightly version that is known to be -compatible with the version of Substrate they are using; this version will vary from project to -project and different projects may use different mechanisms to communicate this version to -developers. For instance, the Polkadot client specifies this information in its -[release notes](https://github.com/paritytech/polkadot/releases). - -```bash -# Specify the specific nightly toolchain in the date below: -rustup install nightly- -``` - -#### Wasm toolchain - -Now, configure the nightly version to work with the Wasm compilation target: - -```bash -rustup target add wasm32-unknown-unknown --toolchain nightly- -``` - -### Specifying nightly version - -Use the `WASM_BUILD_TOOLCHAIN` environment variable to specify the Rust nightly version a Substrate -project should use for Wasm compilation: - -```bash -WASM_BUILD_TOOLCHAIN=nightly- cargo build --release -``` - -> Note that this only builds _the runtime_ with the specified nightly. The rest of project will be -> compiled with **your default toolchain**, i.e. the latest installed stable toolchain. - -### Downgrading Rust nightly - -If your computer is configured to use the latest Rust nightly and you would like to downgrade to a -specific nightly version, follow these steps: - -```bash -rustup uninstall nightly -rustup install nightly- -rustup target add wasm32-unknown-unknown --toolchain nightly- -``` +``` \ No newline at end of file diff --git a/docs/zombienet.md b/docs/zombienet.md new file mode 100644 index 0000000..44cd848 --- /dev/null +++ b/docs/zombienet.md @@ -0,0 +1,49 @@ +## Zombienet Installation: + +You can download executables of the Zombienet CLI from [paritytech/zombienet/releases](https://github.com/paritytech/zombienet/releases) + + +- Download the Zombienet CLI according to your operating system. + + 💡 Tip: If you want the executable to be available system-wide then make sure you place it in one of your `$PATH` directories. +```sh +wget https://github.com/paritytech/zombienet/releases/download/v1.3.30/zombienet-macos +chmod +x zombienet-macos +cp zombienet-macos /usr/local/bin +``` +Then invoke it anywhere like : +```sh +zombienet-macos --help +``` +Otherwise you can just place it in your working directory. + +```sh +./zombienet-macos --help +``` +You should see some similar output: +```sh +Usage: zombienet [options] [command] + +Options: + -c, --spawn-concurrency Number of concurrent spawning process to launch, default is 1 + -p, --provider Override provider to use (choices: "podman", "kubernetes", "native") + -m, --monitor Start as monitor, do not auto cleanup network + -h, --help display help for command + +Commands: + spawn [creds] Spawn the network defined in the config + test [runningNetworkSpec] Run tests on the network defined + setup Setup is meant for downloading and making dev environment of Zombienet ready + version Prints zombienet version + help [command] display help for command + +``` + +## Setting up Zombienet config: + +You may use a reference implementation from the folder `zombienet-config` or make your own. We provide a simple configuration for you called [zombienet-config.toml](../zombienet-config.toml) which spins up two validators for the relay chain, and one collator for your parachain to get you quickly upto speed. + +⚠️ Take note: the path of the polkadot executable used there is `../bin/polkadot` which means you need to have a folder called `bin` outside the repository directory which contains your compiled polkadot binary which must be named as `polkadot`. Also please take care to compile the correct version of `polkadot` when testing out on your machine. You can do so by cloning `polkadot` and then checking out the appropriate branch that corresponds to the substrate/cumulus version used to build the template. + +More instructions here: [Simulate parachains in a test network +](https://docs.substrate.io/test/simulate-parachains/) \ No newline at end of file diff --git a/node/Cargo.toml b/node/Cargo.toml index e1d4c0b..2b0fdc4 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -1,81 +1,97 @@ [package] -name = "node-template" -version = "4.0.0-dev" -description = "A fresh FRAME-based Substrate node, ready for hacking." -authors = ["Substrate DevHub "] -homepage = "https://substrate.io/" +authors = ["Metaquity Network"] +build = "build.rs" +description = "Metaquity network node" edition = "2021" +homepage = "https://metaquity.xyz" license = "Unlicense" -publish = false -repository = "https://github.com/substrate-developer-hub/substrate-node-template/" -build = "build.rs" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[[bin]] -name = "node-template" +name = "metaquity-network-node" +repository = "https://github.com/Metaquity-Network/metaquity-network-node-extended" +version = "0.0.1-dev" [dependencies] -clap = { version = "4.0.9", features = ["derive"] } -futures = { version = "0.3.21", features = ["thread-pool"]} - -sc-cli = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-core = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sc-executor = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-network = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sc-service = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-telemetry = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-keystore = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-transaction-pool = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-transaction-pool-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sc-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-consensus-grandpa = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-consensus-grandpa = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-client-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-runtime = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-timestamp = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-inherents = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-keyring = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -frame-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } +clap = {version = "4.3.24", features = ["derive"]} +codec = {package = "parity-scale-codec", version = "3.0.0"} +futures = "0.3.28" +jsonrpsee = {version = "0.16.2", features = ["server"]} +log = "0.4.20" +serde = {version = "1.0.183", features = ["derive"]} +serde_json = "1.0.85" +color-print = "0.3.4" -# These dependencies are used for the node template's RPCs -jsonrpsee = { version = "0.16.2", features = ["server"] } -sc-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sc-rpc-api = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-blockchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-block-builder = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git" , branch = "polkadot-v0.9.43"} -sc-basic-authorship = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -substrate-frame-rpc-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-transaction-payment-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} +# Local +metaquity-network-devnet-runtime = {path = "../runtime/devnet"} +metaquity-network-mainnet-runtime = {path = "../runtime/mainnet"} +metaquity-network-runtime-common = {path = "../runtime/common"} -# These dependencies are used for runtime benchmarking -frame-benchmarking = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -frame-benchmarking-cli = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} +# Substrate +frame-benchmarking = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +frame-benchmarking-cli = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +pallet-transaction-payment-rpc = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-basic-authorship = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-chain-spec = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-cli = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-client-api = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-consensus = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-executor = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-network = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-network-sync = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-rpc = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-service = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-sysinfo = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-telemetry = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-tracing = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-transaction-pool = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-transaction-pool-api = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sc-offchain = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-api = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-block-builder = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-blockchain = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-consensus-aura = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-core = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-io = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", optional = true} +sp-keystore = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-offchain = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-runtime = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-session = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-timestamp = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +sp-transaction-pool = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +substrate-frame-rpc-system = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +substrate-prometheus-endpoint = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} +try-runtime-cli = {git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v1.0.0"} -# Local Dependencies -node-template-runtime = { version = "4.0.0-dev", path = "../runtime" } +# Polkadot +polkadot-cli = {git = "https://github.com/paritytech/polkadot", features = ["rococo-native"], branch = "release-v1.0.0"} +polkadot-primitives = {git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0"} +polkadot-service = {git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0"} +xcm = {git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0"} -# CLI-specific dependencies -try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} +# Cumulus +cumulus-client-cli = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-client-consensus-aura = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-client-consensus-common = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-client-service = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-primitives-core = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-primitives-parachain-inherent = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-relay-chain-inprocess-interface = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-relay-chain-interface = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-relay-chain-minimal-node = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} +cumulus-relay-chain-rpc-interface = {git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0"} [build-dependencies] -substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } +substrate-build-script-utils = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0"} [features] default = [] -# Dependencies that are only required if runtime benchmarking should be build. runtime-benchmarks = [ - "node-template-runtime/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-benchmarking-cli/runtime-benchmarks", + "try-runtime-cli/try-runtime", + "metaquity-network-mainnet-runtime/runtime-benchmarks", + "metaquity-network-devnet-runtime/runtime-benchmarks", + "polkadot-cli/runtime-benchmarks", +] +try-runtime = [ + "try-runtime-cli/try-runtime", + "metaquity-network-mainnet-runtime/try-runtime", + "metaquity-network-devnet-runtime/try-runtime", + "dep:sp-io", ] -# Enable features that allow the runtime to be tried and debugged. Name might be subject to change -# in the near future. -try-runtime = ["node-template-runtime/try-runtime", "try-runtime-cli/try-runtime"] diff --git a/node/src/benchmarking.rs b/node/src/benchmarking.rs deleted file mode 100644 index 37e0e46..0000000 --- a/node/src/benchmarking.rs +++ /dev/null @@ -1,164 +0,0 @@ -//! Setup code for [`super::command`] which would otherwise bloat that module. -//! -//! Should only be used for benchmarking as it may break in other contexts. - -use crate::service::FullClient; - -use node_template_runtime as runtime; -use runtime::{AccountId, Balance, BalancesCall, SystemCall}; -use sc_cli::Result; -use sc_client_api::BlockBackend; -use sp_core::{Encode, Pair}; -use sp_inherents::{InherentData, InherentDataProvider}; -use sp_keyring::Sr25519Keyring; -use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; - -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(), - } - .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 = runtime::BlockHashCount::get() - .checked_next_power_of_two() - .map(|c| c / 2) - .unwrap_or(2) as u64; - let extra: runtime::SignedExtra = ( - 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(), - )), - frame_system::CheckNonce::::from(nonce), - frame_system::CheckWeight::::new(), - pallet_transaction_payment::ChargeTransactionPayment::::from(0), - ); - - let raw_payload = runtime::SignedPayload::from_raw( - call.clone(), - extra.clone(), - ( - (), - runtime::VERSION.spec_version, - runtime::VERSION.transaction_version, - genesis_hash, - best_hash, - (), - (), - (), - ), - ); - let signature = raw_payload.using_encoded(|e| sender.sign(e)); - - runtime::UncheckedExtrinsic::new_signed( - call.clone(), - sp_runtime::AccountId32::from(sender.public()).into(), - runtime::Signature::Sr25519(signature.clone()), - 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()); - - futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data)) - .map_err(|e| format!("creating inherent data: {:?}", e))?; - Ok(inherent_data) -} diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index 080a8aa..f0833b7 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -1,29 +1,58 @@ -use node_template_runtime::{ - AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, Signature, SudoConfig, - SystemConfig, WASM_BINARY, -}; +use cumulus_primitives_core::ParaId; +use metaquity_network_runtime_common::{AccountId, AuraId, Signature}; +use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}; use sc_service::ChainType; -use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_consensus_grandpa::AuthorityId as GrandpaId; +use serde::{Deserialize, Serialize}; use sp_core::{sr25519, Pair, Public}; use sp_runtime::traits::{IdentifyAccount, Verify}; -// The URL for the telemetry server. -// const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; +/// Specialized `ChainSpec` for the normal parachain runtime. +pub type MainChainSpec = + sc_service::GenericChainSpec; -/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. -pub type ChainSpec = sc_service::GenericChainSpec; +/// Specialized `ChainSpec` for the development parachain runtime. +pub type DevnetChainSpec = + sc_service::GenericChainSpec; -/// Generate a crypto pair from seed. +/// The default XCM version to set in genesis config. +const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; + +const PARA_ID: u32 = 2000; + +/// Helper function to generate a crypto pair from seed pub fn get_from_seed(seed: &str) -> ::Public { TPublic::Pair::from_string(&format!("//{}", seed), None) .expect("static values are valid; qed") .public() } +/// The extensions for the [`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()) + } +} + type AccountPublic = ::Signer; -/// Generate an account ID from seed. +/// 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_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>, @@ -31,127 +60,407 @@ where AccountPublic::from(get_from_seed::(seed)).into_account() } -/// Generate an Aura authority key. -pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { - (get_from_seed::(s), get_from_seed::(s)) +/// Generate the session keys from individual elements. +/// +/// The input must be a tuple of individual keys (a single arg for now since we have just one key). +pub fn mainnet_session_keys(keys: AuraId) -> metaquity_network_mainnet_runtime::SessionKeys { + metaquity_network_mainnet_runtime::SessionKeys { aura: keys } } -pub fn development_config() -> Result { - let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?; - - Ok(ChainSpec::from_genesis( - // Name - "Development", - // ID - "dev", - ChainType::Development, - move || { - testnet_genesis( - wasm_binary, - // Initial PoA authorities - vec![authority_keys_from_seed("Alice")], - // Sudo account - get_account_id_from_seed::("Alice"), - // Pre-funded accounts - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - ], - true, - ) - }, - // Bootnodes - vec![], - // Telemetry - None, - // Protocol ID - None, - None, - // Properties - None, - // Extensions - None, - )) +pub fn devnet_session_keys(keys: AuraId) -> metaquity_network_devnet_runtime::SessionKeys { + metaquity_network_devnet_runtime::SessionKeys { aura: keys } } -pub fn local_testnet_config() -> Result { - let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?; - - Ok(ChainSpec::from_genesis( - // Name - "Local Testnet", - // ID - "local_testnet", - ChainType::Local, - move || { - testnet_genesis( - wasm_binary, - // Initial PoA authorities - vec![authority_keys_from_seed("Alice"), authority_keys_from_seed("Bob")], - // Sudo account - get_account_id_from_seed::("Alice"), - // Pre-funded accounts - 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"), +pub mod devnet { + use super::*; + pub fn development_config() -> DevnetChainSpec { + // Give your base currency a unit name and decimal places + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("tokenSymbol".into(), "DEV".into()); + properties.insert("tokenDecimals".into(), 12.into()); + properties.insert("ss58Format".into(), 42.into()); + + DevnetChainSpec::from_genesis( + // Name + "Development", + // ID + "dev", + ChainType::Development, + move || { + testnet_genesis( + // initial collators. + 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"), + ), + ], + 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"), + ], + Some(get_account_id_from_seed::("Alice")), + PARA_ID.into(), + ) + }, + Vec::new(), + None, + None, + None, + None, + Extensions { + relay_chain: "rococo-local".into(), // You MUST set this to the correct network! + para_id: PARA_ID, + }, + ) + } + + pub fn local_testnet_config() -> DevnetChainSpec { + // Give your base currency a unit name and decimal places + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("tokenSymbol".into(), "UNIT".into()); + properties.insert("tokenDecimals".into(), 12.into()); + properties.insert("ss58Format".into(), 42.into()); + + DevnetChainSpec::from_genesis( + // Name + "Development Local Testnet", + // ID + "dev_local_testnet", + ChainType::Local, + move || { + testnet_genesis( + // initial collators. + 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"), + ), + ], + 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"), + ], + Some(get_account_id_from_seed::("Alice")), + PARA_ID.into(), + ) + }, + // Bootnodes + Vec::new(), + // Telemetry + None, + // Protocol ID + Some("devnet-local"), + // Fork ID + None, + // Properties + Some(properties), + // Extensions + Extensions { + relay_chain: "rococo-local".into(), // You MUST set this to the correct network! + para_id: PARA_ID, + }, + ) + } + + fn testnet_genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + root_key: Option, + id: ParaId, + ) -> metaquity_network_devnet_runtime::RuntimeGenesisConfig { + use metaquity_network_devnet_runtime::EXISTENTIAL_DEPOSIT; + let alice = get_from_seed::("Alice"); + let bob = get_from_seed::("Bob"); + + metaquity_network_devnet_runtime::RuntimeGenesisConfig { + system: metaquity_network_devnet_runtime::SystemConfig { + code: metaquity_network_devnet_runtime::WASM_BINARY + .expect("WASM binary was not build, please build it!") + .to_vec(), + ..Default::default() + }, + balances: metaquity_network_devnet_runtime::BalancesConfig { + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + // Configure two assets ALT1 & ALT2 with two owners, alice and bob respectively + assets: metaquity_network_devnet_runtime::AssetsConfig { + assets: vec![ + (1, alice.into(), true, 100_000_000_000), + (2, bob.into(), true, 100_000_000_000), + ], + // Genesis metadata: Vec<(id, name, symbol, decimals)> + metadata: vec![ + (1, "asset-1".into(), "ALT1".into(), 10), + (2, "asset-2".into(), "ALT2".into(), 10), + ], + // Genesis accounts: Vec<(id, account_id, balance)> + accounts: vec![ + (1, alice.into(), 500_000_000_000), + (2, bob.into(), 500_000_000_000), ], - true, - ) - }, - // Bootnodes - vec![], - // Telemetry - None, - // Protocol ID - None, - // Properties - None, - None, - // Extensions - None, - )) + }, + parachain_info: metaquity_network_devnet_runtime::ParachainInfoConfig { + parachain_id: id, + ..Default::default() + }, + collator_selection: metaquity_network_devnet_runtime::CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: EXISTENTIAL_DEPOSIT * 16, + ..Default::default() + }, + session: metaquity_network_devnet_runtime::SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + devnet_session_keys(aura), // session keys + ) + }) + .collect(), + }, + // 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(), + sudo: metaquity_network_devnet_runtime::SudoConfig { key: root_key }, + council: metaquity_network_devnet_runtime::CouncilConfig { + phantom: std::marker::PhantomData, + members: endowed_accounts.iter().take(4).cloned().collect(), + }, + parachain_system: Default::default(), + polkadot_xcm: metaquity_network_devnet_runtime::PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + transaction_payment: Default::default(), + } + } } -/// Configure initial storage state for FRAME modules. -fn testnet_genesis( - wasm_binary: &[u8], - initial_authorities: Vec<(AuraId, GrandpaId)>, - root_key: AccountId, - endowed_accounts: Vec, - _enable_println: bool, -) -> GenesisConfig { - GenesisConfig { - system: SystemConfig { - // Add Wasm runtime to storage. - code: wasm_binary.to_vec(), - }, - balances: BalancesConfig { - // Configure endowed accounts with initial balance of 1 << 60. - balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), - }, - aura: AuraConfig { - authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), - }, - grandpa: GrandpaConfig { - authorities: initial_authorities.iter().map(|x| (x.1.clone(), 1)).collect(), - }, - sudo: SudoConfig { - // Assign network admin rights. - key: Some(root_key), - }, - transaction_payment: Default::default(), - assets: Default::default(), +pub mod mainnet { + use super::*; + pub fn development_config() -> MainChainSpec { + // Give your base currency a unit name and decimal places + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("tokenSymbol".into(), "UNIT".into()); + properties.insert("tokenDecimals".into(), 12.into()); + properties.insert("ss58Format".into(), 42.into()); + + MainChainSpec::from_genesis( + // Name + "Mainnet Development", + // ID + "main_dev", + ChainType::Development, + move || { + mainnet_genesis( + // initial collators. + 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"), + ), + ], + 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"), + ], + Some(get_account_id_from_seed::("Alice")), + PARA_ID.into(), + ) + }, + Vec::new(), + None, + None, + None, + None, + Extensions { + relay_chain: "rococo-local".into(), // You MUST set this to the correct network! + para_id: PARA_ID, + }, + ) + } + + pub fn local_testnet_config() -> MainChainSpec { + // Give your base currency a unit name and decimal places + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("tokenSymbol".into(), "UNIT".into()); + properties.insert("tokenDecimals".into(), 12.into()); + properties.insert("ss58Format".into(), 42.into()); + + MainChainSpec::from_genesis( + // Name + "Mainnet Local Testnet", + // ID + "main_local_testnet", + ChainType::Local, + move || { + mainnet_genesis( + // initial collators. + 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"), + ), + ], + 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"), + ], + Some(get_account_id_from_seed::("Alice")), + PARA_ID.into(), + ) + }, + // Bootnodes + Vec::new(), + // Telemetry + None, + // Protocol ID + Some("mainnet-local"), + // Fork ID + None, + // Properties + Some(properties), + // Extensions + Extensions { + relay_chain: "rococo-local".into(), // You MUST set this to the correct network! + para_id: PARA_ID, + }, + ) + } + + fn mainnet_genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + root_key: Option, + id: ParaId, + ) -> metaquity_network_mainnet_runtime::RuntimeGenesisConfig { + use metaquity_network_mainnet_runtime::EXISTENTIAL_DEPOSIT; + let alice = get_from_seed::("Alice"); + let bob = get_from_seed::("Bob"); + + metaquity_network_mainnet_runtime::RuntimeGenesisConfig { + system: metaquity_network_mainnet_runtime::SystemConfig { + code: metaquity_network_mainnet_runtime::WASM_BINARY + .expect("WASM binary was not build, please build it!") + .to_vec(), + ..Default::default() + }, + balances: metaquity_network_mainnet_runtime::BalancesConfig { + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + // Configure two assets ALT1 & ALT2 with two owners, alice and bob respectively + assets: metaquity_network_mainnet_runtime::AssetsConfig { + assets: vec![ + (1, alice.into(), true, 100_000_000_000), + (2, bob.into(), true, 100_000_000_000), + ], + // Genesis metadata: Vec<(id, name, symbol, decimals)> + metadata: vec![ + (1, "asset-1".into(), "ALT1".into(), 10), + (2, "asset-2".into(), "ALT2".into(), 10), + ], + // Genesis accounts: Vec<(id, account_id, balance)> + accounts: vec![ + (1, alice.into(), 500_000_000_000), + (2, bob.into(), 500_000_000_000), + ], + }, + parachain_info: metaquity_network_mainnet_runtime::ParachainInfoConfig { + parachain_id: id, + ..Default::default() + }, + collator_selection: metaquity_network_mainnet_runtime::CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond: EXISTENTIAL_DEPOSIT * 16, + ..Default::default() + }, + session: metaquity_network_mainnet_runtime::SessionConfig { + keys: invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + mainnet_session_keys(aura), // session keys + ) + }) + .collect(), + }, + // 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(), + sudo: metaquity_network_mainnet_runtime::SudoConfig { key: root_key }, + council: metaquity_network_mainnet_runtime::CouncilConfig { + phantom: std::marker::PhantomData, + members: endowed_accounts.iter().take(4).cloned().collect(), + }, + parachain_system: Default::default(), + polkadot_xcm: metaquity_network_mainnet_runtime::PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + transaction_payment: Default::default(), + } } } diff --git a/node/src/cli.rs b/node/src/cli.rs index dd61047..880d735 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -1,20 +1,9 @@ -use sc_cli::RunCmd; - -#[derive(Debug, clap::Parser)] -pub struct Cli { - #[command(subcommand)] - pub subcommand: Option, - - #[clap(flatten)] - pub run: RunCmd, -} +use std::path::PathBuf; +/// Sub-commands supported by the collator. #[derive(Debug, clap::Subcommand)] +#[allow(clippy::large_enum_variant)] pub enum Subcommand { - /// Key management cli utilities - #[command(subcommand)] - Key(sc_cli::KeySubcommand), - /// Build a chain specification. BuildSpec(sc_cli::BuildSpecCmd), @@ -30,24 +19,95 @@ pub enum Subcommand { /// Import blocks. ImportBlocks(sc_cli::ImportBlocksCmd), - /// Remove the whole chain. - PurgeChain(sc_cli::PurgeChainCmd), - /// 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. + ExportGenesisState(cumulus_client_cli::ExportGenesisStateCommand), + + /// 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. #[command(subcommand)] Benchmark(frame_benchmarking_cli::BenchmarkCmd), - /// Try some command against runtime state. #[cfg(feature = "try-runtime")] + /// Try some testing command against a specified runtime state. TryRuntime(try_runtime_cli::TryRuntimeCmd), - /// Try some command against runtime state. Note: `try-runtime` feature must be enabled. #[cfg(not(feature = "try-runtime"))] + /// Placeholder when binary is not built with `--feature try-runtime` TryRuntime, +} + +const AFTER_HELP_EXAMPLE: &str = color_print::cstr!( + r#"Examples: + metaquity-network-node build-spec --disable-default-bootnode > plain-parachain-chainspec.json + Export a chainspec for a local testnet in json format. + metaquity-network-node --chain plain-parachain-chainspec.json --tmp -- --chain rococo-local + Launch a full node with chain specification loaded from plain-parachain-chainspec.json. + metaquity-network-node + Launch a full node with default parachain local-testnet and relay chain rococo-local. + metaquity-network-node --collator + Launch a collator with default parachain local-testnet and relay chain rococo-local. + "# +); + +#[derive(Debug, clap::Parser)] +#[command( + propagate_version = true, + args_conflicts_with_subcommands = true, + subcommand_negates_reqs = true +)] +#[clap(after_help = AFTER_HELP_EXAMPLE)] +pub struct Cli { + #[command(subcommand)] + pub subcommand: Option, + + #[command(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. + #[arg(long)] + pub no_hardware_benchmarks: bool, + + /// Relay chain arguments + #[arg(raw = true)] + pub relay_chain_args: Vec, +} + +#[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, +} - /// Db meta columns information. - ChainInfo(sc_cli::ChainInfoCmd), +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 = crate::chain_spec::Extensions::try_get(&*para_config.chain_spec); + let chain_id = extension.map(|e| e.relay_chain.clone()); + let base_path = Some(para_config.base_path.path().join("polkadot")); + Self { base_path, chain_id, base: clap::Parser::parse_from(relay_chain_args) } + } } diff --git a/node/src/command.rs b/node/src/command.rs index e121db8..3f081c7 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -1,21 +1,95 @@ +use std::{net::SocketAddr, path::PathBuf}; + +use codec::Encode; +use cumulus_client_cli::generate_genesis_block; +use cumulus_primitives_core::ParaId; +use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; +use log::{info, warn}; +use metaquity_network_runtime_common::Block; +use sc_cli::{ + ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, + NetworkParams, Result, SharedParams, SubstrateCli, +}; +use sc_service::config::{BasePath, PrometheusConfig}; +use sp_core::hexdisplay::HexDisplay; +use sp_runtime::traits::{AccountIdConversion, Block as BlockT}; + use crate::{ - benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferKeepAliveBuilder}, chain_spec, - cli::{Cli, Subcommand}, - service, + cli::{Cli, RelayChainCli, Subcommand}, + service::{new_partial, DevnetRuntimeExecutor, MainnetRuntimeExecutor}, }; -use frame_benchmarking_cli::{BenchmarkCmd, ExtrinsicFactory, SUBSTRATE_REFERENCE_HARDWARE}; -use node_template_runtime::{Block, EXISTENTIAL_DEPOSIT}; -use sc_cli::{ChainSpec, RuntimeVersion, SubstrateCli}; -use sc_service::PartialComponents; -use sp_keyring::Sr25519Keyring; -#[cfg(feature = "try-runtime")] -use try_runtime_cli::block_building_info::timestamp_with_aura_info; +/// Helper enum that is used for better distinction of different parachain/runtime configuration +/// (it is based/calculated on ChainSpec's 'chain_spec' attribute) +#[derive(Debug, PartialEq, Default)] +enum Runtime { + /// This is the default runtime (actually based on rococo) + #[default] + Default, + Devnet, + Mainnet, +} + +trait RuntimeResolver { + fn runtime(&self) -> Runtime; +} +/// Private helper that pattern matches on the input (which is expected to be a ChainSpec ID) +/// and returns the Runtime accordingly. +fn runtime(id: &str) -> Runtime { + if id.starts_with("dev") { + Runtime::Devnet + } else if id.starts_with("main") { + Runtime::Mainnet + } else { + log::warn!("No specific runtime was recognized for ChainSpec's Id: '{}', so Runtime::Default will be used", id); + Runtime::default() + } +} +/// Resolve runtime from ChainSpec ID +impl RuntimeResolver for dyn ChainSpec { + fn runtime(&self) -> Runtime { + runtime(self.id()) + } +} +/// Implementation, that can resolve [`Runtime`] from any json configuration file +impl RuntimeResolver for PathBuf { + fn runtime(&self) -> Runtime { + #[derive(Debug, serde::Deserialize)] + struct EmptyChainSpecWithId { + id: String, + } + + let file = std::fs::File::open(self).expect("Failed to open file"); + let reader = std::io::BufReader::new(file); + let chain_spec: EmptyChainSpecWithId = serde_json::from_reader(reader) + .expect("Failed to read 'json' file with ChainSpec configuration"); + + runtime(&chain_spec.id) + } +} + +fn load_spec(id: &str) -> std::result::Result, String> { + Ok(match id { + "dev" => Box::new(chain_spec::devnet::development_config()), + "" | "devnet-local" | "local" => Box::new(chain_spec::devnet::local_testnet_config()), + "main" | "mainnet-dev" => Box::new(chain_spec::mainnet::development_config()), + "mainnet-local" => Box::new(chain_spec::mainnet::local_testnet_config()), + path => { + let path: PathBuf = path.into(); + match path.runtime() { + Runtime::Devnet | Runtime::Default => { + Box::new(chain_spec::DevnetChainSpec::from_json_file(path)?) + }, + Runtime::Mainnet => Box::new(chain_spec::MainChainSpec::from_json_file(path)?), + } + }, + }) +} impl SubstrateCli for Cli { fn impl_name() -> String { - "Substrate Node".into() + "Parachain Collator Template".into() } fn impl_version() -> String { @@ -23,7 +97,13 @@ impl SubstrateCli for Cli { } fn description() -> String { - env!("CARGO_PKG_DESCRIPTION").into() + format!( + "Parachain Collator Template\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\ + {} -- ", + Self::executable_name() + ) } fn author() -> String { @@ -31,186 +111,446 @@ impl SubstrateCli for Cli { } fn support_url() -> String { - "support.anonymous.an".into() + "https://github.com/paritytech/cumulus/issues/new".into() } fn copyright_start_year() -> i32 { - 2017 + 2020 } - fn load_spec(&self, id: &str) -> Result, String> { - Ok(match id { - "dev" => Box::new(chain_spec::development_config()?), - "" | "local" => Box::new(chain_spec::local_testnet_config()?), - path => - Box::new(chain_spec::ChainSpec::from_json_file(std::path::PathBuf::from(path))?), - }) + fn load_spec(&self, id: &str) -> std::result::Result, String> { + load_spec(id) } +} - fn native_runtime_version(_: &Box) -> &'static RuntimeVersion { - &node_template_runtime::VERSION +impl SubstrateCli for RelayChainCli { + fn impl_name() -> String { + "Parachain Collator Template".into() + } + + fn impl_version() -> String { + env!("SUBSTRATE_CLI_IMPL_VERSION").into() + } + + fn description() -> String { + format!( + "Parachain Collator Template\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\ + {} -- ", + Self::executable_name() + ) + } + + 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> { + polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()).load_spec(id) } } -/// Parse and run command line arguments -pub fn run() -> sc_cli::Result<()> { +macro_rules! construct_async_run { + (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ + let runner = $cli.create_runner($cmd)?; + match runner.config().chain_spec.runtime() { + Runtime::Devnet | Runtime::Default => { + runner.async_run(|$config| { + let $components = new_partial::( + &$config, + crate::service::build_import_queue::, + )?; + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + } + Runtime::Mainnet => { + runner.async_run(|$config| { + let $components = new_partial::( + &$config, + crate::service::build_import_queue::, + )?; + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + } + } + }} +} + +macro_rules! construct_benchmark_partials { + ($config:expr, |$partials:ident| $code:expr) => { + match $config.chain_spec.runtime() { + Runtime::Devnet | Runtime::Default => { + let $partials = new_partial::( + &$config, + crate::service::build_import_queue::<_, DevnetRuntimeExecutor>, + )?; + $code + }, + Runtime::Mainnet => { + let $partials = + new_partial::( + &$config, + crate::service::build_import_queue::<_, MainnetRuntimeExecutor>, + )?; + $code + }, + } + }; +} + +/// 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)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let PartialComponents { client, task_manager, import_queue, .. } = - service::new_partial(&config)?; - Ok((cmd.run(client, import_queue), task_manager)) + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.import_queue)) }) }, Some(Subcommand::ExportBlocks(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; - Ok((cmd.run(client, config.database), task_manager)) + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, config.database)) }) }, Some(Subcommand::ExportState(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; - Ok((cmd.run(client, config.chain_spec), task_manager)) + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, config.chain_spec)) }) }, Some(Subcommand::ImportBlocks(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let PartialComponents { client, task_manager, import_queue, .. } = - service::new_partial(&config)?; - Ok((cmd.run(client, import_queue), task_manager)) + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.import_queue)) + }) + }, + Some(Subcommand::Revert(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.backend, None)) }) }, Some(Subcommand::PurgeChain(cmd)) => { let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| cmd.run(config.database)) + + 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)) => { + Some(Subcommand::ExportGenesisState(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; + Ok(async move { cmd.run::(&*spec, &*components.client) }) + }) + }, + Some(Subcommand::ExportGenesisWasm(cmd)) => { let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let PartialComponents { client, task_manager, backend, .. } = - service::new_partial(&config)?; - let aux_revert = Box::new(|client, _, blocks| { - sc_consensus_grandpa::revert(client, blocks)?; - Ok(()) - }); - Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) + 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)?; + // Switch on the concrete benchmark sub-command- + match cmd { + BenchmarkCmd::Pallet(cmd) => { + if cfg!(feature = "runtime-benchmarks") { + runner.sync_run(|config| cmd.run::(config)) + } else { + Err("Benchmarking wasn't enabled when building the node. \ + You can enable it with `--features runtime-benchmarks`." + .into()) + } + }, - runner.sync_run(|config| { - // This switch needs to be in the client, since the client decides - // which sub-commands it wants to support. - match cmd { - BenchmarkCmd::Pallet(cmd) => { - if !cfg!(feature = "runtime-benchmarks") { - return Err( - "Runtime benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into(), - ) - } - - cmd.run::(config) - }, - BenchmarkCmd::Block(cmd) => { - let PartialComponents { client, .. } = service::new_partial(&config)?; - cmd.run(client) - }, - #[cfg(not(feature = "runtime-benchmarks"))] - BenchmarkCmd::Storage(_) => Err( - "Storage benchmarking can be enabled with `--features runtime-benchmarks`." - .into(), - ), - #[cfg(feature = "runtime-benchmarks")] - BenchmarkCmd::Storage(cmd) => { - let PartialComponents { client, backend, .. } = - service::new_partial(&config)?; - let db = backend.expose_db(); - let storage = backend.expose_storage(); - - cmd.run(config, client, db, storage) - }, - BenchmarkCmd::Overhead(cmd) => { - let PartialComponents { client, .. } = service::new_partial(&config)?; - let ext_builder = RemarkBuilder::new(client.clone()); - - cmd.run( - config, - client, - inherent_benchmark_data()?, - Vec::new(), - &ext_builder, - ) - }, - BenchmarkCmd::Extrinsic(cmd) => { - let PartialComponents { client, .. } = service::new_partial(&config)?; - // Register the *Remark* and *TKA* builders. - let ext_factory = ExtrinsicFactory(vec![ - Box::new(RemarkBuilder::new(client.clone())), - Box::new(TransferKeepAliveBuilder::new( - client.clone(), - Sr25519Keyring::Alice.to_account_id(), - EXISTENTIAL_DEPOSIT, - )), - ]); - - cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) - }, - BenchmarkCmd::Machine(cmd) => - cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone()), - } - }) + BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { + construct_benchmark_partials!(config, |partials| cmd.run(partials.client)) + }), + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => Err(sc_cli::Error::Input( + "Compile with --features=runtime-benchmarks \ + to enable storage benchmarks." + .to_string(), + )), + #[cfg(feature = "runtime-benchmarks")] + BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { + construct_benchmark_partials!(config, |partials| { + let db = partials.backend.expose_db(); + let storage = partials.backend.expose_storage(); + + cmd.run(config, partials.client.clone(), db, storage) + }) + }), + BenchmarkCmd::Machine(cmd) => { + runner.sync_run(|config| cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone())) + }, + // NOTE: this allows the Client to leniently implement + // new benchmark commands without requiring a companion MR. + #[allow(unreachable_patterns)] + _ => Err("Benchmarking sub-command unsupported".into()), + } }, #[cfg(feature = "try-runtime")] Some(Subcommand::TryRuntime(cmd)) => { - use crate::service::ExecutorDispatch; + use runtime_common::MILLISECS_PER_BLOCK; use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + use try_runtime_cli::block_building_info::timestamp_with_aura_info; + let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - // we don't need any of the components of new_partial, just a runtime, or a task - // manager to do `async_run`. - 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| sc_cli::Error::Service(sc_service::Error::Prometheus(e)))?; - let info_provider = timestamp_with_aura_info(6000); - - Ok(( - cmd.run::::ExtendHostFunctions, - >, _>(Some(info_provider)), - task_manager, - )) - }) + + type HostFunctionsOf = ExtendedHostFunctions< + sp_io::SubstrateHostFunctions, + ::ExtendHostFunctions, + >; + + // grab the task manager. + let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(runner.config().tokio_handle.clone(), *registry) + .map_err(|e| format!("Error: {:?}", e))?; + + let info_provider = timestamp_with_aura_info(MILLISECS_PER_BLOCK); + + match runner.config().chain_spec.runtime() { + Runtime::Devnet | Runtime::Default => runner.async_run(|_config| { + Ok(( + cmd.run::, _>(Some( + info_provider, + )), + task_manager, + )) + }), + Runtime::Mainnet => runner.async_run(|_config| { + Ok(( + cmd.run::, _>(Some( + info_provider, + )), + task_manager, + )) + }), + } }, #[cfg(not(feature = "try-runtime"))] - Some(Subcommand::TryRuntime) => Err("TryRuntime wasn't enabled when building the node. \ - You can enable it with `--features try-runtime`." + Some(Subcommand::TryRuntime) => Err("Try-runtime was not enabled when building the node. \ + You can enable it with `--features try-runtime`." .into()), - Some(Subcommand::ChainInfo(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| cmd.run::(&config)) - }, None => { - let runner = cli.create_runner(&cli.run)?; + let runner = cli.create_runner(&cli.run.normalize())?; + let collator_options = cli.run.collator_options(); + runner.run_node_until_exit(|config| async move { - service::new_full(config).map_err(sc_cli::Error::Service) + 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)) + })).flatten(); + + let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) + .map(|e| 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 parachain_account = + AccountIdConversion::::into_account_truncating(&id); + + let block: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V1) + .map_err(|e| format!("{:?}", e))?; + let genesis_state = format!("0x{:?}", HexDisplay::from(&block.header().encode())); + + 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!("Parachain Account: {}", parachain_account); + info!("Parachain genesis state: {}", genesis_state); + info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); + + if !collator_options.relay_chain_rpc_urls.is_empty() && !cli.relay_chain_args.is_empty() { + warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); + } + match config.chain_spec.runtime() { + Runtime::Default | Runtime::Devnet => { + // If you want to support a custom SS58 prefix (that isn’t yet registered in the ss58-registry), + // you are required to call this function with your desired prefix [Ss58AddressFormat::custom]. + // This will enable the node to decode ss58 addresses with this prefix. + // This SS58 version/format is also only used by the node and not by the runtime. + sp_core::crypto::set_default_ss58_version(metaquity_network_devnet_runtime::SS58Prefix::get().into()); + crate::service::start_parachain_node:: + (config, polkadot_config, collator_options, id, hwbench) + .await + .map(|r| r.0) + .map_err(Into::into) + + } + Runtime::Mainnet => { + sp_core::crypto::set_default_ss58_version(metaquity_network_mainnet_runtime::SS58Prefix::get().into()); + crate::service::start_parachain_node:: + (config, polkadot_config, collator_options, id, hwbench) + .await + .map(|r| r.0) + .map_err(Into::into) + } + } }) }, } } + +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 rpc_addr(&self, default_listen_port: u16) -> Result> { + self.base.base.rpc_addr(default_listen_port) + } + + 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, + _config: &sc_service::Configuration, + ) -> Result<()> + where + F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), + { + 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_max_connections(&self) -> Result { + self.base.base.rpc_max_connections() + } + + 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 force_authoring(&self) -> Result { + self.base.base.force_authoring() + } + + 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/src/lib.rs b/node/src/lib.rs deleted file mode 100644 index f117b8a..0000000 --- a/node/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod chain_spec; -pub mod rpc; -pub mod service; diff --git a/node/src/main.rs b/node/src/main.rs index 426cbab..ba9f28b 100644 --- a/node/src/main.rs +++ b/node/src/main.rs @@ -1,10 +1,10 @@ -//! Substrate Node Template CLI library. +//! Substrate Parachain Node Template CLI + #![warn(missing_docs)] mod chain_spec; #[macro_use] mod service; -mod benchmarking; mod cli; mod command; mod rpc; diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 981f375..375f6e0 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -7,16 +7,19 @@ use std::sync::Arc; -use jsonrpsee::RpcModule; -use node_template_runtime::{opaque::Block, AccountId, Balance, Index}; +use metaquity_network_runtime_common::{AccountId, Balance, Block, Nonce}; + +use sc_client_api::AuxStore; +pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; use sc_transaction_pool_api::TransactionPool; -use sp_api::ProvideRuntimeApi; +use sp_api::{CallApiAt, ProvideRuntimeApi}; use sp_block_builder::BlockBuilder; use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; -pub use sc_rpc_api::DenyUnsafe; +/// A type representing all RPC extensions. +pub type RpcExtension = jsonrpsee::RpcModule<()>; -/// Full client dependencies. +/// Full client dependencies pub struct FullDeps { /// The client instance to use. pub client: Arc, @@ -26,32 +29,31 @@ pub struct FullDeps { pub deny_unsafe: DenyUnsafe, } -/// Instantiate all full RPC extensions. +/// Instantiate all RPC extensions. pub fn create_full( deps: FullDeps, -) -> Result, Box> +) -> Result> where - C: ProvideRuntimeApi, - C: HeaderBackend + HeaderMetadata + 'static, - C: Send + Sync + 'static, - C::Api: substrate_frame_rpc_system::AccountNonceApi, + C: ProvideRuntimeApi + + HeaderBackend + + AuxStore + + HeaderMetadata + + Send + + Sync + + 'static, + C: CallApiAt, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: BlockBuilder, - P: TransactionPool + 'static, + P: TransactionPool + Sync + Send + 'static, { use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; - let mut module = RpcModule::new(()); + let mut module = RpcExtension::new(()); let FullDeps { client, pool, deny_unsafe } = deps; - module.merge(System::new(client.clone(), pool.clone(), deny_unsafe).into_rpc())?; + module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; - - // Extend this RPC with a custom API by using the following syntax. - // `YourRpcStruct` should have a reference to a client, which is needed - // to call into the runtime. - // `module.merge(YourRpcTrait::into_rpc(YourRpcStruct::new(ReferenceToClient, ...)))?;` - Ok(module) } diff --git a/node/src/service.rs b/node/src/service.rs index ca82700..8d70939 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,62 +1,130 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use node_template_runtime::{self, opaque::Block, RuntimeApi}; -use sc_client_api::BlockBackend; -use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; -use sc_consensus_grandpa::SharedVoterState; -pub use sc_executor::NativeElseWasmExecutor; -use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; -use sc_telemetry::{Telemetry, TelemetryWorker}; -use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; +// std use std::{sync::Arc, time::Duration}; -// Our native executor instance. -pub struct ExecutorDispatch; +// Cumulus Imports +use cumulus_client_cli::CollatorOptions; +use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, SlotProportion}; +use cumulus_client_consensus_common::{ + ParachainBlockImport as TParachainBlockImport, ParachainConsensus, +}; +use cumulus_client_service::{ + build_network, build_relay_chain_interface, prepare_node_config, start_collator, + start_full_node, BuildNetworkParams, StartCollatorParams, StartFullNodeParams, +}; +use cumulus_primitives_core::ParaId; +use cumulus_relay_chain_interface::RelayChainInterface; + +// Substrate Imports +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; +use sc_client_api::Backend; +use sc_consensus::ImportQueue; +use sc_executor::{ + HeapAllocStrategy, NativeElseWasmExecutor, NativeExecutionDispatch, WasmExecutor, + DEFAULT_HEAP_ALLOC_STRATEGY, +}; +use sc_network::NetworkBlock; +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_api::ConstructRuntimeApi; +use sp_core::Pair; +use sp_keystore::KeystorePtr; +use sp_runtime::{app_crypto::AppCrypto, traits::BlakeTwo256}; +use substrate_prometheus_endpoint::Registry; + +// Local Runtime types +use metaquity_network_runtime_common::{AccountId, AuraId, Balance, Block, Nonce}; + +/// Devnet Native executor type. +pub struct DevnetRuntimeExecutor; + +impl NativeExecutionDispatch for DevnetRuntimeExecutor { + type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + + fn dispatch(method: &str, data: &[u8]) -> Option> { + metaquity_network_devnet_runtime::api::dispatch(method, data) + } + + fn native_version() -> sc_executor::NativeVersion { + metaquity_network_devnet_runtime::native_version() + } +} + +/// Mainnet Native executor type. +pub struct MainnetRuntimeExecutor; -impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { - /// Only enable the benchmarking host functions when we actually want to benchmark. - #[cfg(feature = "runtime-benchmarks")] +impl NativeExecutionDispatch for MainnetRuntimeExecutor { type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - /// Otherwise we only use the default Substrate host functions. - #[cfg(not(feature = "runtime-benchmarks"))] - type ExtendHostFunctions = (); fn dispatch(method: &str, data: &[u8]) -> Option> { - node_template_runtime::api::dispatch(method, data) + metaquity_network_mainnet_runtime::api::dispatch(method, data) } fn native_version() -> sc_executor::NativeVersion { - node_template_runtime::native_version() + metaquity_network_mainnet_runtime::native_version() } } -pub(crate) type FullClient = - sc_service::TFullClient>; -type FullBackend = sc_service::TFullBackend; -type FullSelectChain = sc_consensus::LongestChain; +type ParachainExecutor = NativeElseWasmExecutor; + +type ParachainClient = + TFullClient>; + +type ParachainBackend = TFullBackend; + +type ParachainBlockImport = + TParachainBlockImport>, ParachainBackend>; -pub fn new_partial( +/// 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(clippy::type_complexity)] +pub fn new_partial( config: &Configuration, + build_import_queue: BIQ, ) -> Result< - sc_service::PartialComponents< - FullClient, - FullBackend, - FullSelectChain, - sc_consensus::DefaultImportQueue, - sc_transaction_pool::FullPool, + PartialComponents< + ParachainClient, + ParachainBackend, + (), + sc_consensus::DefaultImportQueue>, + sc_transaction_pool::FullPool>, ( - sc_consensus_grandpa::GrandpaBlockImport< - FullBackend, - Block, - FullClient, - FullSelectChain, - >, - sc_consensus_grandpa::LinkHalf, + ParachainBlockImport, Option, + Option, ), >, - ServiceError, -> { + sc_service::Error, +> +where + RuntimeApi: + ConstructRuntimeApi> + Send + Sync + 'static, + RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_api::Metadata + + sp_session::SessionKeys + + sp_api::ApiExt< + Block, + StateBackend = sc_client_api::StateBackendFor, Block>, + > + sp_offchain::OffchainWorkerApi + + sp_block_builder::BlockBuilder, + sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + Executor: NativeExecutionDispatch + 'static, + BIQ: FnOnce( + Arc>, + ParachainBlockImport, + &Configuration, + Option, + &TaskManager, + ) -> Result< + sc_consensus::DefaultImportQueue>, + sc_service::Error, + >, +{ let telemetry = config .telemetry_endpoints .clone() @@ -68,7 +136,19 @@ pub fn new_partial( }) .transpose()?; - let executor = sc_service::new_native_or_wasm_executor(&config); + let heap_pages = config + .default_heap_pages + .map_or(DEFAULT_HEAP_ALLOC_STRATEGY, |h| HeapAllocStrategy::Static { extra_pages: h as _ }); + + let wasm = WasmExecutor::builder() + .with_execution_method(config.wasm_method) + .with_onchain_heap_alloc_strategy(heap_pages) + .with_offchain_heap_alloc_strategy(heap_pages) + .with_max_runtime_instances(config.max_runtime_instances) + .with_runtime_cache_size(config.runtime_cache_size) + .build(); + + let executor = NativeElseWasmExecutor::::new_with_wasm_executor(wasm); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( @@ -78,13 +158,13 @@ pub fn new_partial( )?; 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 select_chain = sc_consensus::LongestChain::new(backend.clone()); - let transaction_pool = sc_transaction_pool::BasicPool::new_full( config.transaction_pool.clone(), config.role.is_authority().into(), @@ -93,224 +173,444 @@ pub fn new_partial( client.clone(), ); - let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import( + let block_import = + ParachainBlockImport::::new(client.clone(), backend.clone()); + + let import_queue = build_import_queue( client.clone(), - &(client.clone() as Arc<_>), - select_chain.clone(), - telemetry.as_ref().map(|x| x.handle()), + block_import.clone(), + config, + telemetry.as_ref().map(|telemetry| telemetry.handle()), + &task_manager, )?; - let slot_duration = sc_consensus_aura::slot_duration(&*client)?; - - let import_queue = - sc_consensus_aura::import_queue::(ImportQueueParams { - block_import: grandpa_block_import.clone(), - justification_import: Some(Box::new(grandpa_block_import.clone())), - client: client.clone(), - create_inherent_data_providers: move |_, ()| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - - let slot = - sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); - - Ok((slot, timestamp)) - }, - spawner: &task_manager.spawn_essential_handle(), - registry: config.prometheus_registry(), - check_for_equivocation: Default::default(), - telemetry: telemetry.as_ref().map(|x| x.handle()), - compatibility_mode: Default::default(), - })?; - - Ok(sc_service::PartialComponents { - client, + Ok(PartialComponents { backend, - task_manager, + client, import_queue, keystore_container, - select_chain, + task_manager, transaction_pool, - other: (grandpa_block_import, grandpa_link, telemetry), + select_chain: (), + other: (block_import, telemetry, telemetry_worker_handle), }) } -/// Builds a new service for a full client. -pub fn new_full(config: Configuration) -> Result { - let sc_service::PartialComponents { - client, - backend, - mut task_manager, - import_queue, - keystore_container, - select_chain, - transaction_pool, - other: (block_import, grandpa_link, mut telemetry), - } = new_partial(&config)?; - - let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); - - let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( - &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), - &config.chain_spec, - ); - net_config.add_notification_protocol(sc_consensus_grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); - - let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( - backend.clone(), - grandpa_link.shared_authority_set().clone(), - Vec::default(), - )); - - let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = - sc_service::build_network(sc_service::BuildNetworkParams { - config: &config, +/// 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. +#[sc_tracing::logging::prefix_logs_with("Parachain")] +#[allow(clippy::too_many_arguments)] +async fn start_node_impl( + parachain_config: Configuration, + polkadot_config: Configuration, + collator_options: CollatorOptions, + para_id: ParaId, + build_import_queue: BIQ, + build_consensus: BIC, + hwbench: Option, +) -> sc_service::error::Result<(TaskManager, Arc>)> +where + RuntimeApi: + ConstructRuntimeApi> + Send + Sync + 'static, + + RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_api::Metadata + + sp_session::SessionKeys + + sp_api::ApiExt< + Block, + StateBackend = sc_client_api::StateBackendFor, Block>, + > + sp_offchain::OffchainWorkerApi + + sp_block_builder::BlockBuilder + + cumulus_primitives_core::CollectCollationInfo + + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + + substrate_frame_rpc_system::AccountNonceApi, + + sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + Executor: NativeExecutionDispatch + 'static, + + BIQ: FnOnce( + Arc>, + ParachainBlockImport, + &Configuration, + Option, + &TaskManager, + ) -> Result< + sc_consensus::DefaultImportQueue>, + sc_service::Error, + > + 'static, + BIC: FnOnce( + Arc>, + ParachainBlockImport, + Option<&Registry>, + Option, + &TaskManager, + Arc, + Arc>>, + Arc>, + KeystorePtr, + bool, + ParaId, + ) -> Result>, sc_service::Error>, +{ + let parachain_config = prepare_node_config(parachain_config); + + let params = new_partial::(¶chain_config, build_import_queue)?; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; + let net_config = sc_network::config::FullNetworkConfiguration::new(¶chain_config.network); + + 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 force_authoring = parachain_config.force_authoring; + 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(); + + let (network, system_rpc_tx, tx_handler_controller, start_network, 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(), - import_queue, - block_announce_validator_builder: None, - warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), - })?; - - if config.offchain_worker.enabled { - sc_service::build_offchain_workers( - &config, - task_manager.spawn_handle(), - client.clone(), - network.clone(), + relay_chain_interface: relay_chain_interface.clone(), + import_queue: params.import_queue, + }) + .await?; + + if parachain_config.offchain_worker.enabled { + use futures::FutureExt; + + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-work", + sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: client.clone(), + keystore: Some(params.keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new( + transaction_pool.clone(), + )), + network_provider: network.clone(), + is_validator: parachain_config.role.is_authority(), + enable_http_requests: false, + custom_extensions: move |_| vec![], + }) + .run(client.clone(), task_manager.spawn_handle()) + .boxed(), ); } - let role = config.role.clone(); - let force_authoring = config.force_authoring; - let backoff_authoring_blocks: Option<()> = None; - let name = config.network.node_name.clone(); - let enable_grandpa = !config.disable_grandpa; - let prometheus_registry = config.prometheus_registry().cloned(); - - let rpc_extensions_builder = { + let rpc_builder = { let client = client.clone(); - let pool = transaction_pool.clone(); + let transaction_pool = transaction_pool.clone(); Box::new(move |deny_unsafe, _| { - let deps = - crate::rpc::FullDeps { client: client.clone(), pool: pool.clone(), deny_unsafe }; + let deps = crate::rpc::FullDeps { + client: client.clone(), + pool: transaction_pool.clone(), + deny_unsafe, + }; + crate::rpc::create_full(deps).map_err(Into::into) }) }; - let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { - network: network.clone(), + sc_service::spawn_tasks(sc_service::SpawnTasksParams { + rpc_builder, client: client.clone(), - keystore: keystore_container.keystore(), - task_manager: &mut task_manager, transaction_pool: transaction_pool.clone(), - rpc_builder: rpc_extensions_builder, + task_manager: &mut task_manager, + config: parachain_config, + keystore: params.keystore_container.keystore(), backend, + network: network.clone(), + sync_service: sync_service.clone(), system_rpc_tx, tx_handler_controller, - sync_service: sync_service.clone(), - config, telemetry: telemetry.as_mut(), })?; - if role.is_authority() { - let proposer_factory = sc_basic_authorship::ProposerFactory::new( - task_manager.spawn_handle(), - client.clone(), - transaction_pool, - prometheus_registry.as_ref(), - telemetry.as_ref().map(|x| x.handle()), - ); + if let Some(hwbench) = hwbench { + sc_sysinfo::print_hwbench(&hwbench); + // 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 !SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) && validator { + 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 slot_duration = sc_consensus_aura::slot_duration(&*client)?; + let announce_block = { + let sync_service = sync_service.clone(); + Arc::new(move |hash, data| sync_service.announce_block(hash, data)) + }; - let aura = sc_consensus_aura::start_aura::( - StartAuraParams { - slot_duration, - client, - select_chain, - block_import, - proposer_factory, - create_inherent_data_providers: move |_, ()| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + let relay_chain_slot_duration = Duration::from_secs(6); - let slot = - sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); + let overseer_handle = relay_chain_interface + .overseer_handle() + .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - Ok((slot, timestamp)) - }, - force_authoring, - backoff_authoring_blocks, - keystore: keystore_container.keystore(), - sync_oracle: sync_service.clone(), - justification_sync_link: sync_service.clone(), - block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), - max_block_proposal_slot_portion: None, - telemetry: telemetry.as_ref().map(|x| x.handle()), - compatibility_mode: Default::default(), - }, + if validator { + let parachain_consensus = build_consensus( + client.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(), + force_authoring, + para_id, )?; - // the AURA authoring task is considered essential, i.e. if it - // fails we take down the service with it. - task_manager - .spawn_essential_handle() - .spawn_blocking("aura", Some("block-authoring"), aura); - } - - if enable_grandpa { - // if the node isn't actively participating in consensus then it doesn't - // need a keystore, regardless of which protocol we use below. - let keystore = if role.is_authority() { Some(keystore_container.keystore()) } else { None }; - - let grandpa_config = sc_consensus_grandpa::Config { - // FIXME #1578 make this available through chainspec - gossip_duration: Duration::from_millis(333), - justification_period: 512, - name: Some(name), - observer_enabled: false, - keystore, - local_role: role, - telemetry: telemetry.as_ref().map(|x| x.handle()), - protocol_name: grandpa_protocol_name, + let spawner = task_manager.spawn_handle(); + let params = StartCollatorParams { + para_id, + block_status: client.clone(), + announce_block, + client: client.clone(), + task_manager: &mut task_manager, + relay_chain_interface, + spawner, + parachain_consensus, + import_queue: import_queue_service, + collator_key: collator_key.expect("Command line arguments do not allow this. qed"), + relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle), + sync_service, }; - // start the full GRANDPA voter - // NOTE: non-authorities could run the GRANDPA observer protocol, but at - // this point the full voter should provide better guarantees of block - // and vote data availability than the observer. The observer has not - // been tested extensively yet and having most nodes in a network run it - // could lead to finality stalls. - let grandpa_config = sc_consensus_grandpa::GrandpaParams { - config: grandpa_config, - link: grandpa_link, - network, - sync: Arc::new(sync_service), - voting_rule: sc_consensus_grandpa::VotingRulesBuilder::default().build(), - prometheus_registry, - shared_voter_state: SharedVoterState::empty(), - telemetry: telemetry.as_ref().map(|x| x.handle()), + start_collator(params).await?; + } else { + let params = StartFullNodeParams { + client: client.clone(), + announce_block, + task_manager: &mut task_manager, + para_id, + relay_chain_interface, + relay_chain_slot_duration, + import_queue: import_queue_service, + recovery_handle: Box::new(overseer_handle), + sync_service, }; - // the GRANDPA voter task is considered infallible, i.e. - // if it fails we take down the service with it. - task_manager.spawn_essential_handle().spawn_blocking( - "grandpa-voter", - None, - sc_consensus_grandpa::run_grandpa_voter(grandpa_config)?, - ); + start_full_node(params)?; } - network_starter.start_network(); - Ok(task_manager) + start_network.start_network(); + + Ok((task_manager, client)) +} + +/// Build the import queue for the parachain runtime. +#[allow(clippy::type_complexity)] +pub(crate) fn build_import_queue( + client: Arc>, + block_import: ParachainBlockImport, + config: &Configuration, + telemetry: Option, + task_manager: &TaskManager, +) -> Result< + sc_consensus::DefaultImportQueue>, + sc_service::Error, +> +where + RuntimeApi: + ConstructRuntimeApi> + Send + Sync + 'static, + RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_api::Metadata + + sp_session::SessionKeys + + sp_api::ApiExt< + Block, + StateBackend = sc_client_api::StateBackendFor, Block>, + > + sp_offchain::OffchainWorkerApi + + sp_block_builder::BlockBuilder + + sp_consensus_aura::AuraApi::Pair as Pair>::Public> + + substrate_frame_rpc_system::AccountNonceApi, +{ + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; + + cumulus_client_consensus_aura::import_queue::< + sp_consensus_aura::sr25519::AuthorityPair, + _, + _, + _, + _, + _, + >(cumulus_client_consensus_aura::ImportQueueParams { + block_import, + client, + create_inherent_data_providers: move |_, _| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = + sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); + + Ok((slot, timestamp)) + }, + registry: config.prometheus_registry(), + spawner: &task_manager.spawn_essential_handle(), + telemetry, + }) + .map_err(Into::into) +} + +#[allow(clippy::too_many_arguments)] + +fn build_consensus( + client: Arc>, + block_import: ParachainBlockImport, + prometheus_registry: Option<&Registry>, + telemetry: Option, + task_manager: &TaskManager, + relay_chain_interface: Arc, + transaction_pool: Arc< + sc_transaction_pool::FullPool>, + >, + sync_oracle: Arc>, + keystore: KeystorePtr, + force_authoring: bool, + para_id: ParaId, +) -> Result>, sc_service::Error> +where + RuntimeApi: + ConstructRuntimeApi> + Send + Sync + 'static, + RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_api::Metadata + + sp_session::SessionKeys + + sp_api::ApiExt< + Block, + StateBackend = sc_client_api::StateBackendFor, Block>, + > + sp_offchain::OffchainWorkerApi + + sp_block_builder::BlockBuilder + + sp_consensus_aura::AuraApi::Pair as Pair>::Public> + + cumulus_primitives_core::CollectCollationInfo + + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + + substrate_frame_rpc_system::AccountNonceApi, + Executor: NativeExecutionDispatch + 'static, +{ + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; + + let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( + task_manager.spawn_handle(), + client.clone(), + transaction_pool, + prometheus_registry, + telemetry.clone(), + ); + + let params = BuildAuraConsensusParams { + proposer_factory, + create_inherent_data_providers: move |_, (relay_parent, validation_data)| { + let relay_chain_interface = relay_chain_interface.clone(); + async move { + let parachain_inherent = + cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( + relay_parent, + &relay_chain_interface, + &validation_data, + para_id, + ) + .await; + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = + sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); + + let parachain_inherent = parachain_inherent.ok_or_else(|| { + Box::::from( + "Failed to create parachain inherent", + ) + })?; + Ok((slot, timestamp, parachain_inherent)) + } + }, + block_import, + para_client: client, + backoff_authoring_blocks: Option::<()>::None, + sync_oracle, + keystore, + force_authoring, + slot_duration, + // We got around 500ms for proposing + block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32), + // And a maximum of 750ms if slots are skipped + max_block_proposal_slot_portion: Some(SlotProportion::new(1f32 / 16f32)), + telemetry, + }; + + Ok(AuraConsensus::build::(params)) +} + +/// Start a parachain node. +pub async fn start_parachain_node( + parachain_config: Configuration, + polkadot_config: Configuration, + collator_options: CollatorOptions, + para_id: ParaId, + hwbench: Option, +) -> sc_service::error::Result<(TaskManager, Arc>)> +where + Executor: NativeExecutionDispatch + 'static, + RuntimeApi: + ConstructRuntimeApi> + Send + Sync + 'static, + RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_api::Metadata + + sp_session::SessionKeys + + sp_api::ApiExt< + Block, + StateBackend = sc_client_api::StateBackendFor, Block>, + > + sp_offchain::OffchainWorkerApi + + sp_block_builder::BlockBuilder + + cumulus_primitives_core::CollectCollationInfo + + sp_consensus_aura::AuraApi::Pair as Pair>::Public> + + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + + substrate_frame_rpc_system::AccountNonceApi, +{ + start_node_impl::( + parachain_config, + polkadot_config, + collator_options, + para_id, + build_import_queue::, + build_consensus::, + hwbench, + ) + .await } diff --git a/pallets/template/Cargo.toml b/pallets/template/Cargo.toml deleted file mode 100644 index 5680ce5..0000000 --- a/pallets/template/Cargo.toml +++ /dev/null @@ -1,43 +0,0 @@ -[package] -name = "pallet-template" -version = "4.0.0-dev" -description = "FRAME pallet template for defining custom runtime logic." -authors = ["Substrate DevHub "] -homepage = "https://substrate.io" -edition = "2021" -license = "Unlicense" -publish = false -repository = "https://github.com/substrate-developer-hub/substrate-node-template/" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = [ - "derive", -] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.43"} -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} - -[dev-dependencies] -sp-core = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-io = { version = "7.0.0",default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } - -[features] -default = ["std"] -std = [ - "codec/std", - "frame-benchmarking?/std", - "frame-support/std", - "frame-system/std", - "scale-info/std", -] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks" - ] -try-runtime = [ - "frame-support/try-runtime" - ] diff --git a/pallets/template/README.md b/pallets/template/README.md deleted file mode 100644 index 8d751a4..0000000 --- a/pallets/template/README.md +++ /dev/null @@ -1 +0,0 @@ -License: Unlicense \ No newline at end of file diff --git a/pallets/template/src/benchmarking.rs b/pallets/template/src/benchmarking.rs deleted file mode 100644 index 1790849..0000000 --- a/pallets/template/src/benchmarking.rs +++ /dev/null @@ -1,20 +0,0 @@ -//! Benchmarking setup for pallet-template - -use super::*; - -#[allow(unused)] -use crate::Pallet as Template; -use frame_benchmarking::v1::{benchmarks, whitelisted_caller}; -use frame_system::RawOrigin; - -benchmarks! { - do_something { - let s in 0 .. 100; - let caller: T::AccountId = whitelisted_caller(); - }: _(RawOrigin::Signed(caller), s) - verify { - assert_eq!(Something::::get(), Some(s)); - } - - impl_benchmark_test_suite!(Template, crate::mock::new_test_ext(), crate::mock::Test); -} diff --git a/pallets/template/src/lib.rs b/pallets/template/src/lib.rs deleted file mode 100644 index 9f17623..0000000 --- a/pallets/template/src/lib.rs +++ /dev/null @@ -1,103 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] - -/// Edit this file to define custom logic or remove it if it is not needed. -/// Learn more about FRAME and the core library of Substrate FRAME pallets: -/// -pub use pallet::*; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -#[frame_support::pallet] -pub mod pallet { - use frame_support::pallet_prelude::*; - use frame_system::pallet_prelude::*; - - #[pallet::pallet] - pub struct Pallet(_); - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// Because this pallet emits events, it depends on the runtime's definition of an event. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - } - - // The pallet's runtime storage items. - // https://docs.substrate.io/main-docs/build/runtime-storage/ - #[pallet::storage] - #[pallet::getter(fn something)] - // Learn more about declaring storage items: - // https://docs.substrate.io/main-docs/build/runtime-storage/#declaring-storage-items - pub type Something = StorageValue<_, u32>; - - // Pallets use events to inform users when important changes are made. - // https://docs.substrate.io/main-docs/build/events-errors/ - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Event documentation should end with an array that provides descriptive names for event - /// parameters. [something, who] - SomethingStored { something: u32, who: T::AccountId }, - } - - // Errors inform users that something went wrong. - #[pallet::error] - pub enum Error { - /// Error names should be descriptive. - NoneValue, - /// Errors should have helpful documentation associated with them. - StorageOverflow, - } - - // Dispatchable functions allows users to interact with the pallet and invoke state changes. - // These functions materialize as "extrinsics", which are often compared to transactions. - // Dispatchable functions must be annotated with a weight and must return a DispatchResult. - #[pallet::call] - impl Pallet { - /// An example dispatchable that takes a singles value as a parameter, writes the value to - /// storage and emits an event. This function must be dispatched by a signed extrinsic. - #[pallet::call_index(0)] - #[pallet::weight(10_000 + T::DbWeight::get().writes(1).ref_time())] - pub fn do_something(origin: OriginFor, something: u32) -> DispatchResult { - // Check that the extrinsic was signed and get the signer. - // This function will return an error if the extrinsic is not signed. - // https://docs.substrate.io/main-docs/build/origins/ - let who = ensure_signed(origin)?; - - // Update storage. - >::put(something); - - // Emit an event. - Self::deposit_event(Event::SomethingStored { something, who }); - // Return a successful DispatchResultWithPostInfo - Ok(()) - } - - /// An example dispatchable that may throw a custom error. - #[pallet::call_index(1)] - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1).ref_time())] - pub fn cause_error(origin: OriginFor) -> DispatchResult { - let _who = ensure_signed(origin)?; - - // Read a value from storage. - match >::get() { - // Return an error if the value has not been set. - None => return Err(Error::::NoneValue.into()), - Some(old) => { - // Increment the value read from storage; will error in the event of overflow. - let new = old.checked_add(1).ok_or(Error::::StorageOverflow)?; - // Update the value in storage with the incremented result. - >::put(new); - Ok(()) - }, - } - } - } -} diff --git a/pallets/template/src/mock.rs b/pallets/template/src/mock.rs deleted file mode 100644 index 91a1bf6..0000000 --- a/pallets/template/src/mock.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate as pallet_template; -use frame_support::traits::{ConstU16, ConstU64}; -use sp_core::H256; -use sp_runtime::{ - testing::Header, - traits::{BlakeTwo256, IdentityLookup}, -}; - -type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { - System: frame_system, - TemplateModule: pallet_template, - } -); - -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 Index = u64; - type BlockNumber = u64; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type Header = Header; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<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>; -} - -impl pallet_template::Config for Test { - type RuntimeEvent = RuntimeEvent; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - frame_system::GenesisConfig::default().build_storage::().unwrap().into() -} diff --git a/pallets/template/src/tests.rs b/pallets/template/src/tests.rs deleted file mode 100644 index 7c2b853..0000000 --- a/pallets/template/src/tests.rs +++ /dev/null @@ -1,27 +0,0 @@ -use crate::{mock::*, Error, Event}; -use frame_support::{assert_noop, assert_ok}; - -#[test] -fn it_works_for_default_value() { - new_test_ext().execute_with(|| { - // Go past genesis block so events get deposited - System::set_block_number(1); - // Dispatch a signed extrinsic. - assert_ok!(TemplateModule::do_something(RuntimeOrigin::signed(1), 42)); - // Read pallet storage and assert an expected result. - assert_eq!(TemplateModule::something(), Some(42)); - // Assert that the correct event was deposited - System::assert_last_event(Event::SomethingStored { something: 42, who: 1 }.into()); - }); -} - -#[test] -fn correct_error_for_none_value() { - new_test_ext().execute_with(|| { - // Ensure the expected error is thrown when no value is present. - assert_noop!( - TemplateModule::cause_error(RuntimeOrigin::signed(1)), - Error::::NoneValue - ); - }); -} diff --git a/plain-parachain-chainspec.json b/plain-parachain-chainspec.json new file mode 100644 index 0000000..e102c2b --- /dev/null +++ b/plain-parachain-chainspec.json @@ -0,0 +1,194 @@ +{ + "name": "Development Local Testnet", + "id": "dev_local_testnet", + "chainType": "Local", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": "devnet-local", + "properties": { + "ss58Format": 42, + "tokenDecimals": 12, + "tokenSymbol": "UNIT" + }, + "relay_chain": "rococo-local", + "para_id": 2000, + "codeSubstitutes": {}, + "genesis": { + "runtime": { + "system": { + "code": "0x52bc537646db8e0528b52ffd00586c0c05de0d06fd125210500a291d0428697c1fd07cf2b9f113be21b97ab0a3c049296549587faaa637d6de8b474491a71f55f6b8eff5d85af07bfd6ad0bb5f43509cc9a5c465c0f66c53536b11fd31c892b6f7de5bee2da54c29054b14e6110a1290e79c5295c37ec5c91962fb6d9d40cbebfcd8160afdfc600b1618718422dcc841b43ea1d01216355cb4741062085bcc20625f9f1ac4c55671ec16e291ebabfe97cf95a8d8aaaf2ac167d7dcebd5e6d0757a856d58967d3573cd336cf60a73e85caf3287be61947fcb5ac5397747521f5bc57d9573cd31bacf5125f8996fdccb3007a3fb1bddd732ead3ab5da0fae3d9a1a7aaf7fcd5cba543df20f345f717c03ea9927c9dadb9edaeafd2f0972fad13762b515bec164371adf25641c7fc47abb06f082e8db4f223719c3871e27c5dfaf58b2ac15f673a5bd5ce5dd17ef2f35ad5eefdf0e9d57eaa57fed0555b043e747f8da50bd602deb67608f3ccf2f5a9ccfaf64d884ef18ea0ef57667dffb676e0e1f9d9bb53c2acdfaf32eba16fdb15455f4a25fe7aa449bc5f87b42e3df4dd22357a4f12ede38774faf54df3415f37ced75fca4878ecfcdb0758e70ec991bc87df0f66ddc05df03a0878d1a5cf1360f9764e0749755ac535f5ecdbb9f09195b6ed6d7bdb965b823cdb36f1b6a5439697bf2d2c607e511bf4f5a9cbf4ed1ba439306ddb76f1ab4b1f1dd2ca0fbd749047a457d5fb751f8c654b73b02b2a410d0a2202859cc562b188da87a09013b523e9150b5b04fee907962c3fa4573d168d47e2385f99fc764676cdaf6f908b585891936f247775456d30ee52a1859668cd162f96729b849cf5d316d96f17087afb108c5f6cd596c0ab41434da4f5ed4165be1d855e31bf0abf4cb28c2338c6106c441e549d3656e26dd780a58ff15b625e210ac8802570cb6e7b73ebddb1b0f447fb2159f9f5dacefb6dab768a1c8ef86de57025e2a0e6e3b671ec5858fabaf4bcc1ae48367749a7f108ffe53d46f82fbfbed92af67d7649f9d7277e475e1fb111b11fb157e8cdf4f381798d6cab84fbf8dba9bfd92ae8d0a3bc8eb4f7aac7483b7478397bec55957e043dfa75f9ec555fdc0ff5502f31b3996d9578db2987c8c2d2f3375b153dfa761af2a0b72359f988c41fbf0e6cdbf0049b7e59bc08a16fcc45a36d7bb52d1c9af8c9d16dfb8632378481d0217408611c0f2184d00726a9b9d2ba72e5bd57edd57d4cc004bfbd725fbd892af720308196df960d6c5e00bf2d1bc6fc765a9fd8aba5afedec4a8ef8eb51129f3d3e3b0d2c168bf51da36f97a4d2f0d1e38774c4be5fb167f7ae6ceb5383be4ef8b341dee5fc3278dbb201cc6fcb06d61be0b755039aefae08025ef53c8feb557bfbf66afae5edb3bba2795dbe31c7bf7177f9765125462a8aad8a9ec4fbcbb943b27ff97645dbaaca3dcbaf2ebd9cd387e0a4357e8dae041ff3ed8aa40ff5b66d07bf5ae5a14f5afda75fb46eab68f8e9755b55a5fcf47af9b6aacef0d38720a4d88754e5a15f747fd2fae3a36fcc6174ffa2fbdbb5101f4a8a041f7aa4db2afe62ab308666b6d92e21bdbe293fd32a8267df96bb732a099e2165df2e897cfea6fb4bcd4bb6cd001926deb66a08f3aa5e55d5b7b70f69d5d0e5fbdbb78598a8fef8f6ed9050a1c402ed0f3517c4496c6b82b7ce19f0b6c5627a8fcbafcf5e6d8b65e6d7b95eb1d012559ddf056c5b008f7d7db36d7bc5cbbfbe9db657db5ee7afc75eb1af6fcc83848a300bb4bff176bd2824536069d53e8c0e9d1d7645fc2da3904ca1a555fbed906e9063cadf5dfb76f11beaed8a869a3b1696be879a83b0ed773b777fbbc49c6463670a01afc5627d8ddf1e7bb5de3ed9e78442db3fd57bf6eafd5266192074666e863ed40ca1b74787104276c8dd3ebfbf1e25edd19b93b0f757db613373b1ad4ff56fdf9600deb641deb6aace6f87dc19a181c562d5f0d0b7e6b657ecbdda56b50f35a4b155ed2778ecd1db379d5eedb76fcc79bd6ad7e9157f7baa57d0dbb72b823ed4431d2915213f65693efb7cfe7a94b047678f9f123ffcb65535fefa7645fc557e769ffe8efc978425c88c66db5f9fea7dfb367b5579be2c1e7be5be37488778ecd0d7b76b81fd087eb355eb91693fb74592b8f554ae8ebd7d6b6eb7087b85bead5a9fbdaafcd0d7374867abd605e0415fdfee486cd53afc66abd6877a6b8e697c6e8b24b19b47c29e8a8e676fefb64812b31e69014f857bf6f69c2d92c4ac475ac053b99ebdfdb4459298f5480b78f6f60d724ce1775b2489598fb480a7723d7b3bb74592b8e9a970cfde9eb3459298f5480b78f6f6ed5a882cd6b30f3577493cd6b373bdda6fdf2e09b39e7da8877aa8877ae9b66a7d7dfa3bf27e49586a6e34b6ed6d7b5b0378eceb9bd11ff0145adc685f0ddf0ddf153a04ea0615027df3d94089f09980de80aaa167a811d48b43e16784b428110e87cf41b150163501e5427fa045d01aa80df40abdc1817022b81b17820f810ee1407026ca02bf81db8002e163bce55b380e1c8d77e15cb816de03ba02da836b712a9c8cf3e05378142e85e3e042781ccec5c1f01b840441881542aa104286902ce81621641c0542a810b24648190f821029a80aa810b40bf5810621040bbf22640caa454893e74051407510320421401042045fc36920a40c213fa03cb819cfc27520448daf713642ccf01d380fbc0d4d813be157b81afe84b3e168b819417410048d2058042913e48a205304b122880c82cc20080d822411840b102200b1019034405e00440b2064806401c40c902980e000881540ce00b901102c8094017205902a804801a405840a206280c800c80c802c01e40b1030786200e409205e00d90208173c5a785e00a40640c0007182070c4f1c9e261e3478cee03183670d4f193c64f08cc1a386270d8f183c39e06983c7073c3de0e101cf1b1e22f0b0e1d1018f1a3c42e019428f097a6ce8a9a187c5d386870d9e1df0acc133078f1c3c71f01c81070e9e3778e0f01881c70d9e3478b4e021c393054f0d78ace0b1018f143c55f05cc183054f143c49f084e171010f123c47f0c08067079e14ecc0c193038f0976ded83163e78c1d3276ceec38b1b3821d2376bcecb46047053b3ff0f09022426a08a937cc847666f321056607879d1bb41c84c8e1e30c1f65f840e3230d1f6af868f2a1031f68f858c3079bee05dd966e059d0a3a305d119d984e06dd121d0cba309d125d0cba2e9d974e88ee080e8bae051d109d0bba2f1d111d12dd109c192e0b4e0bae4cc7a56341174467449704a7026e051c171f5bf8e8a291e823da05dd8236a2bd340bba8826a2bbf410bd8256417369213a8806a2b7f40fed43f7d05a9a87960205062a8c940a261b3a60a0619182014a8cd40b780c2125c6690893cd3c63ae91baa2430327a3070b7a14c1a3073c78d083881e637af8d0a3891e41f470a2c70f3d86e8d1652707949a1d2c3c2c48f140c79a93159b0e78a4d9d4e0f1058f307878a1c3a4e3854e173a5fe870a113860e183cc0d85ea041b183034e03f583d9839410bc203c203822b028b0313a4ef068a3d3848e0f3a3de8b840478b0e103a42e8040183a045d06a387191ca21152675c3c683b70563429362ea8069a0e540f3623669697670b103cd8e1bec30a3c38c53991d5bbc063e86c3f1dcf0ded001461604ef8c13163ac24861497d49e97082a32387131a549c2d8dd411281ca09850354019817201ea081413a816a09040c180e70c2a890d0d0a0b5419d415adc57c631a01d506d506d60490319813291bb42f7870c07303140f5235a0e0f078f1cc3869a1b3c3e98ad40fb834bc177849785f3c303eccf0b1c66be2c18587109e1a5e1a3b643c30767ce0e9419b42eb62ee602709d882141b2920f4d8a147962d8a93191d5c9cce643e48b9c9dc9cb2e88182549bd40eb21e9caac8dad0d145f683532b03c206c53686d538dd40b342ab02c81c40e2040922d5e4430b9d1b261c1ed3f645079a141a3c8ec0a3090e0d8e8d69461020201441cc04a102928162e00c343240c4c098322170129c189d14a4d6e0d145ca07a9206cada946102d689a540f4e5b740db23250646836984ee8d49032010f226835c8c8d0c6e444915383b601cf185417ad261bc2d6a49325d546f6c6e5c88ab0a1911981c168626859a07630d1d070e0fda0a14179a1518152436bf17043d3c2f341bb014f111a18330d8d0b1e6fb432d306282b80a0d16102881a1f7300e9825b038b409981ca010a8d9ec1a402c58687143a92d0cca084c095a1030c4a073c6c00240a21715263bc1e747c41a5814a33dd9870503ed87185ab41ca8cd419a9351008204c9c193b59302f786cf030504d5c143b6c986e5c8c141a540f661078c478476861785c9cded8507082031504d410bc866d879d2f29287404c123086f4201c107191d40d01c78bce121315b3cc86864a0d66c594e47e0c8a46e805a6287095238781a42dc741ac762d3e22ef021c55c33bf0081c2d5084143c70b6612ce440a07a82f506b604fcc2a726420e40c6d0b4d0d6a8c4c0d8a083b4068636857a0ce1022043781bfb1b305dd21a5032f43871042d2f034283742ded0a29848f0cc2067098d89a7866c0c2170b43284bce181c24716a832506c402d6016100b58068e814dc0256018280320634025600de0113b524017c02420129005d008f803dcd268ba8b2050b417cd4583d139e830fa8bde62a74c63d1577499b6a2b3d89163078b8662678e9d383a8a9ea2c7ec98e92f9d44c7a0c1b40e8d439ba0aff40d8d65a78c1d343b5a301c9c86dfe817740e4c04de01afc13c6036cc4690331a063b59b01a1e83c3e0a69d35cd92c00bec058be119f0b076e204c98263c030a021045440a034830322f0005e810bec430b1e30e2c00630c002ffc043244172240523452b30e017a08004a8c04af00b7e80023000d5926b8e8d7fb933236b6834a549079648696234c392251bc318a0182d59a2edd89003048412028625513c0025c993275118a00483d193275118200054104128209e3c6902c393274d18b065062519a0183df9618d8c3cb0248ad212a51964706214821f940f3be58993264a46312c3132f28009a81e368a07a038592282242310202d7122e595a0187d40044d5c7094963582014a14284b9a2c7122e58d608012e5014a5040100506181e088a8718a2c060148310540a768a088c8e964c992202232550a2389932c5480214b5c386c089944f323a4a8a528116282acb1a293589c1c9932654961881c008041078210623196468f282005028d829473018cd00c309768a1214a324a319a03871940e509c78a0078565617032058a9324251a8c9688e08914294d962419c5f0c40908888e6088f284e8072a879dc283c2619b2cf981ba613fb0a4895293189a2819390085ba3202274f9a38517202c5090f9409f60886284f3ab0c44809043018d160a40365c32645610087aa61a71839517292146506251034d981622d94284e949a24812086254a519e4c59e244ca374902c1f358367ad281264a5040e081254a3018253989018a93254b7682606c602d33548cf95ddab6c5623d2fc19deb8a73c561298c450c030204030204c3300cfbf95909254f3794123684104219218410b5725b3694bdcb2d79594ad91042d9122e6ff7ee6232f642b82ba1ec98d3dd2de5c66d18616cacdb9931f3e6c8d8704619a5874939e784bb3b679c2d2586c96d98451d73e674b163affcd1586f933707c21cd82dafd85706a1bc66c36e086337a0bba18cb33928e19cbb3b6943b90de1eed710620d6194b03b4218638c732eef765cad1b36e4dec6e0f67673dcee72ec0837c25dde860ce16e12245c77cbd861588c2d4447474747870e29b9c747f334dc93dc96eb113633842b61c308e18f863fba7bc698650b678c5d17bb2ec6ceb2ee39e38c13c209619cb2a1ccb2aee37ccc5e987947ba17ca986d7773d96e6c2f833be79c332e6c1f2cae94588433f6326f9cb3b3d842b218259452a53202bbb9eedea2ed867d8adb0adbd304087b61c328a584104a8e99799727dc86523617756c0777b7393200ce6e0800b85262cd5223920d278cdd188c33c299c19c8e104a095b7673bdbb0f7bc618bb3b462925d673c23661574ad9dd3076dd1d1c82397201116ec4300c83b15b4a0823f3cede397362b713e3ec08b1ee09a38eee2c2e5cd91c444d9e3917ea74ec85dbbb97ec951784b09b729cecee39a594dc2aa07b7bb7390e4539ded3c9a17311c5f9d896124266dec534292584122eb7bdb021941b272a012ac09e2cf6e4f4a4b0bbdccc138b20008502c0dcd899d7dddc0d218c0de3b6dc189797e5766ff7ae9452cadded0877216cee6e08894054376cd8107677c7e585b03b6e776cb8524a2c769cb1cb9931d331afeb8270764b18b3d8bdbb2b2516e7c65dd8715772cf393762bb58f7cc5ac876f78edced8671ce95b27b275cc6608450c618a1648e98945042d8dd3076dc5dd92d85646a4e08a194d8c4647bab120e90f2620a8512529199258679524a4c4a1f03c802300619630f9b527610c29652ca96103243291b9372575e12c6984518e336ec86dddd57474cc296bb4d7f408300776c8b2029ca078c3e70a1b002424394102805591da000bea3000490018a9319a63499c10910835192510c495196ac0e50802505303a6af2a4034b8c9c242905c0004f9c1c05059970826a00aa1e437a9800148021413c6278e264061896283d0141130f18c5f0e33418c500c5c912284e9acc0083073c10e5db9e1851317ab28486261f10e24386284f96c800c5890c324479b2c31f08b246491e58921445a9090c519e3c69f2a30002580228354932826224435209da16c068ca14a324291f8802c39224232a5160304a5ad2644a0c30182d21c0d1ea0005900283d11421123ce024c988ca120410e0000728400c464ba228491141120c24187dc089121410247d27221e50020190130d46332c5182e22449ca1218a638f9405213a52926f098b2f36d01a24449e23982a149079e3c899214800034314ae21181d1d112251a8ca00409a26424c3ce8e294a539cd060f4e35a024089e24409862653a03449525aa2e4e4031f88a2eab105a0c189078c92a47ca7a426464f60e8a102c508f258022c8112c5c99424232a4b62806224454a9325463234498aa2346589120d463fa84031822a6e8ddecb8a15dea568c58a95a5252b56ac58b1023b264b9c9dac5889b099ac95c86489ad58692656d88a152b90c9125b596a265678c98a95686569096e4b56ac2c6d4cacb01566b256ac58b1b2d46bc5ca52c6648921132b6cc58ac66489adf064b24b56ac2cf15a61264b8c31592b5696962293255e2656ae25c9648997c9122f2df55264b24b4b4b90c92e2d3593255e6226bbc44c94c422f0eef207a634d92cc1d836c893ce51065a2e5fdab85e2de1a6b9eea49cb355106581564dcc27e745e99a6fbe615dd126658cdecef4ea8ab82fca8e85a58f2c29d72a760a67af9626c7b56ab793f2abfc55be2af55f57ec55f52ebf2d25e2f07e5b4af8e0b370e700e8b56ae15775b6cbafafc66b5b25e17e62c2fcb664c0fad46f4b09307e835ceb7cffb457ee77b66ae9d7bb8b8bc2e2c48933c7c3a08d3117f4131042a8249f1d4276168ba524e19a27c850ea66b1582ca52ee30915627f121496322e5081fb639e8f078f7dbf7b3ba6c24d78d5eb7e42e4e154829f44c711677e78f6489f10792663db9c59c2ae087e926eab20f5e6c66163df885db07ba98836b29043071eb260f981a8a6be09afcce984216b56e0431131d0010f9020babe94ff48fd8f14141a8261a60f458a24ae2094823fec753e14da4166091db498b05c69430485145086105d54c1030ecea421924a08f1527b69c4cbede5005e4a0f8af0ab13ebeeb7a5c40998ae965ab6ba6a5e68eeaed0429368dd85169af0e702deb6c234f1a8df560c5abf1d1402c284119e685d71031457886aeaaf569833fef2d8ab9cbf94b8f2d75feebd02facb555028125d1ec4ee41a1030041050f73dc600533f001d1f5d527445e7efea59cf0966851e81f764883a0502462df8fe7062ff5db0ad3c66bbfad30617c4dbd0f63dd38d8b63736a2051e3b188f99e5f192c73ed4068041d3d759639832737af976283110f375c600cc779f761523ec7e08fbff2889bfc8e5153a84102af57f99be2dcbc0abf3056dbe9d7b811bd8bdd02ca2ccb7ed2e28343f2c9328f366875fb2efa2bb45a4d7cbe1b70385c77f397b94f448a93f7e54e043dff1b15362c2c3ef8b08a677f74264b1b87b81592ca2e9dbbdb02da2f92dfc59bf3a52f1022d0c99bba5dc02b5c317b0c0bcf14ebc6d19d1c6d7f80ba6083fa1f7f5db0213843741eb9cd2e1874f0bb54eabaaced3d50cebf4fbf3afdc0f9b0bde267f5b2dc8c248b001d637670910a3095f7f5b3a74d92d528396648d5fb5f2d16bb63af0a5d3258d54c219b8219a1f6bb9d012bd660f4d78df0e03267c107f212494257a74ee94f45cbe57b04ca2e9996314cb24c27c69b5f242b388a667140722441895f8d27b92b09797b22e7dcff5b980f9fe0b1ed1bcae0fe9f4f2fb32971efa1064d64f8cc225d99d02a12e91628944d1217dc1238abe0be18774fa2fb19b895001840e58c1107c4217a1156cbb0e60d6c3af32ebb76bc1a3123f42df85bb0bb4ce436ceb0227800d690a7f67df117b06c498af9dc40b245d693ed2c6f9cdb733c2b9a6f97648f6b70f04a9574a3d7fda10ec8cee96e89c99e73cf30d724d57f3ac695deae69cbb249973be458ebb23986fce74f38c721e3b25d3d9f9db05e2da5fe61badfdec1995f948700ed6af63b42af1d2c5ed836d9b78d105f0eea36232c30f66a490206d48c9cc7c39bc7cd995ae6fcaefd32b99b4ae742959f2ed57fb727fbb43f8abb0888fa0f3e42cc0644b7cc96c5e02c1facba107bd54b960815ed5d49a61a157fc720b9a87dcd735b3f375d7bcecb93c3a3b8c5d0396a88047208c5d11f40df30da395047f799512f4b4d246dae166df57a1afd7eb4a02bf1e25b504dfbedfeddeaba6d037eeeb53c2a95e612efd0746b7a543174fa7f5c395bfa8bc5cca31c71cbf5d9c1db27e518ef3dbb17648b36a909c3db155157e854edef9ba4eaf345f4ff56af3f51feed3abe9ebaa5e5dbef41aed7cd2a56dd3361f6a8ef64ccfbc2bf3d1b7371f5df36d3bc0e6a3674d6ccb4078dbf2a1895fdee26dcb87233e7ae75bc65d34fab62df145ab742ecba8dc98939b23c1df4e7489b6dbfca84709e6d231ac53127d732c075332312c07db7cfa9669be9f699f91e9996747d2b38ff349f933ee8c689e695d0bd1b5ef487a8d3e65e92f975d0b53969ef3a3ab85e8d8572fe7be4ceea671db715fadf29c5fb4c6bffc4461e3b04b00a22b27c76197009733d110e4a8f62155f9e817857ea24bb469dc892e9106bf2e5124a824fb8e3a8fdef97645df0f5ee7d087ba3b2531c9e6d7573bdfbe9ecd3197be9d92e8ddd7b37d4aa65f17d51c9b989289cdecab976fbe1d69f572ce7d08e3a36fbe35b7d1ca794fe6fb9b5fb427fb8c48df7cfbf637c86994f3cacf6d9ef9f6ed02d5cda167df02d5cc7dfbaae61cdd7c084aca7ff16b743f9bfc5745e1b7aa30394ea16bf8f59c20225678496bae053db411937ae892d486a993c05bafdcb6347ec7e550d1f1bbbbbbbbbbbbbb49f3cb426ac2c7de05ba3c3a53cc2f5ad9db6167841dfb2acf1e25ec98b3631fbbf6fc690b0439b92de4abfdea5ad07e5ddb22edb16b61fbb4056a0ca3ccfa8bd6f9dd35b8fc3c13bcae622381c7ae6dcb5cbce8ebf1f0e6d923fd5ef2c6ddb1c07953768e1ef59176ee652ddeb6b45c796d7dcd6bcff9b6418ebb23d333d768cdfc68734df3f6ad694fe7f1e16fe74dfb3b8c8bbb402797de34c74fb476ec8cb4e77c95bb33d2eef910f4688f92f61c6fcff9688f12eddbb5ef8f678120e641a12582def4e43958d782f69cf36c11e8b26ba16781a0731f4f8ee75066fd764798f505e543ed4121d4b7f007fae9abf32f3f6ad7bcfa50b3b04485a60df516dbb933c2de5d9276ed485b20e8db0241d6ef02c109789155c3770e7dcbb6ee3bf92e5076f29c8c56f89be76c39d9e61d4dca39713ed427ce73b68ef36ce3bedd21db97b9e6cdbe4d250afbbc565ddff7f2d3c9690c888d045efc6df1f0031278f2b7c5439b5d2012bae9099c80102e7fbb5fa5e1b7e91174d928e8baaee37cf3aeebbaced7a78b63dbb6b9f468dbb66df3f5d9dcc8b22c9b8e79966559e6eb93b9c1306c2e3dc2300cebc1b6b4db37ee5ac65649e7b940d2971e4997edd2e3dc226cb6cdb64811f445615b18bc88f976820e218410c285f09ad489b72d1eccbcf4a2785df4c88579c7e0743ae578e79c6f7e3a9d4e2735b66dc37cdbb66d53b3edee327fb74018e5160873a64ebc0bc39cdb22ed98775b641ff3a61ec36d0fdaa8c847f2f8481e957ea4f83f74d6a763d876674b8239e6db1d898ec1ecf2e9431d339f7ec538af8c6e18a5c21f29157e2c52ccb76edfc7e8d1f4cbb973c0f42bfbead2671e67f4e94330d21a9d33df2633479fcccc3e63fb64e69f8d04bfdb875a045e3bb79fd6694f6cda133d52244398f3d61cc7760c73248e93a4c44949c2e4a7cf3de218add38fa263be45875f12d2ba61b15e49c74f875089fbd98294cf7ca8359a84b480ef058aae74bdd61f3da3499a2b5d3f7d3b254b3e73219fb9469116f0bc403166dfee90ee8c488fce5dd1f5d5a5bf3cd239297be55f97b4b67352fce6b73479b21c4adf24dde70efac61d4bca65883638bfbaf4936b3bc430cc3187fd21555987741fb25324c89823fdc07c9b5db1d82a8c62f3c32e482b742ade3f89ac1abe4e47c2e2a821ce53993f9d69cd8e1cfb26e530af73625ea723cd2b36d4f04954ae67a782fd94a5c79cbb22cc8720462f9f55a95ff34bfb90388e8f1955ea8ffef524e1d6b77757d47e51ae985fde944a4fbfba5e8ee49031ead83af38751d8957ffafc2afb3ae649e0d7294b6f64e3c7ef48093bfc8ed67b33c66e90418e6d06af3b1ec47c8d1f99783374a76e8bb41059ac67e72e89c77a663d73bdda77633b25b9fcf28bb5e9ebd3b73392f9f4344ab78b52e1affc9733a5c2976fbdbc1d73f8f305bae8d1f4cdebd5e59caf73a7f16fdb15ad4479add23ce833e7a5e7a3e99be65b8439ea0bb4eef52ac86bd5cebf944cdfbed36228cea367cedd083ce85ff6adf336699d9e695f5d7acd995666cf7c0832adacf9b669d99ccf9e51ecda21ed32ee90f6ccb733129f330a7b87b4d7062c51f1bc43da1bb044c5ef0e69cf9060063da322f0a07b0ff7310af4eb93b949ab74768cf6f087c47f7d3fcab0582f80c7f81a63835a3e3aa453bc23e9267c951f6769d53ef48db3f46a3fbad116490afa2feb4bbb0367dffdaeef0a0e40449763d94194a5573a1f9de7e3c1ab4f9eb3b42a7ad0579dafbb060496e8ca25c5ab9ce5a3d75de3a35759f7e04f11ba40c10228c434b15844974722a6ac188314b8c0861648417405072022762c3b88d6afe0d0449863510011fb45b12880a88a122fb0577101fe4467a68f7e7915255ec0fcfaaa0cc19fe8d8574589172ee7af8ac39fe8d717b4f0a7ceafdb6ab1d7655a377238f3e50764c0208d2ffca37f5abc255a02028d14451451851a1a10816889d66bd00bce621171965e99f0d159cb2f09567aa93b7ad9923cf8037fd697c716b4745a2d7a8c561e3aebe0e327eb151dfba05c5fbdfc099c819b97dfe5353afbe59046df4ec972c1c35fdf9729bd5af92a6995fe64a9cb6350960b2d2fbd8ee02fec83b26c5e5e501270a5f5f2630233c50969acf82a0d3c78f91fbf2d1eaefcd69ca45faaac5b39c58913a70b518604e3c4f92f2c203b20b1c54b52095e646086a52465d9fc17d60969ac605149c095160dace5420bd17a1dc14b1b960d51f6b1960dd17aadf2f2abec704fa8dbda81cc2bf17f61f538630626e0018b45b45f95752b508a30628c1ae260b188e6c7bac26211add75ec5af4a598f147a771438214d157188d6b7a3002a8d339298c30471e210e97c5be925d99712dba6e0755ab5c47c806dfd035e3bb7c118a974664ccacba16352caeda23f5a25bdbb1d86baa8a5c722248ef3d1afef47abe4b7913f7683b1b1cf2dc29f0e5cbc4eaba0cf2d02bd280bd3b840dbdfb66a42e626d6e71691bebe49585343a6c3cbe1e5d051981774783984d0e58f565dbe3517e9be2cba4e107da89bbbcb7ba2f3f7f744dfd60e3a5c2eb1ef47abae28297f9c0bb4ddc6d61eb748d3d60e38bcce893d6e11fe7278ffb140fc2d12c7e923fb481c472ed02e35b30edbb65e7adc2297afcb2dc234a855f2ca0f6995f4ede076330c4941216d8bf8024d97aeea95d7aa99b9748d6eff4c7728347d4c28a4d33fd3a56fd3fbd822fcd2af1fad9a0e7f5b3bd470519f0e3d0b9a4fb56a7237bd0773f8fd3dd887c4711ef36d6589e3b79525ceebb46afa85143ffb7eb46a62542ed0fa767181d687faa2fc567849365462e3df36ee8a34e73c3a463bdf2db2b9f46da346967e3b23d811e6eb1cad98b36ffcdbca02e7e3027546687b4731cf287ffb9cded1e919e5f5a19eb4f2ef57a7af6fcd4dda9bf3f4a1de203769735fe5e77cf30d724b39dfee08e7da16b949dbb73bc2f9e680ceb9afcee732e70e89862b36d4c07aa41a8223c811e7a72c13982d27f8f5294bbfdf721b47f73b5a69f8cd01dd5769f8cdb9fd2aff3ae7b233a2bd6b3e04b788fb8e34239aef8754e52b7cedb7ef687a6bb4ceed94b44f248ef3990fc1a1cef6295dda385eb16d06bce835f5727aafa4a3d0ab9d979ecac2f4d27ff4aa5ffe087a997ae95eafdaa5ebf40aba5c97d2d7477e47dbbab241c0dbb1ad4471ad8a3a2ef4aa7a18205f378ce8d231e98f49cf8077796aa8577522e955f598f40a73157ab5f3985ba057dbca82e531d740afe26370d53cf683c863bebdfaf175d13c267da87f6c4d31339cc563de9f2af3986fdbbc300789e3fc7abd828eb94eafa2633e7bc58e61be3ed877b46e20986d63f0b6c5839aaf735b46c4f1d0f7db61c3e8472868a2a67e408fdc1fd9cdf9786c10f07a8c8190a877be83a0370adfdee3c2951b4a70c60d4c5a6ed0e20c36440b7f6e782f68f0039a366f18a10aa2d928f9d5c9448688347dbb0a2bb41013fde0f9f61fbd92de1fb71d7fdc6feb044c1f3f9d5631ec615b1e30bc3a9fbd3db5453837dfae4302cfd7f37e0ee9d5ce43f7c23cf4c965408b996615782d83df5611487cb3e0b7d5058757fdb68678827d639a44c9046ebe2e91b9be82a0872c7efdc42af0a015bf2d21de3c97f96d0521e687fcb68050c3dd116d8ba64762f2eb473437453c92959caf4a6a9c9162c15725302cd8d4f8aa840235e4d729633821801a307d9d3286e9934c16ab4b1259acdf38bf4ef9b793ff361046647999e6d9b713127ff42d52e9db7647e257993b25d0fbab2ee0f2d1dbbb33129d7d0836dd9794698f1299e6a3cb345fa72c7d74e94d91364e9c38bdf4ed924b07bc6d7989e3e9d3df9a6b2ae42595699ebb23feed9152e1c19f522bf16f1f6a25f4a83dfad6b4f24befee08c779248e23e1d793841dfa1176f8296ddb6ac19657ea975f6da7c20f7de9217d482953a5edd79724379ccd0833af3dfbd6da1629a2a5b07c429dbf2b74f1cf161932828c05daaf9bc290116af684fdfe2a3b772d6ccf5fb5f254fa6548e267cf74346fe3b8d9518939db32a2cb239d4e5b64e578e817a7b0fbb5bf5e0f7d8bdc6e116655c063dfb8a380d71b73d15d86bb22a4c8626d531c23d75c6c9653e0366b7ebd596889d6354e21621cec8cec1a6cce39af9e337c0479f2a1f6a14a6c7eda3c6e1bdddf3c523eb918175ee85502be4d6c02cdd77553239808669580972e45ba92dc3862af4ebebe49291c65c49225460c462c310bd20acd78f28d8a89665e3a96792fdb781d06935fcbc405fe6c9115e2fdd97cb38d63f3ca57b66d9e36dfe1489f4b97b245faa5f316f6d2abf6b96f7835bcfcbcb20e2f99cb4beef228445a279212ffcd31df98669f11f6e8f13b79ec5828fa4e9f4fab386e0ee6ec026d19b7513852947ae0351384c3ddf62d76f986517e0ce5c12b2f77f88e0fc28171442e31365333756da6666aa653d31ce71c678f7c8a991029d7d51551dff814332d826130710c547911cc8c11cc690e2f7396dcee32a9aa7b2be4c2c9793e7becd55047fa65f132673fd10885b79fb97bec8aa8bbc029682e3d025b24ba7409ec0a73e9e3750a95e0d52b92794d3d0fdf15c2f6879d876314eeee09ec9990672fc1c7b3fb9c9e3db67f5637d74e3b9c7dbbb049420924f850c7498f344fe2cf5cfac4f8743a9dbe7a723fd2befdb230963ea2c1401f118bf66179e924d06eb54a7a09b4cbf48ff40d9b5d322f5cb844306022985e7d2ee4e3d2632b9a894cb1895826a289632299979f0ff51633ca7fe28f60229818268a89df13eee454e2b3239d9ebf1f5ed74d772dec70fea8b09193ebf850f7f02abd62f115296e90f4eaf4555fa1573b5cfa961d6dab3e57e2d7be205b78431dc17c5f9d9f71615aa545312fbd721fc1c01fe9ac03afc781781087de2ea55791b1b0965e0571e9cca557b3cb917ce5e441b6f04edfd1c995f877f851ec12b940210807fec8c8e5a56f1ab71c5fba92d785a342aba4ccd1fca3dd44aba4fbd01e037f24984f796da6979e51c6c25758ad920ee15c2e31384268e517a27d525a25d9dd79bcc7a528d1d02b77e955767abfe3794dfd8eefeef850531ac34431ad921e3b29339efc8b605a251d8807f11ac1bcf44d04ec34c8ae851c67bf3a25392ea5579d4b57a2618bec4b9f9d921ca4f855ce371f8242e87e103a7fd02f3ede4379a8f41d9a1453b4729697ee8356ae0795ce8326613a54897fc7b742aba4bb00a58e0ff555cffb6a0a0af97ca72fa7e3e8fc58bd6b665ff5aa0a7af6f94955aff655ad628f4d42da04235cbec5dd765b0ed228050af1f0cb395f28a4e3db0e0fcafb035d07f5d077d0dd9f9a3d845a14810c73792e5d7a9580d7e24d1b3265fef26db78bdb5eeda3bc4eaf55d275f8c923fbe5419a3cec93a2b431c5bccf08438f1d927d76ee8c2c3d47294abd42f9e59cc60a79f0e7f2140f5c087f5d5ef98dbf7cbfe720f873f99c9ee7fde5d743b87fd2e1394a8a361e73cfb7c8c1182f9e9cce0f333e4c7fb93663ab56e3580b26e5101d9e87f21cf551e1d7f155764c7279e8475e8cb10d29311da7464188f231a76fcc983163a0eae1188e5baa87be41d6a26586ebab415f9ff87c0f123f3b95f898239d1ef39c490b987b1f157efe6268d5c5415ab5b4ea9aa1577586565d97175e554d0e45994cab2e0f8242dc823f977b2ae55d3ca68d8702cabdca4d57fef20ed32bd45783388e5e61df9b5e45c7daf0cafb62f5afdc943ac2eb2e7f5d5e51c89c4b67f9ebf26d55cb4585875ec60b1a307f6d1862fe72cef33e220f516815c4b60bf28537d464deb4193366ccabf0d7b6c8b471711b7ff93639c8f1af9979e5367f39843ebb22fe825a053f0db44a46d8cb1ee1b68d39376d91fdcbfbca6ee7bbdd2ed36d5550abf8d3c089bb49b989caf16dd5a0e9f2cb79cc1a326e5abdaacb54468b995e55def2975f52e0cfe5d7965e9dfcf213ddcfa13aad92ded124be9cb5488142737fa05f9a9bbf9c499d976b20a393ba002f5f9feb3b6a315d0731b3f9b61b739e97f2d53247b245fa377f4243afa06f9e648552f067f3cd77535ea8c6f8cd7737af9bc66fd3cd6f6f7e8be3b7a15ea63560fa6de3b715059bdfb89b5f9d9376919b92c36845e1d96357343f1424e4962baf9c9e24d74f8f3fbf6ae5b1566d5cab36df89d26945c1f495c86f2e55e8950ff5aa7d73246ec6535028ee0f3bf7556e62a99f5ffd5153bf1d617b5ee20f49ab36cf4badfffac47cb1cf59e8d5f545df3ecc37665d596cdbdb76000c172ddac0f29947876ebe7dcb606b7a4da99e5b4cb00585984dffb4ea2b6cc9affa57d89a5f4d711bdf9ec1d6f70ede97c5e335dff2b989e7f0a62af3ba837945f5408f2fb909caaec86b82d957531e8c5fd373d3d5668b70112476131df3ca3c78d8b590796cea15e6dd668b28c99c7f7a4663abe657b7559c0a8bd08d0c36dec1d4a93faacfaf73bbd8fb506f0b792c16ab0622762ddce0f2ab851b585e00bf5a1461cd3be6dccd95179dbfe397e2ea92255d339883f0b61545eb35772df36d993ef3baf3bc663ef38a7aded6675eb367e71522027f326767df7873ee8ab466dfbc9b833e7e77414f04767e79ecdb368a6bd5c49cc816e9cf5c0333f40a7ae60858a1097f32f7aa489df9cc7733afebc5962d9bcfbc6e1b9f0d6955e64c835a957daa566511c52ebdaa3e7322d9f565ce94dbbcfbeae4beea6dae650ebb23fe9a6baef96abe79116bb06361e935d7685c9f4cf660dba5ac436b8c97df7e5b63b6708f39da071bb0871751d3425e555c3a6480e51831231119eab70545168d5bca3978db7a228eecb7f5849b67e7965b5ac5e37e5b4fb0d9b46c62978cb079b91c3847b6c66908c9920a7a90a3075cbc84b1c19a06a45982084fd0e08b2eb66cc184b7c5151f9194a77e9c69026307359c10c38b134838d878c1d2e14c10426c71c3ce1645f0109adfb2f1c60659e0bc41832dba584ac20d26bcac0147185d7cd0867b835a653db898416c427e8552fbc34243534dab2a09657e95644367773447e040cc6f2786c798b3fb54ec1b6a15fb13228fa455bc42abc8c8c17c08a34830ecc2305f338f79ecd5e93134691ec330cc83befa84480d52b269caa77fd879c8730ebc21245888a0d0b6587580dfd6132a781ebfad27ae30c92d64bc181bd332c304594ddfb0b748fc75de22ecdc97abc7c8737cc163b1582ca2abbf7fbbf6e0474485157ac542af2a0a2b352e340adf8e8207858c1c81cbfeacfcc0b498fdd966b58ab7097649ed6c0a9aaff76c91ccd77f6c91c9f9ba0aeed563e72c2d440405af84df4f05648526912d0f9d513b30bf3c725dd1905641222aa0764cae870f0d111922a2c2101c1e3e18ce95429d4eec05ce43efa1c355e8950e874e6408bb74f8623a7c75f816392243bdd211e4cde76fdf300eeb8a3c6d72289f5dd10e570d39f97645def69bdabd646724e7abf1735cc7838478255209f0536910aff2a32fa700c4ebf5717e8f574ec87d6763f4b845521e3db545783c7ef5890a1f5dd5aaa031de902032bb83b990af0af92034c9024107421bc02740ff41596815f41eea42aba03b7da17f20cfa7811445b240d0b90c2fe5d1cc9614e516911e3c6224b24a79f4ddd5e5713eb3a0908fc39d6ff38542d4dbaf1c3f798a6eab7cf810cca1fb3ed4081c5cf6679f046a040e2ffbb3ff51237080d99ffd8d526a040e31fbb3dfb4a6de07adcd5a331e7a0fca83d6f93a7448af302fbae2d5d8f53d51e1318f9d121496322d78ccb78ccb3226b340d0ab7c88edd0d15d11eabad4eccf36edcf3e1c6de070e35126d3aa56ab4e1f8f691574323c8fce91083a63e9d57253a4aca655445444888cd99f6dedcf3e1c66e0601af2fc5b73bc069bdce6f19b1ded51121d73ec3bcaf1f871cf6b5a8551fe8de67c48972b817f7d5fb0780edddfb889d5b0f042af34d0ab4a04890b1660428408913798de50f346d31b6d8a54681594718b601d8dabc2ba23f191aafcb6abe236ff98595d8337e4a39bfdd937e04c9687252564040ed5ae308fde5d511cf22a4c28c463e00ff43966cd8c59330fe7f31828b4445fb98b7d330f2bb71e8e8142ac660ce6d54777168071dc590d146216fc813e2f56f33e1efbaa8fc7dc877ac35ca3bc27609e51b840984f1a170893fb8339fc21048fc7bc7bcc2b6379b81d06a27f0b7f2ebed22ac8aca18fc88e175e65350fbd1279e8bc86c5a6576db09a5e35f5aab29736bd1ac36e7a55a19aca639e05858cc001677f96b53ffb170bcbfe2cf48542468ea0657ff62b7389cd7af6964b40daa7c57cf459c471bcaaf3d1230d2cc716e987deac6fe12091c2cc6f2b0b315f5bcb476737d1790c149af0277a0acbc7667d6438737a5eca5da50afa3abff2988fbc6dab30875d11b6715f0f927dce8fec73bef41badfe9b435a99783f5da31cdd5ca3d9462fd7e8d243aa243ffb26adbde62f1f823aad8afef2aba967393ce875b69868859b2dd2bc3205f45b02102a30faba0e8fd5b55a6f5799aff3a6d0be4031c6e8d19b262979f0a3f39e109f3f1d28c4637fa2a320042855c247201f75160aa9e08f74ceebdcbc7aafedae7655554815f2f24b47657e7415147201fe489fdb57bdaf2aedaba9afaa97beb900e764fa2a0fee92d0efcee14f6755d027e556051da373e3aa5605bffac488f7fdfddd1f52952f589ca8fba40ff50bdbb9d02ae96e665f486c320af540c7fc8a09380e91125ba437139ce2c489138788f640efd83f11167dc128536e81a45f14874974e50a0e4eb46b808a7ae9380411ed12a0ee78e9dd1e403a7fe1d5d40fbc9aea552b008b13611f77d125925d8307bd9d1b66d9b6b72a5e995f1fc3f4fb29f5ef029910c56be781e26d2b0ba6af1cb78357a1107942840c14223e0c2915f947d039d85d84f9f4be3c7ae6dbb48187f97ebb9cbf506812cd16a8f0f3173f2af2afef28fae7350a3635ccaadb5a334b31d0c1104fb400ce1a5dde20aa5eff017edd05281489d68940a198a4830d470ce1083b68e102a2f5f5000dc278ff6dcd40cd960ffa6dd180cdcfc0cc0be0b725864c1bcffdc9cd7c6ca2893fc06f8b89389e0934affa6d3171c433b1e6b767e7f2f1d94baf3cefc97cf37d4e73ceb7579cc6585eb2ba89bd3d2f95825fed9c4e89f6dc7547785cf3d8abde87cedd1eb9705d516b3476459009dce1d5515e555b47793cd58387ef70946f1b7f9d43768d5d83ed1abba6d41d3d3ab995e7fdc1dcfda385ae8f303f7190eeabfd270ff2d5665a23976f76feda4f953f3e394b6ebb23f06b7bcfd752152bdf0e3f86b504ffecf188af97d323762bdfb4c224f0b1cb3be85d8d5dbe5e1f12fcca5d0b3f34edab91cb5faed4dfda0e4d83124a28db19eed07c87d76ebae6d47c5748d39c3b5af9994b799d3dbc7a3ce08f3cb5430cf3fe7a80f8e59a07412126427cc7dd07f59c1ed751e9f076d61c7adcc22974e743f03bfa65f194fabb2a758d5c5e731e7aea8e9cbcbfa3761ecf39d1ca9a3309e2757e8f6f0bf538fddcbfeab990afce862e44835d77e4e49ce6d283606b5fbb90205f8e0fd87ef9ce66868736108cced02ae92878cd4d974fa871cbb363dd111eeffca2ed3f28e74c2f1f821ddd9c87eef7d0ea5fb789e78b5a5a7505c11fe93b5f9da9af4e1f5ff57a7cd5cbf96a8ac757533a5ff51d5ff5d7f15515eaab2acfc366e7313363dfd174cdbd203885abbddb7c7f55296e3c9f0fa776ce9be7f3c153927ffa8e3ac75ce358d3340760decde9792bb4fbd30ed03cefbeca4af2a77b5f4fe697631e04853e97ce44c29fba6a4af0ea9fd714095e3d1f2fe1632df0477a759f3949f8166ed3f72dfca929cd2fe789f13bcff1da4d8f7d5f16af2ac9effc72ceafee08fb51f7557ecd4f2ebb16b867672d98772e59f39373d85795e26b9ef3d56efa8bb5a452d57bb93f757ef75525f99a5f1eb5f42a084e619ff3c8e56964d22ae9198da155d22745c19bdb94647bec8b41f009d7c75e7e49b0129780f40f214408b7bfba847d4aade2283c7944eeaab87d085e1b1f93f253ea2bfe76d7d793a4e547a53f326c2fb6ed866d74378431766f2f43d110c69a7a281d3afcb248d9cd1fe375c518219430420823bcf8aa016c8af2ba16a8638412460861843890b37abf93b6b71ec37cd2c67ca8d1fcc6dcb66e08e3216de5d0c45ffd7d5eab22c617c71865c49ed0c1741901e125e3458fec6372278c185b757d5cab1a5ef08a578c50c208218c3009195bbbbe79c58caf2e221b0cbbe82e1064c9710bffe85262f4c8fe8c3aad8abe1d9afdcb676c4c62935e54a63e66b96aca2f16fc60c9d1cc9a09a3234a03ad9ad9e61ca779d7cd8ef2735ee4180be3667bb90a8e5c23f448a72cf5f29beeee183b72ecd8ddccddcd4d6bfc5e820db999b9b98a18656c0c8ba832524ac63029658c52ca28bfaaf3b4c697dbabf9d538279457943146961ccfc0cb57ca8b2ea6c2c7182fbfe015af1857c208218c508ade4ed28b5f8d314aba39a8df56759174e9fdb2376e2fdc3e232343aebb223843abb2e9a91f7e617ef936bba20b9b50686653d2d82a8e5d91f418275f43d8babbebdaa9fa6d558cd7c51c1966891e3d3273fcaa4edcb0af460c8b3e04234b86713ee4ed1fc8cc715130aa3ae463dc161126176cdb06310cfafcee2aa5de5b156325f2eb4b035775220a1f873cd9320fbd61530a98c52c2626c86a6212471353951d30a1823854b02631a8c83fba1cf33d7272cdb72b4a759be343cd711cc7711cad413f5ba57d9a0f750eadf3b5cfe5fe497a74a16d4da2ad7affe8558e37fce9b06ef234570d09ea55e6f50991f73cf376221ef55ac539e727cab58a73144df50fc7790ed529f28d7a9dcde7ebfbb675ea484632d33776411ebcf66d2e9c5e385be6bf2cde96f9eabd1cdef4ba6a34ef379f69986734297e5d351b26f9c996b1c2430e5704e12514dabca1f7cfc2f938eb4eb3796cd2dc374af9a814f4110a9127f2f108918f9ed1ca3ecf5bc7f138af2a6eea783f523e2f877cf49ceef4699e43ab2ae8e597147fa315c94b875d919679df131f2555c608410768bcbc5ca3f1331aa11079f91d456e2987631767a4029003188891dab8f5cbeb755d17c4e2b5570e4297eb9cc576861a33c84083cb196ddecd73cf1e7dcb473498d0008346d36faf6d1bc7ae017ef6203762cc48c1133e40a20d8b687d3b715b37bdd3893c628fe879dc36f6e115eed0e1288fdffc2a9f3a25da6f39dd9193b7dc97be16d867e9cc9b8a5f8dd1356d63d7b4cd87e07694e3563eee1723f3873957259e16b0aff6e738cf57fb3366f39c8a5fe51c2d728c31c618b5ef28f31c8fce9156ef97aa6c717e7476f375ba468f62ccb66d3ab639d6e6eb8cbef9f6ea9b98cf6c63363f5da99fa7a6b9165df38d354dd332f6a9699a12ac088f57eca3d7eb7f78950fc47b8b08f1e8bc45dca9e76c5fe5af87049faeb93b179dbf9a243a4767b740af9a3805f68d1d736c738ccd6b7ea2a8ee08fbf61d6deee31e6b3b5bcef765f1a6779b4f3f7547a21f619f1661dc5ce3cd73b8ae2beab63cf58d04eaa36a15c72f7eb4734a77b8531d2e84a23c08f5e140a8e73f680fefa13c9c87eaf8103cd1135d0b40df497d9ce335c62fe67c47986b1e590d4e61fa76dda68ff109f798d75df39af6d5271c7cec3b8aceae6dacc5e8dc3940e3482b7f3d9c4f67f7a090c3e8f309f79ad727dc677e72f89a5725f8994fefdc0765ef219f9dc7f5ec3a74176807d54151b41788dda37181b4ee88e647d997e359d702f79a7b16fdf4d55df3d3d9590d4e418b9ed3b9056657d4b90f0a5edcbcbba26d636eceadb76df323fbdbf7fde04d38375ad9673cb2f4dac76af009d2317a7d91d97c7cd8b189f22b815aa9c24425781525a25bc1da1001c01d0a058de1b284164338f1c51b22e800a025d085415ff370e11658363136b1d630fdae79d915b16fdb0ef575b1b92e369123ab715ddc640156834d641363f41457ce9b6bbcab0563108142e42b9197be3362708d16d94a7e4f88fc9a27b2d82276c1468109d6152970438839764054530fc78e353bfc00612905546011450c90e092e60cdb8002395230441b23b820b3c4428110d2ac61068e14e8808b32d078d9f3f2072fa52403005d7011871743e0828c969235487829620a2c8258030615058f36628c510a1147447145163458a3083984397ab08589891d9c212ac38653193df878e9838f0cac84df1619669061e6a281f4f666f2da771d494a0514be7bb7a62e76e9d2a5b7fc70e0b5d735f3dbc6b7b73fe99594cc3524e20918c5890c2f726264d410c9b841a7078ea455724892a102cc8d4d9201e700dcf86e9f639cf13a7e5b63a08973a89ed9977db2a7b4d81da4e1c69635323881185df000006928e1841a196c114718a6158690bc807302aa8963078855ca21946376e0e0a173645c6304b18d61c464c3a9017c25f25d55df4458bd59f33eb0609a3ff073fb5057df9939e642be382ff9559feff8d90a7acd1cf32da39d79671e6367dffc76a0f0fcf77b7ed583ec3012fd50472f78092e3358e205675cf0461b2dc698e9224c9820bc18e3043eb098ac48820b0e6dd828c10d39d43c51430e5584a1a68d3445f856eb47cab91803041b9ce00d198471061420382106d310c234910411f4dd4193b1c6ef07b478c113529861024c17a2aa5afa21ce126c70a14616461882a806a5b922d54a53665bf3b795c6062d1db6dd558cb05368afbbbb49fc45daeb3255ea557bdd5dff6a5d9f7126e1d643863998f1314384e95a285718da328a70843542a851842f5cf0c60bdec8019b365a000439c4502213e389c9e68c1839e48801446a006772c0831e31aec0019cf16c60036b093176d046103440050d8af0031f8c7893460e98d891832c48d0c199251e8800c20fc86481e20461768d31a4f001116676c08222e400cb8e1c0c9152e38c992d62aa50a387345796b0b871c20b1cce28021b41208a61b0f131baf151c7c734cef8f86da539228d104130612be34557907408968966749a862045022184308c350fc358c32184b2cf482cb27f67e0b4184dbfe3b725c6163b84d1041852f84f2857ed184dfde82ac438f39718585c8993b7a6bebd6f31ca7cbb4f0b451e1cbcebb725c614d08d265df840092e599ee8614c13163774f901117af022860d19cec4e04c175f8a60c30768fc000e2758b0439b28e09840e240891ed0d8b0c30f7670c66eb144113d5891831ed294816118e613db79030f732f62f28b354440620c24d200810c21ae282305431071851843104d33ae3ee3ed576f12f514ed04149f273efd448c507ca048030815ac01660937c4d8354f582708c2145bb8a8810f44eb2bc35e2d22445cc003460a78381c30b000b5f1c8c8c9029566005d309199b1d5cb6bf42abdb657785d1b6374f8b3524afeadbb3df803b308694ff8b3def4880afc2f22c09cc7aff78b39d39cdfee856d750f6f20a3c1328a70f0c10b356ec20022891502cb4c0e4290234c1469be5862fb220a58c607958c408118328ce0e10a972526e280e3891a9428538339be20a2fb0206918c213354b460072d18e3c61521410c61c60d2b0d1a3e7ca1a51be38b1c32a62d738aab15618c5f6a294b0ee0e0c2850d56343d31001600a1872964008431506ce19911003529876aec20471a723051c5134a0031041140d86289326c842123abe0d2106942cc472f9e20d2c4bc78c4916e7443606ee985172618fc76547835f51c7d6afc9ef8fc0f1ee840c4041b36341351eefcb6bae0e2b9df561756c420c4f8aa9a401a6d5061833368d2a021aace5eaf06f0eccb3ed74c0f6eb4b882690c1bcc8088190b9fa6010d88d0c08723c612f61045d22a2eda6cf1e6c747a228e402fc618f5d10f1d105c8d0d78bbe53898f1fdd638c57cbc0e51763175c6e208af1ab4f7cbec5449edf161773fcf5dbe2024e5314c2139f1f6384c0c6a797e8b9b6c8ed16893383bfde613cf699414dc811214234ee8c788fc46ede1f899b7e720a5dc3c669be7597cc91f1c4ad74cd21cd5ca351cbbeca5dd782840bf8ed9448affd4716f0f3435ac04fdf3cd61ac69c29fd54ae9f2d486f8ccb7b945c2efd142fcf9ae3fc8cf31976b9f4494f8fd16dd5f5557e79e4b4843147b1711c6f4dd8b8078f7d511bb3c0cb92026c3c449724e8917d864bf99787e0b1d71096e9d5728c3b04af7aed7d5c35556411638cd1f98c574f1fddeb1584d083b00bc37ca82f0c075ef5c7306f888fcad3495dd7755d415d430b8c969e4eabfa5b335e8c3146df6ee055efa3d7abe8d17552514a19b3e0ebba8a180b2fd5ab3a7ff4aafd72f751f54afa7539e7f50a63c6f84ab34d6cf617cdb10bfb8e300cd3be29b7e79c73ce39679665f33b0aea297a93de145ef597d2a5fbccebeabe3ca80738f0f2017873c50dd8fc90dfd60dc6fcd6db0c73caa4b0317941b6f5896bc504a8f0ea7ce8a53610d178d57b293de5e94859c5632ebc7afa3e6d118661ebe2db8eecf3917efeaaf0d83768d3e1fa07faf216755a60db8ea5f0e25047870f3003e77d7e5b5a30fdc69ca4dc9324caef487a7b955f4f9276e9fd7dc1e290b5583364c878dc1c83d9aabdbc7245f0b675e6cd9936dcf0b6750330f0065eb6e537deb6ce8cf93f23e663f42c9a3eeec7ce7d3f78d2f78bad92b3554dc4b63e55f3f22d853226f8d34c1c930ed30f269f8d71c82b32cbafdcf2ebb18d668242199c0c0e1353068789298b43dba265d1ae7ccb2c8e5e65f2476acad474393f23fd1f9bf8ab29ace96ae2e64b8bd643f77743e665e46120784c12cbe0c09f768de579a90c8e6770a4960c0e148ad0dd5329cf8b6c621cf14d6ce388ff15d9f48a63d30731c3bb7a1e7e46fab725b5f409bceadfb0898785e0d598c1f9f62ed24baf6aac714bafaeaf7299676f975c7ad5d4bec20c59c484c170bab49a0d96304cf00d9748668bf427f979886d99bff1d75d78a157d8965161c8a4724babdce7c70f0bd45e3121c905fe740ab2873da17d9da596056aef2c5e955ae4169d1ff2f3895ff597635ad57e51a9a555ed1895645ad53e318ddb5e410f2385c6db3228b4965ef510f749fd70873fed724ba7c2c823fad3915d8ef8c34f6ec1a496c720cce030f40d32c70b732824b5c09ff6393d2f9572f7eb0a128607a557a9e5db312afcb04709ffe5fcd77704fdfa94f8a38f812c236fcb1ccdcb8e12dbfad4cecdb777896b5876f9b27872cbaf8165648412b6da9b935f55c1affa5753172c73647efc60ab55edbd83c7b3abf2e7d4f3e4bc165a22de2d027da4e084705570f704e8eb1c3b23fe317edbb9b98c406306cc1157584d6bc88ce1b2e58d1b263461c060b9c2a6a945a60b17386f862cd03a139a3060d834b5c8c07913069398306dd894697589038e6fd002358431cad30a361478fbc52e71c05113461362a01698a58d3666ca1cd15e5871ac5133a609dec25adc3c418344e5b3408d8295536cdbdeabfec86d164788e3db7516073f7c86f0a2250b16166efef4db2ad3c62faa6de0b6c1636666f892bfd8abfe891c8707bda313618f1ee4a5622b8b263eba43a1258a4d7c45615b5dc4d6ce62b16c207ae71c78ec75e70dbeaaba98b1c5115ad410e14c0c88aaef99ef1cd680411161b8bc31630ea2f60985ea1260c810030711698c216a4f4121286a3c91450ecee440c411443d7fbbe635b6a885a5ec96ddb0a9d94808b1a591cb7575e4d22d63107cc2ba74a6514b0c42cac8a52517d951d2f638a5976d7daad4f2d037f94074be9541b3452e08199e7baf665274e8aa2141bde21ca2d04293c6efe8979367f40b16273a79ebbd9f5fa495930ecd745ee347997d3d99cb8f935df64d2a48a79f9e1329645ad306be6165e17284183266c2686a23c291577ad50f7d3bd12b4a748e83132911af4ec9e5f1ab1fc79d0374b0cef3928eec677e843f764539dfee097553d2de79774a4af05be7d0bb2f764a2e32d744b2c27accb7ec9b9b739d1258a655dd07cdd0fdd9a5da4825e9976ee6ea94c40f96f92a5666cd37c79d034e9833e643cdd04caba067147ab140d0b7c8cb1b654ea4d1311a46ab4af0317e906981a0125e85ad875e21d343872d58069ae9d54a2d5c4f186cbbd09732121637d223b0afd2f018e42e09f6d37709097bccca4b77482bffe5eb97335d3ea177e1750d4124ec2994eb17852e29b3113c965bb4ae10f3dbb2828c1561321f78755b1d7d855e418f8ea457fbd1bde841bdda3c3a915e691ea373bdea3c5695978a15858f2a7cf44da339d23bba1c8dad9a53f39159e69df55c1f2f3de6dc6dab66cff5ad4f5cda1872b16d75fb8efbc5a6d1c8b6dd00affb67004e346145972ab4fc76aaf1eb13eea1b794d86391b35c1b9f209d696379e613f009ecd0237da125a221c97cc994b3b44a4a24eca5645ac49fb76a3d1ac1cfdf5abeb7d75da5aa411b57e53bdf98c2aad4807d662d607895b5b49a98faf27ca190e60b854ece4c4c5eebbb9b5a885b510bf7f03a7d78f5525e5397b3a7e8ee8f0fbafbd383eefeccae88513ed4dcea155766f37646c3c3db790c37d12b94f7f476ded242296fe72e2db4e33d7c5bc88767be43b90dfc694f516e823fede3dbfed17a7c5ee76f3c280ae53a747877453a7c935dd7f991fdee2b8198ef7ce999567ff6f8a5ef709d1c1feaa56725f93a5f0c824f40f90e5a9be9510e513e047550af558d4271131462027fdaa7e769a7ce37ceb5ae88cbf11cfafde06d46ba8f4267fe7de85757f46d1d0b4bbf51a8d1aaf395b554eebb89ef66385e25f2cdfc1d590bf4aaa7552bb8d02bf8ed0bbd925f5481855eedb7733adf5490f9f8d5d437fcd6a2d39c1061ba4c9125062f7a9d2d29e09c61dbe632ba1cafcb6187e49299775794318fe6fc19c7e9d125bdba22e91bd434cd8fec6bbef419ad5e993cfb45abf71767de937da82363d1af183fae55dc0e9508b3b56add78bb70637cfe6a952f420873f6cbb69d36a23103e6882baca63564c670d9f2c60d139a3060b05c61d3d422d3850b9c3761307dd09036e41676664213064cc412afb0696a91815d2017386fc2601213a6b33496366ccab4d80b7789038e1a5e863961fc3a07c1db4e41f0f65b20151fc18b8dc2cf2f1fc19331c208738216687de36b616332a706dbe5ebf3edc6bb7c63eeaee88230f62491d1e1c7af56f95da0ebf2cd23ddfca2d5e76bcacbe9bc760a31f0092240027fa05f1e5d876f3b9c83e0eda0a2cb7b3f7de3e6d67121814233064ec1874f80a8cf8cf7e57cdd571bfac651cf271452f9700a2bf009d073bca6e0f461d839d5ca7bdf0c0b049fb40aba2a73e82b700abb27689e79ce5753dd57bda8d2bcf6d72df3d039dadf59da7cfff66afb2a3704f9ebb669f3d0af273e3d4abcc7dc7b4c2ea1f8cac1b6bd8211c68f572549f0ed4da974d209d29552b1cab773bc5c693e4be72bfa2623a5d21daf6f1748faf292e4a6811a5866929fdfaeaa762d5459f970522a9da4345f29f55f23c138712469167f49982bcdcb93c4c7929420764a24d4220d38dd1d59fae8b357b073403fe41a366fcc41828f7d7e7d1b5b900e3b07c86f096358c3169b361f6ac5c7b7a5a4a8d4aa7405c2444d32c810a2999191208004a3144030401c108c8624024dd5651f14000c9bb6505a220bd42807621442cc18630c100346004004446436310180a242dca5f160e0430702717686488f1caee641ea1ae6382518a1040331e0c0611f63b5ef8ba1afef7a24c9da0026cfd7ac47ec15f9c5ec34be109d18285dfc521ae5b425fb45f4802ac0c8fbab08c6a2162abd8ac2107d0bd35e2df87244ad9a57550cc9acfaca2d6f0eee55c640e894bcd314c24f5d3308742f4367ee0af26f6b53c189375e181399affca86663f1bafab3ecf298629cec0ee46a548176b70c4c8e543361743a6e949b6654540d280671699dc151addaa2b54442dee16dd95a00ca4fde1c57de69a06afaa0c31326a566b08a231e8d6ebfcbc65d10fce2d6387fd58905a2927d8fa1b375a4e8a5c8c9b3e5a116d5ff98501931715f7f894f72e9ce06146c7645c5c4fb80f4437f59542272fbdf31be9dc226dc64fd5d7a95b500890c4732c28356eecea442f76689082aab5af676ff742073fd10b82aae83b2a1cc50c8e031cf4b01f25c2a6bdbc91aa424bc03b85bf70c7180acc0418d340f2f64ab14149da2c97dba0334c72e02a34d45e0a96372178c07e24d7ef1f087d7bfd92416cd22d4bf207d8041c27aa5622b6fc3bb2e1cebb5cda4a6b1f8898aa4186dd579dcec40a0a238e5e594fa23ed74d7d708578ad43c92160bdbe281a61545321ba3ab6387294ac2663807af8bc26a4d3dc3823d818a58b131ca34078fd8bc90eb9b777fbeb04dfea2dc51cd95e92f8de85735fdbd93ae9eccd5a889a7013d23baf05c65d78699b318b3045b0265df9f14b2f29f3c5f6e1d3a6251acc0c099a7142bc2277a37c363c7e589544027435395f8aced77a7f02c3fcb4d5cba0f32eefd322630e5b84b988badade0a07a7effc0951b8c7a954ec47027ef788faffec8a9cfe394754162a77aea251cae158d35d1609a2dd5913bdd8919c037a9a9b91d82ba734f81dafe7a04a57a2b83651cdae23078b1abecbf8d49a0d91964e5a702b3ea31de52c9fc08e8877f5e8d9247f00d898384c174a9cd47b13470106c12919c134ffcb10ccbe201dba515b1baec30debee0ce554566d621e4af1a41e31559cf4f87d9d33179ba00a8b7eee4b488b998b6186957a0512f5d88981d8dec867c69ad34bae40b64bab17363c9c95177119f2cd8b473a3e4d0b5eed4036be63226b844a1635cde589c3b3417cf694c01490c89a9cf1a8c0bb1e7a50726798c49ab3764e4372146988d83f9830dc9894c70c1338d4c200452bb7fa093dd4a543a3281e6cbbc4181d96b408be515ae3d1da350b396761df42fe5c839b1f453e7262f3851011d091c79d5aa9e1e0c08b380df7160c2129c075daf2206ee48b54ef2dd86fde7818e840990b697340b138e85d25689075c0be81495fab20232c2047a504ef9c32a47def26065f90fc52f561ed4304101c3ed8619807aaca167985033dd7cb817511a97f082075d2e33be136f0b8dd97f29ecd4fb52054e194abb1a88fc07df8122ad3773ce995d628e238b1e953c3753abb606cb773f6b7fb3bd96a056bd5da6a1f20d9177cf66b2b2ef70c5bd5a4a364bcf8837fe87d101b0ea60c4c38f9284512ad504c36cde7a4ca0f751e03c2634196502bc47036764cbb941f3048fdfba7ba511cc5b437e0da118384061450b808dc842b16a15095686e92e72c800732e4432301c6959d94640a4b5ea465a7b6c7e826f072b675eec13e9668efb70e65d87d5bcb2d10b5905c5dd37830f0fe404b2a6787a844765cf06f1024fab83986b7fd0ad49fcbb17ac3b0beb17101cf9651deeddf5871ace0b1193791c2191a009cf3135a2f67e2f81afd6ac4581abeff7db961b9d03c92fc5dd520b945aabe09e2b8e1b6955e91175d5aaabb15a7dc0620724b9dbb6a0ae656d1b0c19183d3df4196dd831127fa2ab7d20d95c20d76e545d3050f746bb889b7d55b1a1b2deea552f2e33af1fc9c121c0928f1db75d827e164a6d46218f793dd441005e6bba4cd0ebb0cff6c1292e06139eb93670e9c66664a6b3888ddc06341ed546ce0868a63d155554cfd590994e728535cc84213fee4eb8275d24431d0595c6721d445541aca2611a0ad5fca34334590f4546f92b8b6937f08d4a6852805e48c9a57998f615a0859059a024d2907d9b8be99d52e07102d5bacd485e02b50e5cc4b3d43f5c565015e544609f10ee698fcb95df8397333230dc6d7add8e53503bd787e90fa5651178dd2fbd9d735d413a709afeaf81770f900e105506b649133ae0f9e80b78589078e84027f6faebe3e9115a8cd0c8a1b8f1ebf196efd71588c1caf73d966c75397fe8009be99e13fed73fbd112b7098361a6148180466ebda42787d0fc4553804f7339711c7740636fb2d0d54fdbe8484b7e183c02120caaaeb2f8e17db96e07d32810111e1752b438ac66d456d9f5afe3c2c4253c120388176724867600934268ea7cfbb5446c115e124ac7852da0d27f42ea75b6bbc7c2d170da728dc2c46f2c447c3c97d589b901af706648632535472807de1151f09919e08cc9ab28a132c3b4aabd3516ac91075e0bc888767394afbb09d70115a1583a06830796087dd6078e4c2d8a6a1465dec5a6f26d51493a66de62bb151255433a916a014cff52b8a574ce5f912106f0c4ffc3750424223c44c471f0986e03742ebf48bcd38e8b3be7dbd614cbc631eea51cd9dd48dd4f87de92fdf42dc98e332a99851997e6ad8a9cb5fb8f7aa8010ba011a42e3915f4b91e0a80926b4b1d92d30a672df58ade0d9370dd8e1c7a02a8e1ac5e13f95da7b0a71d07fc2b55753eafaf6e9a3775534ccc2737040e453e0a78151ad52b0f3681cb4bb5509be086291aae8f49e4b0d8c5e7ea6e2c841fb8f6a2b5cee110e1d90399f2abbe1ee16fcda68715109574c3acc584b8ec40c88ed96cb200b844a37de953f48465bcba966d7e2f703c7d138f10809526088b129aed6d7ae3bf8ba4ebd6fb2ac932900f4a34475425985f68fe582d92773311fe171f3e10d737c5cbd4267e20eafb06c2af02d6ad0fbcc664533f86a78651e94593ba5463ed1284557a3b3ae8b4053e3d3511231a71ba24d101e79d0decae57a3a64348b9e3a44ed10c5190a7d455666d209e699d4c1fba39382fe760797a056c414c5bf6c65040b0408c35e93d6bd405294374d6ce29f4a008fb3cb66f5acab2a88409eb92d9399a755947a999f25ba347b1e3e1768075a426c907a96dec3a499f1ee8c4444ce472a2af32c85a6a10f46814b0ef978d29738e31bd55c65a8d1d41955d39c63eaf764d4bb41ef3460ddc7c51c68214315ca8efdb28142779d5900fb8b401ed7b7f2616f8284aa8d319f90e4cee122f2271adfd5e8feef963c59cb40152f170edae3583a4509e74bdcc9623c43bb1e9621905fec275f8aa6fa54ca383ed37e620c3315cb146d552c400fab65cd3df38be12b2a6b428452751ef3357d86f6998d5b5904e567f117c32d736af78d8d40b5595a6faea5930340d93e88fcd9f539779da7fe8583b6cb09946691701681590d78ca0209d1d9a8bb2e342542797e3bfa1626b5d7be3b106c71a9980d9d4ef76bfe02ccc6b1271e66ca38c1d61678d70a9f964b5f049ec80cefea65d983bca6d1934eb12642db163a513a6b2d02f5f5014211beaa04f0f17d898ffe95e80f317272fdee728c4de8f9da3dfe2fe74744f3e1504409cbbe297420b8559c134f96e63c7fcd6a238a2dfbccedcf1626c839001e75e80cc6f34fcf7fdc004d3333b16f42e62adcb8815860598117bb441162502bd18b7c6b7d8cf2835b0ae1bf0a03d02586f0a54e77cd748f4c09abce4add112c25cbc5cbd54a29670a16ae42e76913f0facd736395d2bc84ea8e4590cbb953b185b995662cd4fb46cc6bd7a054bcd10a04584799b53a1ecf3a34ec83c163dbbfd087b93a991919b37d94d42fad7c008186cd7e821154cb51dc42f31f233f2897608a0738853aef2878583d0638e9549f99d2a936a4d27e4e938b2442691c48cf66178e7d05b315927fa3b679d4ef555706556173236a36ff8da9716b937b2de02e6400a4defe310dcf2aa66f532c201e6109ae2c98d6698e52361f7f29af649624ba1d663a83bc17e887a2f3d17e6bd8f36320a0ec3a60787cef1f6acfc2494d16b22b8a07e964d8a876b63452fb55e3398ee8949ca1f8f3a57134ee310183306743bb31b9054da064cbdc8ac0f6c42bce29c8304eb979775433ac7562377c953337fc40279a74e3572910da434503779cccf62cc799f879f8582bd1022e8e172743daa7c6558a4f00d6c0196a671b22b556e8c0b705fa9dbf4f83fdfbd3daec68d5c5f9670ad5f2a118c1005cdf04978df5eba3ec963dad4dacc59430eddcc73caa70b2bc6dc33e48eef2257daa9572046d48d5b198eb390aa86dad18b1d2a2a128ecf458e7cacbb844dfe4e31ae49966c2cd0696f374bfa0c7a3f4ae63aa86d6497aff8ed0fc443a551d03e9a4cbfe759d4bafcd28e41e9419d9e395d5c58375554dfd8f3827819f56077a07ebde70bb4a6e2912241d54429114d279699141073b5db1b8a283b62642a1ef549def856ebe18b4a7adeb8071ae98147ec849458668a46f24de5e46acd7a7ba382d2fc62511554e0049d7a2a9ce156221a59b54d546cf0acf77e5588144d23d67c4189ef72ad88aaeb930d8e3754bb6a64957c140b3e4f3e0bccac7cc339afbc2110a08b3edc091ee10a4089e7a1e32f1d2e546f2ff3f6ce479d81070058427c03515b42f08b55b86d0895056c838cab769c98ca1773c986e6ad087df384a1ee49c79f28d405eb27652733103cf0f0013ca43fcfd7dd53104e868e4134527170d7b0c88e4e71b1c8db80658fedce019fb53aa8b01d0d8138cff425330bc1ce21f9466150a469ad7882fe9788e140bef734e054c84c02c62b8810f1d95978528321b6e13dc5d0b8cdce1a2f31909827a3a15b601f7b19a83c654a8237e9e535ca99cec22aea0a03b874c29d40ced24f93f83bcea7204be5bcbc5923a98576bbce9d9ebf7cb1214e1e4fb1a0d165b994b4fe8783b3f76def072c7c0918b5911f789228447afc6d5584101e22d1e0bba4da5d025c4d13a5b4d6b076bbfe1bf617e991297f0e1d4c9ba840d5096eb64521302d625b936d529f0c3afe06eecc500027ab2b1dd03c34a734a0e5205d495d962112d0a0055914dda9733e460eed70c7f8e97ae45511d8a5bffd8d02f4e699041625af137679dd0d39a11288fcb637c1350471489d32c6793245d519e6722987f19fe7f11b2fb95d0bb045c176ea1b647b56ce32852654e653e403d97500121d51ca71034f540fc55539bcb50461c0c4eb50c70e44249d230ae760d7394d5db66d17e0ac973ec4b056169fd6306d9f3f9c2e3e2d18bc390f9ce0d3513439180647afb7d2556c64a480b74bd160814b8c56092e7d4cb4cc0ee2487c11fc2b65fdc5fac5eb419d6f7bf981200ff7f8dc2225461af551d64e2033a7551960e7070d364a5793c8d101342d7b5a6b5266693acc81a3d00c0daeab7f220abdf045d24879da046ac1b642a440f4037be0950e7781161a80bb14de4e6118752660581db43bf8501649f100be1afe46f609828140ded95358b2e837a039d769c46d1d5ac72ce3bc389d0d456c34edd2f69108f7222c95398ddf838d1c2fb4f85e287987f821701066870a4bc3e868c733daabaa0360e9c2b336b4b28d8b6bf1f3c7aa2b5a268ad6ee0a3cd14d8a442db31c9dbdedc3d0da0ba886780c6f6f3e9adcd879622838054d666681de98ca51c2b9dbad9db9f34659fcf00503211b9652b31200cf74983acf11ad46bbfd63e55423d418a322de7e95cd8ca581e813e5f708d2c503286de2c58a6b8dfe35b70e82f93fabd77d4e9b277b96430655455de0a6836ca4e6b216a6b303c403736426d098d1b16183201221e59ff44bf81eebd41fa29c6cf72475487f33f4fd68cb350e8041f6001a346e6de68c0292971602a85a00c3428905e7edca6c960bdbc796213bdf0b362e176866296e61cfc7c6cbb585e4b1d24064c9daf2aae21dfce25bcf68c02f8da8557532b16f448a43602a50ccbf89a7bc7b9ca55a2c4c4c9ba3700104bef51a66d83fbc178667bd8f396c73b4ee54c3b0945bffc5e0f5dd771d8c3d3e28c84576953d01ddaaed96416a6c073b236a985ddc02b1e00c53ebf5a70d947842ebe8c5d424a2848dcd6a4de102357205731c738965618ae7160288520a7d0dbf61da8674b99bec12f8fcb182d642c3db32968bfc28070eebb0b9987b4c6b38ded822f5cc07afe5d35fe502a28be9313371eac431d6cb99014134da8f40d538998029917c1a04862ccd41244deb431469cc4bcb6e2ec8b751ea52141359c4734f47c440d18f4786e8d14d62ff042171fa693720dd3d71562bea09f823ef41c18716990500294a20c8dc825829c0cc1b766d8bb4edb4b754b01aaeb75bf159b2e8026639f216b04162fd2d0ceedf7573341df326fc12aa6f4f78f59fd7a7357145f552bd842a4ab68ec5642f57c94b714d469e7bdcef0be3c72d148c53f2872a550fec878011c723bb40dbd8670bd02665e8503cfbda8879c01c0517d9e31bb5d661bdf725759d29e47210c84ac925ee1af385bea8af5babc9f12183739b487e3bd8f353054f6363842bfab849cc8bae195046e5620451bdc232fbf420d21cccbeb30e48f176b9621aa2e16b7fbb7401a4d02499d38cc7d8c29513fd7807392df7ac4494e915847aff4efc7340b00dbc6e910d6755ec3f4e00acc5f1360684c25e1b68cf62c0e966ee02b4d532b40cd6c1baa8fe6968bb961b65c2c67afec5227d8a05544a4e30afc2428239f2c3307ada2cebc07931095448d2d7ff76c11aac3dce11a4c7757071f9fadd003321cfd1430219bb181ea8e2cef09886e5151e6b1c9721fea16b121ca421a7426a6bb8fd4bd3ffc1dfc24c81e6624c445de01f002c7f8a94ccaecaa18c1677f23b9bdb2bb95dbe481255148a876e53be716d60ad17a3dce54d70b43875e35e687e40df4b3681400e114530ff97e7846ca92c2bb26935b29abc0061ed918edd5c95402e43e2ac249ff6dbd0f5b148a3a2ec498a394bef8e20c1fc80ab17a448ae557afa85b9770052b6ff22ca8b812e1ddc8e8b2af313f693b9d36042f1b13fcef8a44189e01fb0ffe87be6516435898a88d25635900569e619d88cc2d7c7a0fa670afe45ab5b9e0b7ebc48ad3fdd6c97f917150987cc5626ef928efeed38251338ca2f5821549b9059630c2b81b5e872873eda2158000082c04d3cdb87f1da65b1dc4bcebb697742fe65e8f558bc4c97d8eaca30b15ea21c3c3d9db267b7fd4473f007fc31634565c4558ff7e4aefe38e2201ad67552b55719551323cb1195b5ecfb46284c4e8f76222d0543b5d147de3daf97130b83347def38202d0c533e3a3a20aa9ac586269b404669ced5f6e49294175633135ebcfdc59240f6e9f0937a2115ca42bbcb34f0319881afac211cdc95fc61b75f6a2c8f2500761218b5648725546c7292a313f5ad5ae2e7dac1ae05d8d3a383ea7d2e7e14b33b808dd5b365832417154f4c38704ceb54a46eab333eec90eb85ea602ff741c49b1b52deefe2097d9f432d7698673721384002a6c23f942fb3674c8f7bcfde6c1ed87c899040913e2142dc8633f9990e4c927e9cec24f4f94f259e4be0d83ddedc0990e3cbe8a4a1558bc1aad7bac2297bceab11db3e7cd654ff521df087565c827054f9149f60415e00c36f37ef5ae7c42f624590435001d1c63baae51859db4c36c4fb4f68c0e004190c9ca4415241b5dbde87b1b893ca04dc986ec2fea2703aaa5a887da3084f92f3eabb1dd7dc9e2550b319378e86784b348bb911d529d9346ff6a02b7bcf7fe1d5e22f50324570ca314a96c9a630d77a3e4c1edd1c7803defc2adcedb25c7f656fe25bf7f861d95d623376fc1ecc23b713d70c78c92d850a8492fe08683b1795d061980336add11809cb16018343243f876bd54bebc79f10f87d8b104ee4341e05121df4566c3abd628e5c71b35bbd9eb3fffb512943f4f2e63f824ec5201249b6f14fad333167a009088aea53f8a9f76b57d636dfa475085a8ba33449ec9c72dbc12967681d2d3ee12575460769146b319717b159a09c21b8fb017a7fd6298b64698d7992021fd8101d030d15d7830e888eed2a3a04eb42b8f0435b1ba7e145489dde591a0257657719c1bb49748dde9f31bb51aa18df24d9a9b1b61bcd4e21dca46d24f56943f0a52f534a216d11991e343402572975d65c4aab718f16e07838ae82e3d0aea942f5a63211799d363a02762f7dc5ad44a26b6a306444eb7caf58ade2acd5215598037c9585142e0e94e2af0e5467e6d185339fd834da43cba6622fa87efd04a513a4945b433fc398c802574dd33150971444335422847cec6db097144423c62109febc2a478414e108f58e819c127da096f17b69e73976c0ae753a87924997e300cba5a4550a261b9d72d5a75b129f4c49e4ef785e4e5261b8433371d6c491ad099836ed05843a044d9a8729a2891384e76f0768aff38aaaa15dd69877a260232faca87161efe5a4e871f773903640a2787e7b4de31d21423f83f611e0740fe8aa29dc32139451efc8873d5240b298490087006b6c372fdc6a08cf2072ee5e1bb39ac61fc0e74faab2bb991359e9ee08e7d939d0c4c290ad4420c9cb273f911bef6f9e1e3f9f0400e28ed74f5963821fca69ae33c715eb0d3f751117adb57f7cf075babae354ab26b44df903ae14706047f783f9cd742f910df87cddaa375027798b654db3fd2b38f7729630b0bbdffb75a1ed0421aef04323c375996b2ef4e17b90a13ba893f820f886a8bfb24b89fd21bcc97085d57ab7a94b780a97afff136d55ab7ab20bd2a44e2c072965ac55d3cd7868714e987f37333519b218a8c2a9659e4459865a259d862ad7645d742dc239472ee57456c0bf202e79ad832feacc052cf416c5b4fc8ac6ad2c55e21db054a943cdd8cf6c2aca371380a33104f8b804e099c6edf2d32526fc6095331677cd53b38b8a1411dbf3fc7cf2febf694a4368d166e19562ccbd6884fab68e1a778c94eaef2675162f29e857a7cbe235f33bc069ef9fc3ba9635ff891e860795a14413b60ed3382374a15d37d04d3476ec4b1e556d94403f15bd81f4b1f392000c15a82c068a7ea340317a31870c13b3c2ee1ee669b29bffda903db28844d5ad0612bf8faf4f1499f15134fa02ffd1b20baf37e652c5600b4ad5fc6cd85c892d8822b85b6be328d1bfe11a93926574fb22eae5fc28349f4eda81d63a33c933bd09f8141d1dc34c413d13d3b65133f64109ab0057168df683c3fe7af4e897909713d6bf81c15b06ef1264f5fbb501bdf245b436ecad4626681c6d64e16fcd5e8899384c980a8cefef40db9840d87ece0e46eb9ecaa7b17fb1b2741ee566312603f329f7a1b10137541adaf523bd04453408b2222dee28d2934afe3b4fa592663510f8e5eaf5be6fa001ee1045d5c2b8a55386b54484a7fcc92f062238062580b6e6a9662e904ad0f1ef9cd8bfb9b5612eeeb54409905ff52e566a60947a5e51a2d8a30812e328696a136402492a0364e83f6df407e0887212a0a7f9667b4aa2b5008671c754845beba62998cf0097dc12610af64e62d0915f35bc57dc5256871420639b294375ccb6cf2ced45feae3286e41a77a7914a375612b5ffe8b5db2c42f0a0acb35e8bf47097f51bb787d3ecb7f40acf1243bd68aa8a704be242c926bf547f4c4d71f8befd7a163711e8c855c2eb1e1e75664bee24dcdaed73a3b3824e277997898bf2a8b184376bf003dd39c2c49e62f1a5ba717b77d533bbae311f6a57ea40d1fb58d713c51418face32276dd9a353382e9e731f48d11eaa0e4bd987509d9d6a8d2645aa3c177b3c0db657c98e6161b995c24d7edca35c510a6ef78705f318fd9ad7c3070bb9735f7f2568b29e26cac3e14ccd4405ba47ef733e1a2ef312e4b6ca2684f8671b0d8acaf58306d4143b3436814fa879461e019b39427937f252468ec5bfb8b4a3f1d6a29d9ed68e2cf0217908e3f4b42d43dce8b7b29598f35ef8514972253e5e40b473af2835da1440f10a71e6161e0a700d6c1df0e2dc5593a880890ea714860dfb656c36dc7fb9773d668fba2dced9bb6fe9c04c7ec1651d85ba12c70a8ef3b874b846c8db4815be0abf6d34830171a5384766d1b82cecd35a5193acb33c795589fc40191fc1eda79f259c6eb08b5a673854152d5cfde683c915f1c167629466569e3aa99ea62fc86688e3bb22118c4de2cf750a0bee9bf6e4b8a010166b20bcdfc4d0eab1143ab92b2086eb3fc980c353b22e2125152fa836b60c64790526d4910eb73e5fba7c8fe33572e8b3b2a5fb7e1c6358c8766e0aa2bd9522aec9acf7ecdb0bd04afa81cc76ca2c6ca2e30a4367055ea269740a37882cf28150ccf5f03b627133edfa2a42739f8fa1cea5a4ba96275b84368679bf8c906359d0038f0bf53fce3ceef6d2cca9bc43c85817edd934cd50735e07d17c86af810cd97f55b137689ced1daa8bbab95d1dff21c5d0ffdd84c072d5da63dcbf4f8c7c62923b4344124c0e390e655b89b1a100a3bacb03e44d8bc5beef08107f6b91f0927caa4fa91ae34821e6b37741ac49acfbef12a69d964d16a45b003e09be152acfd03efd94b2cd9dd8acefac4fdd9786cb0f694c9b3a5f61c0d2f6c3bcd12f32d087c26699c0871b39289ab0ebd6457a20c722aa5f65095083307469d106fe586a6d30058d8627594737091b0b625f9ed850ca4113770cfa01d4b408bc3d5be78d281bf51d61ac0ab2cfa09d998056b788a2e661ad80f61b85b5628ddd37eb827d8826a157d28cc09fae197b7439e4f13b54a5532fde1a14d0b84e0d41901c4f777d9c43b31be6502712f23fc2cf1f5bd80d1ce1525d25880196beb0f81a5096c823f46a85d9c1ff00982251d46366de5141672c554223a1027f5bae5a5936efb105fc3d8822da00a3729cdcdd2d854fa9b93b659696d2ccd06a5dbb8b4354b6b43e96e2acd26a5bf99b46b7a28aded051414531156159ab8a06dd45b55090b6b9b6e2903897d26ed9ff2d82067e137565ca3b4d30f07bda9349b9576fbd3201b4a67f3d2372aadf5e7416a94ce66a575ff1e6cb329bd44cacef15978adfe47eed6bd586074d88609688b10db74857375d316aa2a693a47f184dbc01364af51a08527fed684a7ee709b820b1dd7676718785f9fbaa2a093702f920c27330251041955a7832b606d37bf8a757fa60b232234b75c488905109883a7090770f10daac52851cde29c8f87b3a8cc0150450ea0502de82aee366676817e17ef21d45107ea6d0cceeb68c9b03aa26d2097c8307b060e887301be725c8f18db0701bd203402d140008261cd29c9c5f8166d0b62465931b4ce764e59fb24973f471f9001bad73c164639def19f1fa32e3deedd8a058dfcd6dbe5ca73034e273120fa0312a70aaa0402d04309eba97f154d06f01b3c2c3204ce775c65d35d5954d817ba8363590735281a597fe361220f6e590e8fe26d07dd492a21eec77c038e7ff35dfc7573c07f34f9c371abd64ecd8071cc2033729ce4852f0beec79dadf5b97b5e1fba95483942ed297df0fdcd8fd484a9b4b8238e38d2f0356661c6906f454f4ad9ff497b1a9224085c656eba77f9c7dcd02e2d45333b9271f659df25d95910b6bcc70569dd021fb7dcf6a99aae3243ed10f47d2bed812ba01577c59d474d48fad1c35cf5a95a5508f75050edacd779d539bcffb51445b2b15a65c9e32099bf98ef0136831c62a1059208602deaba61efeff2939bc34ef97f39b02cf45b8a19d91fb1ad4cc0f1bb297ca6b94bd15f3040f2e62bb80f3f823a9c55378435ad16263b45e499902992c9c64166a6d500e3f375f16604410f3ed12ee17ba35833a4e24e23d653603385c92675650076d19e6345e9d340307353d37331b4a10f67376bd3c0e920855e0ed1497500e91877427d2786f5dcd8d94ad4203b6af1a344bdc6ffe49396a0387c8d920c03b860f3e7aebcaf97a404d81a776d5c0f98a1279751dae7a70191dc12e89e39f7072cd7ff14e26c3767665a89ff8048302e7558c6d8510066cc6bcfa884c7707ce98b854e08cfc52883ef114eb16afab0560590239e26008df6200c8f047e27fe98175b1bb72719e19244c956d8888c85518f004e0be49b89349f9f05244d0c6181b1cbc9f094107ce5fef663ce02ca93747ff6e4a0a44260c7473e572e236e385bcd6488ca707aae7f5338a9c6c56dbae60f10fde403ed6d52d9824e36cc5f1fba40700fa5d0585ece5719162e4155b7b33ecf7e1e8f0cb6a41e95bd5ae533fc819b4fff16ac47f7e7fc7506e5eb7da3d98f5b4095e5813baa635b5b3f6985b854ce0f325cdb927e0b1f4e68dccd777728073c5984312d20ee8bb5354436b9ceac2541769fbd9c5e5b99962a9991f763a7cb2f306aff24bea81d3d5f72bc16dc538b2952e9e577109eb95af15e552f626d828fd56a06d20496b5c04d78a25222e04690d31d79228447f0594807dd2fd630ff2bd98bccc46c07373a0b010e81d00a90ae556c67d13ca37c4ce7d7f916544b95d48f72fde1686336851c1fefd58e4f475bd8ddf0e79136b857e078fb146c9293f9d548a7ffaf8b2e4472bd52ccb8b9b314c2e25441a94d34def327db7d88553f576c3758e0ee013e50062c79c868a901f00b48f566cf351a2ee8969741486c4c598390276aeea3440fd198d9ef3fe07cacd39843eeae7712609303d540cec3691f2c2a3391c15cc8d5d55de684e0d43928ca757646fc2cc1d5c46961eaa50f0fcde3b2f639fa871ddac4856d3a80a8674d1670099a7d30ec1a441f1b581827c8698f613e993b249cba31d1ae5635b0d3d047d3128b0c8d35baeda35029ab0a2c1efa6921743d7265241a78a05340d3689e7eb6d0efbf5bd72803ff6d63f4e2d51bc527d45afa7e6b6297831483ff3d223b1c9f5194194248e8fcba8e651598f669a01157eaf222a1d6c742e41f011fd6a9520107936c1c45ae2344160452f3b554406b54adb6c7ceaf202e1ee3a632ebbe1c79b59379f54e20fe2c52cef9f644556f2c38d94c95cbdf8d996e59de297441fc2d98b2133d792902f946aee5cbfa87b9d24dbe852408748712dd43544689348d9ca11e0c105ba5abf3674d2bcc2984c4d59e3a015a29f542f9e262c9128edc6b2698afc0422496dff43d9764b7259b5a73f42591089b4eb83a9f631a41686adb2ced91aa4e9672418a10bd257d6a857238579cabbee7673627a0500a3358a74d0b1c434e70f547db34c09a70711d06a990b0c17af11bd00a090bb05091fa6e1ce7867d5a1cfe31c7fa27630627d73bd61642bb4c466ea67b0e652e4c9d1d340e08c74730495854fa63130387761ad8e69421c65f39159fa6f8fffd2eced800dc6abb0ade14508903a738bd140143a1d3f0398e0e4d84a52ccc09016fe0023a6e57fdd9a21c53b9a46a6e6a20bf462dcf88fe8308def72331fa8cd6eb5648b1358e17dc80d3bfc6c686ab2475684a6c98081d0c9e46519fff16ac1c07269bcd62042cace9bc9112d14f6c280d27df9bf40695794049caca8e94d48e4ec0574160a686950d5e54dd074414c861f0ab599975fbd7bdeee0be476b63987a544b9e9fbaaf237f545409fdcc5f14a3ee4862bf701093a7b914deb0c0897b4ce8ac47f681ff82a753b6c9eca2011fd22880fd7a17f2edbe3069662af96bfac598d537dc890488cf96ff2dbbed794f7d66f668947cfd228d9f4be4e5ec57506f7b78f1e47b229e366a89eb2d4e6c19a6ed45fc52af48b9ee59a727a15995238f5945d66ba7f32254ae0018d982a01739d9034183bcd794de339a49b3afada9f2b9d1c2bef22ee7ea8d4bb17cbdf2205e8a839ade190c6ca350f151ae60b98f6c2c80fcbcec77c02d6b06d237c72fa094659d2bcbd41cc95266abf0feba5a0cf7c8633bbe23956afb15d1ded8a399295df966c4e9b15c03f02dcb7f0a8ebbafeb1e3c25926ae08200e8e99ac874d82a7d1f499ee2336674e1aaf7d6def40bda9cd144053b7a7e3279be14e312c27475c6b83eb39cc1c4fa4b932cb7d34118f167f955b3e84348c83a7b769785c71173a1282c5c0ea49ff12755418070796e3730e935ef4e5b5cf15bde8851367e3051586fce796778f486ec34c7397830d5f2aaebca09548ab43c99a7648e6b19511e670039862da451fce97325ce15a59ee2f5394f12c018acbbc7835596cf2008c3dac19f77154132a48ac6704834df3df012872ffd59a15f250a7fd6d5a7bc6c5477b2ad099c6bec232cb3998a444ced36350f3cea03c827e4720e58650526ca86cad7888810944626c286f7071b6273060559492cc78ef8e93720bcde912243b18ee400000750161687a4d71d66701247f2174262b4cccc15a0fed10218fbad447ccc679b48c84d4bdc37e2bf245cc6b915effa3b04e619d72b6bd141dc51a0dc294ca41e5e9b8c58467e1383aeef2a103c2380173d01200e11411287450713306f45100d9fd61bf2301bf1ff82277da0ea0bc0d46c4d10ca51e541e7fe28330f18ceafbe2ed8bc97ca9f6fb04fe85dff2291316578131313f9e400b16438dd68c80247cc4cdeb1118c677d4ea2323d6f35c6b4da7e703efd896d66eef7f1f755759ae0e291a221f53d1dafa9dd88ef590e9c90c00b675b8f607ed243ec984fc882d2ab12238bd733527711827bb3b3ac6eb907ec8229970afa5d397f6dbfb6a0265e7ed92c82497dba1d4d16dd72689de5684e34a020792e006d975a855858122c4f8154c12d5612a8aea07529f50c429e28bf5fa7e983fe0adc40d07956c954b7d0e9e4a596c6e0222ed566079003ab748cea682a58ac527fa7fba6f9235081185a0fef21701aeb5de50803ecd5a694e8e79f92a525acd4060ce7c8f4d8c3ba07ac40049d1385e70e201af4447704f40f7c9907629050946e2b10a3c4f5c3cf9582962a2adb64dc85328b5e3b354c740bb406e0031f9a649ebec7d94b557c3027145baa34f7b01c446499992933a2a8e172747837850cec3c7551df584043dab7ff62f1a787e99602377e42bc2413c5163cd68af8037f655b7c6871aaed1195245c9b65a36347b71b2a1db83a03a0a282cc6806de347ad83ff91a6fce5030dbb87075ff0ac6d4187f0374ec11a01a2b56bb506dabf5a747b4ab4c549443734506a9758b955879e9f684fa3907c3668e5bda71474f1a033a86e16c9d07074677742340e4e91272ea112708b3d89da3cd2a99b3f2d2a4fa584f330b101c123bf0d04bf5fe08b0af0438ebac6408b51a4d4d306a27b8f7b02d7923d99d3cf478c0cc7dcef6775ea4588d864a73f6881996d6832633f81ab626818cad0b850df744ce6bf08ddd5e550221400624ae4c49599cc347fd8ccd4bac95b2d3fac9a753e25a159d67a58a93ec18d1bd14b093b9fd8ef9342af3f837cf12f041057a55f32e104b86c834b6d4723362fd6445fc6b39fbbcce463fc03ac6cc21b683d646a2497e86c730e4a74019bbd328af3dd2445613414a766aded8166ed7c564d007820d2ab122e8952bf11c77734880f4427759b833e6849b366db623b69d13c415c07cdda427f18145831ae9052e643d987a59a2f15d868cf6da703a42769a8417231d6f6928e6f3783462a83d5c3e605228a2dc396819e75b3d618e64b0bca1f6403da0898f851c687b418c0f1a7db83ac0844e0b3768b3900c9f0d7c68533d45f0313c4ad1a0f4936124f18781f18b73016d7fa772a68081c399f43a1b7ce3a78fa63b8065874866eb00ef0a3f6c77d43fc4fda9ebbd29f38ed23171ddf136331f5bb96a61f0afa3a44ef3375f9c93a1dfda5c0699e3c9a655b729a35b635e41506f27697775acbbda532a2238aa6fe32be77920b886f39c39c850c30953ce615015e30eca8fe7333adeddefb1f903992ce645e3bea09a39476140871d3c0e129ac59e2582aaaf3c197a5be57afc317b4d206ac2c98fc0d25272cf01c877af856df0091c137ca460fffb6b8f0d04a55bc8f519f06b4fb5f594949b37562ff035d2fc0459698907bc05a83aa0eedd14f5ef0034235e9f46c7df8f6b6f29f5d4e62ae6bb1ef49e4cb28160cc45f17865efccfea4382fd44164e04ab099a9de0f58187b433f2ff23a32d76e607618846eed3b6682d02348e3e7d60b8d65d0eeb4896af1d8339538af557bb8ae2a0db2b265051d48bb2ca8ac126d5c37f8c1b98d1d19d33d0b89299a7f101dbd38e89298da83ea68a18cedc57cb0bf19a1410dc935d01bf34c88890b104eecdaba5acee5f994d3833587d6e64af03f109045f8ce9b54e3909f815dd0d2b316157bf5a65781d8131c679be6e34cfc26edac452608790b20e56503dd1522ff6d82f5d03e897ec80f6808550dc470fbae76aed50964ace91c88768f21a24913607524b3a614c518f71e368407d13957e569f5e2245e16c0692b23efce86606af99910e41f0c878a2d5fcadf94b059d9e19768ddcaa5c757784c4e6c30147db3769b8a4581f004e687f5956e58d19c0869858c0de23268b83efc6a5d51fc43f5abffa56437115720321a610f3ab24818f11195fd7fb7dfb8daa5aafeb510ab099b84a0b47a3860014a1e29121c310071f403a04fb8d7c42ae8b477c3e6caac79bfdb386007d3724d84a01d6790ff000709e7633ee1197e25ca099ef83c144f0a04324e9af2c0f473a151be5c23a7c648e8429e3746cbeacdb3da9c32d72bfc0235c584cbe83a09f194396b6799886e5f7aba67ddbbee9cba1f8a6ad5c263fc20c39d417538e60f3f8fb031df3533cf3af3cd2e5fcebc1dd5fdcf7cbd76ce542c7c7060a5265dba11843122e5e0c0329f5a2d7834eefeb7777c8c3e3ee4a0420e18ad8017daaa57238a2c1000cc2ecb22c9698aacb0b43fead3082c313266b4b6b1b7651bb634dfcf06f4f8338f9345aeb15b260d72023d111494594e5d7d814e34e33faaa89eaeaa4b33ac6558493bd2ad8aaae548c31aacf2b00823f4ad0c8bb6425ab1cab01baa612b3467a4ff3fae8ed35f13ceca32c311e828b79419aac898200d0457a35cadaf4296c668df4f8004bb004e757320717c9911461494b5b6c760367d38c8884b157164228e2afdc73d392230e20d655921656e206149c2f60dec122674f5b642b8f0984ae8d10975d98cee6007a4b8d52b232c522a771c238d4a5811961f26a8308345f615776a4e2b22e67975de5b51d88ca303a16d62fedb93e88e9850257b2a34fd40dd6ab4468b1318b42df2872518d05fe444c70e3a57c88324540a20ddb209c2797513ce05921b64f408fc7613d76cd90ea84293e0853391dd548c53944d0ff361f04b0b76e81e8821540d37bc40377c50fbfb9340c4278d166e7ef9d5da873ad84c9aab4bb741d736b519dd352806b722d158aee845760db3fc0aca33366de95c2c646015f244981c9f2c795ecf39940296cda52619b5ca01dd3d16eb451dc64283fb4e5a4ff40a0519d4ba990fdf39d22f5fde00504bf9294e59a61999698a63ba3de603096dc6e83810f6be2f47d983168e6b062d7cc4c283fc0c6279a77f89a0d6e9e558b4b60ba2b60cf41735ff5b8fbec6c8edde345882f1d5db6dd8214bbe9e560977c82622ca58c20c985d495d0b9c4224fb501f73a70af223621f0b76d9acb54ef342244a930d88f49507741dd878ac79dc84b9dff8460cd8de0a0652715754cd18212fe5a49c209a35002ef610e4e3e566858e23dcb501d2b82214c245c84d0c0bc6b5f15a2e743adbc3663bcaee8dd60117c383023b4e52ee72c7c0f7edfe43206018627695ecfddffc76d867cf3771b4b087df553bf27e787c237caeb838b2de21662c6bf233037585f09767db0c596e650fe9957cf9eb17859f820459b07fd21837a178be8c5028c94c158eaf16a124728681ccaebc7f1b3c6b8387e6326bde9f6604b5d62ff11e5986608a337001aa4e95c7761f0ef953aa1c3dbade690a6981215e4849eb0f0876e963cb613626a2bbbe1852731f66b00e70921f2193e0aa4459eaad76ae65404353ac993004ce645d668f9eb40b4ca43159bd886436309704f0b182c8cc39a84a0ca92104be5014635c4f9cb3ed9b73723b4f4e95b8314e872364ef447153000e9e15953059a9eee0ef69a874affc683fb87f7e053ba014203d5fbbaaeda5c8c3dd3baad5707a812d1e8fdd6690e1ebf98be4358fe87943dbf684d8018a7d131d9ea2fd1472b712ba2e22fc3a5493fcdd687f8364b9d0d0ffa4bf2b4a599e6a2cbf08ecbd6944944277a30948950e44fe60a92c16931f1a03d1a3ee4f2dcfa9d11f49c6f4c97a1f8fe005d94ab0330d830ddd69d5aad77b854ff11db6cc3497dde7ebe42b91fc86b601388b63365c8ebb54b06963206ba303f8ca37274d709be11b30cbe0c8c3485e056a8c85971ab5fa13ef029a2c921e18e5c36934f331fbbdb2c9e7606381221d6020072efe7caf9733c39ab0dce989499df30c8357b5c3d2efabe93d287540c64e9ec295bc7aeeffd201c6c2d607a37904a4636194f3b43432ea150d4b7ea49a3e3535ee42021c4cec89b466c20f470813ae9dbd0444936dd30de91ac7f43fc665d466894f3bee5247faabe5cd5aeee4c4b326e56362065cbc1a177374ed30f7c822a7e6aa2f9b65d4f5626b0eedb3359f8de84229a46088ce895b66292a37d48a7b8aae423b8ea8f84be7332ed2c3c3c34e6c6f927a58fcab23d634c76ac1dd3c13474b2df3e5249e75a8bde5a9178a30ccac1d2d6431e2a5389c19081564e759a985e368a7d92a6378313b49a0c87a5d3799438216d7679e106f3a1caa4e2d01e4b50e8c939d513ffa723112ff049562fca8cf5f2c760af52344a521693f7ead054429321713410aa11334e0fa0b92c66e5aee3a9de824426d4075a368f5dabbf79db6b7b7678904f1d2544efabf704427f8c172ab676a88642f5590a93bbdb4469e4c89f4bb748fb8a3565cd99064720c04122965ce594332914472296b5ca95ba16d9aa8cd1a6b0117c48d63b3395c2c1ca1a0ca687283025f4f39b7f40712ddbbbe806977ed7fa065d1bae7b23db8b4d639a03b53432fb99c589d1c8e6c7ea269c82494766b7981ec61884f1332803b7b3be8c6684688ba4bd3d9482963fcd4cc64a1bc623c432c8808dc38d3636c8a6d35e742f3b48bf03902d09614b2630b436128789262b6a02a5ebf170a35d15dd8d8500de5026f25a45fff698b61620dc77e61630a7b40c22f483900b8b6d36e3c616a4c191721bb3851de3358b13cfec84255c646b08b9139b1a781ffdf507a62930818bb94981cc52254844827f1bc1ee3bfe33e6926d6d20c24cc0708319cc3ad4e007e32187ce9989d41fffd9306bdda92dbc0aa3af8255b77381b6572843f295bd794f28011e608a35f3b0234e9528a08a6a968b9b188b39f9e87ad6efc7c839ff4fa4516cbe39af2c55a4bab80a6cbd641a433ebfac8392037a4f7c089c0d42f17384aef1d435761a2ec6c43fb7b2070f523a93d080fe35508ea1a46ca5276aa05227fa2ab7f9fcb4192069272f1ded963986a13e228019a6cd49829df2024d508a0b8c280180d93ca8f2aaa6039e029124503000abd7a892f9b4f44bad842ca9568764f538a85606fef83551348f66cfe99ad5badf5b821671f43fd22607ba43444060a56c94cfac4c114f80172388cdb57fc634cd755e2ff433b23d8170f40a3c9eea34a8b23d896fc6764443cbf54f312e9da15566afe66da0e60104581e0a021c597bfaedb0d1c2f272adbb9b1d81f01abb1253b2c1a46dceb0fa576806614a2be11d0a820e0764863f129d7bb8f2b99ade45792e9824802dff88f9275ed7b3537c2544eeb640d6acd228b6f50d1ca7d47a7cb07130b39fe311240cc3bdd1b30dcfab263b0683c9840337fc6ea0cb1bc487ef91c93b5017d2f5bde3aa11368996afa2cc26a088288ed04de1c397220401c51b25bb6bfb46677525b4d9ddf96de93a6e38fc4e03f4b0c5193d07cf40018dfd9b21b23a91d345fb5d552101ad7ce520e8eebe37bceffba6c8fa42affb09c42dd1cf959a0064b926fab920d3400f530d4ee4caee50923e0d1111d080675e47c8c5f638c645fab192079b423e15253c8963cd717139ecf7e71c61452501234d7362f794a35cc58f6e747937b0f9195e1412fb77f51944b71357f0b19553bce2672647371347968e24a926148226444990ff19e11763155742ee5018107b3881b2fb07db064d071edbbb21c2a33dacd44ab142bafecdb2575f456e1b8efa91aa8b4a7dd4c72ac4d15f98c34ce942857d51c5638d82d0fccad331eed4a46ae07e2fb0dddc281dd817020963082884dd2d8bf9641d75fc2628e091d879df07cc6e9baa656ca84d8fc547702153d612f30ce3ddb9f73f60017c12b332cc5e23b3051527a8045856bb3e448cc890be07cf7da408a05d3b8ba945f040cf1c1ab9c5e79606f61e677502ac4032b6e1bfa097fb3cea34752fe3fb9ca15efb8a178fee55edaf6abebcf7c6a6596cdb0376819232ebb087dd9ab8e7a3c3ad74a635de0185ebf8f71b39907bd746dbf713bb6f7fe265a006e20a95cc9fabc1185f147f5053a975f4169b0ff115171845d8a91d6afbe6634c22327c5e19d221a4f5f442a4a82992d986f4c6c21c08d078c8d3af40872b17a4638ebc8bab48ef6b5a060735a6a71c5ce686e3f62ffdb49c60d09876c18babcc0effea39d57f4588af2fcc5beed7e759f394ef7a3d136240480e3cd3656e64ac0d5c9e0d2eadd2611048790eeb4967e647b2f9307b3996a9ca931174f8cc522b5c23c8d01a2bf8575b8de5a4739d4b592f000cce336b55ca49a22a1f0947300ac97253e016063848b7bea82a5f6b467baff4d956e0aa54c643dba3626c46f34394bf7bc83c3554262647706aaa58104d6cb8477301f95982288674dc82360eb9da74594a47f4e8385adf5e3373eeb6a493e58823f6c13c9364b72a1b08e0caf19d53e8bcea833e7f90940e880b8ab8163e39c97f744feaf499e3f6aa68b4cd7bcfd0bc907bb0c35faeccc17cec98748bec34f04b76e8528a49ffd54ba6bcb4ce5f010d11876312da93572839c04648940bd867a581d48f95ee18d4c824a37cf0cf8646737c0f33c94f2b45fc54cc8412d0e35603de94ea229cff89ca67389eec9e46d59010c93eb2aa9ec0e4123a5a7edf4e274cc17eba34d446f522bd97f308cfe4956cef6f1916fcf0503df92b0f8f87789b3f3661a657119219cfddd0ea1a22d79f6c7972e547c96197cd8ff4470a5f6891d3cb8c4c55ec78ebf1a9c77111b61367a5db869af66932b2873bbfc17cc82575adb4e8937293707bb05c0007800ab2a378a39083c7d8db9449d13cb3326e0f6bc33a9dd9faa6006c36ad713956978246e19c804360582c0d9bc2aa8f79cabccdd290cf6118ac66cb7b312474d1337f40dc66e03446f81778d3dfa516db57a61eeb7dc8443a70c3ae2220e2711f9304144fbc3966f3097c2f597f6323d05b10ef8a2c9466d1b86077261dd722df0b2706c6d6ef6ffec90e15369529ddf32e0bd73909efe6f2c7106c6ae99c94c54829c90514eee4d6888bcfaf63e972c42f13feb4fde5a1b7f52288e2f9d73021a027f666c5348875ebb499c1e9f06357b99fc39d5a263dc619c5d78ccd65f8f612943d4b72f376d36a9aba70f3fb0b1465099106344389fd333ee0ce8559718a1d9a56d379f849bd26500993420cc4ffcb93f979d1dbfd0e9d575055aada95de703adf229b822659d2099caebaf2c4d9a5a3f3c20ad8567ee071c74126b452ee164f218f8df238e89f50c6f72ba7045564d182aa324e69d901c4a9455da859667f4cf6b1feead2c240203eab0d16328336baf1670c4cc9310f6ecb6a1b44268b7127f0fb60f67e591d058628a6f673b6ddfd364bfd493714c1b19cd7ce96a413bf292d357c51a2b2f207642ef11e40fe0e39acf6f2bf2b1c156674d71a917d68304d22e1add0b3af6f34478295883d92b34661e5eb3ecf195c7237aee36c8ca9573179cab57ac008c6ec9d3261df39ed38f95a17d47a6822b85dd3af9307daed3bfd393c33bc5110b4f1d2c808dcbb64793aafec89795d33f9e1e5996944cc3f491cbb635a8c51ced8051777d32f6885d399edcd56a643b8c27bb743f94dc9d0e5a7d8619209046fc605d2b493eca269186e6548037fcc2529a913b28821c38350d0117786d9ea60aa1d922c01e1b40fd3dc167fc51d8fefe25d466e26e1c459282e3c686c2f9a12ce790c1f041ece0c8f04a4ba32ecf82418fd010faee46a5dff585e90081b23f312c7e55360ad85cc5398caf3e54a633ac3c395699dc7eb850ad2f1df0d4b78230cd8aeef087fe807a6f815fa0e11b5b77ce000cb3e2dbcfd52159343741dd5c0ccc3677177132884f0c2d36789662d12150bdd331cd81af1b4438cee84f2c7a3ae1870d56753e51e4c25daf4ade69dfa8739c6710eebe8e62434974af9bdca644b6aa6d59cae406aa67d457ebd7a53481f1fdd2203a8997afd01ddaad6d6a8d854b40d70cf589324e4e0a27408e4dbfbd7cefd022d749b96e25472d61aac7873a9ade365010c02e081bc9dc95cc095c6b948a26302634e2d2e62def4c295862b9d3c57ce9629992c3fb003239f56610c8aef250ca927ed4e8fbadb80c68031db683ee017a9b0ce07b3440dadaacd7e688d39de7ddbb7ef3db958c8dc7fe08437c884016cbc42c25d302aa545536ff5277da70cc6605afb8a1079c80c67cfa6d431c25fc153a8af379ed6cc86c999fda1d3cf5a86300d3179c4abe4c1135a407fcd2ebe96231306cf4c279fd6cc7bb4be45a7fa777aa4dc364fa03913a28a058088748fa26cc7fa16b0d4eeda3c3158513935723ebddc2dbf795aa558144c902647dd2ecd6786fc699abfedbdc752cc1dff8394e4c3ac47974d328ae5a803310e10257ed0f11794324ecca32a1581d08d5e6567820a9b6a56307707cb0f732228837ba8f5050a2a4eb970e0afee7544fd451185df69bae0f99ecd5492c4896bd53e631bee5d501c42e94e2ad39d66d5d6108f34b349908f6279c69f964f50178601b36f2e30884259596070c9b57bf8d47dc607b13b97fca7096ea33da09c213fc919b40d183cb366e8adba806999a6581a697f917f2c6a9fb9e3846dc6e7952f2e3bf45f083f903683477a57f2934b61cdaad224ee1e5a098a88f4a0b4482177a8c466a19759d83431efe33e0f22e7935f7a1f7a86eb469b6b990b1c2c7ee39e2051498a3bfc1f74b5c7d7e4c1001467f9de2ec7fd5d35f2b8a7a7807190ebaaf93876261babb4b20cea672686f73cf08979473c11f24514e0b7da1e884ea13de5dd2f6796a8845d8f8dae5b1a7757c7fe98d771c085c2cb303ba0dc57dfbc50a8eeb62d4751bde53139d1468833a044995286cd822e2c671dc72dbfe43aa819d79a942638a7b7bfb33bdda2f7a14f0b599892aeaa7abda5040d87fc6acfeaeea4cf0db06f73bfaa4313f02492cc95138039f65aeb9db034f904d8a4083acac8d6fc13537b2d6f83d6d60ea658455e4e35f5e31418d336df2ff923bda0ec8f2e9c6e1a50d7ac283b5121ddfc48bd0351400bc8b52fb3652a36c7213cb1313e8b3822e1ba39d73f9f9c43f2512a7eb14a603f074f20e2d9d82b1e755a8156cb1045ba3d28b58c85ef3f63e384ec9b933105299434e33438f4502a326168ce929bb18e64e2943321ce0d0c401fd46f1fe567ddcbaacaec6dec8a4afdfc3e5e0b6a367ab6a076c81aac8e130ee53357c1a69254ee7f83665e2a621c95f961d12b933e80fb812430b6d9eb6bd03c52415fc36766d141f0cf055ed0a0a798fee3fe0b5428fe109106b4fc5daa8d0307ed4c60b02a920ea2c50028e83362012acefc169df5006a27aee7086f71fc26eed4f4ef1547ab019c1b3f9339c1d8fd2d88c917d2f741269ea0a51838f4686c0941dc9b6a9c902cf81af34f59bce7701ace6b4bd6ad2455d7379ee9f7dfd926ab3d2cfb98503b70141c0a916e9dc42cf1028fb581f93cb65f105c520a0984c79115ba04f749421f568eacae0921530182e06fc7edfc41b1bd0f2d5bb00f07a868419460c49a999211f470b138b38469d1faec8476fb4478d27b8700bffe8731086d571fe6b482e0370d19ee0d62bc4ba7f10e3e93bd988d29e9ab7ae4336a496c6f7bb9563b1a531c138a7412d1da53a39ed8fa4dd251c93839e8c4e7b8b74f452ebb58a316d131279349da62060feb55e9eb576263b4e4815c03a83d7cb3be4b3601ac747cdbf6c4d2b7053e79ce5473fa30a874bb6cde70a18c19821101394f443252adbb4c9e83d2e685b92179a6e82ec0216653762f055e4e7f9860ce5718f805c0b92f206d01204ee4600d98a9792aaa669cc9764311dacafa5740b30dd4de1e23611061cc71700aa9d3dab7d8a53ff1b1b0a1fdecb04fd45f07522655ade74e98cae48ca6bb513972716d52501a670eccdc4c0a018262412b3e051427702934aec99ce415079576f9018e93224e498588b8f24861741e7866e2a0b1f632426fdaa823679972414636d30fd1cb44881e55aeb9aca9a6b190416fc5c1e328feb53f1dbb7f839ba4af09f67bd0edc18be2860e5c16aad994ec55c3d2c47f8ed32029ce08ab3212a46356b180e40b829d8dae8750397e484bfa929edc1e2af58cf074ea9c60d9e4959e0f35f0767ffd5c491066ca57a4bcecb7800399a6188417eefa9798e08cc977f2c2d7082204b5ee9888358cb2f3854bd19f6e277bdd8208d217bc880c63d64adaff86c3b140a5f981e21d7ee34058cbdb10607fd777d2814be30bd903b785d004ffe54550e85e10fd2ea90bc0f92c17003d085edcf9ac65b12fe24f0485790ae16882a145161358a84279f999b223d85f5a5012779998170f93bbd1f001f0fada0978d788a3f5099f51bd2812d1a990fe375c01b14ea74c488efd40dd2942af235b8b4f97abe0d187f8fd7915f9ac694976b8d56d9fd6a55b2b5715f3417a91df85e2f4b1ee9dca85ae63e7e85316080884ae6dfdc9c0c114ddd05d216d50a072d955667e3e5f99e0a2367c843cf1fd5997cb7be583a38089943cdc114ed696450b7e0ba1843e6b598634ec6451cf065dcb485d8d3aa94b1107d254ee0862140eacdd16fca689c206dc0ec2f2c814f143f56348378e767237632dbaad628043aecda0c2df1458ab71e10ab8f97e0eb1b136eee6c101de4bb18b748069b830fc6edfff91c9cc104be18566fff8694603c259b554060db175a17d821228efd7fc3f9263acc08ffeb0ef58eab50aa6feae43d87a7f2c0a55a4872340dbc7b4588a30f6baa4e56319a08e73e6b291f71c6d643367b766be4ae89e33055a421ae932b14038dd73f7125a9060d4cb3f9cbd1581655a653b6e4fdc90805eb1c0368d966b65172a429610abc197bf2d6f17a004d58d28ada922c7ef3570961f24217f096a7a1d526e7d7ef62db6b20b0a764626ebec9a7c701e5879f1d4f7647dc1c4714d58c18f6559ebf911187f775334d2c711e0ed609bb1da92ef69cac42fc817cb9b22dbb76f90cc3508e8ddc6ac7df621ebcb7350ac144c99415ae21bf8fe7d5858a019b56aadec8510d2e2b31271813a50ec11813af1093bf9e56f676077741058fe9699d4762db52c05299698d0b0d8c07c852fc71fee7e22d3e4953ee38dd0482fda09adc112f60a29a60229d1b4db57d06c6151bbb31a8883edd6f40a786b7b6262709b0b8d2ed101050446d219846860a115e1c6de3e7df9a1d42c6ac019a446721e525a5c1c9f6e5351495904f45f8405fcc2a7d2c78696a015ea67ddde1463e8d8b32ec2ea4c0e1dad4ddb49445d5088f6592aad9d03fa0c05c25c78d32a19e18d4c4228ce0bcd7d926dc76de7f7c9e78b580384df25775c777d12cafbc14824de5e7e43625e0234a50c5caba88e5996aabf542b47592c4c9c995d3ff4f6308da6cd3e1484d4af4750cc61809335635427da896c792c439326eee4e4b602655d3091a35091c28431b1808d05955c0b9f5b87c10a1e4d8d03f0c5dd658a65e83ef39c8ac509fbae59d35739b6a05a58470e7d4611b51e6b01de81211ad90db56295bef005dd9a1ff92b40392030e644e9e04d4569143170b9c7d74ac4b9c2e80753bd7cd8c7f142d1a2dd9eef0ca0ec32e9b82fbb1595a488a1642e233bd1b93a2f81f154b9a7afacfd256ea11612fd6799b08fb27490d1c2a13d2675e77d416c71e9142e25bf86c427b8d182ed0f073b45c48a8115b4645d44e7f32cc8d8d56c7958aa4110bd326d8e7724ec315d03edada665a4ea6dc74e5ec5ba6f9451e6495c68660bf14fb5f814303bde869cfca5d71292cff49a3189ecf608bbfe56e0291d59bb0a77e7c6aaebec764d107ae94410a5e771416ed22d7d6f65657a477ca6571225c9a635f5d5398e21b319ff80322afc4d59358e04548061c1b6a09ee6d3fed46d65b2895d0b26ab714e415898cd7861523931d4c9fde7326afbf7f050a7633e15a70fdf9e7bfd50697684ef20b8fc3910da4c013005662003e11ca4303db4be00159143362c2c10dffe8fee8e9548b22e0caba448b86155a7cb59f502696e9d77cd88fc26cd82bdd2ecb9ea1ca128211c6031514bb9d785d2187b64d16ef2ea815010a9bb750048c776565b3c923610b7872f4f5b5a500e091a3e0bffc01712cf9db25c17c910b4a567e68c5c013571f78ce500e5fd8c9d60245cad82b4607bc95767f2c38a9e3855851e7f87658710af640ef88c8e89837256ef090d46a52e6ae59d109d548d478307156b57bb4f38a1e7359a8321ddaa88822b67cab42e3ff73656d86907ce38de519658b3882e9b4a0920fb4440e300f13511644b0baa000ce6c0ca90e3c1c5e42cbc571e8cd92055d33da9b0abd33272bbc6ec8ff1a3997f0075af7292259eb77a4b730b24402514eb39b56745b54d79e23cb3208415ef7e5dc36ee7724a343236702542ebac4917ee27a88fbb43982fbd315c9f29ecd7f0908359a18ac830d96fe2b665079d0b0b316e32388e8a1e617a46ae863cccc553900fabf0c9f1f64a91033cf9e22749ca411046b4d1a1f3e17de39fe2eba06e76401c8fa36f6cef4841f1cf5edee2df2e9130b12dd8ea71d9116b8d88e088066921f573f54655cefd3654ffe6d9176d125542f1604dfb23b39550eadb1d009a8cd50986fca97b9990c6f63c88c90ede0083c9bbce8fe1d7e1a7b66033c86b73d61ead249dea7c57f0fa4548a24eb0c74499f6d24b3f30a47e358d09a4d2bc4dc20449d6cd82a33f0b5a3a1c34813ab77fbc709e7a9c25a8a11e9cf60ea84a147af69d5db5e6fb9820c31dea8074a39c782f141d8fe8a7700e7414b42f0c7285b0e90953f1109097abfe5d0326c35ded16c80feb911df80422ab46a5db259c3371d7c7d3bc6b712f0db6f6529888fde8ab531e8ab2cb4ca12a4c80baf8d0765c3ee5112aeb831d0726cbb5d29e673f3561b8f9120001b4e7020bc5cfefaeb9b56c71fdb05ed772f0e8aaecfb18ef5b3308ad4b96682b09bdf666a6a031373b1ea54af2e1b0961db4f4c9b75a52a500ebfe8ef9aeebd298726241e764d387ac5c53aceac34f270bd3935a7f885b24e397f53d05f3077c8d16bb3e56010157136c49572a5666b05de03bac8007fa6d1c8287283af6f5d43dc40f0043b966a3ffd0d17f825605e98dc35fd47d6ef56139b3337805db186e9e6a5ec7b17df38f25131918c318e037c7a09ea75a7daae084dc84f863c4f60aacb71114b321a2cf57b7c136b90721d40cd3fccd0e9f2ddaf6ebc18c7e5f2f62fc36fca782351cd15948f23b6719efe69c109bcf3099d12fd244198d8859224719224d7f5e4011fe2b6e04f14ab567b0e18f53eba8ab49640454df0f103661a68551dbb3e056e7f5f9d3a7daba65d1be2e8ee4c207988106af81da018036c7701c4198200ea0783d814e00381a90e41ae586b578b31acd8b50265ed386598b3175152fa3e0ce75ad117984811423086430ccdc8f21a9e1da69c463e8a09ebab9239851d1c42c003a88a8456366ec2819c4f4af3ac859723ced146015d713e1c2c1b4dc971f8dcc1ff7e4531c2c573d5b17c1d11866c10ced974777af155b5da0cfd49822caf753a7bcc7cbeb4fa0c7ab6e926255b1ac7ec01f78793a441a96ec5d8812ad14892a902288ecd29c3eaf1cb06cbe703a5951895ff0cf86295ade44825686d079d5756b7e4bc02df7a15266652e338589094c8f93a4bd06438e7184b4897fc4774b291684ea0236cca5807280c2b094e7f9389153d3de28d11ec7dd146903d4d3e30d21d8709431fb6d1b61d187be6e7eab4db77148193431c274a2a43c6e964ab81d6ea8a30821f722e2ddac32a287ccb109b046ea8342e32981b2637ff5e43bc87a79d344a13fb94fd897db13a1e2acc3bc4442f679fd108d12829466fcc9780532095c0a2b563ebda9f668708b78798ca61da03ff28faf9dc7999d874c6a3a62992a4acc0b956833dfc18162816927b6e2c409c189a979e1a1b7f77073ddfb7861a2ee81ddb6b048f31721e261273c0f3d92356cf21e058a72f72c051d7612aa52d3982857af4d696dda34dea63b949c14ffa38a1387deb0886023e8c2e69e9869eedb35ce6b85a4c8704f10bd18e3b57ce54501dc9b1df852094aaea675448f556661654b0b3d24f380c4c2a179399f724364a496372f4ec4be2858426e524e20b772f772a798c45bc513582ca2e539554a80dc2305727d81d56b901bb5a3d930ba03d95c72ee17a4e1b8bf703a02e3cece196794c52768640c62c1bac9277cb661bdfba7778e1a3245c9ea6ac7530324532fbdfff5a0b84db8f32833fc2364a4873aa782b24be92705fc31a63ce5a1c8e0e2d9ef07297982ba0976b8452bf849315cfb03a16c2b1f3129e2f99abc4b2f276b4a100092ea05151fee7b5f5b72034cef57ffafbdf363a76834d92a0010bfc84feaf8c2abcd2b258c9c15af5f052bd7861e2e1237c6c76b66e69c08968fcc277988f22d7861213637e139c58d79c2a43b86bc8f9d35ecd81cdd7fb27571b62224ca7ac807b7d26e201e92378d1c3891774d6202141da70376d8e8cbddb12da0b9078015f59323987cb6cfc84b586ce401adc7fbb13c7030a96eae546fa97a8ce5c6aedce6c7a92154cdc154d3765b3290afaffecb6bfd2b4c4d019c6d8583ced95fafee93aff4db68bdd2fc236b70efe2e238099d441010dcd9488c4eb12ee4526111c7fd6b36e6ac8c3e643d1085138041f0b0172a854af3d0d6c2712786075282895ba4f5caa538e5e97ae33d6a4866309ca00dfa71b2d943d427015d00f6bf81ad555fea49e15d584e0cd4beda29324320a95479e75081ef8791d85b12e9f9bd8fc2cbd66d832998d35a4231cd33737e1be5782a308389e39c80909a49a2c21a19398c40b5fa15afd6e7265344806c87af99793ddb49f2ceb336a3ed6c2668871aae79139b4fbbb21586ec0e75c55a8bc467a3eb3c1769163e73fde5bede7dee8551e081ce647d08a7578fbc1e9c1362b188889ae95a8bae1bd0c4c8a15d8839087bb1ee716e4cfbb6dab516f0732cc51da2f7afbc1e72ed547d1b6c70a7690eea88f7f980b526fc7a486e551f9e9986bf6e34b484a22e55644f9dba2790b403ee4b294da02478f1cde7d6b38cba6e1d5b3a2582dadb118dd04b9c9a04b5848334e7e73e52868efb51db85eefa4600b3725c40d9d92c7f002ee61abd42a0a09f46d28bb9138cdb48e477a9f75f5186584430ed4add3ac16537600d32b310645b6de30f4987bf9e7dbfc8b6d416ad0073a38a76464d4f052c1081a3f8d8144750f9c33860a1ef63e7216dc3ef94b8b13e99c3c19530f643b60c9af0aa0d4946fa84b3496130c7d3573b6ad9768226db587bc2bde62245e3ef3602db02508a35c17f4275fb3a48e70e1c820480f547d41a7a0655d82fb0bd8f07198292f78f57a4a43b9067c8816f05b5567ea56130cc3adb41121a2fbb180de33bf5df458d43a1cd8ff2df6bd1fb80fe1f0c526d7c15929ec4bb9b1280fc9af89a1bbbb7c0f04d27f21e063608bad87ea46d9b71278fed6e2ef5b3bef17c05208f3930cb4db129aac98831cfa1e3d8b1392d459c67bcc4a324522dcff0709c388708876d5cfbd17bec2330071ea152daa254ce9fdeeb27e607108216932c3f4997d176f97a2b91d901b9082eba9a8f306de86b9b7c36a810f3aa2008a6beade4156d52ac4cf256c292e83d907bd5af37eee53943e0cc0a4e8ed45c8a2600f7f8f6ad29840ad921bd1d34976402bf7f4922b50f5baa03d90a7f7960136bdc5ad3082fd32b143eb0ec016018a664f67bd883df9d38df6791d5295a6f57ca5f0bf45a11de03577008eeb978518d819b03ba31d7f200092e8fab20db1474d7a7308edc54426171af33a8da59d74dfd0c92f8711a3128cbb81c7a8d40386b4067e69090f0c770efc361153d053d34e1d5feab63d5224cb13cf8fb43029daf0a9b4be71caa34069fc50b9f6b2c9ed1b241f24591736e9a1a02f5ed99f64ab7301ee05010d66cfb21aa604fe3e5e0ef3b344f63c25a4fc8959f418716a6be8f24013d7c22ceca4f17c77cc56eeb6711629c23dcea39fa041d5fd62d169de796888fb81de36a41e833eac84b71c6491f92002faaca048a3a6dc999f787e1e13ae2cdb0a14697e0316af9db89627f55abc5689c95d3fa0ca2e3c9e84b8dc678695d654d4e5639c699adb5878688d80381fdf4cc2b334c4e9206c983c4288141db0cfba0a9051c33367cb529d011e54459c34d229f80de33fce3d61142c7c133d9539af514485f897391d7c32877c88b22cabb3f0e26067ac31c1209694312fbb96219b2d9bb679f40a6472028a1c0e7457300a71361d1cd182b8c8420eb21e0e8ac2171bde419cb858ff62f425d3436b33b9f801cce0fa63388fb779e698bed33c9c6f7638ee690425cfa5828777cdb50b0ed4a290f9e37d86b6e8a78374c8eedd6d6f29a59452ca7406c7065207d5c8bc7deee206d7679d704ff490458be2579ba38b9ffa1060a9ea06f1d30214f1321859208a5c14c5a78056efe51aef69bb4dbc96b461655114b9a89363bb6cb617df728db6f0f242b1eaca16b15be18ddbcdaf1a93aaca5eed1c8a22f0268ae2ed45511445f345517c2bbe055e0ef66fa878bbdfc1fda03020a352d7c9f1548a124551146da268c5c419368c540fc081aac17e8ec416ba51bff974b8871f489761bc9db6dff028b4a13a3b661f3169533a1a0371da20dee35e79da0e74c4c33edce337c29d21ee595b887d4877cd04b181081e7f1c3e3e5a00121e5fe9a8db1e97187c20a74c93265da99e759bcd866cce38b83c5bc6ab1ed8f767b81c6c9a0301eeedaf29cf87847b9bc29a4982d880421e33ad66fa7e0a6866e5fc2d908beeda8b5c0e5b58f9f78766464934d58951089afb539dcf3aedbf784c109703f9fb37107139645d0ea94ebfedf7dbabcb01c8b551d60975ea1b2d91fbcd4555c37d6d3b2904cd8b5f987bef7f9ce1faea6f8768fa9d6bfcfb2df0abea0a29c6fa7112d6bc6aad47a35ef9570d3a43af7f438d7e68f55b5035d4a61c3642f6aa449260a104d33e991a567b2fc69f31c6d80fb0c856e74b5975ac9ed5b37ad6418a813e2255ea15044237db38a2e906bd66d0eb83e8f579b6f2c4227aa1dc492168da8cb06fc2d0972ff497c7ff3e4ee8b4707479fc7527eff6f84f387167ed25cf08fb86befcfb3cec23fafbb7b383aa81bf79727079fc834e1197c71fe8dce0f2f897a7eef2f89327d2e5f11fcf055c1e7fa233bc3dfe4367bdbd8a7d1ef85b5b68c11150e8ea3fe351d0e77e3333586083c2b04436eda5f34041a09c85d19ea9ae8fa80739542279b6b4d7c6c87909a3be81a39ec43ffc7ad4399a1e755e22f7a9898e7bf3ebf50dbd89a6237afdb4838e815e3f47742ee0f686d08a7b3621d4863b2904cdf1c5bf9d162ecf4cc320fe40dcf22ff99366d0999ae5495a5d68d3a5dfd310bf88926716ba1938628c31e69b44b52e6d07bdc910c5b7fcc0bbf8788984c8ff961d428e311ff589f1efd727defaafd47e5e7388f16b9da9ee8f78876587fcf76db9ff2f877b922fda6d759dec95ba51f64ae918538b579cd603fc25d0dd87faf7d38a7a90bbd251bfaf54c17afea5bed497fa68cf9deef976a35b6d5dec4c3d3f3e79cf684aa6ba8bb3de679a3b1dfc36641184c2043a6f89c93c6adb1639695e0e269986a9cea297c34df1879dec630d73bf9503066c064bf8f367f4a699f697fab5b51949f3faccaf3fde9201e77d7ee61719706f10d0ede4a8c5e273d43cab0d9d61ee5b5e9045147fd1e5904fdb698ef9b4657ea664d1e56043539dc5e6ed50f4c15d02bad94f3e8b4edde559f8fbc64c8bfa7dde023250d2dd2fd25938492933e5f5cbb3d77463f22eaf5f3d63c53ef183bcb43f0bd15489d77b76c418e3aff8ee364c605affbd39bce7bd6796ba99eaf22ec638ec502fef779a5d6bc5ff167477d45a27696b331adaaff96fd69a2f6ab8f0cd63dabf5bfd96c85db4555b0d45943f3ed3a5075c1876437d8e56bb81bf3eebf333bd515de7b24345afd3e5e9e757aae67aea33ff3e2d9bb44e41afc0356cba2db7e6d53e46c3dc63c4fbcc9f864fc7d02b30cd97346069aaba9aac4ea157a09aa83e625203c957b8ea5275cefb466974f44a5d1edf69ee256eb7287f9cfb8da640b84fc32f6fbf5f2814fafdb9f1f787d827f4f5cd173aebed053deeacb767ded020342d91f9894699402819a22570e7e457fde5dbf28224fbb9733489e46fbfbc5fa2a9ddd25d4493eef3e77a4cb2af3b2e1fa0bbbd52364c165d1ee6e93ae76f743bff113d2bf5ece7753d1dd1f3777d6e40d773869a26aa4caa67fbfb96e50380523d7760cf7dcc64c5cff9e7ad6ead926e515d76b0f63ac1b852b9ecc0814838971decde52f53add288b80daf975ba1c605804485d607dc0a8af53ed1786dd00624437b61d5dde1c330dadbdbc3e9a4091b0be5230ec86fc59e39a0674cd25231b7b71d63be8d631d33ad6ed27e0f2b2ce9973a4bb71b6f6736d4c7bcdcc3a560e9482a0d331edd75fda567b8d750066f8f7c7aa66a6ba9ed1f1d3f008f7ee73342dd175aad4f5a71ce81a4df38b3fa2318dee3dba36de7d10605fd0e20c7686d4ec26dea6a9d3995d14c50fafcfc4f97210c350ffd5612000305a60ba467718748deef42ff5d71482665a833cfb20b85f83c11dd43598c1e55d35d37ebd18f57079f7d14c7bb5dfe43cdacc772e814a12b657b2eeb06f34552a42c2b6b1d6b328ccfbc3fa246cbe39dbaa816ad590dfc2e57d0ec86a310147d58a90246e96c8b972858e97b0316574a29c592b12cc21fee8147ad6e3a4676a8999aa3453cae4a11f6b514ac2d0c871e497f3ece939079b7a16eab9849e7356eb3356cb8b04678cf369e1f2e8c0b845408cd5d6741cf5c39fbb45388a09d42b500d4ccf9aec15a876450daca7464ec2c4b1b1023b35739c046b8c75983836ae75d96b5c6c107bd5e0091b30dab880030646a77ab1615605490a145782fcae1a08ddec15a866b56757d0ebd70cac71e1f12a0361ed041889d8ce281286a286a3a7550c0447c5d46a60a006538d46a806a3accb569eadf8168e1aff4eebfc48d887811e36e84069acdfaff73231f594ec65599dab9ed6b1b4b4deef4f676c743958a77effe6e977ad638cee30b01dff05b663a45b517b165d9eb9d18a7be6e5dd9b87286297574f2ba5467c4be74bda56ff3977fa7ddd1cb47edfc21854b10c3335e27fedefd30cb10ed3f6b5db5efca0df86a64938bf4dc2bfefa8cb0ea198c5502c3f842fa26912fef093f093e2198667527e7e9297677f38e4aa3a2a2ac2563917e11c563bb0e6845d600ed79cac6eab4e2cdf3c440986370f51b6fa2d777925a4f5fbbb8c32e0f6fc15a827aa7791c9b46081535f91c5727d05d016131313d30f840a94b3a4a72f47aaa71900d053a3a33401bd02bb94add3439792d34317d7e591b07ffaedf72fb8fda21ea428b9bcda973ad21dafad17e8a2988829d42b108daadb8b66ac172d86139a8b1513f40a8c7316a74cd1167ce308df306106f50a3c1b52871c1d91d941a5869aab32755c2499a1e6071f39505fd8688548725ae7cfc31c47f56213460d8c321551dc027e7eb07032a3ce9c2d3f0e87aa730ec7aa734ee708079ca80d47c6d670842324f5c8118b769da76be6a2ac8578e625ca866ff8bc6981b38a8aceb03a2fe29cf333209dabf8f1224c9531d65957cfbd02cfb8f8e530e69cc79cb76ddbb66ddb6cd9c6538b846f2a627c6f6a7bb6a1299ae237b19fe3efc052bf61d2fd6bb3f9e98c46afa057a01b36a74e143f8b670542477491db3e7cf14c7540a7ed4163d0596f8f977c4792e3db7eb48de8fc952e889ed657d2a54bfdfe78b19060d09469bbd5c0766b76e686aa8b4fba7132ebea0fb043690796fa84077aa094e829bcae4212ee7323ee14fadb79ede3cc8a74dc97556651b84d918edb00e9187f10fafb810b3d28f738f271b75b100ef7b8173a53f3eb3780e849dc89fb5a3ac076a247bab8bf7ddea506429f7bdc998ee8b8dfa506b74fc38e7bf353b3e3be5edf8efceb810bdd4c7724da80a56ea2bba04f22dffc20f2cd2751d3fc113c13ed237aee71a9f91bf7baf4603bd1e7ce34f742281a65e650a2c7a149444fa249e5e31ee99ae73dd31caaa4eb44e8adfcfa15ce3477dde31203fbb8bfe58712cd970784be7e1c9a5240f3e5e9ae06174d6d9ff0b6afa50613269ce907e587fbb71f6f27ee360d52dcdf3ae8396cd320bd8ffb1b8afb04343dd16da4edbc383487a6fa4be06e4bf3e5ddfe0ea143438f746de7109ada6ebb7dbe1cc8bfa1e9a8cfdbedd47ffbf12c5176b85d30be6dca0c7f8781edb8b71df7174d225f7ca0bfe8ced6c977f3c54d564f223fd83a8e7c513c53dc19645f6cc3a78b4f06a1e9520f7af34c75ddfcdc998ee8b95c9ff0badbedaf0e25fa0967bdbcdb0bddbe5edfee8988d034ec37341dfadc0bfdeeacb72784a661bf685ad6cf9dfb87ce5449d7715f7ed0f901db719fcb0fb7e3702fa229f9b8c79d41b66cc012eebc1d87a6b6e33ee8cd53e8ef99fbdb99eafaedb1f949f7736fdecffdfd1c2a84de7e3bd3f2831e77debec37dd2edefe3507486b9fb70fbfb37f4a2406fa2ba2034897c5ba24aba4ea2e2d7d3aca905e988ced49574fd03f6c350b7afbb415b686c38b83c8de2a4256eb193717c7d64d4415c9e1eb3d65a6badb5764409def307784fba3f268d520d4ee0ae494bf00fc9b008736034f29e628c31cedb560d3a932670c64ea6bdf9538c31c635cd9c030c957fdb31246f1c5e76c864c69803e6532eb260f7a79c739e37be6399d65aff570d1d7c9c12dacab873defbac75a32195d65a07b56eda35adb556bcb5b62083a3235d7875e198f6c5eeede09b4ae89e8f2eaf5630a30cd9825eb7c45a886526e3ee4389dc2b5ad3f05354f7f12dfad6be45d3dd076bd1a52ea2bb0fe2934fa269eee48b625886a1ed3cc97393e46ff23cd35c183e0f510fb6e7055cdedeaff7d53d5f8d2f5a974aab5178e8f5ee31ed2b1df55aab59ad1852d5a0b3d6dae4a0ebcf675ad4f35f3da6fdac54d4b5d63c32cc5885695f7f86cbab8feaf69b0c64a6bd29c618570d5d152c4505bbd5037661dab04c06f50026aa86d4820a4c0007b7678f826869774640196b51eefa32d89c8677ccd4c8c882a3cb41fcfc58df7f6c4373afa5684395c81e8a21fa9707c41a033a881d31b565eccc1a8d394f189c3d4db951929543478e2e931f39bbbdfa3b92767bb5a7a17924d8f7debb690f000e50068b0e1919325b4e16d6b8ce34515bd2678a4a971007d0d759fe696d85e0d4f7e7bd2b8073e32e4aa8dd653a41edbdc5147d4060c2a395d6e58022757aa455e121e1ca2f53912264a9c21079a55831856c0e938a3a2bcc8cb140943b30f4b038e3a1468548e753ac6c37740b3d94264712b23b3050f4e069ae80cd703a9301c30a940b36aaf42a597befbd6f8a32ad1419a7c3a01b3532d0507de173470372d67421722508963a668df0007390f028835366cbce07f870fda112a48d1c1b60639d7f81b5b9d1c06812986969590b43d125aaa90797187fbc4ca969e1e4a5c565c66865891b233f74acb8a195144384ae203a90e4c1ea5c8695eb55a48a4f914b4ec0607d09e6a832d583860b3252647c50e1433566451ca9d2ce15900fd396cac13c32aed4b6a2d4c8485d71c5b8b1e50f9ba05819588c2b4321132359717a646102e575e624ab4c0f97183fcebfa830e91c8615ddf7de7bcbd812c590efaf1944fade4f80f4bd39987befad770ec5df7befbdd5502d5d39dd08a64922e38fd64faaefbda646dffb4dec0b710635e70e949ca9107efb45983f5f340b5d6bad75071b13c590d73d7bc47e808932d6f4a6abcf18e6c216822a2d32b4b4c43053f3d3515d6b6d65adebcf5e56825d6ba90c64d62a43b2a825a102829d3c1118e3026dc68cae164cbef060af217bb87551c38c2e4109c312eb53a40a8b3b594f617c80c0c2490e2fa62ad92b0badb4507c4a161b0aaaa7ce391fa14c9a12f2945501d3a39edd511b43070a12336f7e28aaecaf295da6d316a275a875cd39deb5d65af7325ca2187206e860f24adbc1e74c868ed3b5f67a42d5b596b2c1c5abc61aae143fddd4b5d66264635d3fa9b5ce3024e01f82b08152e10505b6e3091e215eaa6c59d9a3e34726a4f3392d7227b7ae73d09f3bf9e40795857bb56ba49b2350e7c78b1156c469c1a486652f23592e0820cb8b1b67636eb4b1f163f1143a4de1ea195397ab3a8311bab898b1e6434a56851550c46e50813da1e1d404a80e057645de7fc1ee5f2eaabea0ca6ea58a28bde6b15e294752a448c913ecbc8230ae017b3dd9585f8d4b9011210326480870e434e1ca23060b1a194ad0b48839fbe4a122e67962c3b3a4c7ee83ddda7db8d8897951ecc4ac165dea23c6f82ae74c65add65aa3d7e94a9210888f96c823cf93aea8202aca3055f8d3638a4a489a2272f2c428f35401f159db0394e7696bc023649330a6f5537c3fd57b036d1a1fdd0ec208f7eaebe7d934c63adc3bd3acb5a96d1a6710b5636befbd1e70af5ab13b411cc68504235667aebed658a9a385ce17539e2c6a6b6bf09ad9d01e9eeb158847461f7b05e26902deb1b116a598a9dfc74bd2b06f8220f61595615f4daf9418f605e0efdf31ec03c0dfbf5cd867f26c10fb767fff32619f85bf7f9db02f82bf7fa5b08ff7f72f15f661f8fbf7ea66611ffaf7ef16f6fddb347b965aa96ea9ec15f6997fdf6661dfedefdb2decc3fd15fafb16887db9bf6fc3b06fc2dfb762d8a7fbeb847d4822b02fe8ef77807d407f7f04f6957f9f03d847e12bfc7dcb847d44c0a33e62382f3cef94e0474b4670da1fef8ce023404f040045319c00780afec74b46703ed28de0470c672ef739f48485a121a19d4e873bedaf961db0263ceeac3fa193f7b913c3d712e98e18ce12dd85c0f0e597e889db6340772188287822de0984ee42f01ec363404f98cf4377212a3cef79e889de57f8faabbfa0d3fe464b62517810418f747b13fc044fc16902841076ce122c4c3f017cef4d7cc07b0c2f801efa010fadb700e92dd2ed9ff80003ca84cdc4a1c1f42bfaa2ac009c36788bce1df9bb10ff5f84eec6df85f8a12f4277b6df8578a22f42273877240ae2fc5d88477f027437a22026fc2ec4eb7e027467434150f85d88aff013a04ee869c570cffe79da30dcb3ffa71dc33dfb174e0bc43dfb129c960bf7ec4770da2ddcb36fe1b459b8677f77da2b6c6d9ac94da90a144edd0902dcb33fe1e400eed9273a79b8677fe8b44cb8673f778ec03dfb426707b85384797a002a91b0cf08f74c7cf185a5f1daa28c613d80edb5fe189485aba50813fccd7d2b4fe0befcfadb247ff2ebef86e32ff476eb66b9bafd6d814313be0316d16de3bee44f964f96249015e3c16e1f578a36acdb0fc7d2cace3cc05f92fc718f434fdc9e7ffd952f621702f7422f849ed88ffbfacbb917ba7d6ebf9088b25dfedc2ffd467c7a70bf03b693f0808488a00f5f84ed81be0396f8244298207ffca00f61a27cf345dc9ebf2d45ecc73d8815fc71e3f3c7a13bfd13d07dd5eddfb2761a054184da1f42997227d52ea3202aee49e14b75de2bdcb33fded303121db09d040908d41f7f08d41fee4988d885b07dd007a1277efc45ec4204fdfe8d9e283fe8eb0ff717d4dbef1f6f5f4b11e5efbfa7edb8939f26eed9bf9dbbfbfc977e2504ea6f85cd9621c8b7fd2d45941ff458c428c244af13eed90f4277f881be3c3de09e7df2acb877a576180521a221cae3e7eea2208c706fe9f7016e29df3084b1dea3a32961785454f4957351c5498e0232d8845f32d02eb078129fb202b0b34ab8400c972d698eb8f9320382891b39565ac288a1e38757612162b94b4a7af818e10bb08cd58d27302d5852a83083e345c5959ca6b5d66cd27414cef9b89333c9a6095e596135c2d16a3c42048588d9d3953b45ce88348919b92a82a58985962f2d4524080b0bab8809a9e0cae78d069fe29c732c2eadc5900ee79c73ce39e79c6fac318e85a682fd85b567d72bbfa120a08f952a2e2b3d4d804b2e60108983c20a0a88962d2fac58b1a395cee2fc48fdf1a022b5d6fa8bc7d58b922cac821b9eab9c1d20e79cd330a369b0a18166eac81bc53754d91c2ccb9a1d2623682998184084b21e4e9ea4ee34d96e3499691d24e77cd433dcab5e78ce48b2c98e152034faf0d0e2c2dabdd133c78e940a224bbe46f8da50254b85bc496fdb9833323538b23b38cbc1162765ee74991282a48e1933c2122b5994b82852a4084985022a6a24178ee487c9048a33449878c133e4296422b2bb40834c959f3722e0b10366e302f5472c043b796c2ce180078bb0263dc8c0f89173610acaa9c00802236104dbd3f9673ea59539d7dceb02993766375230c9218687132168736e50296bf384e5abc257584ecad8d30fb1094bdd8251deb21715e4805055060ed85917a422625851364628614a1532afbda12b0f901c625247827fd004f142b1828d189d305d72805c2f2e0a29ce39e75a9b0b8ef83c4d05a58ea08e06dc7bef1d3524668d73986a3f83064beba97a66e58d8cb51b39723cc9f0c68b9d17434a6851c24f6734575c4a951a932ac3526b761001923809f3e7cc4fb0a98e11ad1f2fa25ca9132461c82e0a1f22b6b786282c2a5ca0c850401933001a6b40ab3a5b685c81a2055c8a7a6a4a82c64a903d3a2840922778a4cb8e9012c6ae0cd2c0f883a6c794386a6b587401f904c780a096fbd89e5835a7ae266572ad330f6c248844080e0bb902824590c2bd1af226cbc723556a13ae0d7a5c74c910a10b1d235e47ac325719950f3869d2f828a3258276914ba8314650679561330c2f75d40022a3b5d6da8a4afc595d05ffe0c07ad3a48c4f935faaeb5f3baebaaec09f235c5f6d98e884fdb493aeb5d65a87405c98fd0b706f5b4feb21d385d088444626e788edaba0286e34113fedbd778f30510cf9de40f0af49da91a9bdf7de3d84b22d60df7bef5d853071ce39e7366c9cf3504a6b1be69c73a62ddcab61ae412a228a312076c2a62da261b9d2872cc695b11fc1396b2a7624410b6a1183622c742e1465b6affbb49533b7d75a5476d183938d9decca8810defa4c0ba11f77cc29d7281cb7c9eb8c8efc1b68d3a469ad443be95ac7f872472b2b22e74184c625286a00af28d991450519242a68e0794224a8a24918e79c9be1b6289a6cd2585a6bfddb72ea4ad1f567d22681130a1e40fca0d012430b033bcefc5972258a151f387a4ca20499e811ad116079353ad90090a90385a28ada14ab3c3fbc94e451c2824b11b1720949013350d27c71ad75d1d3e2088e3651da3ca5d10863a3c4059999356b6836a03099586cbef4c1021c039364efbd9548896d9d111313938ab08aaaeaaa2acbd499753e63c3b6b221fcaa02a3da1913a39aa1420e50ea420c2e369414d1aaa24a0145a6b081644e1010bec98c47e4e42eb34604a71f302bb28049c2434c062f2036d2e8018a71331e21839de3abccaf80782e75d43043e065878b1a376276800ac0b2e40e9754972069b6dc016e8d855f3fbe44fcc485fca2436dcb0fd41a9e273f33372428d931a6abc7170951118440015fe529a629a721666c43b490ba09500cae1e03689a5d311382e5cc94adb15faaeb43840c21e2850546462a5825c79991212b86446dd011963a36a9030a4719355870b210798a0a5382082da410f9ca62a47310ac58fbcb5a6bad2498b3fd9a12d3b8b21cb192e96a346b34c51133c28555c30c8e04d4aa4049c2846c4a4611b373ce398f32a6b5188a71383ae78377d1d97338e79c0b51d97b6f2017e9f575e64896902016b9a7efad664b8d3258c28cb8c122a2a9f4b8913a23e509182667b49a786d8dd0b50e80952e3c6451aeba62fcb456d75a6badb5d6f68acbc719a975b59f048b3f6b5194841121ce962d2a41b680cdb0b1f585c50c3ae4f2277b78148ec3a787da933266daa8a93a422484a0942e6a9afcf8d754e759368a981797a12f2fb3211c02e17c4a1d12cbacb2f1d3138f87615802d811d4732604eac98e1363de8489604586230bd89aee83b5db8851d006c9139e3250b440c16625f4bd597801b204aaab2bc56f0b89739f9075ce73160e7132708540308e31ec658035344e62fecc1002343bd3363ec34b8f103a5db4800992814c5f28f668dbe6cf1c282d7b72c41093e4cbac0dd519950e2050b4d65a33f9d03a4fd9aa22554a4c2e98f32c9acc93298e4614a3899598314ed4ae70d52e6421a88979c9f1c24166fe08ea9c73cec770e15eed62d2f91ea74a661b2173bb6e743eb5bbb438e79c57c0d170ce399332cde4cc5cd284bf98a4d9be90a4e09c73ce39e7fc359711a9292f619e80ec098b9ab334a587c89b244cee3041fb612373723e7209343d52587881d2e569c4171779b8f4e0c3842c6ba807d88b0a9d2a77d6d42404a71c585f7ffcc4911263498e32222560aea6c8b0ddd04e7bef8d844a49102f2543fade3cf01a27ad7d68b96304080e3b5944f092828dd88c2551668859d325aea132b40377a6d3848590426badb5d65a6bad3fbfd0f1b0699750210b333af08401eea8d304e573050b9c2f332444fd369cd14a0e51b7e2b20a9af11103841c28c07ea9aeef3c9d9748aaea98b9014e79f1b3559b0290195d72f4b962e62aca549f236d7004f92107b807c9d691b55ae4219b8a29179e66d735abb86029b49173ce397c95dea894cc976535e810c248200000000063160000180c0a074462c180266ae3071400096bb2505248240dc622813814c4200c83301003210080300cc2300c0381108766ec0d120b68a46ba0b42147484e73daa087d3170be07bc0b4d8bc2778913700f9501848dde32d10f61eb216bd7a7badb59ff80724d608bc6abf25ba06446007b2b65033c0a8413df5600c03fbdf8e7ddf7dbe85dce0b59f144f34251ea15ee78b4857ca3076383b7777fc04701e49105953e58ab210ff94c7470b3752a0003830634d250773dc12bdbb2be9957f2e3ce770cf49f9ba035878e6702b419b148ba242f7f91b2a10a8830e7bf59ca7ac13e07cac38adce48c6b24571186a57a4509595a6b7f84a0a1df17826e7bff44b3392d33849b11f2d9de5d7e03668c2f471c862aaaa601ee13a6e45e77e5fad9004192b9ca3507aa226f36de7b03cb1829d5752b9aa8e6888dee727db908ee9ccc28ebef3bf75a9e1c7bfcbd28f50400d0c5120a55357b5671056af801a1d0181248714544c02fa0b959f800aaeb2c422c9160ee1611100aad8cb8fc0d082f7908ce66108ffca8ac53914c21fa029b20604a13f9fda1f90e03be873a719518e7796ff500966828f2dc5585d85bc4ec5b357d5f371775583cb15cec6203dfbb7090c01095dfc4209b06974125fc919b831e9cbe678f1ae614e24e0279e15f6700bda8464353f6722b3a39d29ded5c993a62d8df6e1b8b6384b8feb61b2a0d707c21d37d74bcce3e9aaa0d396fd785deb29bec6d525687ea5811da1a70745050973a73332c8680b7b21fac7775739bf351d1fd39b5b8c43ca517c7da163b2e0ddbc2e3d9919f32d452566c87ab93c379079ebe9f542c7fc8506726f87bd988d3115513ae520d6e5fbc1cb5ee245ced9d8cd158b2be8d421b040579020062866e37cad89fd3d8dcc5ce72807a4c732871794627af379669ad900389e79a37fd0e711c327136facd2f94b2f45efb4bad8c6b96d75d9c80edd3b89490a8df84e3498f98ca5589be993e6ee59131fd4bef44bfffd10c895c5cd47c1dde731050e50a30544f53251d84b14a5f4c5bf940e82ebabcdb468f7eff45d02a2cf5b298d0128c2f32c7dcc1e4af6baa4205d7b1aed0c56ac5bf493e8a2a35eb638f07011e940dce070ca12f056d81d5c68e5e1213281253e826910475c119657e0737c7b1f8ed85bbf49bb308f7e389f3c18f846f5c0dd142829f3ef0d50387b51c1c409b197590c08b9a251e09f5184d47b53b8eac4f68923742284d5f6c4afe29e3e4794eba4cd841a9b01b73623db7f76e06acd10336e09b9ff5443d231d9631b34ebcf232a2bc6c0df1c7372d45faecad6060d1c3680f6dd842f8d098895ae39be983d9d8392e0f5fb9fc0c3da71f87ca40f0138c11ff972141445ad3cbb0298d11a163798f2af3b649625b4fb02efc2becd9661d4bee16b1110f9e2d0164163ba6e9257f2ad7d106b4d0024ce4d4d1cfb8868cac735ed7a87e690c982b2c7614743c68bf6c359f09c02850bbdcbd7c5695a43a61ff6191ce5e8476c0d6ab16215f61a6b13967d8d717fca7c1f2a930db88cc19a6831c1525d70243d264e116af43d0312cde1425cf50cd96c2e51207a2204f13af721589c6025e55c7e95d2b69d323ec554cd1d57d2ee767af3783cb53ceeea211e02c450690906e4eeb8ea4067760ebe2fd8286ce5c54ca8b501679ae571ff6a505f6ad04c90fc81700746f4e0052d33626b2a3a39b65e133badf963d10fd2710b037443a226ceef00becfeca7c0be1071c59a7770b910c8799fdb2ad1d275a6b18017017b44851a1e110f5be7e9fe7d6410177679168bae69b6d81f70360cbc113e71ea3df3b94ed2555f475644e10e3ac1593ae9bc64aa11b5d17511e4afdbd57cfe6b67029ed8577178d8438ad203386461be6eb6f24f9606098ec340fec34d42e56297e17639ef1a20f33f96ce18f76db3aef4319ff72eb9840c15ca1b75b64f46be351730372c927bacdad35c03a89070bf9ce8db69cda43858e986c4863eb51887e3d29a9babca4aaeb85d1ff88099b1a8350555e38e035589c7a924f2384eadc5a2d41fac52e56f17e213ff2f2a3a8d6fbbd6775ec67d3f10711024a7fcbc2b3acab40f1680ed18466cfe680ce62c076e65adc4197f5740efb57227b11c7fc82b4f0d2bb192698825cac1f6daf2a7265c42ccccef5b5657da32cf4774caa0f7b418635b43fff60ee4b1c3a4db8ca93f22240a4e0f18db022e4b842c692fe238faa17405347828caf54c0a6b3f54d20b0dd076cafb0dfaad9a8bc4b8a18d772c36a0b1b4701fa577fba522b5daae96969af11d70f403e76b08a02296334c9383b90f415827cf0a0cb3fc56c509703820bc5f01ca70c2c00afdbe50444c6c0d0f779e9863011f0ce49c2d6d4a4d95ad6da9ac8112d073c12d44b49d589cdd5a1458062cbc2d7bf37ffd494e3dd49a61d22f470cc65b21d57904fd10e3bf4fef97c98c6264bc3e0bd5ca04f79b9c0b9affafe7e18836987ef7f0696acc12cd259c9e9a698b55e5bbd7b59ec11cedf66a468cee9e016bee430026a9e4adc9bc56685c8940792a589df2c34884e96b1293eb421dd110d913890b85d8d0a214a5cb828a5377e4eb3df7ab3e5ae89d48947e14c71b98fad820d576900991712b6a425ba8fa299ad60f3fab9d8fb959b45cd552c019fc66873ea6946eb234aed4de8f6623e4daabd8b4f1586295f88147d12ff8946f3e893a85cb56cdd9d5be23d8b75cfd81a60660f829d65ae52f0aca394d99b7951da9f4ffa4a9114558327f2eabb71fab480806f2b3cad6580b4a6e4bae09365bf97434270d80d520601f18f5493f7be380565181f598928dfac48c9c9bf0f1ab405ce9ea9fe2c08a92c971e3acf2e9c9aa40e2a523334de094f1a04e51dae5a2413e630aa8ee575068e8a54b3c8a03f3fdcf3b9d0796a53a590773076689df8f6a00797e501accf643cff047530bc0dc7f141118fee71f9b8e7a631f8f0bfb9681889418592d7a33495e7b006d11d373bb37b59206c28877b066d47cf0560cc48782591be66c67b0cbb301ded7451bf5ec7d45715c59bebc2500db600c0cae1e462a56d30cd041414da8654d41db9431e5b420cd8e4a4d1bf23d89c1dadc09039dc1d56babc1735ff899b49decead0bed13199a160a7ba7d5c841b92c0db49fe5664c768c6b86658fa60553c46cc94c6d137e822329af7c7359d6e37fdc67da0f1e98faa53e688017d6cacdab415b2585f81f9dfee1a7c55ad36c88bebc44c4c3e7e83f988a59e3fbf73d457cf9de6f50ac966c0457b282a47b7af6030c0af189a268b8b3ef69b7b1eb9ae6aa82ac051e45fa1397ee55c56c4385ff5fdf7ca0dc1e73482043d210ff74584c5c5d1c5381793cbe3a232122b18d3debce448db5d34f38f7dc2adaf75511e95443d201c73222ee2c879fcec96856101dd1c862ca8e7430e7c9be478771556b73dd5141efbcaea4af9ce47d00637716fdf8f3dfef7f7b183d4d6d7d70378acde41ce4ca3cfd44f0b52b0f92b15dc1ab7f2af0dfdab5d935ef0d2b97dc2396a7c4bdc1268d5e819048315d5da75538e6ab8d7a239fdf258dd9079ddcf48dcc513adea07e31cb425ed77af65f3eda41250a301d2db20fb1ef641553a4ac2294e4f5a8ed7acd3852c33f4ce4e8dfe6c62b730803d40b010a4ea46ed05c178d3db8a7b4f1b535af6d3da482c08ea2dade41318f85c7cf345c588fd5d4e24702a3762c5d7169f604ab1cef40bc02b54ab50b9ab78dad2b2f84d6cb06a68119c77e3584aaf1f8570d5007a06bf34ba2ae8e8a5f6781c4c3adf183f108b8c0e1f6342906a07845d64d3fb49b634b510a7727fe0b24950a571a7bbd868bb556ce46968b64655c8876ef302e16117c8b7e6b68a5d210efaa77a02edacfb86ece0a736576bf9b7e7b7a69fcc429c9b39213324a4a0e0efe5594d9e184c8d6c9b13b6fe446bdf3f586cc400ba6c3c2edf10f686be1964c435eacea928037dc73e509839fac2ac76d2015bd9ff72519c72ef34a35f6376efaccfbfb8cce50a11c044f507b227bd7538380d58931711fa31e4c555ee1b0f9f68aac323f0170143957adaee9d145cc07866dabe2e1f4d27ee1f23704d05f8e8a67cc302c85e439914a4a6159302514cc8c66c950458291db4999f602cf60af88eea1fbffcca47de8c086634126f1af7b571fe5304343d5f30c4c0d2afed150dc5893381760cff3abcfaf71fef2dc9c772e959371144aa7a3f2aa8b413d28ff0cfa56b057de53a2d8fd5bb991c30f54330e06fd4391b20c6bc38dd6b46369d79e1cbde48f3fc73cdc2292d17d5ff99dc3b3e23ac69ba8cb291d81e6a34a95cf8ce7f774435b3889d379a58feab08383a9a5c2fc73e92dc3b96aa4a9409fc4ca8ef0e4002b3cd5d43942d246718657c72e3c56c4050c48ba90c408baf2008a26595ff1f588aafe0dcf6815b89e68458a77f60b702a743fac927f038d01f65eccf37c5e9950df4992fd213f8b28b4c62b4829ba922529dc881c7e1082061d3e60dd87a44a1c02485496d556b2d6d32aad39727b5b4a452504315fc3d5183f048ed0810fd604a087a167e477d386a790ffa0bac4bfd4ffd4c8db2bb1f6d05594e2c38d6d5dfbd562af94220af5113284f00a0a5f9307f7241427d1354699b114632cd2d941257d555bc02256994be63eb2c1822809e1c43a3fe089c9d02b521e55c804c70bcb133037e493aa8d4af4d012b30e0a4df3600b1ca6facf0525dd5823179fd18a0a0f442d3331b7bd88391ee1bf67f5d59ba1c0a0bf3d4f26e301e993222423c1f34f96a7542105b01a7e75e269c1d562e1b41a756c34b174b70209f8d7b9c0a1c890a6763a8ecf4ef3e3cde8644da8825654bd472b3c84ddcaaded500cf35d4192e57bdfd1523c9214a93be19d56bd1c656a805011d90704031741f8a7eadead3b595651db4a0adf5cc0d51157badf2d83fbda6f890b8c5d1610468b6b17131fc0ba28d614ea007ba2c35bf7f2b4ec07a5f24a9cd709093b77d094852e3c26591b414590a4bf4b282563eefe60a5bfd333c61d7a358d745b92b4d730380554e73e807ee0f8db50fd0b7e76f39d04c21fd07e0c5ff10eb01bd37b6f657d947fbf95fa22bc1448ffd608b6426eb629ebcc8cd5ff1dc5f7b7b880a4d0464c74a218a360bc262a30d698b7527ad4c92f85cb9626c52144a55d234157ddb49d8c43d070a172d2da47760894b87f031d3b4513cd9b02f354fb9ae38ec00d117556bddca5d573dcd5ea83620872bdda964799082e261855e63134e8b2e27be39301c6b1055c99fbc742cd9542983a75b050797c1d061055d155c44f0a98cf2da39be3c4dac841c784731f18242124a6f836e3213f70f36708ae3094e8666026a67a2d1e3ca1e4140ae86f70f92ab812d0cf9243a0320b99cbcf40f3bd62c9fdae62875e77e3158925f1d5bfc929cf3c673167622fac9508fe807cad3447e267b9c6730e8bf804a9711158f5d74deb10d177c482e0056774db73354320b695cefcbb4217776933eccae4e15020bdb154b8554a0d34ddc1fce044b85615048a23fbb962ed59f3f8f2a0cf95310cc8b2df63859a133d48334d1f4e23e4c0fc981b1cdf3201d11d6441a970083a691d42796faac4817568055217382ff7b80525311ea87b2304b5294293cf7e2990d88c2fba262307f66bad4c4ff1b223c8f62a200c6f603f95aac24df7677257d5669e453bf091f6677799f48c2c698b893d28e1fdfae7bc6f4193ff3443f065e82e71083f5d43236926183570b7f47137232241e152d38c784a20b7d5e64bdecf7c9f87f55182b5efe80bc4ce7b30f21b931fb4cf53a13b80eea1f133b3745dbb86df64a9d950135b281cdf973e38df1ddc9d96ff5a999707603462386d5c645224e234937f0cd709968eec8abb298091fdb37b5ffa23d8c0a6402751626b172c771429b1b5146b2704f474820024d211b55fad4d009aa1adf3a2e391961f88194766c7d43a312b53d29121c180ba9c1f5c0a0c804bb44edf36ac7a8c1d3b45ec63455aa587f1d69c2e0c98bd87bd6fde4a53f91b4db9d2a2a2fc2dc93e06b50d1d81ee4f471b03e9ba584f31bf08bff892d020df02967c96a2055daa39c4c6a58939e76cbf3e502b4593d1b6af3ab61185b85c4a7c047f5291c6af650b66e4e004111f06079c7d0f18539175a889144af436fd6aa2e71bc314137b585b27695b6d17ffe04b85e75b538020778b42d1e1648a1a378d521292f230038b9d6f7a0e0d91576c209954fa5a0b9af6daeb8fa48aea4a735c94d11167751ad91b02c1a8291346a04fbd546e7604c5dc201c75449ca8d95647019fbeab78254dec6b102ef0dbd8a5d84651d265097fa8d69115d2ca1c9e7339c10e829d48ca347f73ecfd1f4fe5df108c03147333c7c10b064b4e04480ee300ccd35cae5c9593b643cc7a6009b1be3e15d8c627e66f4d326996048399682d5c7611acd01024872bfb2d609c0bba2b20757a1b0dd3c1281d7266aa644d7c60824f87fa231379d8f4066aa4403ec2aefe8e767710397c11f444a95420060c873984c2a2a4253ef0456ee43c0b799c0753a54c1d601c857a008121ea8849a9361d1ca6254debea57d079cc87f26ccd5715c85a59b91bdb93dc3e9ab8819782e1a40c04c6fba3bb74894aaf1ced51d89a1bf62a7d8d205626a5865050934c91b8461f02e0394bc42e66052f22c4f93fa1f0b57d223356054675a532175622a865788d4e25e7f934c77de0f85316d39a8da00ae73fe4e504160b2696ad09ecb6f6504d430cd9c7c091ac9abf84eb0ffbb6b2603854ebf7a40c6b13c001e4a434ac7e8f975db8c0968199e509a19272d40ce5feebba4e9b452a0529bc976121dfcf5bae4a352602eba155cc211cd3f4d5bd5d5f320d4e4074c70d8f8d2087136286e516ad60dfaa7dbe68b0e8c4b2523edbda0298fb845bbdaad525e3431b5937298e2e32e6b57f828af7039cdbb1778a4e00779fb284552feb558b33ed28924af45617db0fc828ebc3ef7abfd9003b7e3faeeff6ac72f166dbae93bf07a41e34d7cf79721fbfe238c1f4aace407f8add3b052e5d44ba8eeb729f4a917edacfb058a386dd6e1f1053153f1d10658f216e16e629b75b2e127fd681262e4b33e7df9d845bdd43c67f74ce235c4911a4dfe01ca59ab3787a60701768aa32b94501a586abd3cbf7762a29844f85720621dacacb7fad6aab346f61db1a21205c96589a065bc897dc3e7a96a3722bb68f3ef4bcba1200b1ad3267654cd6e843789e240432c7cd659ee8a6d04e79c421ef4d9bfc2e8436408516b59d205e5452ba7e45d9f4404c2bf93181dc50e7f0403c8282f5e4a05b54fc589a9792674c3c6992da86c15e8cf2aa297a8843fbd1f8eb93d2c27c87fe9685b11191be6fb4f1717a237bd6eecff91036fba458de19faa689a5d518be9f33d707031e3a152dab718a9fca1c91a8a257b10ad25ff11d65f60392e2a963758915be81baa4c14b27b225990e7853e1d7887b537d8d3ee3ae2603f56bb4a227156adf3aaf48f0857a4d49ce833887f15ba5ae1e0992877de6d60e122238cb47e160864f156e554c0d5433722e9150744737f151338a4c107f7b1d94bbdf4a97b5018480821a21b0afae35936414ff23f37ac9e0749025938e6271bcfbefad32587e76ab30d7647b94a26e35e5c21a468209a0be8eb53db1f0769e2d94041a3f261d88ff979f540b6bfac929222d1aa7ab02134c2edbe153eeea7dac7fc818ba3acf1adb682162315edbfa7d2cd43406728613528d4ca2dc264026ec31f947d0a65646b4cc736a211dfdf8c84fd2559520a392093e7d4cdbb01cf6be435648f326420fcc308f6f9161b713b73f133570e21e3da8afb3b0483c75864b9c8ae1df6ffac69a81d932e5947e5047f6eba08598893b2b142d93b692620a1ce7305339e168591d5f34483dbc8fd9900bd1b0649c5f449a900b883b638822d4470e50f32c461c8ba8ca6a07c1fa07451500de9af5ed770d49e7c10a635f156b82135bc57d1e838ad4e63a4fc684754ebdf33c3f079a4169347ae2ad887d94f9871c8c37a2cee512ab996e2b9cdaa3c50bb692ccfe62e10e6161dc1f33f8d37ba3a62a97394d74b60ed5b763adae4eb7d8da76fb377884b43fc8296cb8801a35d51467960190778a435cf8ce6254d2efb2e5f898df1ec020a04f528dcb4d77d8c8be786033cf867680e2d5834084b4819611e4934370b1651cfa8aaec9ab4f4e05527a4d8b44ac97558b84d9bacbcd21ca5f8fec3e09c06f315b52b3ee15a77368c1728ec2ec665a5c7183c5e1853ba73630a8ffb1c43726b747f02da1b174e401c678d7f343108523ba24f8a0b78ba16e898c982c0a309923e9a85cb81d83140ca998a0e0e80d40e00cbe4e2539f15fa47996b9bcb64151b6cff1ea00b89f73b2a75d10069c6ad3db703eab57252342ca84a2d27ad93fc87addd4a51d43b54a4662dabcba0eaa53d2f8e0cbbf59b732eaf0d9a769213c56ce96e09955cb515be9fb51cab8b4b4124c803f6cde1e0ac0dd0c54e4c6c781f45738fa6863316d9346856a32d88fff4ef048e08bee43dcd0534b5c3a013d75bc29ee3c3e0c1a9e1dc750dd1c90dadd44411803f610a66e2dbd1badfbf7d5177a3d7bd6f954f46d7cd0b97c1a5078e87f596003506aac75ca68ce0707fee567155331c1cee858aec8404f2d7cfc81c190e039e92fa68101f64a8a1b75c09e47a5774b9aae0b0d4b0ad24b2e1b43972bde0dea6a7ad284276f316c322908532219b2e09caff88be643f766a241f2864f4c87c7fd0045dea02e3a3f0f9fdb045634977452c17c3071ac3ac0de1d6d8d85a1fa6e5c7c18eac4b0b0e502cca04ad8154ee3bad64383fec1688fe22fde2d1c1755c687c8f6af5fd3b89a99738c8d8b97c0fd23ddf6881b484163dfedfe101636e32b9309930f65fb41dc7dd59f1da135de1b9667cb76c209bb91dbbc75f8d63ffe59842197ffb3084d27445c3d911616a82b908eac0e7c25d1416e508a03146f60cd3d050d6cfa4023411c6a904423f2034fc660f3c8afdfda0a282cfb9868a38c1d135810ee038c1befd7cd334e12cae5c242a2dcfedba0cf89d72ca54da4a14c9f904b7b9d348dd2ba5141b4c871322434eca254fdfbc197145e2660e88d804175e25f47241a22ecfb917e48956d0d3be05b9b224ef377379385f7aa3ad50798b95726e21e60fabad9938e511a2cb2eded4531b56167f33a2927bc1469c67e436fd56716b89649fd32f67bfd777f389c1da630506ff8892a619d63eb1a530f57fb986bc5632a032c9637be999285a3f7bd53d8df0969e8d754b0a667f29a870eccc937237e6ed52a9a39c321169b29ac41a9b145cb1fc38f6f20610f0bc7544447bd3e0d2d00ce3df4ba47ae8b9a7ef6ad4a2b05496be3408b75253d4a51c3b8d0795eeb3d118565fca5e7d08be5bb8ee648bd4a268f2205020759955f7e3e554ee3cc0229c7328e506a89481b9f633b34c162189a66c25ed546f3e399fe9a7bdd2f18be0fbc96959b58e736cd48e5614e1ec8910d06d5ae2f4841429df3eed14d042f214290a020e4f2cd0c624084450ca802512d25ad7429e155edfabac61b02fccaea8598474410108919973ea1700d261f667e471c4d212122d2980642dafd99bb4670aaeed88d0edca5e606bdded796524f899e8fedea86462a31db2915e9b18fe6bd6360bc226017e1f463b93096a4c78c5b06cb9fa2339d5326157561182851ad4bb161df33f437c65f32200b262950a4cad819ce40ad9efe6f5b0ebfe817821f1bc946cb1c3c265693098351619bb937562697424de192cbe79a7c1013e081e8196909eca552a6d6f8da220f496e68681693a127c87d4e0045518c8bd43b4f573ac7e51e45d42179d225c63f225ea69a8d0f4c58539bee0956eb077157f1a4c84b868fb3899f902c986bcced60936725e1c709ad5e075143c91d99a1c2ce072044df0d625c5f37c6beaad097edf75151d2cdb08205f4ecdc6cc492b338cce1d4e44cb4e3cf152212ca960019ca24c982338de2ce72bead52bb8ae12d08dfe44f7278f85c221578362bcde42b5025e1d5c8fd9390218eaeb3c0e6e567a6f559ef8fcac128f54317684a806eee7768dbbeb9a3522c64372cfc1968b3594ae30eb4306e492eef450713c0086f0293f869221873d7eff5b7cfdb03d2e3dc4fdc63a5b3db6b265cff32a2ecd11272a5a15113e65706c96a78f33aaec9851f8274f030ba57b0205d4dbc694bce2dfae8c912f84e13d360be28605000f9d94660f5494fe8321dcafc30ac44bb4e725e8807f28d1d60b30dbba21596c0d02e21cb0ed37d785224c746be643afdfe1b22947e4856d4494d192a3faddb67a3ac478e332496fd65ba76d816fbaa2b0d8d1918affc5ef6a3c0f67657f6f55904f619ddd1ae04fa5a71487a7cea00b410949545469bd85aa112b9ce67e99f7f5e44774817aaf21ac7e440550c0ac9654d2c94487e14935ab1de6e3d71d904cbf8a4441f753cb403089c66a7c1f816da0d8ad071b44e7dbcaadffb6112531b01e31f47fe16a2919a2cec257e2c052353309da3fc14ec348994880e54fc827071392ad65dd93dec6b74acc8aa43451f09d2cbeb9f93b2a3b81bd826c491038df2d5ad5ff2fd696a80650caa0cbec31b9576051e56d2f4f73d9e0b1d5f24a8b6140f971f41057c48a43a236046cf9775058ada250fdbb93daf9717313a88bd5868e4ee8f34c113514809bef0e12073883c1dd986a518b469f3291b8e36c24974b3d7b8e19047ccc633025dc8800d7677ddda15fa3036b6e5249e6c40d19b6b1f5e41a3a7bcb437984766a1aa426005a4eb26fcea0d2f5e925b0088abc763403d2a5d04978f120c9c440bf2d4d11d790b3407d6e062ae11efc7cbb2ddb7acb09005b726ca68eb0508210938c4ab62d086cf6d6c19903f147a206dec99949245af68e5b78b248baa84876855a48158b999edb1789dc82eef2438c59840546b9900a1f19901c63946e707bb8851de40ce763a39e113c44b4933b24e54e96f7b172896ee1b7437a1c0d7ba7b6f18c262496e2ea507d587b040eee1defb636d78bfdeb215ae1eb3a4f70c55f36a7d61db9a30e7f4bd2ef949c34258d18200518f120f44d1578815cb6c0b5f371ba8189ceff3ec775e7eeea70acdea0e1cdf17427f5ea9054748b9439838b0083a2cc10dc154f2f046f300a160e8a844865ae90306fc2eccc1da917250b425944125e6ce3bd726380040b1d200274ac476e9e1eb1730f023cd621b8744f685418f483d08e8c10df8c8e0e48af8b8a6e0b26fdc23604c690c8a60ae57ec02831ec854ed1c1f941f5e1d23993e5e3549398fd6140d3e1ac67a7ce786439d86aeecbb0cb3e28ed18de3dbb2fdf7c0aa4241e50c22f0d30589f221f9c35a836e55c1a558611b1675c8ac3bec5f85185d4a1b0c3cf05c30cfefe4e9270f5fa188436abc6e8c24efef72e2303d2b76f35a3e30608a8534f47b8b631b8fcd6ec7bd684355bbd8a6738bbf96ce7f00bb5cbb06be2e89d2db15262bd5322a9d1f603698435da294c5278878c22e4b90cfd10d4866331e02bdfe2198d43e0192c2fe434e928f2590f93ad0687cab019a62abfb98b2e6dcb6af8f1933ee14a9944e0f6a493b14a1f5892e9d0bcb1e0663089efe95024a664d6c91d5b58ef2c2ff969b560ff72a2a983ca44e7638fd0e31b91b7c0814a8ed5905c83b155fc0b980befe28d7601dfaa594d767be0b89559c4b9752038048babce1a6e9569ca407342d221557a459261206bdb05b59ba1c51a85cc61b6cd433cfe7950ac4e90dfdc05f3d0d68c39e24cc5fe712539c53594676e03b27b5c057ad8aa8ae79ed9bc050395f141a868245bd7b13ca5413fd58c0a5ba3f1fd5456455969bfb2b168586bccb7631b3a82ca22e27747f497c2ef4ccb9bec8955be29bb2e929259decd27a1565bb4f38b0e9060f268d23407a83024c06224dae503cb8b3eb0ae44cb2fd05e7f6c93fecbf4e1f017480b48fdb9e568c24bac31b607338aa1ed048cfdcda37268975e3346bcdb9053fd0bbd60129a1f782617eda61a61dfb2c29161e5846e48428d8fa4fa34b3c4a886fb4a76cd82a73a01abc2eefe8ea5eb88e481dd1f4c34b1ae8a5a795560089589789a0748143c50b951b67fc436ef56f8bb8502935dcb80e4ec1db5ce1d630dfef3cf9ae43f370743188123cb0015e5442863826b259dd018e6c0e0d8b42d0de8b5524b1eb5c5ad39ec1d98e7f47070d96f3fcb903a90802288e058c3ad2283a813832f1f13800a06f1028778eaec3fba86d00f4aa4a4886389cd982618933370698c75a655fe4dce5369af09f2d52015fd704dda9b7fc8350b9b2a5ebdbf9d3c8cb4f4d0f6252d25df9824b6dc9147f3eb98938d241c395502908bd3083ba5c86f409f47ddbbb4e4c67bcc023f834e4d128a179d1d3f32dc055cefaffdebeb54251d09bc3fe6deb6410c49302b6772d2c40ab597a5a2c80a8a380ff1c40ed3b615294a2d2f145614a4fbe296232f8a74744600d676a28f8b0aa401cba55bfa89d02e6688673ea46fcf41622cccd728de65fe96876e1ae4229fc7808ab9ff99985d92fbca0e6389ee60a637793d590073afccc4e4a26e50edb0084d486a05b37288088208da60c7e31d967615c8014bf95478dc3d9143ef3009e18a2ebbb7cc2088f9d505689f0b583e2fd3634d9dc77a7be5bd5e57f17f2c838d08248fb24027cb4cb439a8c9dbd0d5efb37002a0fb87c4015127ef11d818d021a31d7c130ede6a09a08931de8e4efdc0a52454ac9c611343f7b0038cbd7dc51d63ff35471d3e04f05cfe9bd2cc58e4d383ffafc90e4bc0837b62ef5457cd37f98bb91079a4efd50a62ec59bbc230ffb557cc0660a15334bcc32a1b4dadda1e29c07db29658ab16c1572065851413c2002464a6ab74d338dd07a76cddf4da19ba99805d4f8134132cc6d27a1420a0277ae175b3b767b7d9f29921ade905d599dd14f673ec7c533c5417de867d11564c664984f7b6f220c30dc0661bbe19e2c23f75d7ead5ea0ff92d1949231f71f871d4aff7253f091d04b2ab85cc70842d31be11a13b81388141419d1338a21bcb1a5768a3415cffff7084d961e50ab694f91bce90316c5562e1885e645075cfbefc16cdd30b109b247c1e871a26454798ef58cb1b3beff60255656f86e153c159ed19d6693e43cbf1361690ed5168535405b0aad245bd9af77d733cbb8e2844b5b19349b00c9f7466c3e294219098f6094d0d7de8ac9caa6738a0f93e183e8087ed8e7cbb2518155e29e9ae888628cf5f0b4f33b0652ef6a2364c47d1ed55ee789224e5a5e2904d10a356cc9bff65a79b21a028a92eaf6e88927ea5d2dd8729b67ec82d491f93af4145dae178096ccc1486756f5e79284ed30b151b85edc706b5ae7807e4881f0cc61fc40193f5ff070b63e056abbc486592610418920ef92321aa8c19766dbcabd0157b2b9aa028e05da5329619ae0224d15d0687005d38b11a05780218a71558cd8ee09a5afb71bf706611f5f042c5f3f3efb075c42a18d4c9cb7a27c72088a9e7255ebd8df7581f95a77e6740cb3996883013694283bf00903933ec6bc83b3616caab9ae4a29885aee919c9a034f0fdecb80f9ff0c6bc6960dd32c66c4ac3c0c7f75790a93eaf56f8aeaa555c6158df4a46ad98515324e7545813ca4ae82da8502b7cdab06c5a0e9569491a20c952191689e6463cde48847c25959f92631bd522b51240218fd09660791f5445c68fb7bf34acc4a6549917c8991ab7a7090a0f4b28805f2a0500121c1cde32f5b3a9b47797d9a0a4b73b3b105aa32e29511bcc91398ff34a31e82e7635d6edc6ce84f6e2d20c2416dc66cc7d1ee365ef604e1a0488328deb7f4d861a6e84b6217a072c5cb04f97272b85a65f58313c6066ce057d6235ab9c99e385df41bae0c3f3c75190c2b19a5a226395664427864c45cc9156e1855f13e9b55d3cfd45e0c47931d3083582a7107507928654476a34f6eb88c41e015b41240844774e88fa33db971798112a437f964ba07fe21729b8e95bb27138bfadd025aca623cb65d100aaba7d2f91969900b1d6e84649bac627b4548c8913dcadcdca8cf667d63f2a3f539ee77834f66c42569cdd4fa44de65ea78068ce9f7636504c5d69ca6a69cee3b04e6cb6a69635b3995b1c897a7804699896a80c1ecc72c0c6c99b7db1121b93b23708303815414b0ba2ec51f5d13bbcf0720a92c88b2b24eea0818f64e4d8422c23d45b340b111cdaa70a46763c4b7a46ec7b01f626c3faa81f68c517dc5b7650ab81abc9940e1998b36a267164ed4983b18640a98c7950167f0dd527c6f6f8c6b050cd681d31f1b3d777600138a2e933e11721f3170fdc330aac4209212d1419290efbbb3bcd2f0835effd651138d81146cea6a0ea87980e3111c4be0d0e2c687e479d4e0266b9aafe49546634bf6a52c7420fcb33070d50049840c9d6104d9fe0c0083205cc683eea573be95dddad263c6bbad4235626bd2d51399d235b1c8382a8dd082a238919efb54f797a969449b220d30286f4d772e590209c76ed0d379c8fefba713a5f16403306dd318d8e3021e020ee086ae21584de81c97b05934bc26a8f4fd25cf42ca741af2dbf0af5cb2c2fc5236ed0e2c08dcb99a559d82024c533a10795e897c5c190ce0ff268c2f3293750389c7ee0cd7d3630aa86fa1352e128a8e6adcbbfb885b3f5f72cb0fc007b83c80a20da02808f58e51a3f95d606a9205cc89c1a7fade7ff79f643c5a1ab34527b1fca7831a6688384396b5fee73c5b709182413cd7d1dd272887dc7d10967735168418720bd6cb608e78b710c787f92f3992b10756817f55257ead05dd4975ea107f43f6cf4b2bc3af1df8d6343c3476475a01ec6b0bc2c61370bab80bf1d87e89b68d921b9a503642c81225159c83b9c6200533446506a7398ad99fc60a8fb9d7e034286e730d0e39e0fcc2e720501e953e20c0b537e6673ffa38797cb0cbaedb4576d8be159243b6d825a232762e458c0d7bed9f7d23be6e21cc00e4f9ace180b5fb7152f56c005361950e570b4007b33da515c2d7b2c7ab1de1827e1943e684488e249f04303e7b7937deed26db3ad373940322e656233531234108c835cae11b45faa57af82f70239000f94574b2848261c5d0099a37587d70806a4251eca08b668818d15f6db0805a4eacf4a9540a614993a76bf5c88b7e18ae3161798333cfd171b7f93c8b6a50fc3cfaabe4d9dfa35cd1a34004f91ab37f45565ba93187ac2c4753fb9054383bfd395c487f8d7191dc20308efe8fc4439eb20d2015b60167e55b15c013b763de4aea96ed94a1f8c6a5c9ce0a6cd7e2cdd1fc65241a6bf17f0b09e41ec1ae2d198b2e727179d59d04c205ef15f1908c1be52da741653238aff8e6256a8c1d908d22ca10caa13656e5bf42a30ca87ebc313b01e6c37ff83cfa6dccf92702f54be43bcbeaedc468f4d5255f37ab24771ced6b308b7018e0174c359f90009b801036ae2dc9ec7d64b88f51a46822e32686e9ba94516cb716bf855511cb0a5341110cf8011d98b149b4c0614fdd58b0e5017606ae70c94bedd149c059cfa170687412a10fe3444f6b2a151adfcab06d729eeb2a8fbdee0c0bcb59830900b3b5e71c0ace569373580537dddfa496b0fb539769057060a148fbd37bc08dd2b053f1bcb0c0c3b4e273e6f0fae8361bd5ab8bb3ccb74ae3ec79e8e3018fc1ca631bfed88ea599456596e7e2a70ff73c882c2f5ad5d01465a5cd069136057b5b8a17059504870d29b46e576a4063635c1061cd8fca67a5947eea4dc7269dc4040ed0b7fcdd075892457dcfc6e3a8c5dd08a04e05e23d42543204ae71ecdbf61f677fc09be65b6ca6857f15a9950478a3aa4f20f03f72f69c44a6d36190a895c0d0b0e16517f5905d7e37a368aea3e3482d31d5cf00d1e598194b548427aae51a5091c0605b14fb7e0f5b98e48056990f2c2eb5993f5263c1eaa730b3745dc404a11deb66245acc36360d82b1752b6205041c3aca12a5e97aec7c27a10a1bb43d9f115125dd1816e498ef020d32badb911aa1f6687223fe3141c820e2e1b03bd06a2d82b32cf0892c1c75d049741ac5345504a04ae2f58c1949988b876fdef37cdfdd28e1625950ac699b6b3172d275ecd2526131beacb1532c5bbe98629ccd6a392f3527813741604b0646e7c2f995c8e9ea4d415617fa7b8559dda48bb8cccb1cbb67f4236f18d64faccd21e260018a6bca5d87b57414e46db31ebfbf3f7cfbb56054cf6e2862fc56a5f6911b44c8187205b711aabb19c973840b14712225fc503bbb2241ba20034907c5862b9c71383b969c0556034351f6fba90b4528291c79ec1d3ae8559e70a8a90aec10bf37891bb15fe64073eb43d70429af7821addcc78f09f6a826b21440a008b487233ea089c70cede98967c0a67edddd30b9080f282990653b81e5d88e60b05aa3616f3019c0ebccc26786d1a9fbbcd53f183fe77630058658129d5e7b97cf4283e2050baea26c6127bb7d8e82b0b319b91198ddac848465d89fcdafd5666bb1cfe4b316beb9e81fef5daf0987a457b84de524076bcfdf1f031e1b2ae6014cdcb2ef56dc03fddab59e253264d06a1392400008be64371178aabfd3de2b66cc6bfe8e79fa66bcf75414182d4a45f900fa99a94b657d98cc147d1a46bd0048c2c8314374cde924c6f44fd623e15df2a243c9fa0f88cdb8440ec8b56e08697530a75f1d85070a4885aee1be1517e14aff9b589989381c2c817adbc40211432a305491dd02ad4804a40a92a38a4782481ec0c528e2a2f922d822245c9e25202d3b394967989b9b9a10b969ab641ee530dc2407a46e505c2af157f253173996698630c460a0d73acf1a80b4b5ebe6d28896d632360278893862b406aa83d07cf205f2ad4b3070f5049616e042258278628212bfd81a4c0046d0c6b1176dd3508133d54ea0a97b2309889fe19ff43a1a80a27c74bf26faf8f53c9d5b999143d10a090283a1745c072e735edf051bdaed7040310cfa4b5a589afc728955caa8d9bea81636affdde05997cfdce61e15b6c0c9c3432ec918b1161c959942ffc6456b8e8dfed0146a60ba17747dd39cf1c50d0d7a9f4bb4b383107170d9af3f60a98e2c98c4441d26349ebc800efa18c5fc9388ba1e613f796badba60127ae3e4f660b9a5f52c520a9c8a3ec95a447630f67d8ba4588becbeba55865c565d320b06f82228a195a146a112ac0e973f6ce48fb1e0718999491c7c9ac998600fe32f1fe71babce7e285b043341645b124891fb71b689296d0afcd6ed9c0bd489f3d223ba6fa86954ea6a495b52f6c794208f24c114e439930a35780431b2a2c2087f21cfece2965686334c553147a0d90a7fd64ab1a6a15ba29b83def91d42d39f9d5c788613909ba8e1a16bc18563db1f06025855b433a9892caad77bca828f3f35ca8f479eebab1438c91ee09ec7c8a35586778939dc4e070541625d905fe95f5972c7e7b9c9831c46e48fa978599d913c4cbc37777c49d0392b908c199cca29b5fff233064b1a8e905bfbabe46d91a9f7ce8c31147aba6b14e286c670c337eae85f42445d2794023ca296356afba9d42ad07225609394e7cbc777779248091a73690c51e5efcaac7200168e38e50a23842c4c316a6f83473ecfc03592e0ff366c30148c73e6e97300efa9d05c788aa95cc76ac6c4ddf1a5a37d6b9fd312ce365478467a10bce9dc8b4c1ee0284e1a12884abd58718c6e016afa1c3853508e31755514ae2361d3553317da912a0bb64a3c10ba8ab67181028212d242c1d30b374e017be2afcd69f8fed3aa2347017f0b785281abbe2e93ea10bcc314c6380bfcd65149b2a7dd4a5a89dd4926b9f7de018603920366034e66130bd75cdc086c7f5028bfb1b21c2eb4931cafa5624427c8e7c3e2b594a291bd58a02366832f2ae73906e368babb93558140f8dd91fb460d8e98942d4a4dcf84ae98253523a6a4a6adb40ed5f65a8c83ffdfe18505289c9114afad4b060c3e1627a03b828e39214105cc37fe1f03d1ff7f9abbbb4d35999cdd913cc94c36074862536e8eeeee8e01819a1113268e5adef5051a9d3429cd99bcc98125d672a2d64e719664e65ae67860d9a8b8997bdbd3914564e3c5c7bc1b54b8bbbbbb3b89d2c80defb8a26c45970798301ee5d98a17aab4a9b4a97662b79a756e644f4b4e50a8a979cbc31f55463860845dd1c0a1c97d54b9773428fcc0c5c58ce8cbf2ea8ca40dc50e5f550e1b57d3a903ce30e81df384d07c1c539c8594c538d83462d34d42e2b2052245deed52fdff4c368fe97e95a7e7eeee4ea40704c2ef79eeeeeeee1e02c244870db48efc5ad8da58d2581830ca143e317eac6ca9ed5ccd80ffffffffff30cade13162ec67b4858140abe53e75994d4b48a824193a068ea62d8d08129eb291301fcebf17844c2bef7de4353f784a5c26571b5c42a5fdd137648cf3d61671514119a75f7ffff77f7b7fda7cc826b990460d8019655117077f7b9c6510dc8bda6c4d14586db545c919b0a6e2d3194669e7a8c81f5d04046cc7ac6fdff47df1316d62cdcb3f5e388c86ce773ef0f34343cac27f2cf57f36538706e7089bd1dbfbcdaa0b6eeb27cc881ade818d2c5355eb01183a2d2630175e740d71312cceb9a03b95723b20734c0980e3005098d3d1424eab122c38feae99233446bfa5103633e25a7cb0e33b6465ec468164846140e51bf28b4855c444608e53365be657591d32159cc5b070d407c365532445f3e1d14b5e8905ee19a56d4a70c62eeee3e3b599f7e9eb6f6538ca5b04987b9b0f9919a7aed99e488d211c23baa42d2d01117e6236c58f9909a7c294ebc200335b3f2f3762507f475d381fa1a29dfff7f347720fcff35f0d6f545f23091fd403291b70cb1226fadc76b6b4957c743864a3c6badb5d65ad760086a0625053d69d64551e7a8285eeeeabbb2f732f7b5a54f4b49597de25201cbcbc67903ede71add7301cf80c135cfecd0c09e14d3a94e28878d1dcbd1aa62ee0c6989a9cd1f43136756842adaa3635c970c0ed0820f8f1e492f6a493d1870b9c82962d1d1f203d675f2257d8f3ad0c7c2491265e0bdf74e61622e6b9c44585b1cd3d95c5c8d766ba86ac76abaa53526c36be9e2548b714ed9f00d5851a16b1888347b9fa5a8e8c2554289ac1b8f26df970f23a52e167cfe98de62b478d1e36b99413bf72172efbd95ae7b6f213f8b7117deabe15671ac79515f4b31603c539e16a8265b11ac8561efeba90d6d3a75038368a67a4135db41965794f25e753ee01dcc2a3c5414d2576d3341dd86705444e59415f7455559aeec60e1b604b7a25705743e39ab9c59ce2f270d679a738d83b049dace3794ae3588fc2bd38bd614068b047a51303345716e6e31e43c38ba3203b2bfe6c7630affff7f435606202bd0f526baffffff7f80a476853a44ee1caa6665469cf8ffffff21dcdd79ec80334f1f1008ff0ad4af5421b0f7de1b7697b50a16ab180bfdffff5f44c68fa61b47839553e68d618fee40f8ffffe5ff3fc72ea74fc7a5a418eb88fc15120df13ff820f6a000943ddd8308e8133f909c92464d320b9a736433395b3e7c51f8ee00e8f66091bbbb15f40a7a159ddddd85ec84fbc3880c674726a72c5a0adac046190fd68f5c1f185a169e9d9b022dc38a6a2102835b4acd0e69a13d571492378cd62909e5f2823c5fe46bf7bc5ad3eede47d32618908c03f44a240b7e1c1c6231d0ced0ec78f825877e3caded1d19c17cf5f8bbea767f954324895619bc9dfa854663a67cfe9819b10461606191e10566552ac6eb8d6a6a060fb91010b06424a11ddb5a8a8680c4705a78f49950e25ad95037c4b0c3d6a160d2289a79594ab558f698de789ad8bc88385cbd3cf8f0b322327134f3539ac253122da568c860a29b7ae0541774f6a32f0bace47a430e39c38d59a3cbcf644e9ac29f0b28a9171ce912c89dd454de8f1992e7460f39d62ca618bb5ad79b2254d52c5088d05f1cfcffffe68b988638d34e5139500adbb2193aa2ea9ad223bebca51d73d8209f5cce148f9bddbd02291f2e2a4cbca17db9551c8c588d283b2b2a24102a29225ceca1cfea2805aad26d8de0d1ecb3799bca51c595c28137777a49120083b96bf6cc1dc528013736a47c6ab1c9d1e532e28623951525a3f1a39152b124adb6b14865a632c8acedb30cf9166d5c24e6ab1523d3628f69475f5bb48517025e4d1e1d37713f2e6d5139009c9f1a1ba73c18342c756974230634a56492fa80b0bd32657b37d907faaa687c484d546a92d4b1eb57764ca56f3b7e624ecc3da5f88ed9dddd3764691934395554723fdcd0567c68e818b5c80a6bc2ad7991006d5caca1e28a90a1b31d355e6a74b08863fda090362f484b634f66746e3a9c2c0bebffff2f7752962962cd0a89fb0508f1ff87ff3bc6088f556156ac591716bed03a675d176b59c34552f32bc7ec8757c680226ee507de1dcf2f6cd4bb7552b06b94cf59c3334bd4ba84d6e956bb62a0b919762d5e6d37fa72c0a4415960b14de18891e5804b3332fb4cdde88eb87c6758df1316be7281f335226349634f718d10f6ffb94db74617176720d58af63129a384eeec32e0c1286155d1fd2042266fa4bc3b33ffff1e22c3448eef090b1763e2d2dd3df99eb0f0ca8ad95da68113736454529eb61fae6bd79a191494d28df9ffef49f39e35ef892bd16c13716983fd49fe289b756f7085b79db4153c1b1a170ca4acca8ad26a966e5d1f86323bb2fd0392d068d99e72c3a1e0d05b1412e0c5930489afe7676b6d8923e668256705672745956a8091b6f3512913edacc083a172c188223a5abb99ea6b71c385ce7de17277ff81ce3fd1d8dddddd1dc48fc35949d28e6a57c017f863833085523d12b745d4fd6189455edb2baa6685feff2f22a3ad62dcddafef09ebeeeeeece2a89e08457323125d07f47d200bf4cb8e699ed136ab6770a8beaab44b2d1f784858bb1d586d23077504df5564405997630ff8e346b67537fea705d984222273afebfd41b215b0cdec8a83754742a5ebaeaee50acbd71d9487d80705bdc2a0c12001e53b8214baa5f84a0b0a2b8bebb93d0e8a0e57cb0263bb73c359a201c1ce88cd55467ee7828c98ce65c16562abaf7de3bce2dd2ecbd77d51a3763b7ae986675772f9a028ba8c0a2b2127707e1c4a552862855a63d41d56cb0f94e2171c9c27bff6fe2122683beb933deb51807e1664e48500137823d2dd4f977c4e07365efad95ffffff1f02e2ff9b56196a4c616fe15c180003078bb48f93f82192227747b718fb3e729fa650475d33945e5f4fa3ab1a0a6a4932abdb694a5a09d2e159ba2bed9b82c71b47d590dc8068540089e0f675c672a7e654f42c470eeed16dbae2c4244005d580eabdd8ddacf8258f4938aa56b1b3b2bfa9b62a51f7de7bef208ae7deafa1cd77599e4529c54c8f4b3a3e6420b1108ae9d9e293fde0a3eb87ff7f659c7bc22aede0d8fd1a10ec89a791d31b4d49bdd58b42175865d4b69a4c612b90fc64a07265313f327e785054b8e2266663b05aaceec91877f70192da9c661cd3849e340686848f8b3313742854b410bbb1eb238969d863b518377bc043e410d9b654759cbbfb2c65f5dfeeee1e750281f0bbbbbb8bc8e0b8c226a93bb47733806e08edcade6add2aa3f48baa49011c82224cfe44c022e61211b208901626017cb1399954b350f686d9a14b84e00dc27aefbd65ff60deb2cbb3bfde0febbd374cb05d139fe3842c8a8fd0f26bbc89b5cc6ead8d28b8b32bbb72dbee6d6c872beeba75ddea92a68a5f1988e486c26a77d7dddd7dcbadfb30c4cbc22e7f91456b6f5b146da32a04ea95d6edcc5bd6b21b127bd0b2ac8914bcf2965fe204da955977dd095c798436c6ba6db784f0d0adb32b5b4fee14f63d71e3b83aabece3fcbed5c730de9ff2c6920c6cd6e70916abb02ae6f3ee696f51e811c7ddbab2cb26c512d7755dd61e4ab830976863a11bb7118e59065cd6718946d925ae09ca5b3c4499dda8d90f5abbcc9ae87666e36289dbb650edfcbeaeecb6ad6fd9f550c285b99ddb126d1c9794b8ec2578b1bf2540259759586e5d7eb9d560bc895d66dd8d43231c4cc6ad89d1758b251a053d3bf0f7f737bbd6b31c04a380c4b28a09517e39f610e201c403fb9240e9237a187a88d98f5f6e631228b38f1c8d1dcdbebd0414147f01e8ea1b671940e125b2b8afdd10acc97ed977d646fde79a146715b86d590dc2b21f48146777e37e631638eba21ecb8684cc2a263e6fe19fbb16b66e910205507cb1e9e2ac87865df12babec4d3ceecd21ba9954e71e2ab15890b52f785fdfe7ac6576deb36b7493e29159cf64f637e96dcefa4d31eb77e7ad795dfadc05dea89ef1d57b9f3fdee8f08d1dfe37aa37abc47a24f336be31f15bc36af87dba4c4f39ef735fe58257ade257fee47326bffa19d846813fdb17572ffc19f4194906a3552ac1b060f41ab49ab7ac120c8b00650e8962351c6471c080098e24df9ea4c330f1872fcf6f323fcb8a987fcf304c17c37051363161a9282a2c5504860cf25068cce05da068142929c96064d9d765187eb905beac3f707887ec591b759bf41e9e8487ee6eb44d9a75fb9c75ebd4c07593301cc72e74d6ae73d6cc59bb6541591b5548b8d159cb70bc170fe3b2926d2c9b5f3939ab941ce75776891abc2941a3eb7c4f5e196e51a2e23e5f37faa2f86283dde83c227ed1b117673d34794f5e59cee45d00fe57162e4fd0be35d4bf2d900db242376e18f1ff5b1234023f907dfb7e147ceef0f7f7e7b36edfb7ca0d8efaa8b4ed3a5d8740a8050d4318081000c0401409f3404fd3de031480052fb4a48ca44c30140b852291300c000381804018100602808030100c0a0502e02812d8f9d60011f7f4f8e54463e2193488aa256adfb690140772c3c961e6bb66468f65836dd2e9e62141d7247d4560160e6f97559536251a648948c7579d6d2b7b732b4f29bb4d7e7ef2d875e6cdb282177f0486c5e3e978a9f6c119f828ae2aeb85442ae4a19b807eb2de560640037147b6805a60ac9f0e062d882c74aa68c04ca8c26206318e6ab93c105c047a2f70d165f650a3d1164e70b5a55ce3e8cca7744eb517e2946eba5e947ef3fa4f8f47f02f035d46628f4dcb62c2920deb6b1af6447fb85bdb504f6aa1eb871df6e142d33fb7425c222a320cf7e5ab65e526d0424de914009d0e6c9cc70105733e656fb06d4aeddf815593caa97103194798186d07f43981fc68abca714a4c918b98e469fdcc3515e75c3fd474dd951ab50ee7428299cb0eee15ed0bf51912512bbe61c5210d5097ed5475672ecf75874728e6676df88f851937c016fc9b16ba8026894d0cfa240670b76292a7544a26e8591a7e08ac39814c58561b1531ae73d9d30797ad0d7f846093bcd2e401167aef6d5e7efc8e7f71ba705b47e639e3e3f3fdfdbb29cd72219223cf359a0c3c7fbd3430cc9178f60c369d42d4fb3e24628e44205469777f536fb582afd2178c7dafe407a0754de1d296f81c5d54ee1b7c144c6407babacd105dbbfd4076cf3d6d405ece275adcd3bb406343079289fcb8a40332edaa5f1cb073871dfc5682b22d3e1e8d9c44e9adc6502f3f50d30d9b2ee5c5afbd7e5c8a3b9e042a3e65da4e6c82d8dd696d5750c15d8c559f00b87f2d4d3fdc885d8b4e20c24c4e9a8febe2f0e813e9a1e00b935019a18ea2969eccf985c19ce700ab44d321f97f54a0690726950d9b56c1808400323794960bfa9570079e68756df204644da70de33bb1e44b48b9b32d5fc1c3fd09ae7ac1107df426eb6a455aa66e1757584f0f3b015b515c706e9f92006cbd2d454adaaf25e1b7dfa2b7c46ddf69d3a847ef5238c2dc1e0333424e85133e73cc223fd0aaea9bf721aa8f2e51861a750465db4393a20b4d065a6410953b6317a7d6f283c4b4e4f09fd6efa4986b8526cd3cbb302dd15e055c3547abbe570db264bd248e06b74efeed4d98cb59c9a6319aca2226c3a0328e8ca4db810c4f384f3cef1bba868ca8984f7fc1f75644eddc9d4f8bb12cbacb6bb08772ccdc7ee70465f193b65a5b300aaa1459c81689ed9e90aa33d1d219608a79d0f204bc1082a1e5fba3b3941f1560513288b1666c6e510bca1461ddc23739724773fbcef53189dc4bb1173474b0d092701b7f31f524c4a53a57dd9f72b28beb81f43fe60b367b87f3ed56376ffe41f1fbf328a79409c55167b986a2d10d83ff046da6acecf47d852aa31afcc1803ee2a93f18f5d8dcbbf784a0e154a045d2dcc042049abbe6a0d7d584c2be0ab2a92b0a2b3f2f6ba135590e7046e38fdb5773c2d2d3ea7285390409428bec3adfe06f4439b648dbc82e6709119960616937139410e27cfee94e342510857fcd88c7e14b2414f85ee261d3319db074a926d7773b9b0d8c30bbd196d165c9bd9e82dcac76d9666e1e42da387388bf65892ece674a42c1c701afeabe0570495f93d21de78add74f1866af158af3e60eacbf86195222db164876f73050a6d80905b96432cba0cbb301921c51f7815bd4dcfd6b7d10bec0f0d31dd5516757b41cf1f926243ab4656c284ceec1d90e420b0e3e315b0ea481e6c0e0b25221aea6ec1fb981501d7e5cf774371bd9ade50dd6bb892f1e1cf510436efb870df62f9435beb2bf4304b38c61a5d6ce657ceac7b90062a3ad01c6e99a1fa2ffedc7fa25a9b0051d29183c991e41190a307e7d7865d40d03e3cf351fde8401adfe496279a37b36f5cb41af9fbb2330fc7e8f7889d322326650b9be371bd583cf326be34de46ca6e89e68239ef069ca5328c009da270946d84cea6d18ace58571f66cb4ecf168cd8e7299af3946de03f2a9bec7b0e4c4ac04fd236d3c4e540cd94204c9b96c4998a8e42619c0bc6d62e72a71ebd6324e44504b77c7401d232bee8e2876c8c9b3b0197138ec3d2679ac05d6bd2513b92458890604dc591282a184fb4ef884422cf191df9e970af7306cbb9faf9dc92cb74976d53af05d5e8388252c4869e23f5a2f2616dc36e2115bc29d702989abaf5ae2309a7dffe4659f5db7d38154bf855e9fa5c161968c212e78b53f4078be04bf16db4e10c49b77ce636ee4b4edc883252ef10cde8d1e0a2aa84f9b9e65c7b661461ae02289c8bc81c07511255c67a05cff4b9e559fe3078e62dc8e841b64512828c7b2821090bb2a0de4158ed627d9b07745ea709ca9c822c04433e255357a69954f62e3889b48b9e9d35b8787c0af0f5f4107be6f9c14c21d1fff7c3fce0415b62e84433bf717e4cdd353f78519124c2603b9998f129c80ea70c84f33b3603a62769d88fe13f7c3cc2dd24eb9028fdeb9f3ec7a827bf0ee1526367d70a680004319cf4954545966d3b7341a6ef4eb54fd235df1836b2c72e40b1f3e28dbe7d78f96ce3a88926de8fb8673431e10322244a029d8bfb26d7d8e0fa76c629b9127221395591b189522faba2d2fed75b274d9584d001c977884bb436493e68b58b7312b7cd78652d9218424c30c5d61cf42b9473d7588b4c619a5579db63a477dde7e13490b6630fe0a27cc09aedfbecfeb1d5c3410a91d55a17ad5d1af7b325551d0934d75b05e9e0fb75e873ef9eaff91c1831049ee805b5158a20cf5b33e081b69b6281611c7f1263c5beb658e8f351aaf81baad4cdd0744e1dc2f0cdf9b3bb49bed564683e1cf100ff8803247c8250b2bf88762007929e144881c2d42005cb80b46767fdd8acfd478297b381c53f6e59c480efe40db382cde4a2fb3f07f608eecd88ffa361cb25787626edb526929e9115cb2ca444445f88b7677a59e1eadd415e9e6c9183cc81648f8fa5633cf0292c6c1a34f6ccd12081350b735663e51725170183173020a4547712603cb63fc690dc40541ebd1f2a4341f07b3f686af9bbc09b186e95645e27236bc067110e3708521f9cf07e1690945856f29cf7c2c3696ac2f2d5db82a91d0b7698b4748508a2619aff8f6b3bc04deb7c13ab847484687f193188bc2e392ddecf6106e606e01a0638e22f824f4c95f16e0a8949ba98134205c0450dce4795f2bf9075c0f5e100d984c778a1b21e9d8735e603e1ffb8a46eae782f9f1035947b690f17188e2fda43326904b59d9a8d0bb79838ea40bf6ab2136a2d6ad0d79834c7548ae82507469d211669f2f7b39f7f12681c811c30bfef534827bb2dd157963071726f842cd77441c27029ccc0d4af0efd69da423a6ab74a91fc235d2c6fc89061bc54bf3d87dcf639e8c6bc2dc92238880e962bf434eb4068e3b4c9929b4aaa13d9d52133910e7e1d6fd97edc8e7fc275f39e8c5d1467710b3cc7c523fda4748107aa7d08d85653619875c29adc4a41b70feb7491f3300c83dab006de432d94797da7e7c7ddf64fff7fc3c8079325d3a30a5781c05e278e78ae739fac1c11eddadd0a4fe8b8bef42674cd774afb1849937918dc71a990bc3c8fbd9b882f4e931ad89705642046b65a4fe12dc5512ae546d968038d1b7f770f52a244f9f5ea96b92247c7a7d5304c820ff2b2e1a2f4c108080ce47b15c7da9598b69e6c2193b4a6a9bed410701756f0afae74f1e3dfe31c6265efb66be74416822e4b7ede69755e3ba369bee7a590820b936ea2bed5e010216ae76ce6dd5912a5d428e28f137f7755f27f073a5f0aa759b2fdbda626a784770d4bfd930a165eb453e727ebca7ba575a2e04f811ae1d87cc4b41f45fcc5690223bff64bad2b1bd2a53391a03a891d11d0d61b3a34941689bf4a2a884bea1ee3e3bb154e13ae078d647853395342b1ac2d9a868d38c45aa704bcec95fd8035c79c66a099b1733ed46a021d41c320cc1b1480849044b6731543608871f41c7216395e96f3e2ba311a1c61e8e2828c3a81afca4ae4521dcb56f3068746f01b64a22c23ac134f6100bc01aaad314916e3d3b66087bc6522a32db8660e1090f750478902be9b49e5e2e29aa4097e831ff37c840a2cb439e47ec81584c468eb831dacc30907bd5a87da474cacde981dc84d0c3f902a837b1ab6e5b255262b9cf3cd48a94c24c1034e5cdbe1e9bac4897867c7bc408fb04a9079328aa8b6165df710514cf5cacf53632e15932ea72e7d7cd3e0bc412a2e56aed07fe6822e54ff163ff8e060a192c5134ba7cef139f37206bf4fbb45f8d1332461fb44c5d21a07f473169dc3ec47ae94096b59132a66c9ddf2f0917c93bee0cff73f43048ffd6735aa137ac3b7e73b11c25a6703a1de2a65c8d903c9c91801439540966603f98888b59f0b179bb0b791ee4910e13f6d4b68028f2d87a50a35e74c758dffffd1141737705cd3cd8f5a3abd7975b65834ca933637884fd93be2a4800465d034799ce5f6ec2c38e2049a7fc272eddfda3092b91ab86b951289c2211c7dfdc27e0263a380ac002e532455f319ac06ddf9050d671f40e63455f664ef7848ec4e8b91676a69fe675ac8196b079a7e69d4a0387d4aeb5c9f5bd3613ca3965cf332582c57b2a955301f22235e67a9caa2ddeb1e1829c7f55cb4be6bbc56e013bbd7b49b328db7722c2173ec22d23448c750c91176b0364e97e6239767e1347b997510504ea49a18954582d76eac76cc8370315b96e870120851d33e62093f0482b83f9a88c031ff85f90118addacebe64097db6e2232be87e75ed82009891c7de833695779d4fd2bd661e6d53352598b05e7d6b16d8aaa788649207f07a007b2fb990b842a9abb4242123b715f5e5b7a0c97629dbcd3bf9a83085c284051e8c48754fbbe4449c4f43a21458b8a7080aa2ceebe65f7c26f10341068d9a0707756c749391aa573d6f07b36befbc8b445ff2b64a771a375f8746e958a1cf9dbd2111f1655820e028827f87acdce3b805d60bcd14f82592cea785625ca727d017235210d9227b07adb187377f59b3352b9704bc85c057144ab7221246b354ddcd76e334ce49df73e32c1f2dd7fb6898abef3b23cea86043a7e837cc7b194de4fa107f7dc5cf07129d1dd92fcfc938f5e49e74b655b07ca11368e1860d19dea931deeab84dea20dce89e1443275a0d8cabc03a3f69eff74a906027cb15d1d644dd974d6a0d7c830d9797f1407efc9949ea5e91e4f15801be49c1ceb3f4b0c3c970cda0dc6e74c16d96ec41c56d8ce530cfbb6803ab75bdc236af87d5737657046af2742addc91d7b8b82d797f58f919933f75950525d1082846e177d517020a5922d5ece3acd3dc8d99b60e5255b985b1b0fecc09daf8516cdfad98f834ca7119c8ecd4430b2a451de63397177040012f7b4af445f175e4a4eeabca5e8974e2946ed86fd13b82c12d6d4093eb94cd80fe11c50336c5450933ce158ee08972d9def99803846a134064f99ff1531245aabec4111775d9f3bd1aea4d410a49a381b9d2e0494eb08d9fed8373746f462174740f7a4a4ba607152f3a9d9f5ee851fc5ce79e6d2fa0abf3a21e467a15213b52d3b3406b3dde01d99b174dd6ddb1ff46122ced0ae18978a94c3111a042f154d27e6b38031028a7a0aac78749c70e6902e33cc222eb7d6938a244905c15bff3c243c7874ed9fa91e332cf5fa704cabf21301396eeaf3e53de24488c73745b57749f0dcf29857c46fa554b77969dfcb80a96228d4b81ba46e8770b80738ab5577449567ee5f55cc2ad0cf35b75cbce6b5c176f8e67bc9c753030e62a274fd83194881715905722da0e657dd5a17126b6ab62f5234495ace246cdf88d2fcbfed10ada2f93cdc1ed4fa0c000e1c86ce278790c896a6a2ffdb09164f871ff7917ceb8c975d60ce5679ec7c42c771586de6166b39fe7e65fe24648479da6db8b9eae23ab990d584f826c1aff84fe1aca50a035aa4067bf1128e9513c85e3d9847b7624d1b9de48fa0d0b3245cfa26e898b63428b43be0ec96ffbf60f72626f1a7fa9eb6a1ef0d87bd803be93c3b7754ea8eab9412b6cb7744c4fad4f8803930eaa5020fa733becd9ec73061e36d9c3212f30bf5991342ab9ffcb06f4827f03f2db48f8bf622973c7079ae3f08f5740c66d1ab80247d3524ed44556054a94499ebd7680f91df1a35cd4632e304f9f25b7acb3deac69b81764b65e6c72db17081829b46b41aedf0c7163a2f497b0ab048bf13adb910604dc536476b9abbd179929b7b2c9e7e66584e5ce1dced445bbe3d619e385147bd0808468ee50466c586c40886a047bfcb770ea371cb71e178437fa5b83e0723f8653aa5352e9bdc3980f184982b2f2ff78a89e66008e1c65fb497c326e11b56ffe5218c9dc9198ab6af5f09b0182e12b0ad2c7511dfba48e22c6accf50d26ed2db6bbfd4ceb14ebb6a665c58bd75966b93488f4302e6ebe3176bdb0cadd76a97a5fc94a850cee107e03503aa35ce1ef7410574c41837d7d65c0e4a59190a1c377f276f825281e4f8e600b7db16a890cc1012469670dbf729bbebdaae921fea016c01532cb4b71110901e1c116137eece6571df574b84d46ed9007654f17bfe0b67e5877e7e57dab42bb1e4762132b8d30c26d9feeea32df3b6afb1cbd8b46a5b8ac5e42a51bf7c3045ad449bb470f550314aaa807550075622572fb0e6a9318db59a09944d3c71d3f5066de94f2c57115fd591c8097e1a253c211f27a30782a12fc735d550ad27ed8b9a516e86aa0624acdd13035310c040360c09ef556b5e63a59b5b00230352fff5160d29cd45089ced3ec8caaf5fb3f9059420cf78254a441254379e573edb941c9558a9da6f2ba347e86b9a42ef4ddc4a6f2df028d5036e540a0114c300113104157cdd0426967f2a8e051a737d589b2c35225103f8290fe893939eeabdcdd0dd77e87508a78563afbcbd1857e2364b0808901aec6d0711c06a0cd1a4ef1303292af3e16e3979a24293d06f5e845d38d3ea2c39a3c95e5c9dbafc75b11eb55a818aba4f4c677ef39dda2f50028fb0795a15490adc6fb643c509cef21a9e9ccdb685dc259eb84602631ccefe1881dbf1328554481668f24ad6057cd99c7926251e0b256a41cd3665294b4ec3062e0ca53fae311a3a86bda4e67390e24be449f9d6de3da5a5b1d6d0cff81d6da54cfbdbe3dde6418f93a6399e372313178c0d6bc3db5ccf678c753318cc6b47ae7e98cebc03e0d4d99bc0ad24c9b59bd826817ced95b2568d14ee2d4f7c2c66a31c270aefd0cd4265db25176301809379345392bab1cbd6bc92555038c4101e43bc66c83377801063e585ad901a7856d185b42dd698d732967b29202679020ae465ac8d322fb84165a7f4a7260bce23b635735a68dcaae905f124e5876f0bdc2d6d6b7ade612a0fc5abbba69d136ae419af27d45b8788dac4ab293448d73becd349a22d38640c06c8c396fb12b0c6e8ce20739fcb9dda271c4d11aabbd36ea25be1e60dbd40e30f21d6e5139fc32901e0d84b2da3e4b0c968ce1d20abb40f2daa1d29c9990dfa862a5ecb96755345a0ec3de795cc87b6d19968a68bd242a72aa7df954d4077e434e3f6aa991140520d432b8472b26e2675d0dacd5d5cedca4a5e514aa404cceeb4a1eec6887525f5cf59fc402fc98509fa10757b6b88cb965ec2893c1205e6f02daf471abf3d6dda60336e689d242a2164eeaf9769b764a9b22deb4969881702933841f48c85f517be7a7022d54ebe19bfa49e86eb7d2488c2cdbf203c25bb7f0005f09a10594778abacefaeceb49b4a7e8251dd87477cd49740998e01341e5d6283fc5e86414dbed5111b6b9af3ffd739626437afaf618cfc4dd5b9f996bd2c2310d4eadfc4fd1b1f2dacff2a03c6a1528180bb7ad01cedfdfaab791e041103a2d83f5d86d6fd7dc436bbe8fdc2c6701dfe0af466fd23e3ff7938ebf0f349c9aeee8ce2d4500c606cccf96c6b9b4c46370a7e379cd0cf9d5903e4763a303880c4ddcec36c411c26b69f02575832ff88b919b17493fcda14e18bf3374b699868da84aca84f6d1c973b934065d714535e3b015b4701b32693e11f90325fc4f3c3f762ff1158413f9dcd358b488a2fe4b2bcc1c5e5b92e4c81d08a8cdd9d686d892d6344485314c8bad53458df50e31ce82f22b6777c7c44b68d148df4e9622d9f20bf02f1838c6f2d11b0337abfdcb38be9a7ce1467e5e21eff09cf904c50d10a53258ff2ffad7cf937b9bf9117fe02991247d7f63f1db39e66924742c4bca7c58fad9d08a50e081ee7fad792fdb2f06bba5cef63653b9aadd46a4721cfc3cb55cfe41d4bfcdaa9f3088da98b698fc7d980857de376b51bb84a97ce2a0423fc3d347ce50446f5432f28aa1f1d76739d7a0e988f06ba4b1020066608848676b249ac9389c81845f13298650f960a79e1e61b4bb1c0419eae8928ef003aa248802befd173113dd4a00e15752e17a50ac754af6a1959828075a1077ba36550be47289f7fbadb7be8fdbf01700f010c3be7e41efa1c6b1ae4170b290e4078d9c101c0bc1f617a12d669fb31a3857a10bbe755292666bf37e41e69bb09808feaa42df5f8ea2e879e6ff895a252622adf379cfb9a2aac0f4f36623df8e84e41f7e471f24c15a480c5c57e6031818d210bb6cf525a41a6ea306bb51527c205741833fa98e83ac2cf5041bb441552fd4ca4bfe0334328bbbffee9c2157c3f7ab0407e2fade90bd07b9c8969868c4cfacc0cf42f343815d9078140c5743bac4793a903a1477b9a8be35f785a5d5d7d5053584a6110b7a187d484034dc8e8ef79a68f8cbb2367420c86da50b90722e695a107076daf2f52694ed1a57942cbf538c9ee61745415df0b78825c098c86f74f25277af5e26a7e38cb0f29da42aabc4166dd389ff76aed017fa4e58ec84de63164d85bc2e41288444a632164664650ce5ebbfbd82ba531c0f811bafcc0549f14b3d30a1f24a2ef1b2f6d7a4cdbbc5cfddf3482ee19c49aab9d850b0fa4e11da8e0ab0652888bae48767d4c345e85ba2066241b9699387f17f8c0e0d942307718cdb020e7dd43c1817023ac51947f9e3444f7f80fa7856f3f912c8d93e0d6da603561dfbbf0e6abae572c914856227391fc3ada54c75c390fc6c7e933f9ad0b1a5a2cc8ae266f33145115fde4b9312fe4dbd795127564ab6e638a3dd10f228ae34da51ccbe24460e417e71c6925ae466bb50a3adf0fd02197f0f003d79053564c10285196f547850afdd39ad21d055c5a4683f08669e9b7cf5dfbb0a16c0c18e3735b16b152d4cb98c06e519dea448000aac206dcc17de146f56f6149c488ed073316027e18ff87c954f8f1049c92be8bdabe66af65f939012b89ba20a833e050c56d383666349785bbe6164a0cedd7f36698528c84c459f65efcc716cc03e2268dc7fae794fad1833f3630ab15994bf933fcdf78b2d5404d24cb355cf1fbe77ccbd251d98687a416f31da7554fa7c7e03bb2bf69b3069518b93ca5e01425a77d1bcc182e21ff723e10b6d314db77fa0de0f852e50ba9e029d04107949a7097b56e8f4411037df23b210b63f746b4e26e240fffb78d32446dcfc1325d9ce2186c0052c28e764e28881e6df8b31af801465709ea36c29b3e6fcc5d1f031508d32138927acdb9845ce3172f644a5315f555689db04ad10415eba5225f34260932efc0c8950a98387221ba716a20315824cbf7ced93652af0eb0d176415b8eb10b542e98790949055e436f5b2b365519dcd1670e697121aae1c457e96f9aed199e2d8205a583d09be9c3f50125cab55572e4c599b0f28149034816503385f3b99b5d9fc15a9a039acc856b8c37a4c2b5e22642feadcc3d3c41fca9c3dcd618ef5933ebcc5b29703dc15393ae1d3c9054b733be06176807081684f3b7f18670851abf5f4386e0351539dad9e0504b83d7af53919d423a28991407f9374b4c282b1a05a05f8ae9dc6d82f0afab387cf165434bec72f8542733e4cce791b3e5f68597114a943c5ce9fa1bff07b5cd26365998a2f062f184febab9a4d11bc9303851a3b6d95603a346a0ecf9a8be10088d1ba908655363628a553e8e7677e582ef8eb6cfb8754b8e45c654b7f28195eb22a7e55ad06c57f561824f195536ee6d01626aa752ad49480eb5a6dae414e4ee523c8aacf3ef69eb424515774aac678aefa028268801d24d0d20e40a9ea00c5d177f729b2f8207c3b9c8ea01598998fc16a6e178c3994089b629794ae508abcc86a75c09422c4180bdc0fd544932ba42443a9e931efe09d0d32fba0140062641d7048767e77846e6d2cce88d671bd55ea2c20dae146effe841d7be4c57265a3b63ae589cecad380c5fb0a1c3eec435c1748338e8e07b743b00fcac6ebcaa016e05163907256f1a9c9cc11e120bb254af8c157961b45df4027f1e654a9dee5b303ec062f9febdb8adb82a4d44945e434ba805ac983bd4a94be1edf005441f231078edde3f0a664d763f2b2ace701caf1baba039778ff2ce6c7f885a8c5bd512489c5b5c9f19d0437ec0d5f999a6e80f6887b7d9e642d72195133f2a1e752b096be1f5224ff1ae4dec89481814b6891dfa6524cebcb29f2bc91954c6788580ea969834aa13ee929d756e4a952a2e7917468f846df3502f648f9485803b01db66d7e44b452536ecfe0e20f81804f7f4be8462268e25bdca5801ef455f5eb56245bb7cc7e0b6fde207b427d4cb18eb847c779d4d538e78e4200d04aa7f2fc301a4cbf0e32ba29838560dc2cfbcdf9df3662be88622e8488d501092a163e1e44f89a747a548c1a68ccf7a2f798eb746cef1a9f85bc3878db9b792b32386b6d3ed692f98f0c1977db4c02122dd3b0401d7f0d28c54969a18e2e4b0d71b3778899c8771d416ede56d5997fbba99f2d308c66116977db5c9617847a3b82a8862c22c70c90010c8e9ac16b9b1308784648e8ce85911556e3ac0ff42eee234b55a46782931da5a3f25679e2c5dc882ca1723bca43adb228fd6cfe1cff3b81c30d821d344b5a27f525466ba46f069384b66d8c93e7955c34e1df04d1240623c6b864617a0912b04331b218e14a5dc32f7f8fd7f3a6509653f259a304bbbfc64a502286d0724611c3359ed18b8235c8f093addfe8664863cd93305681e240fb4edca01905e3b0744c91b35cf96a1c729697c2bb7f096b39985c929d55a320e78d45691dd30d34d25d205b8b05a3329cd1110381612d45bd3510dfafb4c17ea8fab9edf5b9e77ee2ed37d3cd01aa8c91978caca9ade1f7d7a34ff780cf0646ecd2c73746da809a4d6aab2cd8ce161b48fab7020fc6e25260860b09fe23482410894b418a9ea74bc4e8c04a28399f086229ace31961e456c613d80d7abe0646e4093fc588c2e7c4155e4c62249a299be3fc14f6b1b4407d56bceaf16ae7c38099ab8af81a8d1b45462d613186482a01ac6503dacdd68a5a30165aa503d65664a042db3e525a0ae4b078ef3e04a2021dedda598474b44f9f281727237504813251342c590c4e53c1bc4a80415886479de6cc5d8ac2a98dcd7043e73800fecb5ee680310e686b9488ecbdf7965b4a99524a018908a208b308b506094416f5948c2c315c8ed07e4c26b980c0f7c85a6e065eb22a672d9773e201ff7a1df83afedcf2947c9c6e1633d1788a46496ee23151a3e46741bfad4ae984db93d076e6637152afb8214179b8be86bde97a7d0c2c3d7b73a35e8fc357f04d2ddac3339d2c146dc60ca48ab3aaeb63a4d08f26e833c9d874cd05af2350ae11487c18df24a345cab1cbc19182ca8fd1b70ea2621adce6ac919b61a762ef92db8ed09e5d57eeaebadc89477ced6b80bf75b34a6e06ae271eda6fafa3fde6fd3892fd8ff89aa7a3fd0ff89ac783a7ae9f1dd79e555dbf1c8fc8c2f1d4958991b92c41fd691a45e57aadbba6c75958d535f33285a21a75fdf4be51d7f53159d0740d7780c7a04154edda60d76441d4ed1e388388f29aa4ab5e46a05be3b338817d2da1ed8cb66c03fefeb30de8d9c034e2c7f7f686bd0cac2a7efc7fccb15f4dfb0e70d52ed3462184d7efc63676d8dec7acdbef6e9b0b48e847536390add116155f071f3c60598f0df1697c45faf836beda61c5c7c141c30e9dae91729fb016f6ea87c56931af50a3951a31b0399c0dab8affd203eaebce90f4edec1455c2ba2d6b572581743c74ccf363763e74e020bb4ea0c73dab8a8fd33045a407b3047f6b4ac1dbee4e7d77a30c021034cd0beabba6edb83321da9a1474311eea106855d9bc64ccb21c77f81269ced5bc1ea3fce9a71cf5e3eade086a7b525ed79c1896edfee6a3c98eadebbe9d62c7aaf6696ac04069a9d4d2b9c0a0b9bcbcc0c0c4c4c8906132b5d0c2b6dd0c6e86ae735f5c4ea7534b89b2904edc69d3b2d3099ba7d3e9d4fc02e9bae6e472300ccb324ddb6ae46ccb7124128985e6b07033f4bce45cd5fec4320d06df7ae33873306e06ae70551997a3cd98643812249d72c0fa91a0fa6bdb861d518e23b1b0b8bfa684ba6cec8846a6b1bf6ddc96d580b2fb467dc0a72fae4141351289cb616976d2b753e1aa96e3b81c1229ca7777776ff8d2fd717a59361629d4bd6fa3b4546a6971d95cb89c17be48df4e256d248d44e2a52d15abee7d17a8ed71004ca0edcc87f13627a5a65d1a9aad1e4c0de8d73cd58b7c3415f234a04a8571685253f3ec0da9c2f722be62224fc1a7d344bd88049ac5439e822523147e0908f49b36f80a7bf838f84a834fe3abe6c176358350281aefa3d0a33175b485af5461143146efa509faed14d5ab3b56d52c1b1f98757ffe7680c7a8d37b19a2feed2b67ed4fb6e1bf59dde721b6e19e176129f6667a7e8355c119e42b1e3c053f48cea019e44e3c053f7328157ef3f8ca8b780a7ef61feafb6afa8fcee6e128dd4c26ed7928f37808f3bc89a7e0e3348c12452a7c1ee2f0797014ea7ff2908f4e8f87bca7b0566c6d491180aaa82dd42d025010d79af1d4fd03d4e605d4e67da2766a39d467853e0c1b4b389c18f2504fa0d02372d2f921bf071fe24bef44814bfee51d396da358d2a3dc8ee8c59c1deba99728e8575fa136d5efdf84428927aa13d5558245cb1bce60a672ddb41dd6beccefa3e88b69ceffadf976ea641b92a7eea3f6a6ebd6ce71fdfc0de2e1e1498285fd6f77cf703958cd316f68943ced989e92ff2285e26043a3e4c75c41fbbf75b2457005da0efb271dfbd777f5da75936854fceb3211c58e7f8a348a7b84e8d5c4e12b130fbe9a1f0b999352d310b7a6901d934e1335edd0a376a6e92f148d4d8d383c151fa7592f522827e1982b28472a5cd1e1463d723a600e875c8e94ee6302c891bf35056feefe5046c03b8f5c4ecce10f6736045789410cb29fec67012a50c10a56c09abe82bf9ee288644450e688504f35b332226eb08214581889410d7ce0435bc1ca1753a21002158e3086b74f2a0b95448327c2d92b28665bf4ecb699ddbf405fd4eeeefe4cf39211c6808386ae31a184a234a9595da12d5e50892014ad997b99b3c67c76fff5ed49192f381deb8ca167d8d448bcaafd7ed8dd7306b20651888b2c20116ef08411216aa9ee134b0ca9412c31a2f8fd9d4599d79c177401f5ba425bb440fa40bbaed01642883019217bdf4cc605fd9668874ed774e5afc1025dc34cd06cb18216da8288da3f3f93d01642d48fc649ecc9b84055037c6d9b4aa3f66fffec37d10ced50e56ef9b3bba3501912baf4379917981d01030c3442be7de85dd78eab9721a1df9ca6fad235bb1bfdae3bf6f71f00e12344855563d9fe99172338316c32278842c8c002fd19a45145b49da1b47de5fdac90159ed4feed76a029a05a425500a349fd7649ed6f9b4067a12a10d51ea28530313393eaae8a7f8bfc062098730410d66c05c19c1ca0b4f69844c4776d77bd18737ced3129f3697feb4906ae5bb9d2a5de740681afe2cb65c96e370582eabeac1881597b787bf30960b7f5f3effe1154ff1ede3dfeedc7de1ae57077d7834040d810f6c31e70a310f60c76870edd65dcdda910e7d628187f360a42da28f8c9c037cd8d4208466b2ccbcde9604f86ba03f903b4eedc2a6ba1f9e7eeee0029e55bf1f1c72fc618b323e27ffc93993b865214e30525665bcc1ecc8dfe408834041eac44a2dd1f42c8defe20035ad8aaf035cd08750102f51767a0830a1f02e5105b463b85195407920100357a3088eae0833a882d2e42163fc45606a4a404830853d09b04c2b95664cb96735ef2bab89c2863b76091501029845ab04d611bd7c7976c43c33e3eb637590e9b945f1a9ad4685c5d2f1274cde4252bf603ca4bc62b46292f19e482f0fa01c62219864584fd448a29061298c545f7f2e67f57bd64bdfe8bf57ab837db5f7f3def0de9afefbde1febaae2bae6a55f1b9ae57157febe0aae26b5d161f8b3f63e4a1afad462ae056a107fd080825b85ec2c8ccf3630720c34d0a853f391dd7cfbfb89c2967f7881ecd7c286f4a74e90816c4c764f7d950a5b67118c6795fa4d3fb5ec7056a7c884d6c4e6c468f82c1db7f36151ea0c254855d8574cae7e186183b78f0157d616e15971e6a55fe2d403475a342216c3c2f4b4c4882efa5caee9e4968b4613384104a1a08a55008e1fc7875f3923368d8b972406f837088c9e5f43b7d316d4bc50da8b8c166840dd85f3fb91cf32fefcb7e723919ccb8c7f4a8372795d74b4e079723fef4be08b3ccc7478ca3a3239f239f239f239f228e8e7c8a38f229e2c8a788239f228e7c76aae610c238b54ccb8a98f32fff58061d388e867c1c0b0dc31c3e8c9cd9ccbf06503bf2f5d83ba7830395d6d963ca78e44e4c19cc18cc23260ca611ccec338b982f9843a60b660b98d967b280997da69049c45c0133fb30b3cf54c16ccd144c9f39c41462a280997d98d987997d98d9679e6006f1f7194e877ffc005c3f18b58c5a46ad16906eed186164d432326a19b58c306ab930cc4b0ccbab6a69a1a55f4e07579796969d4a9f1fe6a533c2c8c8c8a8d5d2994f062556f92301d6edaab0772e47e3776ccae9523e845009e6bdd1648cd9c55e8facf384a0579cf02f2e07ec8bebebe52565267344efc583ad965fc1c8c8a865d4326a19b58c30326a1961d432c2a8658451cb08a356bca211949f391ab59a306a0199414c20a6092690f90333b7a60fb30493670c3198b99505666e5d09030c666e3173cb4a952f8e8ca878c1cc2d666e31738b995b58b882bf2fe15f0000a5735da8fbce33884cdd8710c26d1e99d1429da971a36ed012140a45e4444c32969b6157cb5e6b28af2d7239da479698baf4f7e5f7e31fca3cbde29e24bea8fb1e581b9c040f3f7cec0dcbbe057a8583a79a8130a1eef3581b0c8469f4d7d03524eef777ec4d86c1d26ba51233b7d02f755d354a292d3d4e97e8d3d2d3d778a35dc346516f5f5cb68e8df424b1714f0f2751fb210b8963240c64f33e56024583e2190335ca0823611b34c6406ca4518c846da08483c04b70112e4254ea4c8af652f7b9f7869f99635cd5fc8d1fa1675a4f1953c40194bc37b145be986432ccdbd778be36b91c2c621b73e4cf877f75738b808432bba4f45e3cd828e82d95311121966cfa839a460c4ca37fbecc26d449efe8150e1c3b503ab0a993639fcc2a66700cc18d3ba05c6f8baab344a57da0f17c7619b1a8edd826aba1150ef9fbd140a9d6c60d30ec0df6d78c12c70dff8ce990838f0d2c8d7e0652fba3f7ed95dadf6355fd8e0394d8935dc1ae4cd418455736312d9b3b68a0d131bbaf145d726fe2636f3383ba640cb39b2fd8719281ab8c522706b6916369f43fd92a74acaabf2b0e2f7227cdcd70c334bed2badd14fcddf89f5617ea50b3c6d6c60cd3e887bf19631d0d0c8daad1336c23b534fa51b5fba55780557565d4aafa4b547c3d88764da1fc5228ffd505e5bfa270214f34e0d0aeedda826e971694ff8242f9af2c28ff850565981870b8edba82e472c3c666bb9e50fecb0a94ffaa420b4b0d1a1a17120ca897eda202e5bf9c50fe6b0a32b64b0a94ffb282f25f55ccd8ae289ce4ccbf4c9431995c802f1400dbee8d57d8355b3684f6c27641e1b7eb09b4fbee0500b820739ad18249460ccc8b4b4b89b290b84dfb77e90438e9a4b472cf7a51a432cfc040637354f96fd460817da20395292c157e6e758d108601ff14318ac2a57e6c84974cc14d2a3f3b394a12533f7e9201e16e0d6941ad5fc3a0f2efd74095bf9374cdf6fc1d845eb558dc4a7aa8f237911595ebd753542eea1ad2f33715ee2b957f3fa7413bb45578809230142eaafcfbf54fe5ef22957fbf6e52f90b252acbc3aeb1a92c4fe2725826022ae9392e8704872a778484cafdc6e57073db5ee372b6ac7e5bd5a8a8da110eaa66f484aa7dc6e568940140825859f61897936158a8d84f2e079b44ba58020f6b6ef5dbeaa5042a4ca817151feaf592cbb968d422054140e161492969d734a0462f92d4f890cb894d03205e4811c4c3823f77b52cba21a17e2fd5a7a84e8529aa3fc50214aaff620188eabe3517940ab9a7b23007c434b1922b5a7557860dae5054bbdf5b6a6eea12eaf752e453fb610b153da92d748518d4fe36b98841c5026a3fcbc801e5179e1254bbdb93685a757ff7be089fa3c712635767530b5f8957c6eeeb2aecd179d5b8d79dd49e941e65f0ba13b95fe0848718a879f69b7b8ab8c87ed3b44cc97ea668f23fd3f734d353bd82d999e8d5a15e76363434383cd53835ec20923bdc5c8567949919192d7e6f7a2626d18515ead53d85da3d0367370741ab50174dc0ea0a75c144cec01dbabcae2898e9bb2f271a0a477753a3da40e0a2bb2fee07a7425d3451695da12e6a7049614b4e57b5dc04518d0e71d0d42055d99b1b35be4d8c3434be3ac9cf7e877592de4be9e9609f793fe40fb8c38a2f6b742aa664025615ff004b237e733290eae5d1ac2afedc50b2f38a550d6e72562d6eb223af4349ea7a755765ce3ffee4311f7b9df998f7e3c8f53fe0b32e4f67fe0fffe99d6417ab8a2fa7c8262c110a5862e8c28406b7130ff9d79ffaa4333ffefce89dfce39ff8b55fd6feea9cfcb13fb177e2817df61488af793d5c1f3ff37a38a2737df470780a7e0ff1316f3db5ac8fc2670821e496a7222fe1184208e16fd70e80eaa5b18dee816ce3aab0839ba3e8bf909a3c8dcdfc983128c7df4cbe3a45efc4237bed2980fde6f500ffc8299ee2f5317ab79e5a8e5e52d03de9e8f89fa627435766d282b351314d289fe2c3d3fc53f474e067ef8f61ef8f9da6c7037ef615809f79a7f9eba96555c01ff34ed3a39eba7e5938cd846eed074a4103d5a8f136c34ebd72942a7f7339ba42efd41cfcedb893904e7670f722857691fe39f1f09f4f81de7ae2d1efedcde975cf902e562632d146b92c41f937eec4237bed75b2d7bc1f47e0fff0cf3c9dec7ff4671eb73a67258d8af167fc6526ab8a5d37c618e36f0de40d4da0c9d760ed97ff71756d56108646c9879d0b13b4541b8aa7e40ca4da1e6a55f263b0409ba76bbe9916a26b3e1e83c7d89bf6d5a9dfb9c857a7f64e3ce6c3d7993f8eb4a793bd7b3fb0cffe87f6f37758f235acd3bad86541d4eea9dab57537ab36b7ee661055c3b6ce6436494458dd5d15eb96751981ceb0a72bf34e3ce0637fba3c1df898e73fffa4e33fdf7f7a349e9213c5847aff6455f2af5895fc06d23dcd83fa2ae5cf744d7f77d442db19edf7b5ab3b9d4e3ce6fbebcc77af8723ece9f867df830ef69ad7837fe6e1f094fc8b758a2f59cc5a96c6db7211e8faed045c858bfabd632a5ce4deb113288d6a9e961fa8e426546695b25192ab58957c9602db702798867cf9bf3756ec0d37cf37cfaaa40b814a95a2e6d9e0a4265f957e7efca74a2dabfb31ba304149bfaf913a58356c930184a50a222851b84ad7cc97dafb9835dbc1c7bc52253fa99288a9547975b39fd479658ed4952add1bd2cb1db8923a2622b9101fd228f924cf5b8d8ac9823ad7f163dd07b80824a0f26390cb99dcc5cfba0fcc0824a0c6e7ed9bcbd97659f626fa0f0f6c55c8c2ded14b1046172628a9ee6b978b13325f650c41bf260a8262de806efd5e260b748b727600594fd5e029f89ae472e0b02af8cef59255c16f24b00de8d3da1b7ef8cd646ffa835077e0ba03d78f5b4db42a08875815fc293159501de06f952148d483f214fcd8b904202b3e0a7e9326f2949046c1218d82df1eb79aa84219085b31897ccd85093aebbe13d585092a49369254a5a494a5a37ec69403fafd8a9d6049273ada99281371177b03e4bb5754c94d74d8e12beca557e48787700ff35491df36d1e694de6eaaaf1a8d92f269aadc81d6af31d032507339fe3362acd0fd652435060cbaaf6dfb60ff50265ff55c5f451656bf0906e5d79ccb51aafeda3290466d951d284fc9c7e4bf48a1dcc33c1215f3056566311224336408a1fc2c04c89a3ea5d6356b398f08fa95dfb9e5045a54e70efecd537b8318ad2bf641ec796df4066e7243d7f0148d9a9b772d5ad68355cd9f6be329f9f399880ed99b1b75fe7adfacdde3a69f1e52e7af7b33bf97f78d9aef2fbbc84956353fa60afd988889bae6fb29bae69b695245d7cc290365fefcb807b5685edec755eae4a9b3a7ce5ff6b8077bd375be0dbe8a3f1f8722d40fab1f137deb849bac6a3ee4784456f43a081cc44980e8f775cec7e1ab23fdf377f8aa07f824d2f7107f9b6fe32b969f8fe32beee76b1827c34ec55ef2d4eeaeca0c796a734fbf06962fddb037d8cfd7c0def4cfd7e0fcd8cd77618272a55f7a1dfa25efc711ff1fdcd3f9eee9d0ffc1f2f3af5373dda97ffb78e1e0d980a35158e7401a35bfd47511ed2a757e771d38f188bf7d05e093fe03b45e9f75ef108eae91a1f1d5e69dfa3994af48dea9bd138fedb9d7d99ef37e1ce9ffc1f2dbb7a7437aee39ef07f7a4df61cdd7b86e7a6a3e4bf7dd5dac9adcb06ec2aa4de82d79af394944d65393a55b565f95e3dfbc93f6f1b92779a7ec4f9aa7139f3be9c06d9eb2af407cee2b007ffbe53ad03c3ce2331137e198880965af038f7932eb42ac6abe0fb1aaf93c7168d47cf66c68d49c32754e99df99e9f5a045b04943aefacd8805903c4218368843684c5da13088903a08a304320a60489144c0b00208184c2012309cf0286030d1041844e0138ad515022306280043085803da024614ac68f102aa49411e61824bc1840752888862d0ed892a9a9055002961450928032b324002bdea0a591962a58513030e1aa0d4ef6530e93405d15c3273992f73a331b3515376e0e3c2a408668a0d82b428e1654a1129280d397199e24389825a68e614130461a1b1a1a9619384a1241095e895202425f0389d5e04e1960cb16031c476041e92147a3429b8294e901d6133020ab02338d19a20623201683221c96482a988cf85841f2c06279046e8992f30415cd273110104641224a50811841b01284e1a293c42f4a473a35210419e5f04611a1b9a5aa33d1b221e4f6dcea4f1d5ece204acdedad8d6ca6488a7b6ce6f2ef5cf4a9d5c572623741a9a1a3637625da12a49eaf7dd1158a6b68323a6cd979945a1db4cb5a9d10415d5a76461042550adae50164e2cc92207f1481636e082c6ba42592401441644c8200a23062ca22c53a213289d420a680b9329e88b0f2214b020227380c50b5880c51025c0c20432086df1c2ada09916b10574b342fe50f80429442513a2134a8202ce80baec0046a1f306110714d620ca804224bc0925d515ba4288848296ea0a5df1432402a55e0c41b9ba424fb0a8df8c826e75859e40a1c62e9e4c51bf59454aac9be914cdb8a03831e0a061c666bf88522735c1d41582e253615da12fa0d4ef31259a0060d6e8e3fac1f5b8aab1c42ba8a81a8b02aac6b250548d5e979431524ad90a77872e83174208631ac6ddd75f2084304a29bfb84d628c314697385b648c11421861e95a7ac37ee311c6ff2084d0230b0649d972da6e1bd4b80d6624f775cc7ddbadd9ff7c27bd4aee0e5db64c77871e5d1c42081d15639cf00542e8300e218cde17a594d2b3893176ccbcdcdd7d5e2696b1994cec7deeeebfdd87fa1718426822c5568014dac7955fe37698fa52bda57a097a8531caabbb27d6dd9df10f0ff1a169dab61ec771a46da7f2efd41dd81b774d4ba5524b4b8bcb0b4c77f70e771b87214686a985eeee9e3163c6e974929191716173c105006cdcf14902cb8aff63835821801f82f825c8c303df4febed88de56e8d19cf8b97ac7fcc2c6dd29c73e3f7b3b55eb0ea66afcc5ba8deaaa06bd193257d409b81d466e8751b6c3282f875db3bbf2655edbc4dc3dd33618e2c7e8716299b671588c31cb68a071c71899c7478c71870d0c2f53db3ac6c86ddb35bb4bfabe8efff9cb485db2d092b7b8bcd8d0528bcb0b4c8cb1b46dd7ec6ed7ecaecb0b4c8c0cd3cb0613e3ee2f2ec3d4028cc7186d22c318639431324c31461ac0700db317639c7192d95d177697060c5361276b74cd37a8c50fc6f8d06bf8bcc0dfeeeece7661d7a36732a7fac518638c33640b970986f9edeeeec462327728af89c1d42fc6182336afa5527788f612638cb157b5eeee52bf18638cceb5ec4ba336c61823fc628c31b250ca5222b5702e5b746df78313a6f4053da28bc1644cd395cd6077776966c413947117b6ec8808802d9bc1eeeef2aae60bdbee4a7bfeb9abecd99b4bebb2d41e1d8da7b6f44576448c317ef349df4ef5a4f02f00e0c887ae74f8113e115dfae8a088a3239fa3239f239f228e7cb8a5744df68a50fe965211474747473e2c8d35d958307ddbb81c79c54c7bda359bf61ca7839361a7cedfbaafebf598d609610e025cceec4ccbb2b8decd10fac42864d9ef54ad3721170be69c1fb31cb94dd2c67b83fd46296706391dd867bf71399927c4c346713a028dd3b12382cf4ff5d115ee50a1b73bd35e8249bb267a6d32511a7f76ecd82d6384cefd44ec21a8c2678edfdfdfdeef5e0f9f495c46e8e5d041b59f88673b686f6e555cb7552dfc64fd7c78f5cf61ab4fb876eef5f1bfebaf1b753f3e94f1e08bd7ec08eaef3187cd7940a3b7d01dc2ec87fa7b85bf3062b1ebe92928e543e9717567dcbbb580105e5119fe172374082384dba81ebc8c096af1c58330763346187f18b2dff20428918a609f26f91c628ba5f05cea04da1f3f2608ed778e3cab72ce91dfc5fae5b08d3a01d508544ff0772af43eae8f04f5261233be28cfffb0ffe26b73ceccfb501886bda7b8ce18a3a94a29a3fbf414434d7ba879300a722fcf1f4208bd4ffee5c9ef2171fc929794de0eb046cf47acd08bdc5744b972775ba250a6db6c58d3efbecdad84cb2fe910722fbdef46953fa3a0dfacf29aff5dd775cd1c6ed448e5f69ffc49a5fc0d56eefde3b8ca717f75db37b9ed67a3f67a9cded6336d6a5fca79ed2987f44e39b6e8cd9ac38d0abd177985064d8d5ac139afdac3a9a7f69fd02043bfa88e112c7793daf3a877dd91cc58b8401e5cb952bf49b3832b5b482aae588113030e1aa02871f2325e0e24e515a1770d9b1b425be860ba1334ea43f9d7647247b93b77777777ff9e72d4f6be09c024bc7349854d6a1035f063c0d135fef0756cd89b8582845bb8a2a43691b6339f4364baef3ae45dd160d2ff2fef9b939a68dc9d08f638add134e69dda4ffd5cdb7bf1a207b5afba4a9e34a9df843052e8dc3ac51f3f7aee4d9815d039d76ba04495de47bfd942fd26b6297e2bf4776c8a3f7a46aa7b1fad4a9e5ca17e4b743576a400dad210e1872a7585a20c11d525c20f44eaf6ed2205fa310fcfdefc2001cba08a1d4061919e043c042a8ae0611de9c17df6cbeadd9a8f7b6cfb0fa75128a0dc63ffd9703e62e588b0d460d8b7bb7b1fff25b1d764e7d83b63efd87b36be62563f0e6603a3021bae2e1448b42a5f5a54cee39e46f5334fc740a2403f1b9a1c686ae61121793dcf227d6c00c93bf92f8bf43deb57493d35a7b9bd44317fbeec2775373ad50fc3638379df646893d5852209242adb94ea2a79e2c4ddc6573b05104e0d3720f928ad284a0469f1533d8a12f5db2abafaad1328117e354ef4a5512b788982becda6fa3f130fdbd8b86fbd05a1418f3d6f559f3c4443266a03443327a540efabf94d9af8aae7a4b489b7da89a7fc19c8ff4d26672740d57f6843611b91a79df8f065f56b27d5e30f5c54ffc8c336ae211c7dd89bab8855f9cf6641fdb0a11fe690a7fcb1215f4d266c2a23621afeff61577061b20275c186aa7f5817d57fa8ee00eba7b1a07a14f41ac236a695a5e1ef7f15b137338c55f957812142bf3954a5facfa139293599d81baafed74ff56fa125ea1176c5483615c4efdf44d82ec2d6c47fc2c441f83aa87a149497db4942f5eab8c8aa98bfc9ea82abc6d2fcb4512621a8bf37d93335aaff056647d08f6efc9099dfd92bc980b611da0fbf450cdafff1922f683f0371ee2056fb1378866e0e4a9f928b3de075bd808465da7649964d22c2c242dab40c93d32f24973fe7deca6e1b42eb2b0c6d67be08b7873c9a457a4d5e51502eb23746ba0688f4ecf5f67eafefb66089bacf36581b2ce4a403f6f0b6e27413edcdfcde81eb0e5cbdca117352ca412c846d340c84d47e8dd4b1f4cf343551c3806df4128601cf2611a1bf1c059845bd1f2460b178d049fff80a42f1547fcf479eda556a17d5feccfba95d45fd2090da3c8deac73abfe25596b00db712c6ec25b5bf8509caff79956ef9ca59f1495db3768c1abdebfa5806e873c69fad270e98c7d42a98978c10320f6c15d4cf06abdf2a69c54e014d6d2a820c41c4952e7e100556144478a87cc1822e84c0fa96a8369126a0007202658ca12f56443818ca829112b05005d6b745615ca1766d24a0ac50185556e84a096aff6c545da1308c507b00050fe296864e82d16508f01bfef6b0e58b6c7e2084af49ffe99a930eedfb3b092fd235d8c377237b733d7c3fe238601bf3b9c88508b43feb4e3ab2ecb7ce88b1427b8b0183f66beb24225b96050aa4c786557a20268b8b0fc46495beff9bdb030102c4b3b8078286457a16a7dfe23f8d829f759e8417711c300d78796e64553007b5a868557e6455f01949a3601207e22297ae93709555c16fe9bad4b1954d41057c5d820a9fd4ed1ee0eb202a7caedb4dc0d726a83b7e88aced1ffe8fcd900a378f8b62c081d32808dfe50885ec7367b6b40254e32a6a9102203ef438e422ab6053517ab7f626a6c66f215dd3646f6e788c6caaf15d82401bfbf83dd4467ac5445da46b86786c22bdaf89aa121a841a8990d4c8715edde3354f0369546c1e20f12397737151c7551a555423dd6e6562d065f9778b834ca60eb2a04cf5f812b7ab59cc750e07352a3ac74b90c0361c094c636fe4c76726b155e3efc05576dd62b2aaf831b69046c51ed22d2e016131d89b96de1cab7a00b38d651adf42a14a13a7be5d42952faf8e543724280f36fc0d45e4e3204db2f3be3c1c53e8b74ee4738ffc6ad8d870434b0662ba42a96c942ae336e7d5ce1bafa6a9211fc757d07994d0569d3c219c11c0ae786c6afe7c429dffa9eadc1adb4cd7e8346a3eaa4eadca7c9daef111bfeaeccdf5f327b037ecd089c66ddc6de51e1df6c6eb7c1f2c4978f015fc3935d8e1786abecf40aaeceda04275e89a6f837cdcf8d135df4ee1f15914e773606fbaeeb04eecafe3de0fcdfba1bdff8fece194cfddac9adcb88b55bbb68b31e87df14e6c35f9d03bbd7b27eda4e3d9f73377c23c1ef0b5af007ccdab807fe6f1e0a9f9382d391da44d66c382dddadce89afef96c6455f3f7c8aa746ad8b145134342db198d1b632d36753d43690142bfe64111a05e3f6bd86cdd33afc7e9285ce431141401f6a6ebcb6e317793032cd3ec4d56fd6bb8fbc38e3b138d0c1fe8d36ffb646458cd42e484b6335fe9a7cad2635d824dc91e9ebd2955f974a893f04b13510f55e96d4155f68f9c4055ca27579f56a854ec18aa8a1432452302000040009315003028100c8a4442b1609a6689d00f14000e7b9e3a644c184ca55110c32888a128600831041840800184106494b1310ba3bcd29cae5d3a3d47e9537df1b5197264b0f7bd15f2ec54db983a292d60feb5c557a39efe1096950433db38b53fdecaf7c4f9c401a2571008719ec41e1e5744afc0fd7dcd9b97d81585e4079e5315446bc82e8229306e2756d23ab16bd037e587f684395c08625905ccc558235d32847e3ca20db79e0627337c886907d0887d66bf7b34b5d577eef7fd6d7b218ad677d6bfc13d45ba0260138ed15c4ffc20016dda532a137b277b78c69e85467209bd5a90034fd6c907307806aaeb6a58179fd55f93ac449d6675622b57014db6250538449951778920218534898be7e5e209b8bee5090e38de2aefdd02d3ab80302baad7cd53af06ced05da8fd7afbc14ae9417341a0b1bb9d99b9be743df78301e99fade7fee59efb24cd5fd9a0081a86766cacca360fac8017decc7567275b853d9434be5dd0e25b749e077b41e0bd66e8461b2d54a3c6d40f9e5cd5a89d578a9b2e62a186164bda686998c2173d26843f6b3fc013630834de6362a1c2270141e829fca7c6ce9bc180cd439411a1e1f54545a2706796000b43bc95aa9de70ddfdfea90770f43c823e3fb3470a0114c36d0ef2870f101fd3dec067af7b46512058dc33d217937450b0e692f239d744ad95f5ff22599730b807b1b1177247f9573cac49c047a2e88b5ffa1b172a941af0c4809a9c341f20c3091c5c7a3ccb8004fd5e68c05a3e4b031aa747a6a45a5acb718d953edcf5287d1ecf090f6ff928d0f982be6a0c867185a4e64ca95ecf37c34337c2836312d2aecf046422913f888d633a82e85022db27d3f51419bc4133722b4222d10d6d74ff185b9c3a76d8bdce88834b3fcc8620f4005c6c482faf744e5ded5e200e68ffeaa0cfe0669ff9358fc9e6c49a8c8febc5dc90b9cda5ffe76b0bc2810fed10fe7fcabaff390bf17f069e0a5f360852becb17d5f0fe3b346fa249e106e1e0fe01678da325466851ad4e4febbc279891a4245c14f99e8664616dd9cef4d6063ad38d393be21cb6492b7fb68e07a2a8902faf0526b874643622b6a5cc01930ec60fc021157562ec798e63527c8ee422e3033a183ff1272fa3226d1d88981b6da6f6f25093a5bed578a37c854a93b7534de1f8fee17b2293f5455d8bf3244b2b408d8a7b54ca7b45c162616087c93f79d139789f56bb9c242bec44f291ff71c678715b6b0cca8d6034e65c77c0c26c010240dd8bc15c0db11cacd1e4080bc8f8717cb619e1551fde21c059f216a37e799aa09a02b9d0528edc0cfae724ff1c577cfa2af26240da73912815fc97ddd962c38575c848cd74125fc61080b95ff8c0261bc106c22c6a4de10e3d2499e0bf8555fc5722f1c63452a0c3cd9f4389c53751170261afd861f555c8445d0f185cd930141336809f487ab7c4fd46259a1260c5765eb98f1dc75be629dcff9226d12c60cb841ba9f88677560b05080d7188d6c02e3fad22e3c032226b1d223120ec3e3fcc3e5bdac51517a50f4b7a0152b75e161986f8e983adaf82f34458d3edee170bbefff884c690f9c03565fe6ab19f052e6f2ad8af89a837daeba3e89ebb6fdf9910fc8125e84ba0ecfffdf8ebf19ec7233bb4d0b3210734815a0444d8cbe4059fdb9b3e4c0459f0df331b899963bef024ea43b25afbd2098dfbd087c4a58873e955224349172d4822e7d5f5c4f4f9f923b29f4227bf950917d8de02cc952d6689187a7a23a6d1c3979f08de017e4b52ddbbebe7f0550a5a154f12f15d4f81f863dc41e344d91a1e128caef73aa4571db097752e2e73035b7865fafd437d5ce8a05d6edeb0cfb2f1ccffab3c8874256cb9684f2db33a705063b1ed645b7449b28dc237d2856fbd78ae8e4a0b0b2c4afae7c358b2c51f7e3e0c15f2582a297250a758ef74a382f76c9bff86d662bf9f412a5032db4686e7254b716215901a87d22031df798630df859d34f9836f5f5132953a25e3728197744b6db51a1807aa2d1914695f9ee761dc264335acfa0c310c1f86146a2af4abd1a5ec9dd18989b496c5049194892eb05e3517cdbe830375b021dc666deb58438c5e32be2b64598781c820f2a76eb370097563cc2870940071c51ff9a190170e8b94ba5c30207aa1298cc3501f40b01cf3b0e45250d3d8e83accc22fc0f1a256f8a4ff09a285d243bed644b1fe6c5ec80979ce2f3de2790339c051d9b454b074f9f39adf93adbc11a81f902c905c3c5a2a04c9d807876db50b7b4710baa0b1ba410118e2604664297a6245c09a5da84bc1ca81806169949253a64b0c1a37f5ea95a9cc39b381725d20eeb0525f881255e8dcf1cdb3d56c03ad7bcfccf4b6d65bac7c93f48eee3728c85ee2d45f20109e6eaccabb59dbdbca146489c39cf425706c9da540c72da1ddfcfd6fd4e043099cc16b473a7f60876dcd62587114e72041ce99c4066383c4bbec7c05917d4f0e0ccff9ea34bdb9042e4943ec0f16024b84cea1c71225ec9313955fb1c78147935e5f4263290434f023dc9b848caad41352c60d5e7110c322ea4c07519c4aacb75e3fb92ad7702c583a6cfea467a95a9a9ed201cfd1f86eca0acb8a930ba77cf0df109dd135dfa520262f804697b73790ef5bf4f999f6892eaa539e7664fe949715e0579da761214f1aabd1b09e92af6c4bb9d78cfcf56329e61442edb600bbbcaa02f2e133d93a434a10176cb09872a96f26d3380478a0f8ee5412b515d8f5ee909e1ca3f75c6ab8480b1ef606e9a6eb5db60b7f20455b6a1e414ec63f5ac38b33e45284e84ac8f6550076610e70ff56e452b07be75cc34aedd11ffdc39086bee883d80df5bb3a85a6f002b92e0eb6552718bb579ed154e200d19248e8ebfc665fa4f575ff18965f35ae3944d0426b57d5ad2ed8c4e923214595774d065be06bd32f796b02fb0401b9d750bf7545505e66c63b383786c01a597d0cdabff28d2cfa82799841f860c93df184edf9b1196f3d16d002d1eedc374a659129ae309944d931f76dcd4acc384a2614b6efd54acf34cf91c15911dc936c08941b036dec0ceb1a6b7968339b53e2f9119c1dda466fd385c40a617400aa0f176197ce2c43228de232152093943adcd00aba0eabaaf9c62b43533c674a69bc1e917273eeeace4ff90316c5e34374f0c0002812380a200620f82a30ca1fc0024b1ae054e4b4b1c18a0ef86789b3ace4913f6ae513befb81b434ec692028b4e0595bbf1b85b33d35aecdd0848245d3b3d7a16ecd68ac307547650041e0f6b3dba5d8279189961a702c7fd3e510b7718ef27cca7bf323d4e6d183e429fa84bc37beee2e6f689a2021146c7a721f604ae16b3c7f7c398871d87d96fe15e004571ca952d79b1f4481707f1e8365ed5eec1a28851df161a31b7dea1d1e0447463ae4f263d212e8080aed8dc401009c67269d44bb5da73314bd43c27b05b0115baf9e6250ce16f89c5258ad3881284a8fbfb31766c006f1c84bf27d863089417443a87e81be0211465dd38c48ec8c57eb0f6faeee803d6267daea4821fb1c0d0aee86eb0b5fc6bdfe8fdbf41ab3b45ed756088b0e242557bac214c3878551e2fb122a0267debbc6940691b87402bb8a22f831e36d1b4de9285fe826a4974fb12d8f3f634e01d0df2f8795db537028d5c3df64eadbc956e9993a3ac7d022e90af2cca4a8787996414fe8500789fc10163099f9930f6de82d1ebaa21bcca0781a96e57bfc9fb5d1fa9173f447ed5544fc0a54837e0211c1cd3683ceccca401d5405f8f52fc13eebf5e4a07ecf5c8b69f8ad795bdc1007029ed9b15cd813b5138a68e26208db58f5a46a05566e7d1f72ea54f478a18320b33de92860192186da30c840809e6c42dc3486176e46f60827bdb6711e063e678025cd986f236c2775c80c721c616ace6c0a3c29a03e7bbbe203b4ab319f3a7a74a6eacabb8965d18fb64b2a819d18a6428770ba2801fa1c8c4e6d3daddbdf32a795744eb1ac3b5b17acfcdf1f697bc1df3e3c708dcd8483a3e67f19e158632b412f212b7af770844c33aeee7d56a1e5d6816df53fbaa24b07d1d8268c9dcd9f53b1a9a1db950d5e098340edc3b2d32eb2fc14bac33ff4dcdcc7416487c6220005e08b2026ccd506f361d05125ab8e0259e268a6106c47e0e18bb27a3b9704f2288f363a6a8d5a15aeb2a2465d8c4007eedd9d77ebea34c747ea3b7fd9e04f67958c661be464c58d710b5aeb9c86b90136baa9fa3d9191a87e012c09f1d1f8433865ebce4a81d3b7e612074ba55de2a258a5300f8556a07c86051efd31411331715baea12ce1ae6a7737393aff0bd5bd856d779bcd20d5eabceb441b846fe55c5c576fa32634a584ff8fbf67750bf9b8cbba874bb784c05a363bbb23d3e4b0ab720ae1bde2c326d38ac9e3acdcc68cd01d352f498fe360d170f89172600cab85b338b4cf1d3c99ad0bb1c0dbf650114395b2873e0fa024740f09d50ea4393c81eb5bd77bd628f12241129b5f10822b5a3cae97c50e4baf493ea2f59498ed30a5f69060e75a400184e4f554717d1fa442571d0a04d6d490a9534496ca89fbaf1e683adf60d9650c24faf928f418e9c6b00a0360d61dd884d511fd25d47142ab2a9eca9fd09e28f87222d04128235c21fa07360bfac609ac7c80e9c940a45fad0d7fb727ebdcbe857912104960a5e93208ff3260ca67f4b76339c05571040cddf69eed8e943d57383ff45b01b31b34919b69805f7d92965aca4c07a59990bb149f7d8d47c7a7d91cae416a732111cbcb1013039007261865754d79065eea8859d598db139d05b5093ecaeaffa0b30619c55ac240f0e36fc59589cbd31f65f6d820718579e6be233c6847fa10ebc3948f7e6559eea91139d7e0ad84a40776f9994c22f1b5fb46714fa59324bd0871e925720da469a5b04c1a5a2e62e9a5705b868c8293a6613dd22c52d3028328f4ed98ff493490d2b2297726002a5f52a9344e171dccb3044b5565d2798edcd620f9b1874dd7263af03e525e43efa28e7862a6bc2ba09cece57366972fafaf5da0ab6a922dfc2cef8aad9d1ffed6751baefd440d6e1d15a293bb342c7a415a5097524d1282c5905b6e9d1e89de9c232e056e879fa7ab532d9673657e0462ea27c7535d2be71af559c5f5d14e8b9c47d836a5121de0fa56f6b4ea65af0c6d6e141bec8be28b8a70b682632d38b7a354e6347067a73966662986f45db8da2404029a1f1f48449ad5470fbc686b5dbf41363b230fd4a223702812d7bf9087b13c4edcb898dccec2f5fd29887c9c11e03b590bc4ba82d627e44e8cf2561c34c18a034dae834c6d7598d12e4782ae9711b11c1e82c92a5526f0f0bef8a02703eee579c49505a8d6eb4b94924a72c50dcb3b039987b5e38241281b768fff74b5a3adbfe6a82e9b0011a3e8c6006be6caba06e2423b6bc6fedbaec219e3df8e11bb05aae48c1c4c574a124a093b94a8c9afc944019997c6ffce927d02c8109684b8e287688532e227244707feedfce1e590ab44e54f50b889ac16052995e505fa11f2c65c1e0f043f18f33f2252d5f90e626da0115d7343432144221554ba2377c0c2add850ec9755250a3c3e6c1b18825e431848994102ed475be5b9d591c53b2cbe6cc46899f8b6083b3d9c75eb3b72d92239f2849f16ba4ca11a2aa94d5d6347ad41e52e4c74dda0af0883d18d8691498043907278959ddda6a6ef9f05ee15794f786f1df15bf384a5003befa42cb352ddee5cc242e5e2fbe4e2a8494b85170d7f12747fd0d11425ead29c30663622a0d50b74da1f66d4464bafc6f44998b2f41897c4e189ca567ab3916819aa2326536f33543d245898022bf5959f33d9f7465f75ed0f598d2a816e5a6c8c4b0918ee3aa30119bfd20ba1f2e6d07bc125b37d3ab2de1b21b8221fe210bc24bf25eedeb08663d5d8f1326d32cf07c0770595a6f5c0ad55e51ed3a56b055521f12904e5d0710568e1a5b279df48724a7f4278acdcdc905eefe0780a912146b88514c68ccc213e04340bb4152680e20516259a9280f5d64913754d9c44c3b91f0b69ed17c51b6f789af363325184f0b46032951ca889704c44e549fa2f8c90e5d6c15dd41c54d8b521a73243883e4ac4ccd9d5390c15267d7ad103058653317a7d24f65d7656446fe7f9125969421a7f77b5534c11463341e7aead9c618b1f31badfb1b2dd7c440c215d2d7af2c61ab87b4588d1a1eaacc5740f825d520a8bceb2a38517cbf363acce7143f3cc4c860855befe748142a40b8f6c171e8b3f78b55a9e95db512acaae8100d22d5aee8923f5e52f5d7d892ea57007aaf4a243dcbc36d544ac53d532c04690d3c928dcb997010ee46178b84b0a023e944b221c6395e6793e67788f2109b9075f9e454b47a8104eeae2e1221b48e04c7e5b1aad7ad5b1f68b4b9272a9d32dc25c7808a90c2f8f1e2708452ba3ffafd6b7a9256aa459a14eb600e53a54d8e642a78b15d5db4c39c448ccf35b9059c9c6af9d3a3e8947d23e1ab8791563892723a254a07e4e1a3c221f406caf40d8570554bde515038c683360df707b6828e022fa3849894ef0208e04f0d884b10cd59991022b06b719384ca653c38423e7de84e8565c3cb1c2a6dc90cbcb17c1b90eebe2c60424e156e92d2836cfec7d16eecbc30f2d7b9a96182baa334668417bdcc763092dadb0c0d5a6dd1ca6eece366e26a7054a036bc95c3d1e67febf3f2b14c03d32b1dc349268e68df83839e2b11b79cfc11e906ba724ec68e97804511603aec568a26fc87872823839327b4e6345e300b79e0eb704624940b17873b8faeede3441916c6e83fab00ddb0a4b04fb2034d4bf2d7059bdcbc2618c5b5a0f46340e36e0027e3a2f6023f745f69d041b04ba322f2096b30407d1edbbabb049444071cf14533b644e2c202a4fe014f7d5518599f52415c29a101b547bc556f4dc408ef1ffdfec13b4d27d3853063a5b49c9e22b3428b3a5ddf4e361a4a08fcd748a71b644d9b36d92095ec480afa8eac3f1d6c5be3444e44bcf1cd2d96cf821102b31ec36cde809f39a610292a72fa537692c64b3c848eed4023431ac2555a2550774974f4055ddf1db8af1852ebe1040809af6beffb3878293998ab559ec5b0fe55555c61b02bb7b60ef3161aafcce4bfaf83876b0261b982527af2b3eca5419ba88f088a0e009d7e4541cd571fa9e8bba172ead01ae4482d85a2377aa8344a5b46e314d3dbb6f9becb7f7ddb3812a587b0a777241898bd8e6888966b040a32246e5887974265eb7c3c4b8e9dc9a8abc5580bc8d64ad33ea4328aa9a0572aae02c36e7b8c1b3128f9bd5c33d78ec52167e4b57a9af35a552171f5d47c16425ef7adb4b81e3c05b997c84ae6d3622620ad8d8b193fd37907207ba20935b1dad407e8003cdcec11a6e6e8170d13e8d044feafbd19d068abcc069a096f871713cdda59ee2491bf37fae31e6022420561b754c2a606bb34e936b0f76be620fede37d841509f9ddd32dc3785b3a6829faeaafb08674bb9bc02c20922f496b0bcf645310a83ccadae8cb9efadabc44348476ca4f526aab9fd658502a5b08a2e1f112445d1367c84e48b77871e0d49800326f15d121a58362f0fb7486466ea905edace8ed019609146b0578376102ec5c209bbd028114800bd208dad1a8063340b5e86264fc399d580494b4b619094a486720a20ab33b6213eb8ad46dbc28c1bfc8685acb98245e171b0aeb3ee4e5a300cf29d0937bb4f50a7dbb8f8a895cf0950f195f43b975b3d73368d9aefb9c04e050c01ff3a8bfcd92a332034a7a4276c409c12413c96319bf6b88bf4dd49ed22d37a091dfb8356bd38054abb90c8c04dc7d2a49a4d7334ce0c4f9e589027d336437f4b7c695f0429ccc8719ce24b3c6d5004d5504d18f75584fba816b7bc710d4f0d426ec861aec69868fd6a4afea76a56c2e1c8fab12cbb8d9582302a29d7fcfc2f46faade412729026c26775c2f41d33b75d0a72a3c5509acba2851560568dcd4fcf3a5c965f75b2843a30a3c8d69599af00aa08c22e1cb862041c36779a7f25bb5133acfdf1994f5411a6454326e5ecc5446c856cd520d624954d29eed01007ae8b5bb15aa762ef38c599381019ef51a4ab334e16233ab6a01f4014ca74de64966040bb9b46e56c3780fdc3f77683a5c47569914577e813648f76831d5bc72f84e7da981e6ed7118ec8b99eae2212e8d8d3a222bc093ef004798c7e4621741421916d0d176c862236ffc6cede8791efe764cb2599442bf611b75e5bdae81d8f4c8497d97964dc2e817a1611a68425d3a93ec552e2ed99da9672d715a24da4bf9d2dfcd1ee1bd25d2360e35d3407e6775e83dc737990e50e816bedd793d67fc48c9100b90061f2761798610dc57e12e6ea8c6570be634c57974ffcb72d01d00590e96a8350a2116d4f10d8ed73a01346c441f08e43ea02bc4d19f119e390f1ed7e4a843a361210ec0d3d21c840192c3a8a91fc7a3417e968e1b29630724ecc235604c9c1b652d08793107c36409896a5b65ea97de9d1e0b6d84bd4052891e26f79ae9e0d69cb4c8292db1a79f66420a35a690a27625876fff17e01230a7e4cefec5444b10f8785edcaba3e0e1a6c08e94630fd0fe2c1d4457dae398e7d66d79f59ea04443f737ea2c24fbe5050ee7dd6d01770bf4e1bd817d25ca338f6ac0d7f9410d87b01eb5868f542ef7c028b71bfce08f270d103b2bc014d0675ec2ddbfaca1e95eca7961b8c1ab5aa903b7324123c6e046b78652f73b0cc228857ae21552e35e77418865573c230985d142da15977b1a0902da12f2e0493854b4afbfdc2075f2874ecd14b2582f01e33490ddf2813cabce86a087ec215bcdc5df0dc4b8b3204a1df30c5925430fab34c0591fc30ff4cf378423292ba132584e5931daf8cae4fe5f2e9cad8e968e613642b432de42da514469ad43d3f03b270991908737e3ce047545c1f5bacc2d8a2e0ee836274b1728d881151061b8a9623c608aea6671845e6d7087f3cba21d85ce04529cbb21cce25e5a3424dd4a121813825ba556870cafd86505580fa7071c0eafcce65a930903623a3051aec333080ba67f1af6d4ca7d903161b00ddf4eb727f6eec6423481da060050cf180936ebaae6a909043ca2c5433093ba1c229926ab9e0b6e4866064b2b7d883c3c5db226dd90ffee152735ab6392fa80b4fa87ec3fbaf23127238b574ff820e830f53bf11ab666533a3cda4a3779b2d3eb5eeaddaec68731d38d1e6454f85eef02800c19b14ca10e569a254be751d6468d2a58aff2964ca56c56bef3fa212accc1c44f349eacd308aa55c0e384d46640a6485cbc215939a1c168eb38ededeb5b7dfd6b2f282f2de4aab69f4b8255b9c5d9623f99692325ecdeff3f227a2b54ba059f44d1e89e3921aebed5adce88ea3e0c5c95a89e1d22f3c42edfc3583103892807621a2036f76eebded9df79f8a3a618a0b69913a4637247bb13d750e41af92d35b86162a3ebd2cfbe94f69c353dc5085431fcfabd2f6c73625e33dd2363d3062c578b94c86a557de6e19561a50b1cd9ef11004f1cfc516ce102e1d0639d81db5bba1e4f0c9f03411f1b077edebbcc11321579f5a81116bf89ac6282b21ec51c42b32ae628ad6778f3fe206629fb65bdc00215118a94992327bac67019f924470ea8d785bcb21605ef55ce74ae93c4a6ccb5fbf997915649c576d3eabb01fc9886c7ba2b592b484d63cdbab7622410a4f29569e81c4af98ce2c790a1b3c3d3e1885e687ec9cd8159f95071f30d5451f5a19e9011707fb00f72f5130a4ded2bab574cb7e3ea0508c5da25ff6477901c1c599c13c32e8b38d2e2ca82daed05f5018927885211f40534eb237546a8e2285db0f6b08d0dcd415a7a825a3503f73a6c086950a05931741b44d28d8c22fbb836cc3d4e4e87c53124faf8ad64c5da5927d042d376e3b9dc870b38425d457b64b7659d703323b0bf057264625520e07f8adabb48d2636386bc1b4e5b752e17ece926d7aa523bebfe28bc8edc883ceac7d77fba9903cbfb0a3821f31239c1144c2092aa13f7415abef65bc590e8c6f9c760a66d36e441623042091c4efbabda4160bce39d2843a61e1d7b151c89a7e6319c2a2b718c761b8125ac2279193165699bdd7778e506eaffd25f9a000aab491935bd446c58b8f2dbacc9090aed17ded7ba2b9e899bfd3d5acff39d3a426fcbeb7bd1a51cbde35fe93b474d31a4edf03ae5da88199c5f010fb0b5d50b9346896e328401d5d9cee2dedf5dfe1c62107616b602557ad39651ec0d132d29684b8b005c8cfd361057a334e3fd075ac44ca1affb9fbfe22d6da3a322f570827a3a14c0058c55a6258a52f8765181d0710eba7ac427979009b1a1c8cfc1adc332c7f242cf4058386a9964b5d6e3e2b95b4e755bc60cfd6d928089eccfe0a223969b3efcb2fb715c2af3d6a03968443b7c83737df58772405f0c36eaac156017e67d8251f52c52811440df72dedeb61b6f041a0c789f59dc98385f6372007e37d96207c584119928e0fbdda3a9e0cfaca668b630caa77c5d678abe9e38741cb5e6af6e0f048c9aec790b49f24333045e0f0b78db281d0dee2bfc020a25d82f3d90405216c61cebf047f68ffe40e63fb26028a270cf7f70d7950b21add8d2f2bbefc66810001188740e0f2d2a4233f0b27534d81a750cd1787234785b0161f28fe7505cdf5ce36acb69cc137cac844b46cd00a8d983210649bcdf602ea8a937bc440be938f5d837bdababf3f843c5f38d7381db74d1228ced34e06494e0d6613c62ac4d5dfc49b4dde34ac92e414b5317cbb2c7ff64c2a03a48d1a0d5323943eb50b6122f22dd63401e3a642b52584b751edc9b3131f939add7c512e24912c58e4a680952ba1ad4d21efe4632e68981afeadc9bed3eba4a3b1a9b8a1d0e4c1ffff3c2df219c33f838d78c117a8e6f981ea10740ebca48168c8e9646378824f5ce353e2e47b35cd34df5afe9563475e2ca4d2475e4032ae49066f74f5e8d11dbe170b6abc6d2c1ef4f75e619466539c834472a7daa5c561b4aadda7abfaaefe564fbdc385e012adafaa4551cb601bf95722efab01c8c843ba999fc5c3cf51e5783244d86dc825f81944424eb82f109b7636729f4d1a8102d6fb0f67850984c2e2d755ac7ad6195a6191fb046566fd442e759990c2a0877032ff418dc10d8057e46d80a2d5913770622ced2045189e894c10fa9d369db62d4bf5f1f54b138ae3320ce1ffc3e27c7112389daff9da03dfdcda80edbbda0d611153925ffb482670f9b11152ba699ccf4ca0472629a01bfa34642e0ffa10d2896dd9d856ddd97c8372f881f1b4d9dd6561ad34f6fd31da86cc7aec3ec1d9f689e4252b44bf1c08fbf93086b955f29327dc987ba38bec3e9701dd6de3d8c224501af4c7a351e6c99244fa1d9ae3844530d3a601ebda7f2b0c0a5ad9051db7c2b9f9605dbd490d1de5fc021b7600038fdd7f9798c8102572ccd570f188e22b4fca3d6afd9126809db50fe8ab1ade334c9d02c8c76a06d486f3907690bc0f815a2181c00c98734b3ca56839ed7941e038c7cf3110b96ef421d9e3c738f8604c4f489f5c016701a8f078d528b6b2b7e401b7c302d98b277c0d73c08fc0988627d2709e7f2110f693615c0fdffe114c3023e5fe7736f76b4d6f4b8f47fa41ee7d9a337589ade0f18d23733098db5f5ac709a541b42859103cf9c89a4d04f0fad3b95e7b46fb5171f7f738ebe8aed73d26af1faa957b034edac17c5340503808436a63162dbbc5c2d9163d322b32bbb9516ff5f65ae4542d0eaa0f6cd970f2976ffe4a141a360c6b9189b0d6e76f5bb8ed5da242ea7287de0e0d3af7ce47f213574fab9c5817aab10b618c51ff186b316eac0b0fd22a2a8ac47ae02e77cc6b5dc196c801d9672c8d45d6d06a4d0c36d1872385a7462054093a3f01675e25e7e265a0f9e6140c583b8316a96396ac2dc382ead53f9aa9385c902bb22c5ebe25571e7170013d27a6072a595b2d9601b618c7f0368d0163f1a70a385510ec6d35050001ef4bcd78f1bdd3b51cb47e03f0b9e32a0364b0d55079e0891e0e4af6b9d3c64699af283be64bffa06b0c21415da26f604a3e98aa01fc63a5934568be40d8139905f4781ff6d332487f5125375d3980d9e7616c4ba64aef9462d59471937ef2fb7550b63ab9ef9be1368e90d4d4253be1e2a7c4ea53451b38903c25e5beab2e3a2ca86376255715e3c9fcce0944322b2adaba461e61c5650f069363474c63a1e64e0a61abc4af2fa9297a714ff99f28b23a62d9bd7293a40fe3ae74698fb530ae1a70d80607e75ae8c3b5d588f0f6c43870c97e14565875c0d1a65a1909ec115aef42f51bec3068779e9c5d5a836901ea7bbb10bcefa131e1a62e73124377a374cf921603b3c2ad9c066bd0be573f1eeac8d7f2068f8a29c6f1d98ceb7266f824637b483cad8927a30e6d4bd2f5ed2917e35fda6570bf22387cdb21fa9db7cbc83d4786ca2b940d2c05c388c2248c892198ba3a50bdab3836e3e83139cec394a9bd8e78b58f15b044180801c32de69f74e88f964349754dc0692b4186268c2cf8e3f8f1b7d22b7f3b3dd64d9df54061de7a80d6c5d4e7736c0257b7a373f17d83abc30a8cf8c699158cee517d1a1d5e3d800dcf9b094ddeff32ffdf1d7d000940c809ffbd37f48ad307ec1e1b0934ff3e19fbf84fd9669de36c22321689a2bdb112662e8bcf42a9aecbafae9a620f754f312f33fadbe2347acfaf4c4c1a57d83b7d407f0efa2ef5ba4fc5160dd50de5d409710ff42ec98e8f83cb41d894cbd0b57d00eacf31e3028a02f13e57f612ee2f2ed66b9aaaa837e0b476d5987dc6884e09549d34ba87567597e25f8601c8f09a045d2b37e4e140687a1be03749ed735e5f91b20813e3702fd0ab63304cb08785b5ba0428ddfd5996decdb4cd0bda2b7d223b141a8311654f5c4336d106b98216dcdf52060974d9d568265267aee7c2679e05eabc92cfd3c1d46c69f0952508d39660a03f73a6f7b3ed45c3217461ab2f1706b0fed4630e8acde3de5450b26278dac6d00d8957d960eae1c65a5f14b4c2b034bc030bd30770c77f98c8353f64deed5cf75d0c551b3967b7d845933746b8e7b24c5b162979f7d07a6e7789a978491130f1eb8d983eeb52d5fa70660fe09d008332e25e8afaf8b332f038b487af245bda376cd5d5acc7fc888ba9c9d9edcb9b6f5cbaf9e665f2dd7b7ee462d420ef9ed13f9adc3547773479571bfd51e42e737415f5e7d35d5a787dd5f8db8231a06ff86d61dcfca55e3acc68fd6af4ff8553c53d24fc2581b1ada39d5348d3310f22eb0786661bc82bd4a3ba1472ced2ac39d6f98b767824614572289d2994286e3061450fca83075e5fb99810de011b621b091200b1578040747c1a7cb271b79d5f72e30dca58b3765efc9b7983abdb11ee823dcac4c54d6934bb9efc5f84cf52f8618f2aa4c12db3878c6f551fc78c7c250f7f01d164dc94794eccb8a391b98c871495d99f33be66d2a5c8bcc256c94df253f8e7c4c98cda076c2148205f80a69c64aa3d3809b2673a83e9c46f342c14a007b013bfc1b050506f7c81a3874041341e63b7898946b2986a395c51968c26e2d81036d37f69d34d5bf6988d9fa8b8baa38d6d3d39b7a68d1e259bbec4c6f3eaf46f7a27eddec357123b8d2bf6ce3fd88f33bdcbbddf67b18f4af6b8ff4e7d0438243da3b019853b61dfabb6d04e152651003d9bd0898fb496ab669a8fccf626bcc210acec2be781b6ad3a4b631ff62607764c0b2af4806b9d4642948df834de13f89caa602231b6fe28e26322094226d48e9e9ef9b2067db8c2bbd3c00e0fc601e0f29a568fc0d25adb81eaf6d2a88725bc88df4d337e2a3500a2787facd9ef32396c4ac16af2e48edb4f2433ef8f96384500757385c225dd74e8e83a84dd7e2d065a8bcbfdf91c118490bffd643ca12ac66262f62087888a674a2cf0eefadcdea3cc8b425bad2057939fe8f8396aa0b52e595cafae4f5bf60c82083405f0e0d0217d3ef44d15fb31c49a357f0bbefd18eaec4e68bb02b26e3194191406fa207c305369ea317d4462d5e070dba58d9b2eddb8e932f9f41c3f92186a90b9a6e88b26eb9ed0359accd58a4e145997099d518cd8f267cbe4ee20e1f42696690af076a86f285543c7a50ea9464a1efa3bd36b1b86a43cd0d87c6879e542b9f1b465c8d87865f839ad63d43a60aa48fe31e52c320b9b988d7998259acd6230e585bebf1fa350a03e004ebca1f727a55a2fef1cb020af8066f9a243c1823c029a7245ffbba92136ec790e4b002dc286846ee6c3e1f599e64118c9ba25c67a7d091d3d5fbfa1dbe01bc7bcf989f42987db886f1b432aa1030ef9b389232643c1173bb4d767c50ad7ccf41c2e314a671526e5d4d020ada0850097ca212276207673191627cc66198d31e239b0e71502404e5239d7086283c82dd20b58b61d5c9802689b8aa4ddf6cfd997dcde7af489d583a198c7f7d4d7d053f12618f013fb694d48f70abac36befda57765d1b546270070555bff67d7d8100f4c0ad845335f66334c260688a17cfcdb4d78ea154d2298943261cb53f326a77862e8848f39d935b9573225afcac8c9f991a1b7da407238c07f705ff3b92d1ef00cc66f6aa5408c089c04fd6341aebe1b9507fb8533a9884a64b8a6f61db6cdb613107815221d3b803170893fd5f76f097637b7d416ab2e024a6fdfe6d0a190774ab6b600255136736d313916e493dd8816c3fc928610cffbf10f90e3265bd3bd9ad10058619efaf8719a0a2e3685c21bf3fec1974d9159ee88c48498f641e5d9bd20729a954e502ea9d14c06cc3d028c9cb81122fcd0100b579ec91d69ff958f3a850f0487db8e3e03901b7efad3f7fe03b001dd575ef836b6a2ba5690d2b8e2a68228f002fed51168a32e17e87670c854454740b4c3b7814f81543dcb05ec7e4ab29af2d0e2a8810ff2f575c7c0c2fcbf4dc5bb8328de72b076e33af7b97ab94007d132963a484018c77b7980a9461053465728d1c2108ce8a339e7d391d377126ae3a7192b30c014719c9b379d39fe875e0765c39458ec92abc8533d367d50e25742c62d2c6362344bb4f66165189bb34a4f03e0539625c33bc2d2a918f4a9a032dda155874d2e64d5650a8e7de9cf8f8863b5bff6a38603036f2ef7a2a78de851315f8953da5f5180c0760348ec8d6269a465404422577de4374a8d2540a301a24bfed0c1cab019915d8aa9af0bf2bbdde87f901276ac5fa7d1617e602890d59d06841e396cf0cf6d30c09a57d02d373d2bbf11e4d12f87d210aa013f55a781e71097a84cfca6e5931754c6907cdc80ff850d3a61ac9cc8d96acdd092a88b5bb060108440966220b0a0a35e3c4ee6d5db9e20c2533e5524aab1acc74f33efc2016be3d6a7b632471db5ee4c74e882d2f710b10db5cca83f650b2a3b83ac5c445dcb2292e1d9f29b75949d90a571c7379248967cf6415a10f3cf2b59ba2bff8fcf4194bfea0b392041c9f188591f5dd52ba112864019ca2e6925c965ac9631b1201376307cb6934e0f6d844ba1919a647ae704ae1959fa27355f6d624594b2c34aa0c42d12a057b2f7979dbeff1e082474aae8262f20253401956bd718c99c8248a5007228f97d1060df9c30571be8eefbc325500c302f9a67d190f230152d8d0ddb5b6089bb343d959eff6654b17d319735a023e5ff07ce4f3469496009cd3f041006b2626a276a970700a040126e0272e2026005ce453911e5d019b2988d66da0b1e30c9093b602778bb9415a53096d9827cdc4c0ab6f61e2b168b4e398769906b746630ddc98989824863a52cb6498c71f86c8f649a44b9f05adf2764994db94bbbba8bb68383b76ce835b752e4f560fa7e3df7b628eac0bda433ac9ac6aaf78ce811cdbbb91d62c4e1f47323944ac6497fb96c785a1043aa3da41bed531fcfce204b05df15c77ebda7a883dc6557b8b73d3e188704a0e8b3322987a46d0eacc2431a158430c3b04749889744d8a96252accbd98f3328b1da9aa64a2d69a695e98b824ff1a03631ce18f9223e718697d3b561d8bb8fae5d34d473e7ca66ad8290142fb809376b0ac0d3558e93135aa91311a7dcc72bd67534eb4e292942f3c1cfbd7c507e33eac4b880cd5c56d54c5d09624fc4d276c7c5c425b18e46209a444ac8bcb1da10b6643acb10e88f92c98785c4fc2038852d2bff4ae1abdc73cb10d8482c98ba00a719762cb373d31ca9d46e7d2afb1fd8fdac37668b65ef8f60e7f46388d2174d3202dcb72b2588ceb04cc64015858d11d8c06ec1b50fd4e4d30e89a9598ea268a3f0678e71f666a6375ad9acc2403e1f90cc1797c68874854e6f691b5438211fa306b4980fb980815e444fb804565e2bbb4d8a8653baa99ef6a4d41464202c28705114670b080219e4dd5b199c9b46400bafb6f235225a3a22208a0be8e5dc33edcede089d0e8bcb230a946371b93ec9aa1db7d0962642c1b7ce7f3921dd3f74db4a81d61ee0c3e8693dda728e7ba4b72df76461dd36d7a7744703e0b18be2ab29d4e4c8c760c44fe7e06f4e0b51c6e4fa8702bb473c47de110a2e3f3aa62f444aac5380283d8d248e7c50436beb987a23b4838a43a2e49af6f6dbeb95c4a7774177f8a2f9b8656079595310c5626ea8939b325947baa8cf2d51f70f1c9256f2856f2f37a30da6d351f222d9524fa99a594c0afbb2f56848119f7ad98dec605754534a2681ba527de2955cb2bc1a27219520d95ac6256dae240983dcf9643a661b6712b636a03dfc0512003166c211c86ee22bcab066a2a8d1916ce95a9899b1f1527961291204bb5ccd0f2ea0300ba133884e047ef51700d208ad78db9a996540ceb83e1babb83a9de9880908a924248a50463e460c21065ecd5821a96adeda7a6ad28494637c92960fa59d60284bb92a2effea3b447c8baa2e18469c3d67206ffa9da93d39800bc1e66d138ccdaacdff1baddbfb1e90ec183dd8ca98ed38cb86d8c8674290b80a5b62e8cfec6728b9b53ead705365e8e584f9621d1e7cb578497a8a33fae6fa9d7dd642dc16ce5b97b344973114bec6c5a11eddeadfadc5d304d829deaceab4dea9b6b21696540be5b09c73474046d481a9e8de6bfc6137f1af26d2d4101fd231172f15180145d647c85f26ff134fa276ad73330032d56c16b62e113905b0814d6cf55c8fd0e101e0370b33cb40b9654ead850729dcc292d86e4a88786f103a17f1d48106c3f00794707df911f495dfe08091147d8743f6a0cd5ffdbc9110281d9d60e2a15b9968608b0feaf5c478039e2954cdce52af8da6ef5c2ba3e379e752daae261812bb80a60cfb58ddb68d9bebb12eee5b511a6b62f4899c24169c039a9dc33421ddb6b139eb366e57b8464647f0807246b1f3577fd38ee2e4d72cc7f26e8a200d643d1c4f2724719ac8d74f946c8c006761eb3764b1194f82d09d52b6d7c566fb3c1812b8a3697c30a18e85e2d5e5c005384a5aed87d1129890ccdff9bd0944d488bff359026893086bc1e67f23758b782c1e5347924f61e45d773930fa9a85783614675ee40e428981e33f005e19e0d34b4ced905066695d0e03413490d302cda45dda0f4e8a735218b0d4ced6b567cbd592622a8a7107cc4cacb9b030e435aec103f3f0bc1dc38f2fa1b7f920e67664e118bbfcda9036697c4250afc6451d413452e052cfccfe37e92f5858b0a1d1e21baa93fe081b7faeee40bbe5de243a344ac15bcdc4776c3881fc1d5b6783054cb1d800a261aa35d8b59417103be51526fecc604a914c8f1cc8e86f00e1943e971b15bcd1cee2f33c95791e38bfc12a899738568277ec56a00f1392c578338c55ad1bf8327f206b10191fbd58dbfcef55e4d31a2cb43be937f3cb876c2a8767908e2de1a3b20a604954ce2d605e759f1c88d11a106fe184fbb431dde42ad13649605debb587666a6a1e731884a1a309d012e8d864dd44d2420c9641936c2b746a316c3918dd972621609325fa910326648d6725e16d310d7e76b89bdf4d36eac06a7628eafaaaff2601a474f018979d52c2ca1726972e5490228b115daa73fcc0eb8f36f072844d929743f88d4f491a940f9a0eaf0b699412e2da8b592ffb3977e7bb71411c41daffed32d29e37f3778397dbc64a956a232f57f47b2a2c41a8d14f9869de170b5f989abf691e277518cdd7442f636ec69075d105d8efb83c2e312fde098f71aaa42e8039c7ca099965c2c48c40d62b4a333893d96b17074409c03483b3e4cf9d9c1d577a8d4cff54ca0a1c2668795e3203c5c1250b3b9e15f30692a8d861083621d5e8388a697efb08b6e360184f37f0b0b65830acc9216004c2198a63985c9702a4ca4129ee024f2ac4061954efcfee9ea02eb449435a6710d18aa8f89a37573216badc4115c9abf552aa2082d42d38b1c288972d32a0115462f6210e37a7c5bd16375599068961287d1b9727c7658a8fabbfa8c4976134c0da68f1b2851989feb8a7ce41c8f59d58720cf137976d0cf48b84f2bf67b7c0db4331a078550671797fd675dcc88b3ef61f99df0a04ffe21da7f3ed4c784e15054740ff417312129d87ab2b12ad2ffd61a42a31ae7320eea8c5926d54dca53671cb726042878133cb454b0876f4241116e440f15aa5249c9113ac53ac18fdabe216a5190206c0235c62369b5b10c2095c2432024298e5e84d640802d7eee895c8aca0650ea5dfa38fddff773f547dd4e91d3b77a9a63ba05332419d6c3491ba8f0db5b25d74d905404c8331fc6df25f63069de8033b8b00d97f40c1f66d50d2500c6fd5f0be1ee5f405da93b566032a5e1b17f6e198e1266b080c7dc668c35d070e0fc3ff223fdd582a988148b06883c6e10091359c277bdb263e166868261ba8001f8d6bbc1ea02f1207b19b4310955e6e80a32d02beba6f47f9f9df5e47a8628405fc6899eeab5169a7a275c6c6c7d48d4ea809ce73f9004d96f8bb11f6556af65ed0376e9ef1a9545f9f90e12aaaad251f029e953aa9fa398bd145f221813e9e9c999124db501452612090efad1ba06bcbb25c0fbf923746891f7e09f01cacd44e73d48e874583aa4a459b526c4c55f6cdd0b862f1f54d3ee4b386349f44ef8c182298a12aea62b1bad901286ce32429530f41965863cf79e19f05d88fb2a26399530b38243de83c484f0ca1981b9e7bd1dbe8c7960d705e61b36953c0c8f96bd6c69451a1906f6d33bb2a4ed0447c9dd2d2e4331c491443974614cbe02c899f16c42652bff255ce2257e6ff7ef22a1a0fe8afa6f42d1d3eee0ea4fbdd82a4147d9b41bc8aef0074d922b377bfd9b820853ddf1ee1652ac3721eac85c4125c474c401171363bb9ae8d8a70f8981025f2ee2fb9f12fe55d74b70c97226ed2a1f56de8792f74932c1fb5654751b64f6ef1d54108844115384540a8c19ad57d9773438e4ca62f3634626a79422a2a81d53abe3b277ef6f692c6e4dd557b0075d2321c5b05beb813ba44f9b390070170b3b4ec0f4d995493bddef467bd894c2ec27cdc602002959abf1bf05cc252dae418eeba29948b27578d414b0503cda12ee54e579eb25bfa5d49832caccced3797bab3d5204c993ed6a63ddf35d4fccb4ff0da3ec63199d1168bc5546d99703fd2399b111fef9a627563a24ea54783c72e7e9f9fa8abaac006025bdfe053305005b975e8d1d662783d0507d8d80e48ce5c253d61ff6479ac373237fb08c08a22e72ca689296563a80a8b407a5b35a0e8362afb372bcad33919de258e579c05b6a884b241723565e1af9e4c511893bbb6dc7f813acdb9e520cdbad8f906129c3eedb0e4bc14be98412aa1a138e147f6ac45e0933ab1469454d8ccc3c8396d6100a6daa567f2b6e41f1a926192e50be280a1b857577821105ae4882956d97d0c3a6e8e8e4930887875900a40af39bd5e2c839a8dec4c33b596321ddd2084af0cb705c86bc4b0e9b53beda14628b814420615184f4a63f9e732041bf851feaf174daac863ed110f6639c02957a62dc169a0e96ed23916fa4462d2496a94428b7d9aaa627a1194f95f7de9bbfde44339430a463d39156e9102dd5c12c9c862bb12108536b374f494f56414ea0fc1d404addc1b88bdbdbb46756c17e2a628ec12cd4660c7847138366e9795f6639b7b71bbd2a89796b7b978676a719293cc153ea79812c7ac6005dfb3de9af87c27f6b1c260df587ed9f644618afa17f518553352409cb007b1121849b3e94fb10263d476cbe0540892d8673fe0ee545e6707b73b173aa599f11beeb0e14b121e3cd068e20a7bb610585b3f693d046968bcb805e486a9ea678caba8b3ef642d52388c29e9c70fa928d837298da74f84c0d418f456a52b68636f476fc8ef4d558d0769eb7847e182212495c1fb1983453518cb2487f9138f97e915d611de3f88d4cfca2428214e345adcbf7b8cb1fad62acada5f9d9415a54a3b46228c81bc1368f9a274c0db7afea655e5ac73f3605806ff08cc56020afa2510743c20eb6d038d37a6ff7ad780825336f75ac59537f121816c61b25999c86e5396a2627e7a0ac829aaa7b7ffea6c3e1b90c3922b20efc54f5b7727461df44d8eced90371251ab32a3929f01e8158ec2b68a6604390e60ca51085193ad6f80be8d949bc85d35f28741a957325fa5725c925f375a72598c066a7913ef4423ce368f238b21ab8acca5537cfb35c43d401e7a4c5dcb028efafc9f010c0415a4783823212e2cc050ce064307908723548be7f40e962a2229984fa896f3d2127d4c25a2e0edd58660fa8f5613de4c3b87bf4ebcc5336c410a4dc5de94b3205e37f8cbcb33e45734819e90de680803f1c91b0ca046bfbc1213dc5365d4cd3be3abe0fc20d35b329d4699a15f6e62254cc8cba4c583f7a4a098fce159042a03819f47c70f4a1db8955ece254438e1549e9db78e4e5fafad905b9530cc6abf840dcdf32ab5e3d98a98a656e7ab5a6c707ba8619b22e273f2857fe76c32e8c838611916c512d640a73724cdfd093c020208e500c1bff2790629a7f12a561bd62d4ebea6f40fc4925e6cffdfa27013213041a4c71cc1d589aafc5603ff4b0e818d99ff826b3d01dd82bfe96fff4609bada89fb08c35c73b4db922958859164ec8cce58550ed914805faa807d1370f5b6c5b0102c01ea041fad2728a4075a8bf1f37f9a39d159117fe6ec8e0b40f294e6a2e6aa0baacc66d6d735b962bee28a398fb6373930dee504a66858e544a32d64b265b124fe47c1345209189d58ee384fff1a6848ce1ce68d06d6017714c9d97fcb8fd8306c50117e3c7ef72cf596a3f4612e5ae75f5f9aae74ac8150318aea77302f9ea7fae8561221cc04e0880997b4848ca651584afbb543bdd939a338ffcdf4986f905026b4d414c86da646252f62bc25970b61598b366367dbe4168d4d4bbe908c096e8f2efe0a406009cb5d28f2dd23acea04a085e3d4a5b3880ff17d0ee88db70f90d10bb6069e5e03dad24b760c4a3bfa2466859f5a91b490bc50bc7448b0e835854240c4d043cf4e7a509e41c71b9a577f8291c2d5098c9b560c0790278afafbf3e75db2ad7a4a412ba912a9356bbe33334f9c360074dd6685228f0109b794baf9160aa7a7982d76e266370f4b7651ee33c3853b65058c4c76b95907dfe19231b6ccaa07e5b0bd89a9bfa6a79247d79b9820cca0831c229fde042f64864c061161482fa66fb9227fb8adfdf0ba0384dcc3a3fcf0340d19cf152f17838509dc98bfddfffbdb576e0890b81aa07fd1857aa0c5940e80906406ef0e91639f57cd7e480b758aed890a0b66b215b484fd5be71544118f9024de6e63b8ee4c34e98322b6d0dd4b774c43225fa7d71349de0e16378614c83b1ef2c02ba0ad26c3a7595e35d66437b821cf4c419d9188a38251e9280ce2e9cff1e49c13d5a2f64b791247201387f1608ddea1163bfb70c17452f17a5c388909ed0e40d0457a1622a81040a802e00c07cd419db6129b38ffb18482b4b0f03ad5a10453a90373f289bc050e6de2bc44fbd1fdd84bb95f39ee483413a0443393c80dbe7e989a50181a8d9cda76f644dcfe4a4685197fbedfebc599ad4ef7e3df345445d5dffc6826b7077b45dd9df59fa9a1a5d7e9e6cacc5a944c24e84805d4111bd98e8424c9c8f622afc74cce92d6bc10c5cc14ab84cfa8c0db0647a1212f9ad26ce39ea5af19aceb6c21506ced6565c6a4780d308ae1242844b05d40713dd43d32c42d49b3fb53616cb6814d8da78bff12337479090367d8a0445f102c35135cdda0ac100e8257da1b44bceda924dff105988e29ccff0b959732b545bca322dbf402b793122b5b2ce46a275f7cac027fe4231d551b6ef6d294cf7f9cdd2729309f4e40a4cfdda1208c5b11bd74c133a629aeb6e0eac0fc4816bda1b57b046b3474a8799958bc8f170e60a13f61433d458538e5410fe0c7dff18161fade7d3ac1808220767b6b366a61a3bb5c84bec6ecf8d4a66ec337cbc957909a65a444288c06712ee55e5dbd89fe481a6027d3982d2c5ec7d6ccbc0a01f5173377676503999c1e319d68b77b76495364c6d4e3e807efa3778adc634b43f4babfb18f1fc6c8263c2454f4962587a71e65db5e7030b7bb4f6a094b40fae4268e4f9cba185aed4175ebcf2ddd0e51b0174c1b8112febda7e952fba72779cd1d7fcb117e0faaad204eb73301996b2aac74e80132522ab43f59ab00754f347b8f2cb38875e28558d4bf0d356ff1037090e718de1c0c79726a20248268f834c9f23a690e02403bef73a9a477bc977255b17e9b25297829691d7ae7273c24760a60035626dfe61625dd185a5d275ee4fea6746a38b8eadeec15995c388330029bd7fdc610fc1c3c5ba5e2305b34cf43c53538bdf31e6cea431d7a3f923ba994a110df985ea3cac67b7a544f46e6e643e2f1d3e2992e3ade8e9aba5032c59b57bec8e7f1cb03208df3631a0014f3b874b2afcefba09ba485651918916e8065bf4a058b84a190096428b1112986129f04f345b237d4cfeeffecd1325bf3a0f307a4653f07f59c587804ff77ff9f231ab0c3a4e5537961fd68243a6cc097b26a7c82170c7d943f1ad4c00786a901990e80e9804c0ec8f495d40eb50be4bac4987cdb8cc8c2b75a6a64ff67d0ffb7e5e9370736de9f48f5c3522ddccd7d8be6d5117ef4e910374ef4ed267178096a86061d62a1e32d03bf5ee21502cfdc3daee122f8051a4e59945737c39d231b3c776c869edb7382973e58356b82e9cc9683ae37a2e318fe7b6ad7755ef0df59fdacdf0024f11dd77e38b7f782c5a29e76b7405360956dcb5c372b574566d226a5fbac89fdfd0d2104116edf10c11d8d5a2817dd531dc1f02127c1b28235cc71dcb69928922dc5f0c2d6060a5ab6c6e987cadd5ea340aadf0a1c9b7edc96a440ee7b832c4d3f3c488d5491731a20d419194d4d3fdcef28dfeea20ec5aea0bbe4ef541a5556ffb8ff3c420f0918af340e2a5506762ff5cda939c749d5135aab15b2a214bc48131cd4c653bbe16ad4a269ce77c6e5c17d430502808ce3ff686597f51f3d3a66fcff1996e16fc37a033d88235659586fe0f40bf7df9c9334df7ed3e5aa8de937a0391f09843aec56eb3a2d229fb0db660da6226647c8315fec7bb1d76b10c9ffe8603bf0a588012228d824edc9785686ab0f2fb7527b4e3eb24112ceff57fd1eb725eed5112fb343012d24494fe8c1be637eca69054c276c99bf295032109ae5eb32dfff0cc279ff6b2e834886835dbf1b94063a061c06858dada48cc94c09e9a842180c539c2e41acd7f549ab619953bf55e87eae553555795871e677379880de6cf12b570cb7be0113b925c012efb9cd6c5cf0f386f7888ee722b93cab96b08d0b0b5cf8971bba138ae7156652841367011246917b4a8243acb318b28b9ffaa6e3178abd28e4424ca3f644a12e7653b8614007921e174450c64200c121cd7364277c0634771e82d6bfcad89d879d14dad02372b610c88691e0045578d4f9035c18842713ec140dd2e089f105915a80b55704872fbb16c6bd7cf4c3b8738b1afdb1a54e153131756cf0023186f770b000b62318c65da36c738b926d71afb3f7bbede2183730351f0426ad9ccecb41f385ebba1d24848f720cd83ca3c099c50d38cc8d6b517187827fd9f6dc15ce97aba53a7a63f3523585993fb2f5be9a71b821d5356c3d8ce909dc187b0bd119349b67f7950e4e79346c5c45276690de7d9810154cbc66b8036f749b66c7fd91efeced3a8a70bad167e878815858012faa740068b7eac5cbb8e485a99265cc12ecd7ae1be1eb8f41bcbaa14b11f7e8df9570b794e83774eed1525cc724bad6f4b5f041070ca83b9452e5b08af36dab4cc098c477470806c84a910a26daae52132922cf9aea92ce2e977c3169edc443c41d673bc4633c2c6233281940f12fa18bc3373a1c838a8dd9ea69c667ca6ebb3fbd40602bfe74ec090b023918e3683a5ab67aa8c1b7120e9de70be42d08feb04084bf74536b9ede6680293cae4ed5d4c51483e45453008a91ecc0197e2a9c19c51b7166092bd500d46da79ccfcf04e34b2396988121e243205c20f5fe4c3703ce2f22fc7625c5f64e0459c40eeeff0bb280e05f2b085dc1f7680245c39b3e96e2be3a907159b498278cdf9ee5d7705963d9191e31f662506d20835b0a88d81101e779126c9aa6be2c7cd8e4cac6f627eb18700bc319c8089ff30ebc3792f0243b25e2ffb9c935e5c8c13895c6c1e7b5e160aab4b783408260130456de53f959920983bb1465d0bb52c468f7ed6012372df09e7150c8b60e8269e0cc069721dcd3265fff0ae1421aac6475cf4b35d118ac7b0de5b530b81a89bfba990e2726108abf1c7e0025b2a63d480076c2e8e2a5833b6f4e98256d6d52d41dd161b01a58f68827f2fff72e368f30c108e4b388bd6e5dc9d4d4863894da73f88cb5039ce31afe9b2318ab7504fde1209aa92364bcba539b7abfb2494b9a0402c7e657c5ca0d80f506f601b74a1d0a0ceb384b2ee5ecdd77680d2dadae8723fb880f1ed3c37acb3640090f33efe56d1246e220f3eaf00e8e59bd4e07eaae567ec8635a314e34067aeaa167c72878ebc6364107d7562e671d2858fb9d5d3bb8ffd914d095a2754b68b1f8cba744e5848abc70fc8fac20c1d87fb3a88983d8d0ae81f15ae111952e72f2326cf2c9def057aefab32c4a2d97a1d6b86db4d2526d955dcc84af88d7ddc08a3468091bfa5f5fab4e5e2199616be09d5954be5004c8544a1159970523f8ca51b511279e8d422608bb95b216be885df2a27b7730773f11ec08aa773e34d082c6ef76944b333b44136bc24c5851f38f6e4ea2af6a64f9a2e8e06ca966829de2e226448a0225cf18c9bed60e8c517ed37b347ba2335023f43e9211bdc285155764c855f7707f249b7a1769f86ee4d223997e2734a60f657480bb43776cf3e8696cc5ee06c2d5786690b13081b03728d7c06310868e8b4f6812167c3c4c8de7b1f12778b7bac69a0a576a308bfa608d873af4a6e7eb23904adddf20b31a543d1a09d99ba3e3f4f1ebf396ea77f06a8cdc9952404790fa7a66dcfc1899f8f0b85307b76224adeb45f9209735b2b9c62d5aa3fdffc8ceb167143fba240c92c61d6c840ad2d29396bcf1ac65c5d8bde4d34d03e51a2628e3fde29a391c73611ed3d304f5e60982ac9c4128ccf69cad823fb75985c7ae98720ac0e9578e7175ceac1a077d6bbbd9902aa8ceff91dd7a9100856c4e35963f82f021c4204d86d4883b9e88c1bcd451199c00b1ea96578ef9d047ff667ea95797d313a8dc6f02ded6f5a827ff72a0a18528e285760c3a85600ca339b33e0c08ae64fae9650f9c5057fe5424eb5a979af21e7142c83b44f475996f6144a3429dd73e1a239c43a7b56a3ccbc646733bf503aa53c7c5fe3dab49f0adaf9854f37e0909c7c4c5e9e231c6d524888333448413c33543f4a3c239988a678d6cf21afb7935dc2cd0ad5882d5d370d09dd968c9c3f021d77734162899fe855ccb0408b5d36c8d2eaa9ae30c957e0a44a3ab92106cfaaa5414028808385fa5c90b7715b5fd7effe38f36554184c1df69311448aee33c1c89c4e05f38f3b6a541387855fe6f8b8cd5d49973e7114c01260c9692fa05dc97016803b3d0f24439e0402ff8ecfd305218ec8cc51e1002fc1196d9fa8334a80c4c5060ae2a544d57a2057b7bc85a206c0a974c155c35ee03b934c23fb1811c529d81f0845c39fa63029f10d3f96a36338065fa00fcc38938ea3e41bf6ea04bfc6b7e9e6d9ba0bfa5364146df3f4e36d188c2bf558e2e2cecc130233c6023159e1dfbcb3f26329fb373d10237d9c3947616328f624f41001bbf914c80264ff17b31e4931b2e9682e6b57e1cc9e5c0ef220aa7f8b172583f94608cba1cfcdc84cfe3363f936d57ce94b71d543b8972927d732903094cf371a1b215c1fdb65a39b8a7339a3a49bd7205c0e97000050977638e638b1d3e86ad11de25d13de87fe0d70836037e0c5a00246ee91f32c01136f9cfda06206277b4d8596c6c0221bdfe388dcf04c7173decc9e10a628088d143847d4446cf42262021949f4fd7fe5a67b7de23151fee62f9883c7bde991d8fe56e1a2157df6233ccc0480d4a2002a9528109fb7ab9c1e69a3f8b9422962a6a27217965658b0de7c444d545e62f0a91459aa23ed89bd65b815c9990a7f218bb02a4cc027a2806705b30523a4e079aef29dbafb8a1e688a6295d8eb99ac154b6d18bca4e442ba3d313403f09e0a3e22737a9895e9e884361015c2f1e1155045444558421092700d60f3b02bc66177ab0ab6d520b548b9f96cd0411d97bef2da59429c9145f07cb06b20662ba4c325e7cee979fcb602893265b868662d7356ba9bb0979573c123eee65773eee61a91814659bd056e31c599a45f3e50b1830b3969a218dccdd3d0add94a8c4d96ca7c82b0c7f794803f8d823000f078331893de955138fe7e32bbb27e7c657010cf0f14b1180a0f6420b4830f42a0506f80e60c2e58f9cc39ff5391f25b0810aace0d7c3c83bed03c7001ff7b2257c3fd7356b1684b966182376013a68643434ce41bf9f664ab33c31add3ffe50b183061c288e1643835f490703a4c2375eda3f57fb4cf4bb3b8299c8c019c4c85124a28ed90d304393feea3588369d696a575fab784b9dc454c186e31dc64fc877663b809a1b8ec501ab9295c50afa6d328edf01368947098604269078d3132478ebc32a19442ce9ddff3596775cf1b099dea53a92955534c92ab268d120a20dc194ea432b3c633a34465b5ea69160ed05a56c481806fc321999bd23afd9c23869cac57fd20e4c0ba66edf6bb38d9ed9fb519a6599f978f06fb68d743400d1c1a3372669877e6db176d1d41360f37256c7c97bc2eb7f7ad57d57dfbb8fdb63d8e2ab7b9d1add65aa94f97ee3e7138a17b264f8a59ef3adbf357ebac2dd4e13afd9617a042af5a470dd23778359f6705ae3faf26cf0b5c4fa5a67ff410c887c439fab60f972a45adfe28f32738f2f9ce26322cac8b933ea488c48c9402df366bbd0ec9f685c5567d1f220a68d587c5d6f638701c50c3165f09746b0b713cc499807ff162499956fd096ccf852db82281fadb736b02150618a43009f36ad5f075b4c726ae23739dfea488d4ab7e1b2dac8b8d906e57c059d52836319ad24d229668856691e4065fb0588b1718fd908493286e406b7d3336d5edd7b15b165b77f0d8324dd5bcd477d7296e5b71bb77aeebc66d1cae154ffde9c1298bcd07e6bac08123cb098a8a65ab3f1bf75d261a52831ae6dd488b902464208d5902eb00175504f9e20b2e76187a410c252d2fa8a146ef90221a32c4ed2e130db152448d08a3e4ba362e618250275ef4a08817586c397801c5155e1441e4455093cacc34b69472ce3953737a8c5272d338e756b72f8947636466669e71ce964edf63dc7aa66ce8e27f660184db637e07e5bad74d2665e5a65772f5fb955628ad40829af9b556f6e477b26e9b1020afa3a2aae8659e31b9a9d280eafaeb687ad965cd952488357346e9b5c65899c4aa0ce379353563e3e206deb9054bfbcaeef1ebd5edab619d66cdefe771d60cdf753ae7c7b048b6ad0e4d1ffc0a4ba30c9e1eac054346b13347636832b0e065229f2c3cb0a7cb443e4ad89acb443e4de40cacbd4ce403db3cfbf5aa4c12346c35d7e1323fd4705406071962657e96fc30544612935919617e5a565e657c895d112a23891a8ccac092a4752576546b47a7f412709cd042368c548ae7a866f3e7f89303122516534b1b40901adc260ad2c3ed9fa51dfdee54aad45cff1ebe5232786ddceeb75d6eff703b753385080892ebee9b187b03bc8cc3f5974ef41ab3031aec80459018489103152d97bdae458a1242b6801d3169b94b60032a38cb3af794ebbf80ee295d7777dfa4b0ae8f2d2e63c5ed0d8946f2f48a9f5ab985d2cae93398dd0c1d75b979aeee39b6bcc27cfab2b4020b6ef754c5ddcfaecf79f4b9f7bafb586a40f7f36769050ddcfa5dfd5999945660c1a54f7b505313367e198f6fcc49e7eabeb452b687ef3cfecaf7eb4ea7f4285c141adc6e1f800e15baa9cc18ea41e2e4a5fb198bdb51c2dc6e2ec54386165bdc3c716f8880c29bd39bb747ffe3b02514faa59c476cbc9153332e3398b8034f4a29e5e6aa16dc8003195a5079e2851447bec486886209a2273238918243172ab8fcb0031659c6d061023a7ce1c3ab8c29497c70652b93c3111b64e08203307e0c21638a1a68606c18a32507ce026605135b6060c54f12b26e8a2da238c922451352ac2419011d7162490f4e9e0089c941194ab68c11030d871944524411850e51c2948962003038a0c2079f299088e9ac8c81411746242155c1350842ca971911593c8141e9820812400089e289174fba10a2c8cb1160c0a08a3157788012059918f81044c86c062b7c9688f161cc0c4e2000051021558cc4c4c0871b1460849121268aece0a48b152d96dc8089202f3f63a2b0f20a12838c0f7ed0c2a46d10d303511845c06eb0d2849be0b2032ca94a1621683f6c5dbb91c812a4ffeb7ed9ff6d744a1fd2b1001518507f7838a2213ba86ee932d190263f51ca301ac30557ae80424b8d8c0fb4fce073a4088c1a4e50040b26bea01511630c1a80802d19a30b275c58b17225f250c4871d08992246040d465881d24e8e00a1c50c54d4a0c90c0878c1172e481244113224cd84b544952048b46092e507bd756f4cc6c032440d417411648c8c0d89c20629408678a297d0ac80d0412c717bab74ca94256388dbbffd652d64d0a0858c1f9a154a29a594d2239656cb514a9ba794d9ddedb1bbbbfb79276e72a3813a4d57993c8967e79c524ab9c959899032fc1b39f3696c9bcafeb64da7aa29a59ddc6f955d474aeece1087c77cf9ae9f614a04df6d9fd1c315efc4af48785bf7303ffd48e94bd7711d67f5572b67d83fa48feea62132cbc638a7bc1e7e071161a3898ceddf5298d97c5ef928d4185dbed475775bc3cc6d1d9459e7d7c92695372aa01c14d42685eac2bc2327aa8b8defccccec3129a594a9af93714fc8d8a331a37168b8e70881c3392144e9d26528c9f3b87b5cae2a5d8f3d468e4c1f7555f3ba7477d9fdd171785c0f5d1eb81d6e2fd91e7993d3696de9f5731ad3e9bbb949a980724cd0940f5dfe7621d7714117857e94cc2c233333b73373100eca26e706e48fd614b5aea65f29a5d5e5b25b63060d306553f6c855382793077dea5335558d8fdd4d35dee4f27b2ef92ebadd2a55d365cfb87a5ce962afbff9de9c53a6707365187e4a157e318439e7bc2182fbbc2182b469007c0128ed08c02757f3fa0d9dd3dddde7749f3e1fe58465eea2d8c835d145b1914718810412bc9d8f4b1cba60a05d7681cf4a3bf819874774f7767202e0831f575659a513aef994c6adb484c28f3bff3dc69802da2a13d1e3ea041aa9275634eeb7b172524d5248b0a8b16f5da77370409d073ff8c1124a24b18528d6ca280309254a5272b6e6d6c2d234507245091135578c505d31227665babbfb9cd1a7a4d48d786cfa27a381b12b40626c77779752b674d92763579250a2e4874b2c168bc57cce4f0951351283c5b8f0702c8a12251d613186c564a0e48831638cc8120318142144c4102fc01273811041cc80f8e18a157729c69225a9cedd5dd24a55b15597b486e88a703e2bad754995297da62417352ea594d2bd29a55202b97426e48c55e61740555c4a29a5fb9c95d63a2790cb4f063a509520ec94524ae94e2595326fa02a3e98b4d6252edd99a07189676102080808080868ca28745da903dc14efa4b0f025578631ea40528e93154802d14a99d802680c139795891d4be96fb55220f9c4122e4b3a0231dd02a84a8c71490f318a89514c10151e76982245871c6438c41881a24079e2e4061b9ad4301f843925ba949ec48620d57989d1699ee449b4a8279dd12daab2adfaa2d95c2ee90536beabbeba5957c1d166528c394d5b744f713499a586e3d82dad6c3643ea1e29e31c2ea6599ccf4c3693cd6433d94c36e35e74c6cdb4d05c4a29a57beb44599c123f4a7327be59afdab1b890cf9cbee2cc99899c17e7685c8c1be29834eb9bc2d1e81047a3431c8d0e71343a44bbfdc9385ab4332ed6ab8f468980a04c59d9476da7984986fad01fca843e71d94492497759ea4e240f08996482ce563ee98a769207511f9fad7cb65af96ce5b395cf6e4719d257133e939f24456739d7bb1c8dddf6188dcda326625c4c055c941549aa48ec2f4bb3e2d748674e03227d3a638c532291d2bb0b6e484ec9bdaccb83725ae6c8e941744beb341da2358a248906710e32cde298b44eff972f60c0840923860e351dbafdccc528162a44671e34bbfd1ee4569a45b7d0a12674c872434ff84cca96d37dfcc799f0f0f0f0f8ab890abacfa4e4c41c2969bb7375733a93ac5ca79faa4ac07142af40b81ef214d524a9210fd2116c9d9cebc5520c2dcf6d9e129a75a33641a204277233d8e89eb2ae9384636223ad3675f32763b9259c122e898d1fb3f139196c7c8e43c2fd7047b818c02de77246381857c4c6e788d8f8dc101b9ff3b1f13921363e17c4d6a83932c933e277a3f602e6f2cfa3fb3d05cbac6548eeeeeeeeae12e4a47593dbe61d375a378e37aef33ef97ddef1ebbcaf34236766bce30c7f5c9aa1e1e7f954335366ac5c7e9aa02997dfaa5c8de5f2d7cc4cd264f28ea696f58a3f490c992431edd32fa4a22d5d8ab678a10dc52691497c129b4426714a8c3518af811183b4812ec1754209bc852776bb4b39a9a4d43bd2d8ee52ce49abacd53b563929ad75dbb84e769d77eceac6715de7795f49964adeb1d479df572acdccd05869ad77b4dd34345f5bfb754d9b4ef274f28e270651289b8f6f523295f28ea9d8ad3a75ab50ad7281f1da1b7973e31d6fb6191c1edc75c1703d446d33383c5c26b8316c5aaff8079003cfc69d77739c6b4d5cb8ccb9ac1badd3bf35ab041e9eeec1b9dd03c2f48e528a716766e629eddc142e8893490fa9dba59cee724e2a27ed8da31e579aa9319dc002589bd40c1a38393938356c34ada8dbc87594b4110833eed6545ac87594b4d0bf2ad5587ad6b31c3721d858090aba819a6166ada7b4ac6f78227c534408bafd229450a837be08251ef4c69093f14ebf57d4abe6ba7045b7bf26b71f009f0bb90f398b7b22f839598b53759312958ec5663697a6088b8daf52851ff7b2218420c68d009838591292eb2841b281f4c93887982f5fc0d468588d9c12957ef52b84554d985a2d270747041d2bbb608e8e660d87868e8e004618810401d06ccff18b91118dd5081f1309f3a0cb9cacc3742d76e9557f512c9a3eb374ad6b5deb5ad7a650d7fc47f432a3146934b21146f8683b3ba51d9f975e35b3bbbb6b753fa38f167900ed33ae1e974646c2f7d166ad7b9a84d912aefe894918efb837a0693d745d5376f4006fcdb0ce5cc789b0aea6d1bac74bf718754fac474e032f8614f03c1ae18f7d213e87bcb95ee8b047c891050f7b843d240b3d3cfcbe3f316c8c4aa49c94f29c9352ca3d372b433ae977394c62fab45629e79c3394f685792595929d074c2977ef5276de79e79d3b33335396f27df20bd39b900c825795b01ca6bce6f28cf7d8dfa7836d8173d0eb4f23c4391470fd5de0158fe10172ddfd5be09d1958173fe728b1c0bdda7a551f8747e36cb7431cf98cb302474f3b58d7069ea85897e55e51e95e477b1e97fe6787f1254e872db45e50e1505412fb8cd402ebf8bb74c948394ab8bf0d16b6059fbe21f9e61eba52a97f1b5be2552df81bfdab2572602508051e7f972221454284ae6b1302c4ed114ca0284816ef725190d9c5b1440eaeb8f1b9140569bb5c14a576b9288ad1754d2e8a12c52d5d2e8ab22502422c170591f9e5a2204f2e1705f9b9978b8218b9dde52220656efc0f021e0cd6e8f2d76eb850b2ebefc9ef4fa18695c5f0e5329191da2dc0652223445ccfca78c7df2606dbf53b1ae78828a02e90eb1f553434def1774d20342fdee9de060bd23887fc4d876f5676fd674773d14471fdabaa04d13f02b9ce34da75bac2765d383ce62bfcb1f375e30c5faae48c77224a96c4f4866e7fe586684546561439ab3b32ea9e0ec90aeee9c428e2becae736eebb2367754948dde3c1c4e01eef48d29147853d20929ce5c53c58f77832ef08f7785292380f8b37c4edf7666d42bf171473560a0c042be032145eacf610bda05a4556adc8ba87a7575d7db01cf71e10cce2bedfa3c2dd20436e8b97db6a533a234cf278434f9cf3aaf79cbfd7795ce745195ede5b8cf23bbe5c7e476f4bc1f63d3dcff36cf01f3b62c7b57c596bad95becbf74a84529f61ed8e8819b4cd22a8b8fcd288c2baa14ec875baa72bea55f7744df0aadf25859cd5d15ca7a87bbaa35e35c13d5d16bcea8d4b3b1ce09302bdf53f95f744b6d6f71dcd595deda87bbaa42cb8a71b238634552cc23a327001fabb9ab3785c27a97be2ab1b837ba2105ef174358e0788b136a16b609d968169605c7b38d83003d77f8375777ebf6904d779d8bbbd9cd5acd39de03a8f2dbebaa77935bfe90aaef390df471998f57d7f2cc2acf78f4aca49a53335ec8dde4f05db5a5ed8a936a7c2cd530485dd1a37befc453570fd553441dca6e1f25e2d431a97f7bafdd4f3c83db335c7253475473b29de4971950dccc66f209ec79eb7c7f7f75a85532f95973b84eb36304e0b1bbf67bb77d8d1ad3033bbbbbbbb94d6d2c8de5867ab9157fcd2bb1cdcdd37a633f3a5943207e73b432f959252ca1874d98813c2a5646e29a594a9d4b6fddce6b43162e3bb94137659e8f26f7ffd63af607259ccf84996d7c30e49ca56fae221964e7f62487a5dc9f7bc483fa9f255ce2ca5a6aae442bcffb26fe5ac27855621c73b2d55f27add1737deb9358799d0111656ce48ef120a9df791b0125a096569d6c432ab4e6640df944351c418638cef31becb778f446c94592091a51d572091525e31dddda9164878989429cf38478d3be78b73f84728ae4b06713bd6b8339433dee9b72962a39c710e1bf3d55b3cbee1a299cd140a5e741ae3dcd19be7aa2843599a13765d53d605d9b81c8db381edc852ce78187967fa90d325830085757541b73fa8b3d2ac39a575a62c062b65de1e9b661603452285a03ec430376e18d941090e958191198e587999c84812cfc27697898c14d141c68d0e15fa0bebed8072b134596c216c0a24a016fb312105768415b01f66177b73990856c3e401d6843df9e006fb7991c47a475e8a484154a4e848f783350d2191d893144fb2332e131589c16b76bb4c542488848105c128c396b0982f5bf2a283b5b94c44e488eb4a716151978988f4706518b6749988c893eb4a5d49a774ef32119124de981024e1b38326346c71851501e8f20468073dc052a60a2a341dd50464bec4808b2261c8a0030c00a1030d37480943db424b11359a8705a8c0002222443af5ab7a99684899eb978986904975e11d5dfa10afb7f82da564e79e8e858402c5e5068599b983c2ccccfc9240124802492009248180b84d46a7c562b1582c16638ce11065093c3c27e0c011db6ffc93d0ab15778ff3472471de49a5779c3e858b5b57a7724ec94c9db9377777e79899db66680d1e47263fb86ebbf5d23bafbc7ebded735597b6ee764036baaabb5ef7358b7e18534ab8dacd7828bfbb5040618394927b75a54c41613b051ad75f47cf9fd3a594e027a5947d65e8f2802cc232471acc32972979c34ca74d75c2c6778a02993b59f4214f8ae52bc44916440d929936afabf9bc4f4ed9b5a5cf0b62a664dddd65d04c90bba450bc206cfc5972f74e860aaf166cd5aab5d290b900b54a29a594525229a594524a5a6badb5d63a6badb5d65a65adb5d65aebfba85e6badb5d62aa9cab68eb33c1a3cfa346c19cb1ffe58a6d53cbfe7f2420710892dd39b5e473b00150a413d0c3f5aa8f7e4cb120f9dfb79b194820bb1cca5a1338f43f3df2bfa38a5f7b7e1f70a87265c6175699e6626c429852baceef75fa842afe2d3b0870b27f04b6505a8e7bb7de4920350a1901faf9610187c9491c11561f8600c32cab4503fe4470b150e01df344317b8a73f66b7864ca5e641958ff81a92c5603e4180b4847099166c46ab263482fa213e86fc7893c964f242d43b71234a35c4c78e0cb4e8414b1851e860d432fd0f2a3508f2031f9c54013283160a85425d9161173b86ed3772d31a0283919bd6101f2893c96432994c26d06432994c26d313c1d132854358c0e5881a6280832fa0cc5ae09f7e888f2128a8216145075094e0a1072dd3fb4085436adec7c70786a3857ad8aa857a1f58aa857ad8d642bd8f0f91ad258426e9f54ab5845432af570bf53e44562d215ec6ab857a22385aa87088e9fb53ce3afde020892327486cb1a5d50faa4e2acb3ab18623a400c24111541869f59b54352a669d1f537c9ef0d1a10b992c682d9a9e71420436762312590fcb44402f2296011e83a0b50f826fc1b7a8b7a8b7a894b5285b63adb5a005410b5a6badb51685b2b101bf82e05b1c9405dfdfb3aaed4155bcbc316f331eb4b13737f66deca3eca3508ffa9b9b19362a1c1bab3a41bc3721036cec5bab8ad782d67ad6c6dacd821665ed7bded7a51df67402fd4115f78a4faad473c976200ae43c54ea643f1b14b881e0a36ea48d9cdf7713d2fafe3660d8c33ef8a8d0651f552a59bbd96c0fbeb576dbacdd547c41f02d68033e0ab4cf6fadb596c77e2c35c03ef89e453ddf990755a547a966de3e4a05aa6842d77769ecb5afa375f8a94665553b68549ffcbc8edb2a9df226a2b2f0d80296899014dd1b9789904cb94c2e5fbe34e906ea0aeb4acda71e69282aac2b75dd59714bebc4d8e5465415b6c70bf17e28f4971d36a0b0a1cba28eac774fbcdefc52dd2359dffbcbd28efe4ee512c1eaceae72defb7bdef6959bf3bdc9755b17a6faa9aac7fc17e2a51d09ddd3a37bfa25708eedfd4de01c9c0b349dca15afec4a2cc8a7f4a54a3eb7cd13c43bc3ee8e74469e3338fd3ef275a55faa70fa8657271e7320a907bb4073e3ed4ae9eb68a7e1266d18d9eeee67950b34777a8985f94b7851bbfe73b20b74daf06263ad575ce70c103431017cd9e8f2ed572de5b18bebbf75e404c45a24407b18bff42a0e15c921598b09884c807eef256ebbbbfb9013314b3671fbce907907c9bae2501c9adfa51d6e57b14633a7373f1812d03f9100fe5fe852c19def4a410d49edd6af2f9de534612d6ef929fd5c7fafc630e69cb3c63abec5e9858b71fd0be310eff8a3906cac85b5eb937b260ec521117c5f7a159fe6ca30d66464f719978fdb34913b82676313ca84327db9e0d105c3ee51b50b3ed8bd8f9f0bfa885db053f13da95cf0714f0faa5c4ebba8135fd3e951a7ef95ab308fae3fd18f980bfee9747af0c100734d0f7af1e847635f1390e6dcbceb06a8a23f1e9776d04e883591e9959fde5360cd0539f0f4f34ba9016038c184b366630adbe3857825ec6d4c617b9cfe8578c1b74103f923619f0d1ad8f639235f2ef942010c533f2ef81e5a312c7d8533a9576e42a1fcb7d3d7d30985c231a14e2a1c5337c482efa2b0a47bfaee4faa7899b78d26d5bd15c3d6fce95ddbf6ea1ed4fb6f3edd03beff06e31c36efefd9a8e2dd8c808f62017cd3d3120ff04d606cb9a6073fbe8d8aafcd44ea953f4a85837a97ea04f1da840cc041852bac2ef860a842affc6f943e594a61befc14f862ae08a2980b82622c08763ef6a4e20b9ec219a6575ee6820faaa811de81f18e100b82606a75c1e7665198ebf883ef75df8c9a0bbe8bbb20f89159dc023f9676806f55aebef6679853d8356f55372f5535cf25f075f4ac398b5bdfe9fda58fc928e9bed0f7f414e6e596ded556aebf4925815ec56b411e0a9b797fdac459dc9a3185ae958bc2e63dd9a8c29edef42ef992afeeb179df8aeef62fd7f19fb9362185bd38d4f6bafe28237b0a7b807f7a53e802dff444487c2e5ff0b9d400f04fafa33d508542bc5efcc053c8df75979da1bd5cf3cbf5ef585502e9a23017285fd743c92db9a1228a0a19a223616e5cdd0f787c435ae9959cf54a06f18ef45e47d7ae1cf25e7e23c1acaeb98e7ce930d7915470145cae6c19e741577a613d8239abd65cc77f16c4852e0ba3f92ce5f3278d92a92f9ac43bfe770e6db14ee63afe1b11d6358762d76f0c9977e41c9a5b66519785c7375cb5e8bab688250ac5d97c1dddc45945dd23735615721d7f992c28683613baae6dcaa2ac4ad89b14a894ec596a6ac95095080000004316000020100a08c462b12c0dd360b01d14800e6482426c5a369a08435190c32808c2208821c610638c21c618830c43346404223af430de389efe26ad14483c359e4697ff68183946f454402bf001d72bb88b0bd896aa6522465838d75930a7e2669885f1bd1573223285852ca1a85f5905d018fcd8ab266a4126d212e745807f0c7acdb2731a7d11beffe4ee72ef27f580a61ead971b5769e4bb03f393543eb9dafd1c3dbb3fe13ff793ff4c9837c48b31c41473af1ca4efb108a31c4b77c3c8bef718f20a07dee37dfc8705ad5ade173f00edf46328befced7fe1c9bb9e5c547dfdb53e41e8ff8ef74364ec6e868524a965f4304cf9d4a261428fad0d29cb044a336eeaec1664ca4d9d30d9ac8de17a99d7eb7237d03d676647a53b0fbb23856ba7cf42edaaf6fee0802dd87671591e47911d1cd7d51c498632572699a5bf166a036ce4dd568b7b944a17d0de28080ece64f35458724d8dca0d2f0364495888189067a60fa7cfb86b167a81e866e155879ef99fac763fc5e733a26da2d45db49f11097097b1ade550667398b5a1317c66ae8cdf0ec46f92f33045091f8427d9f049867e466ebf6a03c0e29fe870445610faa6318235b3d73156e1ed4ab83546bd28b39c6414c8b16fb8058e9d619a048f1440d343e9f1d75d5071c8178632e5c44fcfa444a70e9086b9d8aee0abaf1dd6f2e78e564ee5840f05fb5f0994190b20f099a395365f7fe1feb0bf31607033c33f985a285ac9dd44afaccfda1366af008f5e990679ac66fc57d6c173e5e9652b6743b3fc6aa356d4b2568495fb9df104465ed08f979c85d9602a65b488c793bd3992d06f715e345e8a172a65b74eb738ac2c0b5616f6266fdabea7d6636a66cc525489abb68d413701a9b528d157db64ee0b98496e072cfe93455c047dd794b9996988744f63ca7c2d0037f10f97bc274de818bd848a9cd3025f0b2c9855a45f0a07ab630f26dc5103ce8c89a9107c72b74cd6be25d4b55ea8998923030c1a3a1df5f1d0a7f705e066de55f4c895d1c0b898bd9a9a28b03d3a39d654be512c63c76b22508ff353c560cd958779b6c445b2904e7a64d02af3166bb13cd16bb57194343c17bad492df2a7b7631ff4e89ee86a5e0c92ce0c8609ea272fe4cc4c4eee76ede45e763310bae1ad653cc4d098c582eac5506c9f54dc58ada8fccd484fdd2bb87ddee2acbd96923e12cf836ba45a722ff0bdb69c2684ac4891f45d034b94a05f0e8757364430004e3bd910e80e4c982426c66763ab03643b914418090e3fd88d4ef96cf18be2302c2f76c07c28e9bea50526bc014fdb4e10dbd213f18bac6751972a2a09a8cb6e4cf2a54f66a851e9a1ffc4be10323cc86106b0801ddad68977b5a081aad32f6ab744dc058f4c769ce0b687b575b5a95bc90414bb552c41fd09790a72b06ddfae7384381740b2e605cd38bf3ddfe40544c10fd22a4081581e7a81ddad3194d5354b6b809ca6a9cfbc1887a81eb5e9a9b7ad4cabcec33e6281d2d24edda2137bfd0ee1bc266a26dc9bf416e965706d72401377a4d66133b0c5a2fb93283b9cdce720badf4ec4cf86ab9ebf7f64ecac58177f60fe275330cb193940c18d3e050ffe4cb37c3ce265d5bf2c1bbfe82211f462f7f64d67fc04816442c38b5e82909080f5509b9fe524100d0169b552cf46d0a384e66a51a3c0c0c0d039fec79411e55dff9ea532ff3c3b826015d88be55a2deb6878a5255283e0c2aa40ee2d66a64e77f0ec16d86bc7b65d58bd5493e260d60d39baee928b4b2ce64f057471a6f155923a0d6d4f99af577a60f2d0542097e412f29f9da11dcf24b3eb6fe70a2f81e00a6af1d0c00a81dc1c4170c264d8a39b5d362d652110a4408cca6d0aca18d3fab23e76c09d1f9f7704a1956a3a4d341d1aad0fe4e01dcfc8f43120b5ce1d0a6f4ea61f7a07bd311f73d154311b8b14c6e75e0e69a3b0334d5827b36a1f3aae76db6e7f53507da4909c50d92078af35744956a25e9c828dcb6aa0cbdc0b0e68e12334f244c10e592baa5a19ca0b8a75a6471ce933a7a9c0fd991965b70221aa1dfae0d191e263ac74b56a34fa096cba7f677fc0c572ffe54d0000d17c41263f83581deb9287e8b6dc7e12cb35fc5a6cdb4139c33106c651825c177639c73c4c2e64a76b6eb3427db649966aeac0a4beb36621a12e723394538cf3339474d480aee602caf9d709e855b536a06b70904a730237cac0e42b10f567ea6ab21ae88461f7f75cc98c7d611325a5035e35f877cfafd0f61151eeef900832e7870dde892e1917f1674ddb4b838f9fe79386c19ea6816e3a35f20c1c5f56ce14d47c0d0a29006eed159ef039042bb23c30d3a11a802d85cead5234a82074c71e7a5cc26b7e8e87b3bafbee3819dab54a28b47b9c6b5e15f99881f4f766d579f50b93f8ed989a0508e53c9be5bd22750a91a21d9a2325cbc6eb63f844ecaf461fb4a4a1d9caf0473fa68850928277b24081fa0767248f94e6e3098026d028059f042e953d81e9885cb180bfc61927a2f9513aafa33f2cd75e0ae0f453fc9def3c3b345dd5b5cd13f0edcc3e11d17b5357181f15ffbd12e580e742206ebde9ab407c8614d0da99cee1c916f4e30d0d66adf00822f70402d9da157fcaf191de6ad07efc5a614daf50699a0e2970aa4a0ebd40de14361a37c06df8634a980906aef1ee55f24f70b6fad5b1425cfbb50b1ad7a2a7cb8e231433d3e60dc57d4b5953b0ce39ef59deaea0afe13136c6066b5dda0f7a76f8b9ad7080769a17b80bce4b9f971c7e6891dd0aff5c074888d5bc94f51d3bf76b60d35cfb5624d5ef7179d7a70b5e08a77a49abac751df01c6bc3c98205de95f8ba17900a5c6593c6800abde309ee21563ae3f9adacc9978528a65ae3e517b2856c1d45585c7ab8cfb04b6512490039ef310c039c3f2eae8d28a1e6808ab087ed410cd6b0d3d42cd68abb0af347244a19d55e46cd6e883a6173ccac73484116268136d3c86e04947e57bf41a140ebdc1f183c700c52c15e0045c2f4e06d871803f822e84ef0805d42abaa94725181dc3cd66d5b38b5036b765c27dce0fd42332417996c530fc02597898dd34a1baf6c5d5ded069cedc38d4b9296501d8506521dd0095a15f5483ce990e6c5c2e161d072fb7b7a21007d8fd12968380af404710127a364ee1b2706db40a0a1a53a33bd913e80ae744f57218fb56c1f9c1ed815c2b6420b36970243b42f9e63a01145ebcb96747c5b4e228ac3bb28eb8f226a31085b374d927f3a53e2c2e241d48e8ba9960dda91b81b3a368f1f8204dc0f74dfd9109424e2dbe8596087903814f70002471fe5ec180b46efe02c3b74da9ddbd805242b1ac90ea5ee0f8cf83d2910bc3fccadfb4b9ef05966d1ab06da366aae75a028a57874d2066802f0f7fed2f8fffbb9900daf3a1704a91da21ff06e8702a9788e62d290b238fb2dc40dbf22ea1cc092f161618d5bfc55202cc317f2858ad364e155c1f880a3e01a82b05628b3d4b358a6d9f3acb0598cd8b4e2705f43f756478f4e892e125418798eceff432167dfd372caa5455fbb55ac04e1e4548e4704eb0394901185e20c7f90607d9a80a080b706765fb87a9ae2e915f072c31c87fae31f84379ee559d144c4d55901e8aa46a02a8eb02288b7c9f1140a22105d87b81f9e0bffd82277071cb9b4ed5f3bf0bf0859325cacb600d70a29a1d439cbfd5b1e473759318631e7d3ef3a5bc406897001904e09548f81891934484c1065db52b9b38504bd695e4b31d01d6e32600a7c412b7decc057e2a5ebf68fac986e702c55ec8d304031eedc31050f31c0bd4ea07ea77d1fd60870b3b8949511b6ea61189dd52c449dc96e1f359b6c77c79fae5d4876c4047776dcc778cda5eeccd8ccd76c091bd2a98868afef44553be9f37a23f65185fe1a45888e4091c8e39174c592b5b11d1404285389f6f712bbcf8f93568ceca13c56252d23add186a8f869178db2629cdc9f34d7a97ae869e187475fcc4f3b7066874d5c91d1cf7543526263a2be14ab4248d0412276328e96ad3f74d921f83b8d84500b3973e0ca6ed9a6cef4f7608278189c9e31339c2fd324757f88a621c21f8ca65ffb1ed13ddf65567c01662bff29aabf81927a61a507a2efe331b618fd29a8a0d499666774e974920cec69e72547072b3adf4ab478e5bd2d3f3dc707cfe10fda8fa165d5d8322e73fbb00be99ecb61fa4d746e79e9fc3a8d0f945a10ac3b6d307a96a919a5d03c732c396c4240c9f61242cc17142df6464eefc4dab5447a701a56190966c9eb0168b04a4ccf2bc84affff04956bca7baf43e00e8d0ed7f2be77237844f23c6df099132ceca3cec780dd00e55b914801bdb3086b34eef0b0a729d75c9047f8f342661fa21467c99a693ad0f6d058b5ccac9a053e35459318aceaeb299006a563500f66831e38a045d81356e295ab4ac0f13e6be33a936b80d66610216376c54c236b4be373544aa3fed6905e653ac3b3e962a9c30793b98ecdcbdab3371e48b43d72259b2f64f109eb51340b230f63a7ddafffb84e71bcbb51949e883fc1d397dcafad115a5b84eaf9f770bb2c5f6eb75773a2cf1b2161f51b3505ccd8f19fc5710b0b0cd1d36b2bea148844f7663856f6d196ffba359b347bdb61f158055763033ba4eb5a0c3ae2f36cc65e814f5ca5e1d848e03e7a49b4ab3644c143124535ceb10d9629913bc792b1ed95e70621c315bf074af2c085778469b936817982c7abbc1176d85c5817d34074f008179d208b7869443cfad78159dd9ced6674aa86f174463e9b4e65f8cb7b4065dc1fe240232b6b60a5ed6b96ab45cd8fe1fc2dbe5a6614f8c4048964ced2f3638c355d6d4d0989513ace253f2a033b8cb52edc7d9b8192d64f086508721a378d51bae69c3294a446eeae836a1776aa60cac7240aba56046f28d36cae1cae70393cd63ab941dc04302b65d02095e48a3778ebc67e5e641b8b49d6b4bd5b6dbf63f12bebcbf3721d7ae3dc70fd558cd310a8b588218075828f04bf9b11da9c50341df47468b6032d3ea9529ee9ad03b8b80b86d8e005a479c6de305fbe41fe9f019f7e16a4fd21289681822c28a7e4373a846175edc6984e5d689664b6f91a85a53516550fe67eaf378bd8444e8fa5539a157551699dc6b3cc4984f7412855d483e88d1326a20a90e13e594b7db465384c1c9434872db0a7d0331d1e2537d4d04552895b1a57811951b8322ea503e6c9d522dd89e3f9914d7863a5b2cc681fb688de4ff6f0de7bf10905822249e49147ecf958f4e25ba8265174be7f2268e72d4659a48d9d9ec4f71ad8073be617684829160a009191bdef83fde3236edfffa79e9d1288a365792db99bb70d97636ad59e47c004fc738566460dfa623ae31ac39c5907525ac37061f7ea97f1f9c91e07a9e96f428fda44cd1d9dd7af92b529e510ae49e1b74131944240ae3f5e6cb89f0e491b8edd410deb8816e98e5aa0421d4aacf31fd38059eaa5adc9b2a06ef127f0f6aa287c71383a3d624360f10ddbc66524aef8630bc85be81fc839f9e745204c61f5e268c20cd47e282784805315662e9cdaa3797c6492bcaa2a20c0d6744284dcecc190c20157f99711a693946edec302dcf1c895aa07b751f87da1d41735a773a42b3d24588e28cfcf88ef0be468b9fd5ff8d2110e132e9707f62f7c7cbd44bca1353ab76b09aa5a3917332743c9f09888ca82b036be9786e52137173ef9b69a96178b1ff169c369798a7f1d9eb6eb5427b71739855ac809bcb31a60ff000176d68b67d675347437f00f3dbd6ff7d3805f0384d48b1ede9aa156161ac3cdcfee9fa4e83af63d42fa67bf948ca5a39811269584661fb0ce36caa6243e55ea5331b6fff1f2c42114f6495b2384b10b3b55a94db75e4e2faf83c3c4f6a3147c1ceb7ac86d849ed8ee06db20556e99b2a7317e4fffe694d0e7c26bec2587fecdd74e7ea3fd231d8a3b986c1fd54fa55b28651f3aee2ec5771cbfa2ce4f3e13eeca057a2cd73bac67cb8e730ee198784ffb2179b4cacb85e6291ea145d9c8249d354ff92cd85c365571bd9857f07647e55a2c8aed04193d920b5e34b328bb8af480e8c2b1622a5dc61289b0b03dadccaab9cabe3b9ac3b0842ce804301e042397345e5ded13e59cd5699990dbe21f0c7ac7201d3441dcee6da6cbae7bdcf045a861d86829bbcae2824d0df7b8c557f47f7dd966fd0b62066cc88e9ee73d2467baa10aa9efa6f63de98e96311a0ced59216a215c6e853db7c2ef34028a83a865d432f3df4ebcdaef825f77c1d544856237b11200fc6df2d004c11e059e64a161cbe712060814526216d8dfb8fb326a1fcba55ab78405715cc44c1ec6300bf31ea317c1c82f4cd5414c4a6bcc74bf17898a17342a946ba028420afa2a12f4a658c15fc7384ca444490c6fe09f4dc9b1a3287958c5bb4b840b4b1b6134f93edce655930a0564216def73a3e9d64a4a02e93b8194b1527695871cac450493168d21b686b435d18a06aae81a2f033355620c2ffd1cd58cd1a0167cfedb9132f9c797258220a87e5949c7634a0058c2269e0b8f5a2f1c6428e48c6e76ebe26d7f1606b654b37ab2a640e12467280220dffafc001abfd83d5d0f332b485525e53559ff2ff206acde750c5835a2e4a670f56a85452bb591c388743101aa27eef7e1626c337da34dc34a38c6b591d2e5d227c98cb8fb89202fe11d4b0c8eafde9bd2b9817c7a871182d27384f824b7c6b700d253a2c3deb712af1fbe450ca26557113caab00779cb7290b19242b6a0190ddcdd0e4774a47fc3bd8eb6f23e87ac0a234c0019526bcb4a653007f64dd6e6d203218131024f523eee29358b94e89168efe177d966bac8bdb270d7d1ce5c8f0b20d473eeb2749c7016ba3a4f913612e73be272eff3d8af24f51da7b8f61b4f2e000fcc2d214811300c03d146fbf1758000f42acaa96c104ca8d89c32755e42948d309354e78f7bf59e582e68562d6e369d391d8a2a99e9d14dc03934f76e10434407203f82391d7c1f63205700fbcfb2c6e70bf44a04c25b3b33448aaace6a06949e336daf215da57735353a3ac27431b065c07b9c1817688baa54f0a00a644120291efebe095971d384474f0e58791259a16270108697a5163950e9da1c6f56ce2639c0b47e751f7a5fad255835f3e1cd5e30852009806db5558b57058e04196d261b4f01ff27eb3f8587896006bf922862543b0c2aff9d598ef31c773c40ff2ee3c35c8005eb3e7835449723091a4fc51f655c90cbd6328c4cb92f8e66fd919acbd5dbaf0f03553cb74de735e4ec3ef901f5c646ff732b53726cb79bd6e59a0d847b7f582b356f4ea5212cdae8a3606b7825d9b2b0d4a7ba38a5dc6adaec19f13a80e270a405a5773232993f193a0502ded15f438562b4e7a117593fd0f01284d285dc57054eb8732bdf6c8edb58f81e4fbc6f0bcba80f485c100ca26a02301435066f7f91dae3e6284ea6a4b052cb40def2151ae8df765300d26adaa7a2d4bada283b8e056489868bbbd0da505daec6ac68613eb08c12f80134075206cb403965ff2a9054170fbccb3fcea300d08850f3079366d7c20a68bfda9daebffefc87d23997127be8464a1512d218c5c9f2dbdf069e917b63ddd1e72c6ee54c18318fc201ac74e9f68370af26066746e401fcc03d86d7329147b71a3267c31500f2d240e137b2ff8787afa3715264b0e59353b68d8bcbaf4762081e27f947712fcafd1bf73530de23ee83b13dd30567a1162d20d5c45036d2f5a9caa562521752c7b8cdb2fbe264f559e07808dc01b5e148459299b7b032f8ca0a2f69b8e26741b9166f5079efd56de710252bc1269ab3519b19b774001e368065ae8adeb5e792c5e90f7100fc6cacceb020ad60d2f430072a5d1509aac021f7893a5b4d5a5473c144bb7e80a55adf46d50696136d9bd1b986c6ea262727af8600c4bad9eb3516091e8502541a0f4f7d4ef933770138564e402cae138adba5305208508d36e5c7bcc17e588ce2a08277ad866b3de7f04b5d11422d528890964341f17571f30ca6276e21702ca72d42fddf8231175a0f4e9e7202218a36110f83a78ff0e44dfb800bbda4630d594f97d010e1449d00063756c3a311027f2d94fd90f8136cac65323ec5d105ce549baec2262842778f7fc0b4de41af0fa15fbc0ec64d6ecb2d5cabc07c6ee7cdce25ca0432f6a094d5ec28ec613196770ec692b636a7732d1b96515706d52be3628788a35c827c8a755982d6c0b466ebab5b85eeed00eff8515ea385f6264862b678c7c4bcc2176325ad44a60b5ee4348d08a2146ccb018c9da3044caaf7d3580b1574c1c7c6d45aa6dbef41bd4614d4e2c6188eeca57680e78dfccea3963df2adbe68c93174439c5bb9b9635e93d9ee79190bf7ed98670936308b303d2c831daf9231254797ea20e59fd066b426355dbb6028d84acccbb92d526a9aa1eea11365c44d245911a12c99024263148fe2896126c18ee207ca69467358189ed70b80c1b863180bd5cd6d210c2b5d90401f8a4c23f0dd3c7d4ed6f1ed52e5d82cac8410c492cb121e857528c19674cb13add046008290ddcc91d7ba7918b11b8d11a2edbb3081d608b90898713a261698bada3277423ddf35466aac314895edc451d8d2eef79c6d95afae91795bfca8f30a06b0788fa79413391c222e0fde5405cad77d9c34e3aec1f086cdf8cba567db379bfa14467ae985d5e7771d933fd27664a6960584213d1658a92b9ddf0ff63577a4af6c4e2599d18f7a361bab42fcb2910ca7bdc6923e6c01f8f86c970579dd00acc74d6d624fb8bd9fcf597973b4670ab052dad0e78a16a3f76ea18e6af17260c08a53852641ade5badfe3eb133db2218280f827afeae2ca20daa99b6f64b71955297e5c91a99b004acb26524776c6af0a958fb919d1985480d96bd2a3b7258b8a592c357c0a884e9dceb771258e217ba044005c313963a2b391c5e0b633c1b9d427680f9946a93222b08519d260176e6e07d17d832621156b929e558f854317a63758de368360ed106742d04c199d48e72b0fb7e58870fa530e1625f669a57c969f8a73b7b32a789a7b33a21ce0b3a1738299c9fbad6d48a120164ceaffae50cabd1022284a76b1e195ad45103428fbb644a7314a160c5c8955f536e04a6f1eadd79af1b4ad65562947b69211f8104738ea12652a3fc2b704a608de53f17e6536a80d96a012ca5e2c29c02e1b87a60a3468397e8a3519979b57e27b9245c381776fad7c39cc6a7db5e60dd8344399b22cc2d901eece2f1fc036a810575b286b104e87bffd924e8afa251b0f1296cd007fe4bea42ab0c5f117b69fbad279afbade582ba5d24a94fdab64d3e4b94d5cb92b8c83e2b634bb7d0744681801a996ff305c7e206ae645bd8323b7e284e750e42a940a62bde3160fa652996d1b20dcac978b41b0f9e375c0f0bf27f9fd9625e356bf1e6e38eeac7ccc640c1948c2fb0bf3f47c6abe0434fdf393067eb443ae2573de499e2a5f689cc436da0102c18030fc0125d37f053ea78499aa557fead13d3f3719038c02254bf4be5ce45b28eb82167e7288ce99d473e0df597bdc54b9e63a3c44adfac9f84421201fb1efc29e8f986e5336e04a8f7f96acff5a2ea85dffadd30d662f158c27ea4658d6a144fffb0c2a67f84bff2fffe899d0f3fd1cf2ac19f86e7826707dd3e6e3ff368ede1d72783ac73854376331a09913a5d976516c5ece72c7f71755aa50ff5fe59284f2c13d4f8efb7ef8f3eba0097e53c856dfa432b52f36e6e04432c4e99f90f938bc16d50c3d333ca46cb105ea59ba8f772546459651e8ded3cbb136d2b15d9d4158fa8919ec7bbbf16604544fba6696dc4b06a48c5f17ee244757897783069c3b58330d1b0c8ebda3c675b787576ed7fe9051e1ca9f489bd2626682312d6ec77f5a0439129a5cca2b3424cf14461849db90e0b6bb281599ba411e415b39fb72cf3f7148e5d9269b8379ffc799cd80ead96dcaa7d7971c5a9efe76a573db95e4581e8d14a4098e073d8dab6d51c153df6f6df6ca397664afbe3218205daeaca2c9fb97723497ca2f775619394cffb62d1241c66eaefb9b750e99d22ce3d4fef796189d5739fb2418f980c170c6ee067520f8b9bb6686070a43c1458242e3ffeb4a03e376d96cbdc18a1c801a09248d406f7010506885825b9e1fb10a3b1a5b860d30d054cbd6e2e6c707fd668011b0c0c7db0ee1f6c3cedd2ffe090044ab7497f2962aceff1bf66d38ff5198d50c45481f1ed5d4a9a4d5682d07849dc5238fe97803edf9de10e816116c7c39698c083708580ed841fbe6e47e5dcafd11f960cc7f8bfb92fe3d86f6f116cfe2f17eed4c62de2f421d520a8b42d6fb414b4412e007469de09209be1093873028884e12914189759225cf66084e685834da687e93a19926140e61eb5fba0a33a73e8f504a4cbc3838bc2ed2bfd8ad8eb7ac2d5d1b52806bde4bea0d5aeafbd830f6b1fe37afdb700b83525e25ba1babd401c639f352bbe1400cf1827d2cc0088aef703c8a5b1bad94e22d7252885bec598fda0701c71b73d30d33ab55ebddac9b6ee568d9e1f830274d16512ee68348d946e64aa6f8ff37247cf59ffced42f9da8a788a36dfd9d829399b85e2fb07c40556bf4dad50b252d41452abadb2a87f1df9443aa73a81d6db0865eb484a64e83347df49fd4b03229d70862ce124f7d70d9232bb5a6b8cd63d959a9406d82e887d5c883775cd5bb407092b1a8dcd8f115733755c00f94cd975a7d079039f743c98bd4886cd1cf748034e6b190f802b1899b409bf61858722f684d5d58a20deebd845c6864729a3f5582f7575e6d1fa75e502a4af394d51740aa20645be20109fc34fb3f38a903eb1648204cf42b3235cb6a327268d6019663a4f856533e50eee76e6426ba63f388793f0f430f5181f2d9a83bfa10d8ad025006310d3313251c0b976bcc4061a5d5f09a6793a22a55eab23b14aaa95062f2a54afd48eb089962c112f4e9c054eae474bdc7f5a30c27e7b8546646447bc598d5864f43db935c66fbd02515a993b12c10d9e6582bdc269dbc3863a286f37b60e5d18be33761fb71ea95e66ef7fffd37ac6f9a6270390fad6d091666548cb31b5ab598c8e7cf4b89bcc1142308a9453d1c4607daa85973ec0ae6a459c1a737f8afbd72c4648af8527e116156488c7ebf976791dcb041109be3adf8f7eac5701d5c3b5b0dd39ce9aa8f156236c8f0217a5b74d95d21deb40053b2c26d2bc57c6a81b489158ce73705edf8f8ed31182abc9c1c8b0da8ce4596ca2c6e035394b3421e32a9296c7264bd55c2de4adabc85f98d16b9ffe914cb082c8edfc0968481d5f8ba15edb47e8adecae477928e55dce4e0d644521da7609d266fa562e3c59a258e8119a61dbc2b743ccc89285834e00ee46be85fa6301222aa83a8f8843c96e831ec6d350ba28f65274f03a059141605bc203534c182798152b26da31af293c8c2b229a441ca83b2780edb625e4cdc2ca9c873234bb6cb39152b7ab94b6e8f753a64caa45bd0cde0a42a0929e42c8cc24d81f04ba7e02051e0707ff0374b8114702593ad5b61a9dda6a0d0ea859e1bfcd515bd2bffe63600054df409dbdf4a707a056f882fa97260e4ebcbef5630e245b537ad5adca3bb1880f3d5bea2c15b96ef2b7dce99277a6ae319ba387d9d50c1337ad3670f1770b6a95d6cff32f3e527eb1b1556dba92a5b6c940a4c1aa507cee5f98ab3d80a0cbcdb0d4c5a89fecd5adff8b76ae33e93ae428677b1e8520b6a19298de2230386cdc7234c156bda7c4506ab0ee53b8f0134db60289e59a6989fe528b261510025dd82a17f0dde89c068a619876839e5f116a4423759a405a8b761ccce0bb669bc5e9cdb0b2baf9e11612ab96ea7b09c403ab270e996f342d5dc4c1046a18ee8b656bbd52493cf2a1cf11c9aba699c5b12aeef1d8122fdeee69729d5d00bc5f2f8c9ad8ae4ba4ec13b4c1e3ac575efcdc6af4242c503a630b5d05c631e946693c9d3048a8bce0f666870a6a78139e8ac85ba30246027b6054353143971e158c6b5f988660e5feb948bdabdaadb4e30e079603a2b6ecff32fe9bcf8728c03cb5eb890e32dd5700908a844546a736aba280579bdac1eadff4f12a45f209e97637ae870fe2f16c76109e77f33a229beba44a57561eed5469fafa7885cb294cc6613c0f769314a14646c743f12a22860f8cf2c33c7147591cb477c4243509e3b080bf69d5fd1241053ef83180c96b6e29f1323dd6fd1ad04e5d10875f85b9a5670a7fc2f84100d50b1b933558bdcb34c35828dba95da17ec1ede8daeb149719102fecf4a12816bef09b947ee6e45c9047b2718fdb7b2f5980e229620d81bdb38d44f89a189ef24849ae3c3ad7954036e2284011de31d652611ee40da1ab40e41bb50827c2dd2de544d11f3c34bb86898b6b21f8ff2fac693b4705375468e3d82976590b0a25e5a5d7d264613cbe9d4704c71fae7641e0a8737f939cdc2dd7871dd40f2319f9cadb58c3516a433563c94e059cb3a8820c6366b7a16a78f2020155404df9f59f3c8962384ba3d4e806c2b0eb897bc7d8a172d22d8b3c198d2c7b76bb4cd6e547708fc24dff7620143cea7fdf8dbf226954a5716110b88d12d9c3deb6b671e6616533540316103e0038cbd42d24d6ddab5186ae0ea884ce2b60587ed07c5bf07fada99221befbdc9df4b67464e4d98b17c6010585f3cb2eba826e170c3bd899a3c77a46bd5ac0c7ff32a513d5457578d7f496932054427408845ce8d03067a76a9d40b6898be79f0fc57153733c32ea06d16ef969e41d9b19d884784d1f488410e7d84034f3fc27881ed94f8b99dbe1f33eea0261e17b9bc97202481ef829c84e3f62a3d36ca8b8453934fd20dea85b7d1289e139c718bafb1607a715248f030b346b9b43c6c090aab809991dc6775364104ba8d235bdc34f0c75012f3a01c3433bf046763a465eb8f94f647b6843f8be9012b0c0c348def18126d409c61d9bdc692fb9c063f477b8726436b4195038eed7b64b1d9ddccea39720453c767cb1b43f5cb92cb33ff27b048b06e6f2aeb9b2fbe64e588c82e887f79647d46f1ce4a660ef4bd3ed49b32d859e0383f8ed71234d6af188af0e31015d453ae5a6af554cc440fc5676083115720818b083eef8380c9826060395e6900823acb6315836986be212fbd1521517689980641bd6b3d168accf055c6322166eec632ee215ff84ab2e74fb62d285f946ec28a81f5841f72dedc94d7fe89bb190ad66ffd4d4fd9b2e9416089872381561e56a546130f6b3f4e6fb7176a2bbfb8307399134fe61c82b5e92e19cf39ce3b214da982c0d0863e86eadfa89d46603212991263bb805f0ae6602c24a3dcef350867b3552beba21cd26876bfa1228e324c1bb115906e9761c1353ecc7149502eb22c51afcb23eab95abd91ae9aab2edcbbb14d3b1cadc2934f2c25aa751cf0eca5e661c5a58b5e1ae0722fa78fa58c2121ab70aa5bab604ce047b7dd664ce5c3b977fc9dd9175aa1262c36f4a72ffe5bab1775148a513e79aab2dba1cbe0378cfeb5ad5b5ad1df213f66b6509a1ee5a14e3dee14f188f6132d06ae959828167cd709f9c1c2191cf73c77ecffd3d247920a69e6d002f65b590eb9fc4fc4ac81fabefe11799e3e09fc7abe9bd5035ee71f620d760f41954e00331ef46a08574c99891f753a567c939b1cc5ebc66e8e824133235f6b99631a3b242daa84b281c97194af35fcc6e323ffda3566aa0076e0cbf66ad941d9de2744763d76ca55727c185c11c1fe51bef8bcf6afae4dbb055ae45c987efc80f057b84213b9c4ef8808f602c1c64d0e80466bce700499d0d5bc8dd49c6b1ff3a8b4d27995aa61948a3e758fc30cacae564558f2525aaf43714f2a6a2c93000d338632f2acd2246a7d572fde55adbf2d8c595beb90ead142d75a9575894d596cfde43a803b5bef56a4db8b5600802cae9ff8959515c8f8130de3c5a0178ee911091b5cc97755a857bbb01b0977bdfe348059d1adb4efa0751203751dbf07abf3f5f727158ade8c3a2b87d56035d8a7dc5b319d2b0120fc358d677d84317d9d251bbcba455aa1e17210bdd25f7237b20e35503194484c91b991982cb1038732b1408073db654f2cbf5aa1206f19b9d5b18e2743d537be5438bf90bb3f772aaad24b3c035cb906d8564dd18dec3354bd2cfe6b01117d2ba33aaf6f9d781e91f0f15c8fe861208f75f630b64cfb639a73be385abd57a56e14a2598bfb033a5a4c529ef0d3affcc3fae71b1575eb39dced46de3fe6653d0443ce67617dd9762090281100b7c039306071e1a07fe22b2d94af7d85f8c3ea7e353003fab697f88427051e0074949f78867fe49be75b8035c02335d73a4940824d47d2526f6ddffe0697cb12e35bb976797829075382e8f1382737aaa4692f0a3a4d08adfc98938f10a960af62a2266896df2e86db52e80b2b055f5c09f88a4b619c8866ab5487e0108388824bf8024aa0f0b1f52fb1563046f9b37c970964d64f0a57fe47002e0010d600163d9cb86d2697f09a12425bfd1be644c8044a5a2abb3dda2cd3f5a9725908b86b5e03e68d0bb460718cbe545eaea42718fe8b5f3b3cc495b226f70e1d798a2317bf4460f7568fa5483b2794c2319a30b9e7cd5fc8c0516e7e2e393e8ea66105d2a74bdf71dd7ff5fc061e65f07f716f793ec6e603d8756109af5c15c70b27ac4d00e06cd5ea407c5fb2f4211a56fc5271e2ccd67c7925a69c80e17ba86b6f1ad4112a90fe6b93000cd77d7846be261a9ec993d5c5cd5ace6533039b8d29a42a8853bc4229d036bbce7de6aefb821d20a1e410cb547ec3f119671d056d9a265ef2053a2337881120a6a9d27464c9f23089bdc93342391517980a0480296e6568597c2c38944613084b111b8f607c5f2d23b770631f840de8aa0eb9e219fb106640eb72e00b4ffc8530134cc8819eeb4ab23368a1e1e12eaa86e9aa1411c8cf34016afa574609eda956775629ab0f56827d889c765562218bd1cb6730a00485df0beb24fac969a55d16e3a03825b9ec5e832e6796811fb15af867072af4daf3f435fce1be5830efeb73778c3068df130abe66df461b74e7ee53968d524453e028429a13d8495323ff32440183651ee10b54f790e5ae7d60f537bce694b09bc671cce30bc8f93aa7b2689bf7ba832ac0ec9dcd05aca4c62936ade9d3a8dbed678d2d004d13dfde141facc51fdef8a342c64549f96b06515686ce851d522de08709fa459eb548bb294a46076f8691dab1ad8e7309653769211a1f09860b5b751fdebedba8f025cc0bccc723a9ca19074714a5d86a8dd7c2a62e9518f6cb8d0199b35271c23e35f440da2c8b9a483fa78fb2f4163aecdae45767a580d1e3d7dbea401f0d47a977831881449b1aa05bd35ac17b44de7f1d4b129dd42452bdc83453535b199f32288179cce705b0603294429b92602c21693912b5ae46948dc68f10c17df4d7d01fa5ba28c8a87917962118eee8e982db5275a7f890c4bc5bf0210a83a067f1124cbbd428e28d376c5211824b369caf601f74230d8382a50212bb179569799b084ff612b652713122b28deb3cace4307ad79acb0ad32a2f2e4161bab4dd6b1499d3b061fb892b5355a435e1b794e6818575a891d7abb6a42dfc3151bbd7af3a5581abe0fce094f6370d188452704ea570a0e80f72af0161dfafb6c9754e90f729adbad340d6eb67a0cba6e02a3364befc8de08f62bba373a2a5395cc6435bb93a8b75a180510f477514d9e40ca08f3aaa9b3a3ddd5a3e94295c3963f7b2aa72f478e27b9d4f2eb07bc5422f61333efa022e066747b20bd8af8fe0fea655794adbe6c869522ff598c803a03a292ed2e76d8595ffe0607f19db27a35ff42ef21154bb117adab6741620433e1a88a59641d8fd527aa09be6e79644617a973731c32dfe2e044699ca1210186e139ac83b6d3d8e21f80d8835156f0b023c0ea72088bcb7728f23c2f0872875e138d825915d343987336ec713c3561d6f504cb4e74e8cd01e2f8909cdd4c14205e209c807b8472313d6a463b3856075c95412e27357b1ca885a5a113c5d493cf7f1c052e919b3414871c2b3fde6270290045e75419319b876fc598d198196add8bd75f52b9627113bf2be2f93f1d4e7be9be83bde0c71a99411a0a724f7bcd04b80b198a652c4005ac9dc35332841ec178e7b2d5a2dccdce2bc104671c1f8702b134057e762cdc66e3820cd1d044b5de7adc5cb5dea8080f0402df0ce52adb816e2134011d080c0c2400f9cfad6d0ddaf96af8cdeeb56232f260e621d80ef3a08a448b76f40df37ea54c4fede37361a2fa79be6046ccf70d3360d02b95afc41f6e0f005d9612fd6aaeae9e37b84bcf1da9af7f42b05288b66f06d2efb08508f65f15c33d579661a92419e659a80d5ab9fca0f092b5ab325f7ed6040e30a7109d826c112721132533f8718f3f9a25620d0feb884ebc6951cca06df8186e4f0a3799cb6316bdabecd88d399a7928186cb367c35c23f8e8a228c0d8467b01d61252a70d37b4dea7cd29edcd7fd66b4d79013c8012afc69059b5277f2478ad2b34402e7b2a0de83d29a55395fe04b546dc5517ce2ca1b355c630c654d97a0368c2f4d063652b673104fb185167601f44b97c04873a195fc3848c6d73e55349abb35a4066283fbf998633ff0802b851e94f21d37e538d1a605fbe0bc58328b0276ac94f08203302b4090ad6bedeface18089c560bae8e750305fc2272b4157c562067a32483342dc1c4d2503d1cad010a6141cc6951d96da800d9641ada66a50a8947a4f0dbb1ea99a1c13f7a63a7b929d74cf5a2abd1213fe1d2d0b69b8c0ba38176b57d11f13b4b11d90c1cb8520b67242f52649240bb8ff518c5f6dc27e862d62215dbaa4db085c75e4dbb119eb29b4ee29cb4303d3c1bf469125d42eeaed3879aa89a6ea287d18ad1411561fe8c8c3e8e6aef7b72db415d355d23ab50a794d1845726a168e51758b1a580a2a99d56ea8a118889c68511ea003852706a33cde7135348bb79c3bb6e6bee5f761002112eb8ae04ef2ee0882c41b1d950039050d0d0991a969c73c0f51337a39a72b52af78f21f71fedf3b8f4a3f7602c29c1478758a4ea60d8437cbd669f59fa810fe0a2da0b0cd77eec68b62a78cbc3f58b0efdc9106733cb08fe0940f0d4c9418f86d38084d5aa902620d6f4ae371e2d75d874078ad094888956a4350f06402539b1baccfedf21bcd3f03619cf44ba13054548ef82a000f010ad0ec6fb0befadf7cc172f7ee58f7ddbe579bdd396960cfea36223295047cbeca61872c4603278d7e03f31280b1ffd4561d9974d96de7b11c3ca84e5843185bad2f998ffd7d225eeaf915d1c4c87e9e977a6246e88f17855e542aa4b74a50d04c9750fc495836f6a9b972edca679b12afcb690906de91a5e6d423c684590630b35b61824a4b5be41b7a79488272dfd05602f235a1573feab23f651442e4b14320b6cc614c978fc22f8576df23b03b54d6b6c8b20859b547d56ad9313f2be7ab4c42a4463578be5dc4edcc1de17c8b1058e8cd09998b5ae629caa5a5d1c58dc6caad23366f1143edb01f63f08134a98161d94ddf8d71c0950b9e1b1a58c2a800639a535a4d89954a8c77d23b25b3a2b862194f89380b20454ca30d470fa8dc29bae126469c93d552b13653786935510a89208c316514cfb4187e12375129544c8f68fd0adcf2b4d92a31c31f6e438948a00644fc391fccd5c39abd48a8157365404a40a1961edf4e51f1940655171c3d612f199b5229bab2f678b53ddc31cbb163ec52e04b38950bfd63b9af3462a4ebc1f2b9a357e3dfa4232cf09cdcd403fc57eb677577bcd71f2af61da35d78f2357bda6eb5322b90383f2c5a4ed0e2deaf19ae6056094d3813078071a459fbf4c430410bfcb2ea4a455e4a284332c2d80bb812675e5ba4e58cd27e03668a9f689c63a1377884162b463ec2d18cdad169548101c15276d85ec37a3b471b00b5cdda741a093db293942bdb7a0cef75b56a7388929b92749bdd55d84c3ea7ffa004fc02433c9fc8f8852bdf6d8d548a3f71f72258f5f959078d3b8c6cc60ad51b141f1be25d652bf08f323521e36272ce9495f1f2e33069c6c7f0018d57cb212d16475dd754ec78451d214a08b90265a9e5ca8e28217ad76bc55db70fa77010678a5b7b02d7fa032d61a8ed088860016f0309089712dcf1a80f5fa2246e01576161d22983442e51fb6a094f8802902a7e3b185324150896f000a9e364040c9af2435f6b287cdc04c119bee32b9279d7b438aaa2be3b067367effeb0f5aac981430758d8722848c0a16934fe0331b872f5b56b3d5ab266c101102f840e531d711b62c20a8e3715f654e97fc52a415064e6343d6ae000c0af357c09fa6455b294a199355759f4a340f5be819a2c4277b4f98e4316498ae4408996406929de3ec61f2d9dad49ec31b9c390c2b42501c7c1421d8832573e7c1af0e7916648620b7421d86a06e819be4ca0d2dacdfd38309c32737aafc3b2bd421213b900af2d60c4125d7ebe6f288aa2f81e71cc909f184b5861cbef62dbec5f9ad66c0f3ea81a0acdf20d5afa1fa2bbf98cbbe665950286871f18d21997a066c6607e6dcda1711ceb3d812780db87cbbb7436b7577dae4307b421e93e452b2e206db0baba21a984ccb5a08800ef7e5b2e42b73cd98a9f673928546ad9a329d0de1c5a46baf281061661d5e69f0b2b854957150a8f05f8eae88acd25d8f6e2ad917c29e73e234274a9748681a19295a3a07a1a3c814a7a1c6daa925b3ff840d293f8b62239a9142af3406a2d9f0e17bcaee263f2143696d850972ab7a6e224c708f20e7bc6e89dcd772b1393fcbfbf0ca159cabf043df9353936b6b1ac1fe9ae8931bb12173aa3815669ef73fbd707dab377e65cf5db35c8054f8a8bf709dcbf43d8f070912e5cd766a1ad8d74ab9722fb5383b5ce450a773715c13226b484b9c37e237d0b328c08a0290cffce50846a1064b5683f4ae67941c90013dccccfb9d73c5dd2c5b5004ff6e88b57c62db9c5388a503b251423b59a5ed4a2b0235c2afd8c742008060227be8ee8a785a33363d0252b6b55bdec69f45024faed2a1550a857e8e3190a5b469e2e78a7243cd865590b052b08fd030c8197cea5c6044ed067b006943b05f1301ba0315293d91819b1926af0a2ef9a5c99873df609819d4b0070cc153a300e2b3eceada20977f2204a75d42e6f63511001117e083d706478ada90d8b67758c677194a19e7b6100b0332dab8e91cfc0ba1967c267af951d9f87330a567b429e37e1b26aca22cbe2c26b54c64fdaacd50e05968b37040f62c399659b64687741d7fd4ee8a288327fc5b8df765dca0f78dafff6aa3f8e524e63e18be023d13e1485a5cf758a688a7e34037774ec67e5380d25b193d848b654b24b9d4e024f7200f4ffbef2d47a05acc8c9dc0ec75f4c18e533821895196ecb0cc2fe9cd38db80904765b8662172e1a5c9bf218b462ce8784ac48f704c888dd107fb00b275a6893c95e3579812cee80e86c738c22cc353b6f80b1b2e05db6432999a5b27a8afcb49ee14d51bd9513d8f5abc2567b447e5e2324799d374b0fc3ae6b9111ff6d19825825ca7ea25742966c62fb7067b18a13a912869464e479970f97d5dd8ef076c6e0b8470b4efa9f9ad98a28dd0454fb74196f067c73ef8091a7f3d35f6f011195d7df56ced964b7935459694427c8f63269143251d932cf89b9865efc6fd691ac9ac903a9a243b9fa0f5ae83a65ba7383a2aba9600822635db6284f41a049a84a6f8a62c407b470eff5f31869624906b52efecc26e917dff4193bedf54f83b34d22d5f5cc6c52b8ecec25ca87f13f8b57beda2b28640955b9ada180cc2924004ae84ef90a894433cc884fbd4bf70e4153268fe55a134d56c5b84d8062d8c0762e12d69d37ff2ee2f541089d27b3e9d5013cb2a2236eadedbf31596575ef73643281733c543bcdfe8b1ee55c651f9bed585eb5d5b20ec716ccd76f6cb6bac5fc308ce3962eb9c8f66e8158e2e9d51f140dfa277ee6dd05334db96203956c16c3b4b6cbb031c30f9b147362dd451596217c55e32625c54a42911afcbc41831b316ef85afddc1a00f08f4d53ed9753716c6046d39b496a1c34b3a409ce58c88680b019f6284ce6bf8e85b253c3eca992bcf1485396d1778882e23ef829aba38d691d7c65c745215b3eed45ff10ad866879c323c4483c0d0596b63acafe37abe151c38546f826662b0d2e99092b9c1022aaedc4126a21150784381444794beee66fa7f4f69eb04a98de94b5977b8e0b4b02976b49cea94833308bf2ed516bb124da7951f5157c9841ace16586de23ab16145957fe18066ec97829d628a53607e351cbfc722498f1d8569ad8d5379d710e7f71cb3ac5cdd5464d9320621ac1a945f150206e997b5063eacbb39e0e4560309adfa6bed4c6d8988c1aaa54dcdd0b058c2d3dc497f5d90c23b8457acc1f2b72fa2dc5e497b5988d200e004a7704751bf2532db117cdd966f343dea27b892ec8e82ef6e68404e2a51b6b4bb50172222ce78d0979e08765dea7109cba178bff8071fe3695db81a0ffaafe3fb816cb6af6200cafe951b022def7ade198e0fa4eb9fbb2f8e2a481d4f1625b4bbc32d880e89d7cc89da58140a5e7a27815c0e89a93ea2bf2e7926f80767f08ef0342f73450727a1b58d4cd7bfff0ca869faa529dcc61d9752e2909e8d207981f006345274f2559e51d59520e744ef4cd1ff8c3414e9e3b8a3ab02dce8f2a512031f3cc6773006d64ee3181ac2ce8015f02d8ec7d8e65695b2013fcdbbeaf9ec1b54952808e11b826dd2f096b24073660aeced39d8589c2ee778abc38e3163eece349aa8220de3b87f4b25f8bc118ab3d39d0e27df2be972444d3d25882444411c2b6b0656744584859c8cd4fc6f7128ddb7fdb17cf6a39bfaaeca535af2d320dfb121bc7b1a0b5b8130c34a0bef930ef032e745f390dee9c5ceacf00717e28c5fa0da344053b27efaba5cd5d316360bcf506fc18ea9a77e4d73e960638e82e67d9b73fc7c29737036125f4116bc838ac8ee763452c15520b7de5bd99c65cb9c8ecdddc760f9cecf662ddaae9e8a9df76eb01f46364847598d52d144bdeaaa0c2772b1b28b9341b214fa7986371337d48d195f20f0e9d95cb93be9398ce39436deb5175af1ad55c0f1fca35dcabc0e6cc7fb1aa1b514290d41913506003db796ffbda9f696735c906ee5d583adb95bf431aedbf46a556fdd057fbbcc492c465e83ab97afe76375440064457c297aa76558a07a08b715f07ae2c2ecd2a737484e52a01142c1e2faa25bbb00583aeea364408ade63d9406d944f19a1a04d722fcd71a04dd8ab9704b41b45decfe6822e26fbea6abea16efe4b3378729a5ab6643e068f24a668702258dde427c0a0bce0ec96a7b4a00e23ce7b6507adb4d6047400a3108ffa7deef2f06b60e2bf9094ad840fbf3624c87c86f156f5007b6fe16a155bbdd4771c6310ed6688d6225d621cd89af4fb3e354e75ef2b815fe455a3953237e5f679803cf857859250cf87ef7ae682622e475db97f7dccd0ac9c033427d16b02f6c0509b4f6078c83fc64458bcbb471267714d187529acebdfca77c76e59cdba7983876f3940706b2df242c7e390faa7ade12fff5e00931ee181d272c6c7cba571197758d165099af6ee15c38cd4255b0b78d51c62fd354710849d0b29b1514e96c16147915b82cfcd0ff08bf2afddf66f4f2dc6d1e2763ea9a50420bf85ff775020fd13e142b7af660005c1e10232d910eec91fcd6924d30a35b101ef0ae1657c85c90beeb8ceeb1ebfb51175aad64c8691ef48d45e0cfbc590d040ad747c2d70bb42598dbde7ad226c1d9308d2031aefbe32bc0f948ab26180988715889e61729e65dded8068dcb4d1f98189f0ae2a06fc6ac8ede269cd61fbd96374c29ac887a625e98db642f38558d393e5a1d1fd62ad5f1207e6a02a08e81952cb9a2a9401b1adc3219ca78372b1020cc60715e1642335c3e48ebbce6f562e1c5e6c3f4b2514ef32d7bea44e1d1ccda0cd2a4e6c741f4e244c296d5e19e10f90726b97272e43648a50d560bb5684e83b9be5187ba6295cd8c00b2f254afcbda3be96394a65ddc199b049d4bd8d2a75a4abe76b29caa78c878e2a727c5cc798384490a2a4715fc6e030a6f7a7a5620185aa5033d66f6afd4afaadd5bda0505365b07181122760bb4f13dd9cea7a7bf34d44f3c41cc314484742a84188d2f2e0000f9f66ee2023b044e099ff99a34a4a9e4b7611f7bca69b06d55b37befbda59432a52453bf07ac07880745189521c5172d808116475578020f2e0086511263ecf0c597245ef8d14315908c5003277a5862071e5852461332a830624a174e5840451315a2e030841e94e8601bc30a265c90cc181a43042a4022c9065b8ec025cb14a6cc802589267240460caa2812418e171e0f2f08153d5941e9a98a0e4f8891032c5d96aeb0f4851760dc60a3a065064e98020fc680c2c51359181103222c595afac10f8430328408161082a11e208541c69729ac60621c1079c2145f20d1810640d000899d50810f829005152a347d61e2fd4ea1219234193104134848f1f478a0628b2c39987154842d8e8476e0c42409134e39d08110f806da0b5e1367e470c4142f80e8c1922ca0dc200aa32b7ed0451053b8303589025313315031a881a74c79c28927de142e622530064854fd6bf0eadfefc50923e416ba9bb71694546eae05226e61c963003fa1168a58c53046f85b9d8acfefdcdde19c0f42b859e6d6412d5ab87022c285962568c923f80c21841b9cf377afbdac29d0ad39215502fb3bf9dbc9effcafeb7a79715de1066b4f635b5743777de78f5975627f6db162dc641584758637c37ee962f57fb2ff32ee6ecbb27e776fb0da89fab6fbe5ae84b0351fd8cd3f977072d84dde7bdda47635303713e62e62a766c2dc4dbac9f33266939abd24ee09e0d4f8d8a999bc26b5879f6847e92b8a9bbdb57538d5fad9b4b9cecac1bb5d627cb5bc386b53d56c83c102eb3575ce77dea14595366357e4e63f0ed4f82f08016a9d928994d25dcab73e46293dca26ee438f9a8f3a2cf1ebbade9fbb397a71d3a58cd3a30e349baaf8537e04c27b8fabc1aaa4255c44448b93162d5c3811795c3c2d33d0b2b43536a05d567b7e0cfc99bb6be9423bda3c4d3ddf5b355d0d7393d057e7b585c6f7ee97944d3598366a0b8dae851425dc6777739d2fcfe9524a29a72cda61e3168c735c48d04e55f9870defe16adc5c5168a7c2c17fb3c3647eee99ed9cdfc3978c11ea646fca7b4242272a7c7e4fbc296fcaf52414a6d01a354bd0aec6e3e0e1d113fff51353c4a0ddd7b5e2f5bdf5bdb10dd58f546c2ea1af46bbde3f5a1b0cfd4e59d5bdda74e74fdec17e4e1cce911c971863744e8b2a8890a5ee1975ab68caf2a449169fac7a59ccfa785c8a7f6b8783c3aaf78fdbdaa5e03f2e06548dcf1b73914b412e08acf021f738ef8e31c208a5f418b70ecb529f74efee1731a7f8312eaba0c7e71cfdfc6f35e67ab015d6f5b47766efcc0d090e3c2b8b934f34571737e15b1b11cf6afeb521c161aee613f1acac67c37cb9edca9233d850fd9f6601594d10b3db0cb23a0743d3ba32be0a62941bd7b9b3607284050b9322540d1c9d22688742d5789cd6523ff3b702f1d00afb0725e390e0c0b39a9f713c7777bb7e6e16948bb336191c505d0bb24ea8cb59f355603d5b9c4e6428c4eeeeeeeeeeeeeeee6ef7ee52c11604b49b4c4a51988a9cae1ad02895817868151f1393a1da4d1e942a33f1e0a5327b73ca7f4b39d7630539221ed66995ff0abe5c22d40a3e06e1169788aee0bbd643d6e550d0565d56cd15fcd68220a02e074505f0793ba79fe89de6dfa755488104a2d5116b89339c56372c531359843822b558dd502365d5597d542011c1cb6ab320030c2fab1d421192a6ac5e1325985859f1a6e3c40a8b305a309d50c5d282163cad78ab0183d50dfc9e942b3aae65aec10cc36878f9580a2cc90199bbd2b65d659b6f1a57021920342504e6b52702a36513d33624da6fe75c18d67257996f7540966d49fdc5b32d69da98366c3c8e01e2d4b02cdb92742e964b6049705759b6ed0acaedad0ab200d6861b0db1ff01b16a3fccb0ed655c8c2590a9704b09d13e7b22d913d9e772a033ac17eb774b155a09adf831ae7bd98624fbde381ce80ceba5d6d035feae7659903f9f7f4f67dbaeb01bbc5a0fb5200ea8f3b1d6602c0e7b33c6d8cdf36fc49864311c824741bd09d45175359f8e427f2f3e48fbb9c3f6f69aea17aa51d0b7fa61069711edb6e94191e5b1405da9fca8ecc531333f251d1cacda82eeb0ac6475441fdc649b942aef08591f587ef6467f007e7ae749ed6724b6902c25ac28f3c852621e594816d29111301a4db47b44f31129e19debfb11614e981658164c0bcc0973f2822d4ed74dfb8c988613da71d3d233aa7946459a7731ec19157e3f6e72a84c4bc645e6549b89322e9828d39269e989839b2b287fc7a3a27ad6e0581c8e504f77c152f936dd67c75fcd256452dac2d48310a8a0d2840a293a3efcde623fee875b61bbb7c3f8bd450cebf6168a9bbf6ffbb414034b92f28178bd1ee3777130b87f90145468019972ab85590fb7ebb10d09b6cb4207fffaf717d7b9e603aeac192fcd85fef2a55d625b1286b1c5cc178499dc5c7ef3753da0107ac0b677923c29be6f3400891bac0cf48686862cee6d8e950220566522444933f054186ae83a5f558580b4b521b11e87a419786a0dcd427cdc43a8f2abdd0d9583d054f91884991c0ab84a1f1a92ee495c1bf9804107e2403420fc30408e72ab63ebded817eac740608b03df8718a17c086386c90cbad45cc81e03f85dbb6440f9edd85ae1ea983f1fc2393909c447520ed89b2abfb3e632556891ac1fe35e09da3d162b4e389c63a3f6efd0210ee030fbf6ac6a1bb4a69f6d5c52a84e0f0d26b4e6e39519a6eb40dd2e68a9c6c04b17604e0656f1dbf1fc0c14aa00f5fd7bcf470d94ed1c2e28f3eab5a0f273bc545154a0fb486a96986b80c1407e1277f71b9208bdbbfb63bb2cfcb894524a296595da4481ee77b466a99febb22ceb03700304dddeef54dd4e4d3a3c7e0015bd271f94a81d8efa8e643085eae4a8767ba5bedabc3156384797c55ce11c4ce547fb1eee8e0f67b62111d230b02bff1e8eb9b2e9bc8711cb131a5275ce8b698ab1c2aaf7365dd0fd2ee6126ab6cac0de6396755dd7f5d6aeac27a2a727a22722a277cdc7b820ed67d0fef8b162e5a9e9c9f2321fe8e711eda7f547e6930e8fce7b7a6a6a7a7a2d1f08ab13e8620ec8fa79bd263921d85f3fe4faa0f9d607595c91bfa040af9fefc16073def33083788f8847b437de67f32797dab73e89d0eafac925115a61ff88b2175abd7f45d76b0f74bdf6fbda7cec88d04a061b3ae7fdb5113da2f72c6e9b8b24d3275f584bd6d21570c8fc9042498755efbd4ecadafab1ad6d5fecc75c47adf090cc6c06075f584bd6d2155666317298dc687b90aef127058456835e3417caa363b304fa3575fd564baeeb70b2a62e15449ca1c5c8c60abdb3ff833fb60b01a25f350f229d557f475363041a0a3fc619ea693e60f81f06657edc8c6c4473d56f6d4870e0593547a4733c2b82488629363c1d5916a7ea1cffb9e9fca05756035a830cfe84f2ff6e66fe20ebfbe796a221d2e003ff674a1b32748e43e12f53f177d55b2a723f32748eafe6a6a3daa7a645ce72096c7152cda584602f7fc875bde4829280e25f1f24533ff2534366b8c0aee63ff67ffcde8f4fffd73fe596ea4f412e2544bef54362fc20786d74f3979befca8d704558e56fd3057d8a42ccee04e6f23dae3afa514aefbdbfcaa0337ff3acdd24c95e689564e66fb894e46c6cb8234952760fc319c8d83506edd669e6e317e99dec673823dd3e15b9caa04149f083663efb2099bff9f742663e7ba0192e25df067240325c4a88cdbb0de72920ee6fc878f3664b4939976cf6e5c0ece8bc9cb83337bf2b8c03cafe888dccefcada645dcd27f533f35b816cb2c738a099b7e18ef4cfcc7a6d4f02c9dca4e61b59655b6a723f447e586e3487fab49410181820ed5373e681b29fe18e24cd3f426db823313ff342acf9cc10e4d5f917d895cdcb8d73a8abf9d87c0f5f36725e3fd95f6057191794343fc83ffb21335c50cf3c90ff0c97ba7ee6e252426e7ee687dcfc0c17940434f3361f44f3373fc4e6693c0d2e68e66d7e5772664bd130439057693c0d3ed7ffd0f8d40fcda72eb02b9a4f0db1686c453a2722d568ddbccdcbaff95dd16c29c9a584d03c8d1f32f3355c50cdcf3c0d2e2809a8e6673e88c6d3fcae6c6e6a68ccd0dc6cbbb2d9764563db55cdb62b9a6d57333f39a07e99979bac329b91ce899f45aac96cbba2dbae62b65dc16cbbd27c7e8a3c8176ebf47eb36c855abd4e91cd89efb471c61a33a1c83257b0c5e9629eaaaf7abbc6e81df9fb23b9d40ffc1450fc273fae17215911d448effccfc718ad0e1d3bd355a8cef187327fb521bc9a1ced1c954ee7f8f7d6d3399e1941bb6d02e21cfefe3ffe01b8a640fbd9631e37176c71ba77fdaefa8d30bfbfb8a0ec5fd076917e23cf1d495a0ee83dc61dc9fe71293ff256fc422bdffa79dbcea93963a9a7778a4c546abf865753f081b0a024ff207eec8392220774fdfb20ecf9b32db55c0a7242f8b107e2c738a0f7d7075d9c4ee7f4bfbfa040f9755eccf2b5d349edcfdfd57b22bd93dac905cdf916f641d65f5c4afeaeaedfd5afdc503567a0b826c289badcac4ba50b24163739c94d060e8e3b8e2603ad68c60cca5d0cd7920a071a39183818989bf19940d68d75ffb7613ec37e61b8f5e7d0bbfbb50cbbac29a3ac90e32230da3bdd6fc5f9913ba29a1bb0509dd304dad1dad3d6b6abb9edaa7b579473c0d0bf5aaa0baba536ea89670246f40a2b49c99a960908292a1047b5e351f9adba6d66a6ca3ddc508879cc3eb8d947b7437787114208a3e623caa2a218638c52f3216b3f168381413b57aaef3b57aafbd3a9beefdaa92e2ff1d2d3d33b7a474d3e1818547301b3f6713b8c72c27442b5b97e3109c68f3d8d7bf8ccbebaa0ef1d4a7c28adf5f0de86d17c3acbc7dc1bef9bf311b9e65240be82cf150ae48edcb0726e3be7861662662f7a275abe1a507c8b3b12ddff8a57e48ed00bec2a864bae308f8f5706a65b41e528b0ed9d132c55f8d7b50464bde48ea03aa781ae9fdc11da39edf3339b40f9dfca8ae15aaaf09f5c2de7e0e6d78429ed30daf1c38e263b8a76fc00895647dc51b4c3688711120c1235e4b81696b4a0a40522575a1d036881480ab6e59d2a735d0d8e42d1ef664e023679c7fab5b6ec71e14c6412795a94167ac683b9436e5975fdc2e7873063d5f5909bacbab814d7f1549e1821dc6cc6df9818c8c10c5e0f2f785d3dfdaeeb5d1093579417b7ee304eff6bdb3ae7cf77ede3e7980f83fd7b1c30d87bcb30f05d738d83c11f3acc389c69611bfc9edce531c6382bfc886d4dae8f51f6307ce9d715a5ece9eb92f2fa6795732908b91e5c2f6e29e7f00cb4c6ebbaae971c0abc460e86f9527edc704468c361decd530ceb6445994716d251089cf0020344f002971e244932c50c8eb0dcc0078b042731c8c2042433c0628911176ed0842c9644e10a46c0c1141f40e208273c9091440e52e880184da8020fb2683125cbd20e2c76e84118404ce185104470801f8418c38a25481184283d10aac1172b4d4c51650a27285ef8c1062c98b650220c1f8aaa90e20626a8e4404a1443b8c2088e82071150a1c4640a499a2ced7004142380428b0e9698f2e5065b5ee02622c8e1285f729840cf0fa1253a64a152451858c8c006ebc517507481c434052a94110591d5058902f0936e2b079ee6babbbbf67f77777777775152db6b17d5eeee8630a7db4b65de262958f85f4a132a7f8f14302a4b31a3f2cf2452aca852a668b292c42ce7a8bb4d8701be97857341230fa21138e82e92bc0934423943ca10574831d2a2a8767308528894a8f5c5ada0710a43349ae149a81423092d58a85c424c029db9225ea1d71448e8d4015c02bd6c503b9d4906145f52a206b5d3d1420923258ab6c02bece461150e9f0e02074b2c256cea24a1644e3a33fac5d2e544063a3c3c4e788a41c8408749691847d10b103a3c3c603cc5307698943a614a4402131d1e9e2d5b62951e2084107e511423133e4008210463a873742a3432a242f835506e39ea9c27037f3ac1ba4c494c9171c1b38205fc91ef3dac02959122f640e713dd855224bc8c1e80a89d0e157ad0a17653a70c265e6aa7530485a9cbc4048cda4d2230c1620b264b124842a973369c0d87274a1751b45466afcb14c5a976ef4b30a626b8d41ab82e4dcda3e19996e9767777e8eeeeeeee1edddd5d6a33b3b0abbb2f146665dd3d35098029f4d52ea6f2bfbdb173fd47e76c1307218c1c036977bb4ccfcc8942b9bbbb7b430899e6d5b8bbbbf7d280a10ac001c68ffa8311cb0f330e964b3cddada3ea9c7d8f3eac4b6f8c7477772784ee381c4295cdebdaddb1c85d46b4bb7f17dddd9d273a06bbbb6973b53dd39eb0563d093977777f177a63f77eeeee0bbf737777d80df92202babbaf8a67dddd17b3b4987e5d8df574ec92116257103e6584b3b960997fd65a4fc72e19217605e153466835170de6baba778081818989eb5346c805d286b3533d5eed9ed0b94c9f2e230cc2a78c904b84727a8432081823945c7c46c865faf42074268de6e34fd3353d1dbb6484d815844f19a1d55c6ab0d85d296160349f7e188f71d8973565bc2c270da78c997789e9a72ee3b02f6bca78594e1a4e1935ef223363592f5812a1478fd04235799a0bf2e7cb68414a40815018e1de90e942a3f9c0a7f11a8ff0bd9e305a10d90d234c4d8de6d35fe3341cf6654d192fcb49e65d6a6a349ff835d3c6615f968cf3b29c44296336bb3494d1c646f3e9b7f11b877d591996614e2ecb4943ccbbdcdc683efd378e72d8973565bc2c270da78c98774105200a2ee276785d17661d19194d2ccb326d3e220dca1bea3076e7da8be3233030303171afcdb29e655d31313114beb7ef3551f9b9bb3b5d9452196f5232e254e4a219d57cfc699c6939df1505fcdad0c9d91def8a6a75c457b2c23f60d395a6bfa29215c8299d616566668686797a477b4edaf6d976e9d0683eb355bd83bd4ef4efe46b7a4a8f01bc4fdb138355cc8595de8ef7c532809f91543ea33e2c95c3785a0f589b7b5ba270593093014083a10bab417104b0f7a7188679dccb256f3caa9e9ff8354b82828073f03b525bbf8be2085cdfbdfd461aced9dddddd6d7d77376318c7d339fdd6a6da7a3aa73b83f2861efb125fa26cb44dcb648484fa1e0f1249e071447d5c8ea240e9326bf7909a298a11eaa34b6b65bd0c29bd272857a818962a4c50949c898b191f6a3e71a776598540853f9130a2c25f2f20f5ef1a2cb5ab511ba700b5b3d1e1e0513b1e7552235e50fb514620a1f6ff13266abfea881c6abf0ed3114a147183dacc46157b5615965e948954040f5cf59f457491461001849a0365ada85d766484ea4e0492ea51a8eff4d0d0d090d12aaba98e63a3c3c1a3ba3b15b55b2cb25cb55b2d2b46f5da2d97ea366ab767547f48aabb10dd7ba284da3da41ff80651fdfd2745bd8a498821aa3f4fcf8f1f1a48a9fe448a28a1fa1b91a18bea6fc30cca187a227a52440328463c281ded509d69082654ffa7c43996a9065054673ac2a1fafb52143228f5819323547e9eeeeeeeeeee4d0fe08489cabf338bc1ee20c1e157f1897e357fffa176078773dc3bc7fd611c94f9df3bf1c730c290e513419e434e45dded3c3f113ea1dd3a81a008e778ffd00acc8338280988ffe2b67f3b07f613f1b9971c9a4dd7f770dc509d1323472fc9b391a0feef91cc8f8fc47af93f44b6d43c81a2681333c3328e6a64bebab71ace89ff1c01ebe3a37a07bb36edaf8dbeb5bd80f9ad9410ffeb87f45bdcc505250159df1f74bdbfaa88e782f7feb56075c0deb1fefa4e47edded0be2694880193e7a44a95aa11b037e25b1697fa89c9b237d43b441797fac1ae4ff1b5a538cbb8fda0edcb0af48ad8838f61a0c03c6b43de0a863b22b492f997bd2831d6f730f686de9095d5a183ce23558481e1782c99cd08dd7ab28d880c5acc7644e3bf21ce81244656f58ee59f9a8f7129f930914b4d0ec87a7f8bcbdefa21d8c37041d7636f69290903f343acd7ac87b13e08268b3c58159fa873324be90d754eece179433c08581df0c8126abec4883146eb6394578c7162588c31c63823d1d6a8a3c6b721cbe2c6f3d339f1afadc894d911f4d5c039e2c7978173c4aff1fd6675c08f6fb33a1c26e108f4738ebf8a23c0efff2828830dbdb33fcca57ea265fdb2153521bbe26fe9d7c5e9304fe7f85bdb4f91cef197aa2d5174647872272c03422bff22725eb53a60ea7b98a7d5a1a3be9f2cb450dfbfcf86a0aadeb1febde7e91fbd031ffb87aaeb8435bff7246f717a1fa3e5c538d5b7bbefe3d58db1d23bb4074cccdddcdcfcef41e1edfe803eaef31c300b6054286ae17b4adebea7c4e1c642ec2e97ed807619c5aca098158a216155b02a5815ac0a5625b36c5c1956a50a5605c5aa500dab42b12a2856659fd6f0f06c3f860ac00848741f8be96ef7f676d5db2d03e3767708a39c6fbbae2817f6364d9b6f8b8941d5a0dae503cabf6f9b99616666e6edbd574383868dcdb3e1e7ca6f9b3534de667343e3e6e6a68666e6e64686dedcdcc4dcc068373737d7164470790917f1005b76f73827f666b77bec18233f10ab30ec7b38d3b86cf3ac62d9c370ddab303f639432e6670ca5dbec2733e75fd7f53d2cf3349f2b66db3a3725311f631ed1be18c43c25ac8a3131316f6d7127ab26cc6b301dcd322e631516c57c15c37e625c17c33acd277546a973a3fb65cd694dcbadefe19e2f3fcac8cda3956fc118e36621b12ad6eeb7e0f73f4d4687ccd05b47e6d12c61a2ac87bb18505996654c947191690103e5349bb008abe0c7a72886ff6015bc8245d7a8c32a1c3c1855438513570b022b115c8965594c0bcce90a021683c5ac0f6a2c37ab1c46094536a18841aa5694bdb17f61198aba365b88babf46fb305e61d1ded8c762302af47dcceb5094fa80a2d6656834218cfa14287c9c601a341e0da881aa54696a6268683e36346c6c6c6a68666c6c64a88d8d4d8c0d8c666363830098ec097dcfbd870412eb72736ff8af6f0f558730c6e92f33c944e7cca2a08caa3fc644bb99614814c3320c8962598651a1fb99e6b37b63b54c7b0c89623306274615a3f9a851975594cac8cceceec6b87123cd0c8d0ca5a1a1a1a1010047cdc0de7bcc4fe3015daef3a744881790024002ba54a45ca9dcd3354018a39c969c662cb1bc740ba126c16da57394a05d2f750e4ba45e929a94429f6559969308ad299d344b91575a4e4b4e09c40ed697f8d44b1e9fa065c5e89665594134674da93475802d4e2795bcf0609e26f232adc761ae2e9ed8a48455f1771ead442cace228858d5f9605fe68a577a253e760e11cf189554ad81cd18c55598952e82a2af7d236d3eec82279248bae90f10a14872cd2d1b924128943e59743fc00fee8d43b7d848d5fbc6c51393a55a694eb402f01f91abd3cf50e6fce0c09688d4f313ec9ebe397ddb99e3f4a010aaa434918e79e8cb25ed69cc1d21649257905ebfce156387319e1dfc3703a0d20f40bbabb9bdbe12efc1e969c43d5edddddad6ac2deab4dd4dd0d218434ae7c0fed8d77771ffe6e53fbf16f432cb0c5f16ec80dbbdffbeeeeeeee77c53a94f8ddddddddf0bda764535bca6e2314143a87778cdede5dd456d83417eb79a3b4bc182a2e3a3c8de4a63a079d5805b53ce4821283162d7111abb849173935f7b62c6154d9a672c71e23a32804ef74932e2a3ac2d23b34eabaa505e98f3fa7e623a5848fe1106b7994524a21c74e36457e05a2d58105ef64d122467d3c8fcf784d50eb71539b7b624588263c4a7454d911abfa09ab9068d7474fac624e666f309544d017a3f4b0a9d30b2625ca3e86e9cda6367b94f2f706e82746d928118977fa09e7701f6533e326ce818a11baa564836e6da90a44be496899830075999470a8a8ba4c367842131856e8570c49c70ae71d1c9cf35c4707ac32d751991f51342d152d4db5d3f142a563455d8e0a267c11e58a2218154141c8881d90f0d284e9cb165456fd5bc51324ac76777712b2d4ed6a54c62982012aff4cf2c2b4041695ff6dd084aab60f926276cfa8fb13f8b1bbdc5440529425f83110d82f04765d0044a0359cc333d4e39a65c29ba0ccd6e5d77387fe7c7b2ffd217cee2fdfbd9bbce7fe98214377e8fd98882e02e57f4746cc44d5dbb9e6017def858c1b63dc8d33ce38777797a7f68cbda88d9106afb0e3d146c09605fa64e1429f6182b558d6f763118b115ad6af162f6ebe6f9d107c6c7651850ee7dcb6c6d94de29c33be94bef9d81a6bd4808f71a0d83a42092fcee276df77deaa7bb8bbc0f51921ecf75a4a7ff23dcebd97df0e39f0769ff1df942d23e7d0a17b119b61f9d044fae054f677520b12dffaa901916f499fd99373f93a7f970f35201e61e821c4ea58eab6acfc0de3fcf941fc16376406f5cf5d057d10ab54bd9302b29e1f687effe466bb849f92b246d1d0d0500b9e07e758b84c4947d51d477507c2317f2e23a438ce3eec28da51b4e3871d4618d602116486cf107677b7ec962d740b44cd2dc48dff69103aa5fcf98556d1f981fa99bf390e08fbfee68ef4631c5dd402619f7d06df79c706e7c0afa9999c0308f767bdc719e7ff408bc80002ceb1753e3ca2923658e5db561edd2ea95805b72c7e40875c044ea991888310be4d13ed5015cef8a939e517e99d0038c137c239f60d31216da950954108a78cdb0f28a6e4e85036380757a9f075a8a85d86ea1d7e188be411d84c18f43df7b06a7f86b78ec7bb99b9ae5b257538c608b9e5669781f1308f1eee6d0baeca3dc2c9f9def0f8effbadedadb08ddb1c98800aff7bbf6b4005b8daab47511656f58020b5ff6dd6069d050bd4e68db91818766909e81f87408a48909e74bbe43aee605813c90724a2dae96481c518638c170d38082144c17f513e0621b41ac628bda343cad4b0765b11a980054a2ba16fa8e44d7814b57488480000004000c3150020180c0c0744028160304d246dec03140010728e3c6e542e1608434992c328088218648c41c41880804164684a66562000f6b9ab16b659b36c9f47d4225eae66b9c2b5dda102d1ff52c0e819b86fb8e51afa8ff6abe5740060937732f4dca3750e67306d5e36d8fd224405512c023e5ebf9a183ead4db685d0a7d12e4b54fe01807ad47c083030d9b7a953acbfd5a39a924647fc1f78b35254f940dc6275aa45108d8f36f13c29a7f16b3ff0621d2951b82e0b81d0934ab3087506d418ca7da88efa58bcf066827935fc1b6e94b521e7b8cb95ceab8a53bf57853fac2db6a06908227a452644fc1fab448f159d39e95d3fd203f60d4fca60a41df79a545e57334264ceb511602b772161b8bfc4a2bd0a2d0376f0bf0ebd9c2ce23e67fc46ad782f77083ba79d839c1fc7fb34b6d6db80b74ef15e6ae6f9d52c9e6424ccb3f005bebc15ee13d6c979ad6e0848e45f84e2fc77c9d7d36cd11353a4e4ab12915d7a1b73b3a0649d975fb853f225dd5ab9ab8ae44bbe42567129ceff2748d45b158da90a117c2fb5ef7caf6e0b82c9dd38898ebc131fc317def1495060f40e95c109e2c9ddce69e75e50ea8d305b39d7629f45cb421e12ba8189898eaef84a3024df080bc50b654a75e1b59ae75381652a09d1bb0c432b684f1882b6fb0e9367e66d6ac0cd510b164148250a41320d638607511c46569f09e7ef84db58027c1087b0444ecd05847abab46795d3160215273704e6e6c91ab2bdb93aa0637ee870e1bbf5d957df66284671962f6c93372481bd5b6bdc2dd1caa3afa2bc119c547b29256077671f57b7ddd635e3b8b615b40715db6e9fe72ba3b4c15d42185f40d7fc7c221122001076eee6e787adbca3f69eb26cd78a405bb7d75dcbe17ea564825deeb2c2d0ac349f796c7498dfda5cdbfa212d941008990c92a374229337f7113034d845c10d8d2a0c4dd9c53cd8b6718c85df144074157894eb3c09433431999c7beb376812dfe54c5f7a808efdb644ca325d84aa2dcbb40245b7651810f88930f6bc100d8f5fef98c0cf893a3cd53cbe076c5e15bbbcfc0c804a11e0efcdc85fe8ae73ff4188ab28db7e504275aa6607e4e86bdbe1bd47fd7cf668843cf26351f4a2931edf761f7a18d58432c90cdf39679cf5c56ed16f96632a5c3177755ea0ad597de635864a225e932852f57bb01d6c3fad4db295c86e28b13e6f1789963a0370edd8e50ffd7ad29ee2b138bb7cd86ea3162b2b3d48ee2c70b6585a0fee68a5e343f714ba6c8a25eb992c1ec3caa430b27ad2d394376373afb441f10144e70f9ce387b52f5c5296c4e567b8be885dd9a74445153783872a35e3a8ba6a90482caf117205f688115993c9cb5ec283e1400b1f2128e87f5705013ce8b14beba863e06225318ce57112b4905f0dac02ecb9ea00c7891dd7f4abf45eefa2b4b21af738a32c69d4a95b1538c29a35b23cad6406a67427fe558d837a78d91ca1ef6e36a08190fe58d7f8639c1a7fb8468b07d0bdf516a6c5bd669b3952b8b8fbb09c4217053dc5a9b72e9a41b7dae5cc135da5979bfbd4574750f67b13fde53a35f1e70e041a88832c4a31e7569ce4ad0ae587033cb14f1744956ffee54f6a131f04dc3b5ec0cb460021c3431e55827e65472bf21c628f8ac0cb86dea8a7d78f15d845ed164d2c07a2267bcda6739d62e44bbdbeb46dfaec967c45017d79080ab09a13ae84150155a28c9e43d723c8ccb07fb1521d32a25b9cf0ab0bb4fb6fc954e82db02658324d3ab8e5319d101e16814b8e1c4331b18c04559dd964b7cdd6b9febc46c9516e7b5838ec8f54f150099e3bb0598828c9cae6826060b3a5a2d5b57464cda655811a8df96773d1663feb872795e9a070379213dd8673065ba70e455f11b82ad0d461436911d440f720d7dcf60772b8e9a1eb080552b1d3fbe754d9fa9f6826241f58caacbcc82d858f061d4508c98a017df9649be4951eb59dd97b72d0c74f460604b5be2aa1327fe7a0115be4eb4c63578b3335b4087775a3b13e428274c458a528c8ab3abe21df86e5db65d606b50fcb5eebb500a2ca704ebd89cfd0381bce5589871831f7bbf0cf295bf3a3741e74bf7a17ba92a88419c6a347ee1c17ed00f1b3cdac7b07fbfe4b91be529ecd188c504065b1b726511d923e3cf0ca2fc85d8e9899982ac6889494159c28e1c7a0f01ba56a45572c32eb917a4ed975190b51794916179614764da3434764e529c75a7d5167484c03fbc0095df22f53f2f6218dcaaf8cd49668f40852d484d6c8e2d3afc4470012441ae37d56cd03566db2586d31ae50356783e1b11fa09253b4a49e890f4d54593367287fd5d7e56c28e17a8cf8bb575f9e587c9629e5832a3090dfd91458c42ec43d31c1430bc6e9ec8209a33fcc7e7a9f23d57a3171cb66a51033415d0fd5430fce3e2ba50e47f88a834851a83273ac43afad2bee924a6e2919ee8ab373adc41e28a6476da9e73893be9e827d7ea481810bfd7144f1741fc358f5775178fc400da1dc954c4aaed823685dbd03bab1c8d2826ec0e40ef81a5ad719f7df1730d5aae4a0f465c551cb3ac599aa75545553945055f47f147da8a22be9eae900168fdbe132a54eef9834901faf061c78ce8eb1ac914a5f030e6faae2dc9f2ddab32a7a741f4fcacf632629b353d87b8fda4444badfd9b98b8179af5e10a4b33529875954c08983bffbaa9fbaecc66cc08f437339da85f0d0369c1d1e2dcf2ebadf2ff5de1854d124dab80e41a17c725e0299761df9145060a19d2980925fb229eb728d3f8e8140021b35e2d9706ba0a04cc7bf8881fec8452c734f9a9611b8cc1ccec8f2f7834a1f874f894d5a214677547144f6893e1a15a575dfbd0e0f23414c5a82252f864c06a42d94655302c1b6cd6726b1697276ae956f30f63802d64aaf4d5610ed3fbc30f2283b2dd34e23a9e524fc8fc084d5bde38ad0d9fde36dfddf5a600ff63e5aee7a3a7aa1d330a6debaa9ba2126b844b302c6ff61dbe718c5f937086c9eb945200447f6b696f2757f15c3f14786022c410b049dc634dca7ac61fed2e5f75ef67640d6fb10fd326e02fe7409d3ff58e30e0f30ff14a52009126f8b86955c78f096adaa2919aaf7b552c035ec10c9933f2be77fcd58f37976387e900515d29be95b21827a9a35f22edf8b2cf39a7b520f04d327d0fc87fed444a9bcc27bea7df4e509b03fffa77947fda1c3c7e772a44ea14e5b3e5f5bb3df911ff4ddf9989d800220654df9d40b0330e182971b29af96a256e62793d5613ee3dd0200601f2e350b2e230b45fec795a0af19d764c6f144d7ceda7b43551ecc4a2bede3a12a4ee431107f78c2799516d2437de5653df68821f4d9f4f88a733212999fdf9cde3d38516e9dd80708001ac1ecf77403c7ea17098441715b258dc7a55e5e161a66eb74b2e9fd22f6958aa56470030032fc1cf688e89708e00c45c38052f671527ecf0d80c6892f0abbc6bc54b3e23e49541ebff40e7040018415eccd2b5ad8264f51714519003ff43168130599a18c7b0d38a6836be2a02df9ae6b3e23ada878f43b863c99b2debc915092a900e5dd24147d88d9f00d467f2a40874482ba42a8623b89a04df366244a5202ee30309bf317ac7f9cfde82ff44480ecaa5c600231dcab21765b6240059b5094ec1dc0a747ab88c95d26cabb1d138a383ca306a18a237abf0632b157746a26e3d98116c0151177ff2f5055a50c9b88006f985d2e2ce9422c0542dd5292ba29759a0ea1f7d3ed07b72a1c6055252399f1168bf5b85b0f254d105e6c25bf01aae6f893f352a55a85c7240e678bbf724227f8b4517c8fbe339fe1f19d74cc95f471f1400fc4016e1b4cbadf4f90a322772a653b60c0f23ca70d506aa9c6758994b4b7fb54720ea9b1551d3f2a4d2b1234448d5190a4591912736dfa618bdbfd1e8890959a7e803ec6b65c0e5e3cf2fcc05c9e88e48ff2314001d0480e035e03c1f6b6a569f79607a0b26b7e117f0d0d0c4b7675d01812468ba1bf9f29f85593d8a0e16ff881b93eb98d2713f04f243c244f51f1d3a1d54ebc2714de295be91551d6bbfb17d227dec053979c22d711f88ce345819622d7724de26a4f9dd7a301366686b47a1cb55d89b6f83b039534cdd8ed7fe8ce5ce96e8ac28cf450511a8f5650da028965a0101b924819543aba45d5f20bde8d5c2d24d4672c0ec17373c6c5c91147c312aa73f42c4cd5870672e679d22546c22a273c22d8068f496a6fdf0a46561afd35e6b6e68096071800947a3f659401576cf3d6348dccca03ce4e8bfd559227af7f11f49e4c5ee567a8785c9230bd485a67a9f934f9f4cd7ff1293be96a298821a13c3d97672f3700be451165aef8b69990b9d93fffee4369de9d3780b640daea1860eda2b36ebbc66cd9044af7cefd0ae886ebb76d80178c9b67005943b3470a7493cca4cb0aef718da28a377623e8b361aa6e8569821eae0f34a2f15e25f11ea743ceedcc7121c46b4df3d400523bfce633f69d8cbbbfe9166350036932e6d15ee7bc6a137410c62508ef32d281650696a204ed689806f6961432621a7694a6a13df354a9df7b183eb4739d17fa27fb202f34cce1436ac8eccc7c9f619d931349e4276860f1337ed5d22501ab3909b343bd255e451246cbda9caf0f17b7498d29944a4e210a73fcd29fcb454f8abbe69163015f5f2b6961e04b412460055fa0374edbc15790c44fa9985d349c1f5385fc9341af83e25649205ce10f07d44ec43b381548f5986cf2a0cd72d58081abd7196d1bf278081505d6c845790230268782a3a8f90cb0237df42fe320d66fd30f1da08760be0f5a85670ee67b82d80bfaaeb184e7aa2dadaf19e427a2622b0d5348b0473893b943e026e7dd7fb2ffd54a28a391f5dc53986f3f27621ee9928b2da2aa424601e22ad9ca201b75a11f34ca96ea23330e29f543812b684679ad414ebc850165e7162944f15fdd91896885f1070fcc88247549f9c0023032b8e5e03e30e1c92ba500361eb1953de59cd81808398ec40bbd2a5b6a5b14b264c92e48c6c8fffa5323ecd8f6d44d9a798d891e0e6c3079960495425019ba77b705b039851c7be76088d96e12e4a190c57e6cf927e3ab40a7a85d8fb16cf53e8d7f07c5df775d3e369b8fc017815c7d21d8e0e7987ed7f0fb1e53448f039e5c241ba729780d23de5fe2b6b7787bd00ba449e2b36a8200c3c975a4b18d5d13eed6797c79ad51cd1c705e9c2ae345e2416c8be720280d4aab73cd3676cef4583f23aa3515c334e01beb013be9953b0f278e0658e729a5a48b8893de7956469186f59b375204d5c4cf4b341ca7af01927c73dd998629cb92183f0de830749ff8378c2efdb3acc63d279087b100ea420aa7ed4780848b642a17261cbfe1fdf34c6aa4e1cc5868d7499e031dc304443155e8518a4b9e0645743d5df964154abae9226ee3a0f5a4b998be65a448419d1ce185aec5c3c6a06df648621dd53bd1241cb2baf135a8e3a6099905ace7d0eaee00674006b000daa94d33a29a99a1ed24552eedc056c5575422a2749f09807664c162b243a95205fd50615efb7e06902bfa4f03fe03a8765630a18d4a7751381e3907a695439af285b139dbd5f0d2e0283ec87c2e7c38a8ed59774a7ab7aeedd6bc46e29196b75e01a32a34bb7dac738416407dee158f8279ec2fd75e54a0f006e35fd03a936695e13cbcc66543708d90f931b6d2fe0c17d5afe65af84f48344bcd8d1d597796aebad0bcac9fd9ef30401ece144fb6e083b13cb32e674cd35ac74ac08ef9384332912f542c8ac50d77030319cb6dfdeb03bb44bab6263c267a2cd1a9255c521237f05296de023bc29e1b7a5382d8400aecf6d20d7be4911102197aa62f5da51be9c0442f64a49f6a040b0b82c028dd584d9a1804187d0bac6dc2bbeebfd4d6abb12b4d8e28b2ded5f0f56f9229fb305422a3086c970e8ee9a50e29f237baf13ce045b00f91a98284220b8c659c444da0b30e1e3c488531889c9093d07c0c94022822b08a34f36b5975ffa10e6dbfb61bd8711857f0e2e5cef5aee1226f1a85d94982e1d56c6d6cfcbd8661e875cec358152344d66fb02a467e8f86eb30ec66a1af9c66602a4268124a7eb7db17b5b9a9f00c41b112fe20ca99a14974fd606828c5af0c4c23012b6162808dbb03d514e0522bdf117abad461676769b51b2162c4ed76a5edd34ac7b97d651250c4ee6db603ef9692c07cad1aa2385d9669822d2d16701632806fb1004ef79e0c6cb1305dc1aee2206382d61381d08d54475f223282d73f750804f86dbb006cab3a94429acee7438dc6ab442cc7f75d5a87d55928842481a3b407261ee7eb029376eb8e03f8ba2003b0376d98b3e9ebcefb1e385029aa73ee5b2951f0979d5eed6c7b5d30bf7f7376762d4f55ce02e2d4739d35a2d5ad8695a7007f83c6efa8f4a4d2c2af32ddaf86b633cd3651eae366a97f25cd9a82bd2985a111d0588f5dc188fee185618e749cc69d9c21a1dc60028e17da8c462823033585cda5fe0d9c012da371059185f582ab1999f957e752a58882530ef433bd083c464c123989da6463b480502e6c6e2310f02e95481aa6bfab461f882988ebf061cd2c8f7e57349e81708649aa0e43272b0bcc3e6b2be92eb6e31e723b7b97929442d50c65856ab381f5c10bb3da8a548602ccc060f3d67221b96e3d9c945500dd0b0f99a657e91f5ec0a7c7c8f9c16d4ee7a1adfb8a9ce24fa2cb1508434f792578ab215a67a5d0d6d1d3f4546f834284852e27a8f5b0f689907abf96e05ea5e42b3b295a2e79be132ad7d63d7043a0d032adb4303117158b27192ecc609dd64dce4bacd34817067baf5848bd88356818907dc0af34023b899a4c33001d571d5a262dc6ea7d1046b1ac3852d815284dd59852e089bc418cf95b27792becaff206d1288425a5e4a8b06e10a9c3dee3cc155c38ab51e3020c2702b7ab1dbf4c18399bf818e41f4de222a3fa644b58c290ec1dcb8ebd9e855eecd77bde43c650994b14490593327296dd2ea0e84ba33f5538ce3cead415e8c6cd4ff28a3376d91cfdea13e10009110834bfb6f1d048c441ff9cf975ad7f57c9d54540f3acad32925242d5968f3a294011ae30ec55186101128a99d3b529a269b5d7e597f04dc7adecdf22d517482525dc5614767a019d80ace5ff3c7d51793a78b6b83b376399686399a2f055319859713235b0bd611dcbbccec1d79afa25cac6318488596150b74c9f2ba8d013c4e76028d57c7af0148889b3624fdf716bc43c19c80e6a67cda0517637a76745b3693b958df30964cca0207fcb28f77a9b41e4bcfbe465181ad8ea5d5fe3676ea9273d3ab1c06718ee4cbad22d9b84a03e1167df1fbd483c0ec84109f5f603261085cb36c5cdd412515d72c54b40e4b768b7d82abb9908bfaec8e398c449c722b2bc79b8ec07d768e07ed8676c6a707d88b4f727a7135785e1edaff72af0735347a4d87a3cf237f3b0dd5c8990343abc2ec5ac2fe12463fb34e4a713233b813cdd6d959ab003047c98fbffc71790f3b4918046b1a582cc03c1ce74339313ee83448301e6f49348244a31c4377f85162827eb7fae31b88835dfa566a8edce08bce7eb13438b16c22d6672d8d55ef9b040c6346897c66ad2549074b4a850d329ad4f33ecba9c51c53b35338838b3be281a3dc4827531ce8708889f3083055db4f86c9b6ea399cb2807f26f11740240244e5460cc7a5031d36d8f2925e975736266602a3f28319a87160ee0c9b7cf5389cae11e2cc3b83327adbc00404aadf479a13d77a345cabcd42e78506722d6343ba7f2f1007bcbab585f7cd0c4e309bf62c73c617e4904448c46a18b0ca94553da1e2e12d183f9873054537c882da0efa97dae069f8f33733e3d7b3e0451ae63404b734f095a33a26d5b251ec8d41d323297246c98ca32773ca7f998f24c74caa20466ad8a1d3e97f952deb7e37f613a7130146327410be89eec23b21c8a00aef8f238861d7077ce45f096cb8dc71675d1550d3a0a8c61136ad284e4d1b6f82e134c33d8a706b72b973e7422ccb05a5f22a5c775ef2b042645c43ecd5db8eab2cb11473c1be1fa42966503182fdcfaf6f4a5300832fa8959fa4a191bc1388b5f4b6f64cc3381f32491e1bfa888fa7a07741056b42dfaeb5310e9ab713b430728a1b50cc88bcd8a28e05c198f05f1a246aa79802699cf7836f07550a6fc923a2aa24a573822528107110342780e5be18df047335c7355c1f8bd350a37c86e9806003b86a863aaf7e9267f5558b5bedea639077b21e50d3e1bd8956930171f3bff30065e409fcc65ab597809d78ed85233811057d3619e29caa66a1a4e5f59ac907d0b660121f9f642e612cb989cbf035bf465603806337cf539cb61111e7e22ffc0610af2fbcce7ac8540c86975444865d65d2000a90334855f80efc12addce9ef73cdb3a4ea5eb1d200060b6ea3dfbc9885c7c06b0a2e67217d915243c130ec1442c33f14371056a25411b2b85bbcc309b634cb177ecbb05a2900dc858a22a2151d8938e3d3af28c6228f7837a501d124a5a18eafe7c5a0f5c5508a693e7781066a6f9fa8c110b401210400563fdd342e386e01738d14b11b301c4e985cd28157a0d23451e1b3397e6d5c4aec011d51b29c59976708803b1ad49f7f284154086a791d61b788823385037c2c72a556e6623f43be55a32eae531d6b7101c75f9c057ab0205a7905a55b90729141d5e3cae47e71a2ae9b65e650f02033f40dbf5467799e93fa6cf15b3d2220850ab2b5f177025432944ed6ac93b54dd5369ee06099656da1323954cba9289392d5b8b1a77993d3ae1f8e23a7597bc2b73ee46ddc9f1c54d6000f4c9e8dc89a8e587f278be62a62281979ea0ccb5e309910b647c1a9c3639c596cddefcbe838e1f7a7d8ebd21b745ace5da443204ec4507a3ced24cc0b25bbf685c149f0c39ce05132cff5ba78b9f609a2df863ff480688e8cf137cf9cb739301dd406c66ba8ed46551680a98ad051d4d02e2979d24eff6f39b4c3f6070f142c72ae1e2fea7767b90510d9915c1a61604ed3ff1921d5ed1755372d2595adfc7d440d073b998cdf276ddfc6d475d7426ace91acfd5acf7342cf21da304600043c348a4a67a20557b221c218ff1e097513266e1229c5813cb82bc6ac5b1b9d8eab388612bf0c4f53435417b947567e3fe98b3602c9858b789428649f86213ccc2a2d5b342093eddd5967ee592ea0a75878701b360e812a408f2cb92c618119b1c662d90f1b4c4c21c593c3ca3c02705091edd1c2e8d1ccfa56bb5fcded167a34f80fc9a94d19d3d213fb253125b8409bb3aa49b02a8f9bb533f23a5d9edbcc728f314e92fdbbc8b9c667da81c9bc090ea84c1f1a17417c39aff8c9c43374319f63cc448ad5a2c7ec00ade60d89357080c72c65a609cd5bab6994f83a22dbb43e0ae1c54afae2cae9d5093b16c0a55ea1f63378ca3b9aca99dfa7600c0b4ded5f4c2b226b25879be7dbbb2f25d56adc814eac4ada44aed6026998bba1975822cba4bad48064fdcbd18656223b26626301fcec85c4635712b91da32a1bc8647cc7b9ed45a63c3d7c0da8e75056a196f75ffa4dc50c0eee4b3bbb304c14132a4b60f2ffb2484d743f69e3ea7749632de7a519bd4768eef6e1b6fc4e4f477fc8c292dfa1ec813dcb1bba20570360137bfd256550ac2666b8c1d6851dc4f035c5a6484aa548916e9c0641d7315e4f564cfdbb21e981578f020490b21a698bbe03b121060ab43b95fedfdef35e91a2c8a61f7c0b0ad7d51e29a073f1d4d822c147f6ce19c6dac9a5c5ab31a5c7ea762cccb53f0dca74f760203fb3e1b7efbd9a8a3a6ac87ccf8aa4a89fb935d7ad0489bb0a45eefe28723b81616b12bd5210c7b54d4ad415d803553767d58ba0dad996e406ba65b6085396fee00741e81112af995835b69c577d56a12fd8df2cd4dffb903adb1a22fe39436ffa1a350a8ebb89f1e5f8ad0e21ec7dbed95f827fb93303135ee1cb92282a6eb4e2bd32d5a31bb85564c6fc1587f16bc7298a2460fabc77c03c9fae38d6b862bd08813982d7d6b059f138eb88c0a9f8c71102139ae70e3af79019c0cabb5ab5edca704f23947358965108d06d3d75f7847a6a2d44f1991d72ddefcc5d3b898eac34c9c0541df0d87e3c39dbd02a3db62436ba69b00560750ede671f6138c8920b9136e291d561ee806d6ec1356a54dd96a3946d44fcc9dd9fb07e59e851ace99c66d8765203c4bb3ed2d8062c5df431f269fbf15d2d7757283a209f0e4c4430943577ff68242049437c9e7bb2df7dce4c8c7c5e8de945b7b7ed5e72b148f767e41df45902257c78d6a47527831f1af097305495bbb06deb37ff95f185b37d62416434483422789c5637854963e70a32d7b75c265de7b4346ccd9fc15420b0efec371427d8ce84be6fc445f04251e728af1fcdf15e356248b716e700cf83086d0365ca84f5d762fba110f18ec7ed00a4ee749bdfad898e15e5089990e990bdfb153e12b74b0ecf426d03e9e5644e829116dfa83ec5181af11c6c79ec805ddacf7fcb773eebb97154095c1c80080613b308a0e2a04f204e9527568c26f6800c87e9109cb0f28db5976a0dd7cab6dd95fd4337ec5e9611396270b86e9c5358f05eec213dc5892277cee54f611588c791b8a69e30993106f14470c086617075c9fda054acb6d7f8fdf1d83cfc78147a59e11fcb97de4c284659a05872de47c32e290a4e342207e2ef8f8f922132b1256d1307745d3c632904eb6a10135c8f7e320b5fde8aab8314275c96b2df61e31ac724e94711ff74324e355e5f6ef975dc00ba254538c500046e7d5a647f5e0f7ef2a8f132aa480efd21b5c8d2164c778d94d3ce5a02fd10ae32cc9364a695b4131a5334b0a8d45aabbc25e23265cd549ccbf05fdbde1d0d768edb44f63ec7829d0785b1d0fe3bb0d1922293c4e77b8b64cff338b7229e7601ada0d96c96f5839fae9f113f951699cee074fbdc954070da59fef3cf8a57087f4083fe238cccfbb92d2d61b16caad2c34930038d4298bffaa04b0b180b2769ef286205ead5985a1a6841291a1606051e785fb6c74d7ec88522818ffab0de361a82d5a47d485882a2361e87379298b64fb7e25733fcd24eeb4adf701c373791024766a99e8da967e614c300359c9f47159e96471fb8dbee83276f4f17b0addc9ecc866451d0d2c0d7d13beb67e851d9bc0a0789e317476b8a8f91a95460e53380f99d0e0551333c26a52a7318482d4a9f78a10ff449d735d4556a28b04a723419745c435323d0db2dfbc81261d3e5379309c2b22ecca602c9abb6fc9f015e9bf5502710859f1e1f0209afd94e5d6746790adaf770f6d42791077390859659e6c1b7724f7a7c868bde6694c0373485811851d94600dbd0af2facc9914f6ec030ffbc57706d5ed6ef0909fe60868be4c2a29d964be6f7bfd4b876f5f5871a66ebbd2849486e77ca4b56af3306d9d5eaebd2efbc14cb451b2b077b4838c9271011bd8542e4e4daf0ad9d0ba37aa634f5e39807daab2b5b093da573af6af41c4cfb5f95c70b8d3fe52609e00eb83349e8c72f2bbc3656d5c529abcdccaa6afbb1c2bedb66eb1418d05b81939981accea32267eb145652cac0b218199f1de98732082608f507ff255085ead56834ba71e3c21c47dcdf265387cf11d25e07cb77b6616a028a5807726ca7c0a00bb8f0a68ddc178559caa34c938118babff962a71c6c9c413fa5ced2ecd34b8374e94497ce345761c03f46bc20f60d0730cb0c4059975c9c49411bda4678686d369f6092e009f9459b3136ecbe92a5397ef60570342c93cd2085c701214836f1cad5fa0f55c99ce61d9bb70edb496fe545e232e64e9361757cf22d4406f0e2d2d1c6897d15940d82fa1718511539b706264d8f96c8c7e46a60a600e11583299a044d2d3d1d6943a5dbeb7a7f036b25513963cf754f55854d9e228ea0f83e1ccc4b58adb3f8c322ceb80d19b6196de86644e56307d17ce9c34d2386bba9f793487677aa7c05efbe1a418aa062598d5f46c903d8c0546dbadc8a339c911d9346f81f38ce5b612359949ca4392b5c83cee075880f379654a0ceb24a0cb9d115813d147d14032bf8356ec0916c5382e8abfcde412e61cc4943c9f263dd3c419836fcf8a94810578138d3d09e51ead28eba1838f8c5a1e3f7249a507468399d7d77143a6df139213c9dd89d15f9b07fd0961f83c6a85914d1b643c920fe2ead6a37965486b6b0e811403cb3f0747211313a10a0bf6213f13164bd9a429de56ccbb2ec4e4ad09df3741b7ef399059a9fc4d2534587aefc4464f1278919fa550fb6ca02a73d6f676a3b76c19ac64b9ede98503eb6a588b3d4b2f645057783a5d55692c4ce1e7ffaad5a109e62ee5bcb654b4b0d3fa746a631f2235b7928a4d0791f00a319d8d66d871bd1f291ce28f1235a992ac56abf1d3e6b2e4709fafe83b19568b59b9f78d4435ed0e884063e337e096bd01053373760ba59921fdc727088d556bffd69355575847aa3da1f67dd1f1cf18b602448fe2a51e8aaa155a775844ab64e75e31750253df1fce5a16470d49873b9cb0e6cf61a9695d4798fc85391af5c6752dc1ea056263ce8b99f63444506e9962389c84873c2a431573c9cd61148f4016ae8e02e4e35f4349a6f047c44bcecf7f0063fdf8abe1e98a93e3b82c250d33e69b7583e2f573c4bc0a1ba9c71e8574ca5a59f3a92bb1fb7e12da655353b2eed48d0078eec9e7f660b7d9071d7a2b9b6fd4286dd600d38213e838640c23673a3c009b8f43fda4a0b8ff6c3dd5ba331912f567449947c7e46c474caa0df973c8c19dbd994db44a804a3fdd9fadb7dc18087e5b777fb10638b77580be7de969ddde2d1eaa7a542b34943421132348ff88c61ff85e40f84b5014bfbae68412dedbbb1acdb3290c91f86c723208f0dd9a9c50041ce5ab436b446354352a028c0389f47fe21e0623c732ff54c2d06daa7933a099108299f34c68d900adfb20130d7406c67e62d2a6db1d08779c5391e22869ab07222acc8009134d9948a0a9f1e9a2adec27cc7689d2481193b74e5c2ab41eefc7ab44a0fbb22a72e6cdb38e9d4b6a4d3ffac13e38a0884294dbd6c0840068b0873e3aa14cf044f0e204c68078e5b7ce6d088b9dc5bcba2695b3b1a1f82d228b01e18158270e06f9f119a82fb44f0c083991bc80add162409c94c918e90291e60f3506c40d70a5c8e87c9433d52ec1810c884a978548140e6b9c08850bdfeaee322088ddd3bb7d676cdcf651accde545279d51c6ca3ba92ea9184c6225220441e123df925371b706c25710c2f7f4cf931b4c4d08712238c6e86b73d5133d0ddf2f766684e0fd402984d6ea6605f10149480e8d9f100a42e0fb10068483ff6315ecf336f2685a45280baea370e789394c9ed885207e949fa355fd0099d0fa93f3d11b718a1d9b9cb28a5c96fe51bae2c2e81f9e634f6739db87c549f13e18af1d8eb6617d89ace48dd905054222721be62cc3d13e2a5e58ebae69106a78e099ac3949eccf1109c5087ec2137455b555bc4811410479a2080fbc755505bfa1fa67a39ae2ebd715463235765595813647394c8360332495efad6b8cd99a8638a2422febb0f4427a1388c431ede344d26cd00eacfc32ab4e9e66e305abbed901997828a49c02216a564b751484eed7df6e44b2cfa35d99b81ea665293c423a4fe0e5a96417ab5c0e2a6a3a8425598e3b2166d4151ca6c955f2fd5a105e77f7306cda18dd4f48b7770f891265518e9ba5210751bfc2368bcf69b980913595a904a7a1d2365b578fdb277482e8c0afa7f0491db2cebcdddc52260e903d204935e29394703d0966a146cad44b7ddab8f62341e37520f065c30a925490a38804a5a4f1401abe24512db9c76326776a8b32e462f52a9f48b7ea613be13879031f9b0431169c2f848d11ae9c44bbe6549a263b57bbe3331a284390def77c4f9a4928e1bba2622830a10af9190d6c4583a8c34b12b9c5a188c344655d33278f9a188c8ed04d8d5f112760bdcb8a4329b861519f0cbaee49fc950864524cf18b4ab9cd09a931fc80667aff3f1aa594ba6283d6ca4f538d3ef549b0d2c8a29ad42a5f3f1f983b9829403f092289557dab0ccd5841da4a168121427c314a1422d1b4acc904ba188c7f15e63f8112005ae79308553c12ef9b1499acde109948b79808d2df746a5616e8e86445f62261085c6341c6c6f9500b6e5820be85f063b6fa6a582754604951c414dd50ffff047b10e4254df8f6160afc40e0d94c0d098b1073ba70493dca0d697b940ed2dc3a8862f03afd88395ca364d1828bb48b8d6f9dca1e36b152f39d253f9a934924855f0550f1244fc54ca3e21f8b14162392d6237cf225c34f5477ea868cc3278b546c1b67c419371a215733a26fac8415b37bda0ba369516a27a60ca6b9404d189146cd70ffb352dd44a9538d050a8e2f8515641d69984d62d730115166ee66142d5ab77b6a6c8b3b752179a28cc5631b5e2406435801abd95b43e3fd31a42ab8e3a9b67ca26640ef7b7e30aa5fe4e2a115f295ed7c724429573922f0f0442e4f08d4cbf054970035dff73aefe52830f0811d81fbc755bbf14f36b8dfb682c2a5277c3dd48d41048a4220420f9509e2edcab67ac9e103d9de01dbb6bcd2f2444eff830aa50de44bd3d945446ad09f10d0d276f9b1a06eb76a6cecd8933d73dca2fca1b2480304670a3a647bf7c21cb9e38b0eb1bb83addb90e008298fb7eaf0a26f65ea6d98539213047b41de171b1ad8356bc54a22df7e2dfe3f5ffda6ffa76a0f9928e3fb7c2820765de387b424846b10addce951f6618bf9f0714fcb051d3ce3454d43e64fadf494c52ec705cffe0e450d35c22007df72a65820a1613760340101f9f7639b125d0a3429ca9ff17bf437bfc4811b179156b490cf208a68987d02f4efe190acc0a31ef223e83f77961ef6287d6e629e07b9c9489f1604de6cce11329e99ee12e08248a2f08bd9ddc7483a26177f6a8977204487a9236d861e3719d623692346038b7784e3f7712651436c9fd2767324af8151c6e965501bb9a65f278813f90e56c05d356f3804dd8049bb59baa7c3f5df72735f5d2b1a1271c6ecfa95b1c4b6cd0c8c7e5ce9dd56d40bb49dcd715d7a257fbec7dea153917d4d66b9683919e7320d762c436b7dac9d32a4009beeec33d2b0a081ff6e161b3bdb5cc2f15603528e5167ad59990be5eb7ae184fb5604bb0c090fe154c325e2f01c8c1bc31a6e5cf2bb084e4b591215b95a2b16678930cd11a1a90b8c2eb537c5ddbdebbbe0d784deb20977f46686a2b2880744dd3eedea7abfc34d7a4209225cd55b5b9efe1458704436fa9ecb2c409f7130df886c5584bcb77b8ea6a9eecc271b111de36123a248546e33085459a00d919f0e49e682b633e2b1025913eadc954cd1153e4993aabe9b0cd42ce7e1cfaf99ef4b8e1a96b6ebd542d06dd854598d9060dda18604da9602d150dc75a2a840c46292a8df5bd192e410bff808e51c52cce56887ce98e39c43fe8e513921189202ea0f77303857fa4a284730275d41023bad76c73e948aba7f3da32d8fe27c245745386341c47851df1a02c7057fc837c34806fe3059c8bc5b4b910129b55b02ac1e2cb820b3c6352964850b7cb1b420dd0a69c162559d4eb3313597bd08b6d009f38e4d4afa82d25b3f6f85591c64b046319da21252763379ef0edcc5dfb9fe0fd3e32e43a94347778b04e9e1ccd6d608cc1be1c6796f2ec4c51c10668ef41642dbc061a700013c716571a3a1e113bc1405e9b816274b151ac3ca1b8b734ad9a268c89ded417788b8163db08c80c9f431c334d21d08d3253ed85a224c672ea8c3e510b18e3799cb35bde60f0bc30e273a15f030a3660db12ca1e6dd364c7058b8f272653d557df45e5aaff8f26eefbbf7cd003e5ece7b77f51e38d37976f6532ffe043320a3bf19a21c81d4052247e3e9c7bd53929e017b7baa2336406b2ee5f608527780abb3e0293c51e1b0fd072e51c1bc6d8bca903e657c6c63c5e21a309780e9f1da72ba56ddb87c34be4caeb5ae4cdd5a0f27d943cceaa17a2661bd21abba812db2b62f1c13b7af36fc09901b833fbe622f58d84f76daf2e12b8dd7b4a7f2cffd21ef1cbbedefbdd2784bd27b3fed61a9b4744d39dd65d1e4a52c3d019ca295349614cb08d49090d496bb43622a6c0e569d2bbab23a2005889e08352123d99836940ed9e67ee27c02c8385f8d5f20ee307d5397fd36dd220f32cff7294f5af22427e00fcacea8086e4b6d18e640283b97ab45b1b1c90bf1f9bbcb758ab1d68393c045492d03e8e7d2695e2a3bdddc1c4a7513220a7a9c538e38ff5fd21564e8815dcf87f0efd9042b465cf8484699648b07a500a69fad4f4d0751058b6443f16cfc56424bb73d15c7b9f8a0960f755a76f8eadfb2acdd7be21820d0d275cb0b223d34006ea6b44c342d01821edd09b1ddfe39496731d7b56f18ef19882e43d7f6ac7f8f11ca4cb23e50f52001df4368373bf4f2dc806d21d5f6c6a96334ba07aa9b5a84e3a8ba5e545ac1fa36a987cc6cae6be01e6a3658be4063a7de83231f29a3685ca351f896f413ade361578b1ff4c8fd288c3b3a490628cd2bcb645d6b514a93d1e604fec37700dd61712c69c148d34460439da9fc3a977f6684548191bbbcfd4b6bf5c52da71c38150f8e32b37ba8a0c3b417f81c0cf706ddf87ef7970f3a2492b7e23dbf70d3dd42950570583c431b55af3477445d137c770192027407d4f792fe191b3c33290c2376abdb9f0edc72b6956c2e4c55b2179ee1dac45a1a0baa182b6dd86185fc369850445dbdbfd0da930c5e18800b2dd0792613e0bdc1c1a9be5b674820491844b93d9c04f9dd1c4c3cdca8a00c0c09a0cfe87f3917f320a3ddcdc3bcca13e6c9c613e0413884ba93be141761ee6bc4419590e2e0152f3d6fcd03cd9706350ef0a035ae8b200c8d691decf151cf495b1dab40bd35abf559c080c40bd4b872255c1a26ea1e9e1076aa4c1065f5cef591251a59b5f80da6110f0323414d8dd54fc606cee39080563913a88164a7e8f00253c13e9e28fb1f21ec147e05dedf7c343e162f509ea7aeb166c7f124d495d8775ba051d0c3d869cb204e11e0d2175e7528cd631f695780b757844883fb0dd771c314113a69a1c764ce633069e1102a75dc302e3b532ea15d44cecf51e5a4c7250d6f713792377a235aabc6ef13744e697fcd011c5e86c237563daf90717086c837cf4af4904b96b79cf703b1691f0e00e6ff1f9afb4fa73978be6796f27d1e25fe09e7c3a18f7a5aa000c2abba10d67b4ff8a8d2188f6aca51479e5744a9a307cddb47a49a7f244e7d01f654fe8d62fec5ea5ebd3a48f4304785cdc9545d8e8f08b9ec5b11d4df9f9a5e456d38fd9dfd51bd1ce41531f1311712d1f3911f68c9da22808f34b1663435b2472f688d1ac744903b8ab08a1cf7f1222de5f603572368f34a310f12cfde8ae6490adb1e5c5d9d82a941a8c6bedc503ab47f038daa07040631ece7d92d766181bb9f593f454cae6e520bed8207cc3c00e91099d4190f7fe8cf77daa49be77ff8ddb115433fa084f64f6781104d0b288f0d2828c60226d1fc37041c7340435b96e208541441d7520ea208f22d5801db8b3e9e731d79cb8c4e9495bf9559360155805f51429f73a2e992cd6831d3924141b099b4ae28274b22187b0d374fd8e64f04fa876af540c745726a383ba96f56f2ae374eac416835ce60af14d83f8a6c72d1df3445827b6638fd87dc072b3def08de6eea40c0c2d978b98801d3e6d0a2807d4d3c562c43f4d4156e3726fe0592b3cf0f8a4692aa0ffd45c7d8510eadb396698f841f387f2c644870e69ee995892d65a859d537f4e33ae13b783f89a6bb60e0a402b6469ce5863086a2ae1ca1dd57a3ee094375f01f8103a07354081da8609b8360830ec8ee17ffb8b9416b392afc7b1f23520c77e8dd2712e714530223fd625a889fb856e5a897b07912e1719c1bc7e01734ce85af581b2e79ff72da6fc9ec1fe7cec33889804b0de08edd10f820095858ec230609a052f5a39e66382fbf0b70797b6dfee1c9c837e4408deef4e5770d142b04aa7f01acb73d8b295ed0d9f8cd550698d7f9e3a7b92fa5a29ab2042f8cd6366c62db9d889cce4ffe50f43e40f71646612098186588413949c3d44338be23a564ac186c4d7aba38f7b85e1bec14a8ef30434413ff17a15274439ade627003f81b62805d0f556444530e864ded00579bb102cb3fa9e744077ad642fa16191a6ce0c3b228949d7d6bdbf8611c57d247a9fff2de5cf7718b5a603cd7579de22bbbe46338d2b9e1a93621c3534210287ecb5418261044e1c7bae01a974c7878a0b3daa4b790ebd4542b5f520f191b900b36c33c623df55f0a0b51542dd9dbacfd16d3cc62119d5ea62550d42fcc319584396ba225684d2ad8a930376543b646ca93341b18b1c6d290f72811848fbccd7359c54168312f01f0b86467783c87c657101a3e1edb33a1f98468b13cc8ff0c1dc68b03f2e9472453a53053c82adc4b71c5003a3c73337111445aa973262629fe8e397052f1dd56ccd4f8bb3007c43963485a9659a6899638192e6fad9995c17f83dcc9e7882e5253e6fd4385d740d6457662d7e27695a48c3d85a62251a3d1a6e39a6e1cf743e0fe42bdfe211400fd610653761e5beeb63b478c95c66ae0f1281f6827d0470bfee0bc0425b2f861bb72f8ff14f7980471e260e7be1b79c358dd7125335ca35492f95419c2f9ca816d47135403431d0dfc039268ac197c2430ad8df92a80483b21360f95fb2e073347657ce34b675b0c995cf2b1a3dbc273141f9b5467635f4169df8adbc81a1ba56c2867fac94805da50a0c8a3e51f3322bc748d472a8f252852823851cbe784352c0670fa4801151a8241ffb316004d6bdeeffb61f8ce2acd9478b38e10058d434700d4698ea5de2f4de25d5fed002aae022e8fcab2399c2068eec083de0c74e2515684041ad70d581bb05ff876e8ba50a8013e416f5c9ab516c3ba160b357c0a747f37a8bf7c1a7a6af7c5b2011ecb6ef9b558c86f5e0e39fef982abc42e39f1c48bb95060bf551d845e5652b4c537e4fe4ce66a3f66d2f7a1928daef7536919877506487a7686beff9bb7d8f42a1481d4577e7c8f6893952956bf1a634ded107fb7584041a74a2d5b6093c61feb3fc242e0b4432c9cfde6833c6ce91feda8ed72b0c0e66dde19338c9974f5bb1b1e10a924db8c83afca27ea7a0af12a38b3cfab8fd5a71b5f2d538b9163997fb7825d44aa8bd29306fd31682fa35a6259e32053b98cbf18b6eec2139d7b10a8722e51e29b34a82208a034e6ce02fedacaae551739fdd60b1c12b13040df79e185fee9a7ebfca1cb2b42f2220d1daaefc0bb5d399104b0057f7ad37a7ad37518961e0a64ce007baf3baa913a1f806f034797329119b7120449a19cb25351cb1127fb1193c3610c16c907e2e8db0d5a29f8317572998f1f43f588affdbfc29755f351887a09597a4304fd50035172a884e4890454696a225ce5b35212f36c2492c8909c1921ba07a3e2a568db450691a30be3e09446680b930608b2008abec19c1993ca5ad0d485b30cd457ae712b39214ac701fe223c5a4ee6f44e0d072a96c5d26605c2c486b75dedd95a717466d6a74c065034bfc7af5094227e511dd5fb7daf1c7133189938cad85ebf4431baf6f89a157df87682d6043b0e9d87153d559f2286803f7ad0713257218be789a5ceeca52e360b329e807908e7e85773bb56775cab0ff40d2b00569217a97177a94b794b0f41ef5e6cc4d45f0e2010089818d7306cff060ba7c08d7916a1c8a392378031acdef8143d837080620a5e413ed02ca6dfa4615c947f62950036bd5b34e5786c77137423bebe0f52b6505b6f90076d508268aa32633af49eed97d522901cf08f2e9296b77a5ea40292e855cd1f66d27ec04e1eb46995b01ae9bf2fb7f8f02134c1191d1655bb6aba1b4acfcb29973a2b4eb143322820a063ce09881eeddc93f4db38cb34abf6484285b0986b4cb0c3d5d426ae1df8681996600707c901c5feb7f42298ddf922f8e24e77c5094e4fc10e35245d2a6a17408164c10e163db1b1ac2f1fd8d9a0e430051afdf3648e9ad125218c9154ffc697d2969a52756509bfcf624db03e94102ec247cc452fa93443e01e253805a8fa5e856a02ecf45ab117c5e1fa2b06d52310c343db8448e0cae11a3ddac51bac075cbf60255b71357b48aba766fea08f3791857793a450dcfab5771f0b26f09a01a07a0dc2d07de7157f57fd7697ce65d582e368795b371ef782edca79c85b4cc7ceadda86282ae4b3cfc8778fecefe31ad6b33720f0b1420128014318065616c7758a22136ccb8e44648494e6c13a98471bfc49dc634053c8ee73ca53ccb06853ba3c038a2f7d4566c0ddb8bd4569db1d9f4bf78f2e98fd9fae2251002733ae39c0bf159c1db5889d9023323350cd234b0dc51417847f69a20eb7d8d4f9dc5512b0f2652faa19dc6b7b5ac8e5e608dca556dd29b3643dc5371d778f9127aea0278dc89b0ba6dddcf9bfae0c8cdf7e87a8dcc11a0108491deb47fa455addc91fb72d04580842149ba9924452b82f31e36e9ccad0bf4c7ad3d09ed38694e6f5af69de4a3c25d8e3fccffca68bd7f3f9ebb60841a1b4ad4264ef07e7b21edcd43f4605c8f51301f942daa0f6c72fe7c4d3a06aa1b57d5b646695bf217a902231a4b9f5f799cfa0a4fcc7577a9823c4f097d12f0190e7029a9dee83dac39d3e5f73bd4b96f0e34624a297bcc3c3ca680a71c606f47df8a04ecf3847aedf10b9c72caad40c433528df78c3fa1335022b4ec1d411147505607eb3e39add05484c74fa7ddc6896bb1cd68c7ce8a519459000d9862ba0685d9fdb9f6d38cda44c4b380600a16de4b1227906f06da9401cb6914bac10f75f0593ee84b4ab82f2fcb17a4c421feff71e93270a9ac2b7dc6ee885e8ac46f1de8564b847df719ae77ecbd53525b8f282d3018f021c5e1c9b0a678d823493bae653400afb5b155b7e1736839a2057a6fbba20fd181558fed38103f7eacbfb57f06f55bfc2cc68a703f4b1a2ac935a6168de0f654d851e9ba7eb5a558ed1cc5750be8b56636c99a21805bf720c29c6c585a188be7b030c559aa517684427292eff7e9914d1182ea073663027a1f26f1566968197212439ad62362f83bb652a395c6e2104b4086b8a83cbc900b1d7c9292e5a0c3b3902284e977c69d6569e5a977442ce532c502b12452b16a5450da8465c9b0a18dff9a3aca94809c1545e4613e2988a42069686daf57b6d18eb42b9efd002a5a92a625e598f900f3495a5941021737edad3e44e15e024bfff62ab8a3c509126ef1b005da4797a87c5a1f304ea20b6b202e849959f57234bc2a4c0af0e2a4cce8ca1a2de986a90c6d290815ad5287e6e83b8265b59c1953110ca4b24d660d861eac11909bdf3fbd6052a8d33da7f7750c798e2ae5baf6ae68113638d9d8c66ba591393ecb772e8a2d48bc2c41151b3f70666d644f92804a2e8b6334e867a7454c02932bcdc80c9aa3a33b1a0b913fa2dc048175b517b9cfe5105749486823fc84dc756beea68e6785fd2a12a17318ddd2a18e1a622c94a9186c2c6c76e71b8caffcd4842e02776ac04a4054164a6be334336c4f1706edfb56b0812a323250c8296cd99109e6befce91e384ae41d7e404f910387dcd44de184029219c078c547fd8ad2bfd4c0a788ef94d0a05e86c5260c8537f1917de869c6541000b697e08f152904c88a18197142c3efaf3a05aa7da101963a184b5c1110ddf43c64ce88200b7e792d8d01d516b5897cb03b460479cfeff9e5e3654dbf00655457dfccfe541ac399cd71f40671a1857b1c64c704cc097722b33a15fa17befe43f5b129b406bfe90134fb15b72949971cd2683d5831c6c8f9e78186c7873421a99d16b1ebc08e94df94f594de00ef38b66943803b0b095d7bccb8bc42a6427c644a051be0d5dc42251a47fe146b66d4da006c63954b04ab1de99a1f40dfc21188de5d3d22475880756ac6607ba82908e53b5bf03544561f0400acbe67e18c3944d0867660b3ae0289d76fa69d2c464181c36fff6c0b8f90d0b931928943e2f4113e872044d5014752ec914199f97a2d3c1eeedc50714348152d4154948a82bc94e00eecfcd31a5c043ee3c5b9a8d02cea739b77134e3298637dc0fb642a7c5a313d02706f2be9c1b3dd4037d71ae0eaa293a3e5dcc1d6c4a3a6515c9490fc929035159c9b3cb28e0260d275517eb0d7d2559cdaf815091b6e69f88111391f3791befff3aa1246122c0e7c5fd442e721f650056211d4f623c575d5cd459149a91d8ab95c3f1fbbebb49e01bfe0332dd4fbf3b54b50c8749b0bcdb838af26709cb6f4cefd99bc10ec42012d93e1e0eec9da70673a564185f0704f077fc141eabbfc44a9984f4837242f412dbd4de37c2446206f04dfcd69441a74432a8d65642b1a6d581e5def9f08a81db0e5acd7b8d49e8385d7c4cef6f3cab31ea0832abdea448a13c50abfe97e6546967cf1af0a404ec94e39fd819a0d7a76993bf3d280966b0c05b5bcefedf4219ab73a9e70ffe0bba67500d13e7b51e3a702cd2f7265d3c45c1f0872fd7e3d5d578a4eff020f01278d08153e0b1ccfc0d11cdbed92ab3fd3458140c8789f012587e41746c2bd394f44e125948e0fca1ef7c89dae13b509b491df8cd97bf29d40c2f3757f58900cd5e79c6d371da9b5beb72e28857ab142818e2be67142c90eae031323a28b0768ce9673c2cc256633a4947bef4b6be777c5c05e3fc66d3366196e4f8716e88a7f5b69bb5707da2b686d7c5cf909820bde2e174b4e015201623e0d882218b8b9cc68272f14c3317d1ce309c98cf6b5cd3e09697bbf0e3a12013739e4e2bd54260bf63636a766e51e43127416b3711c2eddf1a747dff01065582e87ab77592362cc240365aaa099f7a4cfbe0f96890b473c80f1d02c5e03e408c8a15b1b72356189d5260f588854287408c6996e3068522875f863f3cf817eaeef52a8649237dc3ce9e60c603a5b2a1ef3bf1614c60c16d58e28c09d8e095000a08cab67f762e82300a083a198108cc6b02267d0024006a3d22d2e2db4b48f3b1eb767e7cf8a21c6f97271b019b428cb1671f7cdf404d174983411179986c8fe92ffb1ec871e9308188b33686606835626d6d63216f168ce07af219285acf87bddb371f2e042a52185433d209dbd9b063ed16eb3b7155dfcae5adacfba3ff427dc9a753330c94515f8caf554c70b5bef74dbd7c3a13e8c9eb1b5f830d4a37d465716905fb2ce4bcf3dbd7ad50a5c1ae67019215136037d3aef3ec8d9ae90ac92111e01b7f33d89c5d684cdf081c8417f64f4835d159b750700250458fb5bdeba18404ef78e7b6a52797d62ef478d8336662e8ff6c3317e27511941e6f2319214be19d58fc1333d26a386dbbeae525049f86dca5b3412884a0314b9a54222da582e0d8aec4db3f2012186caa0c41c192217649023361ae31076649517c9e9ddae6448e835228b879d93b9ac96c3a3344d08b6b10bb5f25d5100ba9099e370e4f7f986038be90f27ea9159c2418a4472c09f787a9816c340b7d7ca188a3cd8d0e4350a9433f90f0e85176608780d7b22957c72d211e2adb156b001ee5a472a8bc30091c48c7045c4e270f811f5816adc43b9850e5c0e2a734cca571a50be32d6eef5390e25c4522bbc4d1db105e3095fc0ae294c3e11d966d71302ca1824fa07a327988613bc8280e252cf6349d7b0cdb1030c3457930b7aeaa52317ec42773f444b8141a28855ade2a0cbc38d79710a78c18674763615d124531400dca7835a008eb454ca92db3014f05be1aafb97606f2bcf636673640b71d2b4cb8b3e74d5fd980492b3082fea9adbcc8f81e72dd0b291fb739367081d1557077843485dca5606c60e1c03ce8c54c4651237310e07be0e085ed760626a388f768338dde80cf641458052f17ca6c902604d7672bc4a20697968046e788cf2a7769806b62855a8fd51a82f6a581406fa2a0e9120878bf10a8414db351fad2c0f04b62898183206020394ba75afd97010456300dd078005fd8719d0430a625be98063f9b405a60fe0d04b2a417235eea71175c50825e8a0cb760e63a139c8f1d1d41f7ebe45aacc8451b333b024fd8e204fa41af9a8f72caec58b8cc3a64cbd425bf153bac4960a3321d5def48b03a7626ad50187dc86980aacc24431f502ab8e14036d5387534361a8d6e47521953a7834bb2bf787ebddfc78cb904f760564565e8c13ef76a1f06eaeb2ebb9646fe53be31a86f4aa3de917928cc86072deba423b4366f1c34c75ee8940d9463a48373aba7d7af23f53516010b84080c36a204a4d2b26929e58a3c1aa4e933026d249c75b6f9326e447b40d0077d55d7ca934779caf749c6d4418fb8d8d6542a145f730e5dcc34857e871907e484f6079a301a055f6e1bb491828e697c447c8216d490c1f4cb335a51d03440829cfd28eafae164fd18e32a404d4735640323449eb44afcf138286f579dc55e06cc8313f42497a4d892519c4b76700c70f6cad128474e66bb9ef1f57834a837343c8626c25320be11125c25412058314901960f0b91fe9da4392276ebe5c2dda0de181a4e75d348fd1639889ecc807a83b6201909b465fae94576141b053804ea0d1dd99ad2c01f7b91c0d80f27e363827a23f0ba08ebd7ac61f2ef44f08dd202f142d9e1679a25113611de04f506c3b4bd6e70017761e098b4f47121b64a7526c4fdb44fb58fc73bcffdcc61f575aebe4e154feea25a46642f1fa5cb4977a254261d4544bdfabb37d140e7e8d2024285e2ed98e0e97b63c2be364f28859ee560fd13b162ba2140f5a7f2c286dce176b59981c59c74227c0f4c4d5ed5a0c4ac4f1025713c89cbe46b55467378f56b275b9f059e0d255f1b82686b317e49689ee93b7ca013e029ef9f5fa9571fc09f4127fc8c651b85eb1170164a88c19e451d9d14dbd138dd6becc9396568f43f4d223f395af8d3589af81654bbe1a4a8c60249d6c266166cb86fa297b3e28383deab0cdeed6fc0480ce1c9907cd111a40aae2ae36869ae4e5a83d79bac662c80c3cf1b011de2e96869f0fbfb42c7f62c8d8d9c7eb09df751753eeea241d65afb4cd9c63e2dca47dbdd47556c897dc6e4f70e1be28c3e2bc4f4feafb0275bceab11af9b33e8a869f343977c808fdac8caf71913ed2fa47f2ed019e665a5dad90a39d2140ca9f1e12f0c62399305ce186f46e61db226dc34b833d3ccc0cb9f2a52e14c85bdd4e1e1feace288fa3c1a360d11e50cdd932fdc75b594c63bb91ed07d2a7fe6de4c2f8be2e52de03a9cc7b2a270033606fa7f8defde337f4073f7bb373cca02a3c26705aaf91b8aba36e8de9b89a7ffd985315a3f4a98e6605de98fd8d11ab42781ea822d2a8e17903827a5304e67d9bf3711e204a0af81fa79ca691e79dc27dd6909f9617584801858c6fb132036061243906f12a57a0fb7fa90773a6c22b88cd7b78a800320e691c3d02b9ae00c4be75c481e6b0075d68f38c90130a3d3302b1caf79b4aa5d70302189f2a8848917162bc33d2bd868677b8c0349c704044169160a350ff7862838248c6d7a065cd38301a53b48ce5ad2996a5df5316bcbe3235a6ae20169997db02a7fbd965deed9c99681b9013b56ea6a05ad42e0791f92374858a573099aa97d734491fa305145fda3bb99ee368340ba38a5e3c6055504a1daf24cb5a7789aa2f1b425d7a1ee6e263551babf062dd63807fb80848ba7da557e10f71529d827d8c0491b6ccb90426ab83cb50e1e0e49d2ccb7a3ad99f4059fdb6b14b43c03bf3422bf10c841152774425d9d0d6e17020e680644f6ac66ae28d46b549a67e24c1147511059d35b6adc7a1602911f6c3af4afde25ff27b1b70ad9714b7b601bc14b5df09d1d9ef28482ef7c7fdf54b20cefd599906d8dce0ef4836f7acb0258d9f331a52216d40b1e69086c1bf520c7ba9fb8ff31850a32310334819c7c1c270495ec899227b66314ac7f1918011088e22b0740f10763c1e454c4b6ced5f9568606f744c7339382403f4706c7f01790777ddae32ff1ac2a1dbeec8e01e877a2b82a6a1d60d4f4fdc1606ed74e6e13011721275bead1ba9e2bac544160eaa7e5d12757c9a4b6d5c95e8da948a74e4fa86fa5fda5e94514ede3d4260442dbba5dec5a20aaca6613953e143e4ced3af1b3368110d1bd5d0209d4698cde32d00848c5cc7bf1e618937995b3b34ed747056904212fbe8f095332c7151f06a529b1ff5f88f39bc54b91902ce5fd9df5b04305159f7eecd4f2c652c5a4ff971c607309acf3aead1046d294ec2d0f81373b44328159c0378f5d27eac71fd3ecdc1d0fdda6447b857899f2e28cfef04172995a454815707171282fd369a1b6ce6c4407b6ff4d00f541f764756025798192774b7548fe4ad0b1fd9e8c017dd481df505f8c62c0e31ad3f4b539514884abc3257424a82aa7a9023182194a105c9405bcf33c8e6c689994a7769fc6f5ee4977b632b0e2be4388b73a287e690ca9171f45e0b7aee0a150376b78c1050d25f57ec2ca7c79b9a385ad86985061a30ba6715a2f57520136396285472b96ea9436c99ee7eaf10b2a1f46c1d395a44dc110ecc1e5075d060ff03164ae2e032791ff553920028402cd64c69eddc22fee60ace2dcf4c0acb043f6e5180fadc08bd2b48d16d96c22a76e2d342f8946b788bc592e4bd7b2a158494bc467f279c201a13fe8eff5ada1828d2b7191bc8abd337f7a82817f5480df261fa122f24fe354cac9a950922fbeaf62d10820109254fd78b38712860ff05d7a66cef7bd23aa56c4ebee5e79ee04254778299cd7b1ceed0c1850559c737d34f93e07bf0ec594d11c27dd700a366412252a2ac6d1506c058e161438404b85747bc507eb687936536eb062165dc12c8a514b72192b9a785487db47be841a370056026f893d4abc376d7ab3c003edbf3f04478007ff31deb9757d29746bb4c9f831801b06501785121a6db3fbc7ad8eaa2e534c68ff95cb8aec77b3316ae3c6fb572bc6de344a2143214788c6fcd551931933f4545b94ccc0fbdc6f95e45dc562cdfbfd27947e4a26d09577c0ba7701301130902bb0523aa1fb3a59f130ece9bdc9351fe24241b1b17df62d85b960078e5d931adf8b0360f8b907e5cb191b229983120ba0b1e8531b668044edaf7ab187c5c64ef32dbc63e22f7e33952d57f71caf5b1be060581826246906ddf489e36a0b18303fa2a613fc4dd81c6e53ec2509a2afbea80a990fa024ce865a00091c4041d9f10785e8616eb702d2a4fb017af44703060249810a17e035d63a3eff6b886e51ba22e0c08b915bf180a22008810492b30ba98bfc353001d1ec6d1d90bd65b726761c4211bd6bab04ca861506ec903cb7ef47ad7c0660403ca903364c13a093d946c700f4cb5526b44f665892a2919b8c0e52224f3b4375007d8d26380fbb44985c2099b6d7c0ddf68b4a3f53c0389bad385902601d70ddd11a16c01ed64c962c38f52dbb1be0713286d8cd8963be7ac1160fe5b91afb196ab3cfed4d8e6e660880091c1997e46534b23ce83732e89b766dfc9dcd1b35113c1271e5ca198e31657428d9527797c42ea7997704e5fb6216a018dc4927b582f1ee5ddf9ddd98da6314fbfdb938119fb308534c96b1f9fdc600223fd8a998f717c831d9f4dc82ac504b028bc4f1031c1c94a19167b6bfaf035a0a659dc9f0b0b08117a795afeea0269e041fb1bf8b5ac76241fb437b9daac5c65e02dfcd96edb10a18bcebffaa327abfc1ad9ec5af84359df393a689460e8a02369d319a5e98bea56f52497d10479bf61612ba915c33313e9619e3fd102cc4eb7226789489c632a6d2b285dd8147202d73f69fe7c84461dcf7c78033e575c62bc099c6636902195554eb8be1a1318cea2514a3bf2fdc47ffcff407118001806d90b2152a5a6e4883a749b4550e50f1a8f25fe40ea37ac53974774eb3aaed80b4c3e02e4bbf5f963141e781a674c2670f052a9a77e781be4b1ea02c3b6c5a13183c79c32af8a24d969b39e8cfa476d1aaf3a02c9d0408713925620abe9d6d8ef54b15d8febad54804a0dffee24c8c37864cc39cb68d7fbe385a6cc1c9dd809d9b52d10ad431d6c3d6e7061c0018f9ff7ea7fe3f92e24a40cb7f17fc993ac029e7802553c4cd3739d359430acf724145066b7336a8c69fa001fbfa3ce096ae20d28e628758c455b34e4e2bd73e901a7f1f81b1c2545de697183158f3c33403940dc7be1011f0caca055495ac83643c66591abafc46c2450bf1c614e81b91f6f4866fb935539b0d5eb2932e3310f4147bbcf16379528aa3197ccc9a8d81dde1a641da5bf19aa001086166839bbf05c0be9627012cb60479bd4cebca742d3de90a727795819caf4d9020e7478f6a16dee2911af4b65e12f95ef4eab501fd9147a0ae9a1990604cb4ede336a6878fb23b3807aa0b8035d6007141f57d9d967b438f8d0562373cad09dd4596c2ff3eaf5733e86eef184ce4f4fd614121de107c4a04fa2a5fa25c3052b29a0ea96988f0aaeab59c767813914be42438bdcd758aceb8e25e8057babca8525cc9163326c3be10901065ce1fcc0be6de04541981a0762f4a4df9fca13de7e69ccd1a5043452e1d261196b76e4242dade726fb9b7943249199209550a570af3c9943d674f74007b228427565e66a5fed38fb88eba7d84238c03cec1e7f4c4fe1402535a81ac6bf16c50b9bb4f18961e17f096ef60b773ceededf6759b5082b77c04c13cae76c6b92ac15bbea3ce50b547d0ca9ebf6dd3d6fabe835df538b3ba1141dd406653a6ac37de9ab5566b6bad557efd1cf235e34366dd204fcc059539f45fde720f801b88f637de721ae2f096fc74c69cb54af5782fd5e8cc89d45d1b50ebd75df5ea843a7a00dc40e8cf4f874efa33de5a6285b8b7e52da73f479ead697aa45f5fd4e579fb83b5d69714d9f3560b05da78dfc3d1db5e77a872177d6e661516f9054b1eeb7620aeb33dde3649051054c0606b5f3508ccf7af5b0b57283890f9fe3e03939ca13327c4dafbf17e3fe6d28f60f77786bcbadfb3ef7837cd39e7d0df5b38a4ee1c6fd1e734c9e921f38487c15cfbba7bf68f93d53946da0471179d3e2494b1e98f2e19844d7f0c377d109c397eaada8bb1204a0e3944c9c1c4441ec1edf9de1ed685d509da5b4d9b9053b5a7daf2d3e9e12dff11043510fc07ad066dad5aa52700b17253cd449e9f243731e5d0dbdc835ee3f89bff791257fcf5d3c114df8d7679df10487dabdd49a98b167fc6efba358943844e1af2dcf7fd733c070db5b737c7dcc1a69b45daf4af0a9a98437324395a62ceb99adfb3a7cfdca051ad69377f33c31a02438b25f2bcb92107a657cef4f1d7101c79bc2ecc31e4b9e9fc72a8bc156a9c76b5fa346f1c02a15fb3aa765da71fdb4f879bdcecbcde60b6fdc390ad9a3476a0f4558f42f68f3df56865c89387b7260f6ff9671cdeca21772feb6781f68863496168d2e8be7759e4ee471ccbe11b47f6318f19c766d0f6f7c2916eacc7ac8325da5dc8d92d5946b4e76f34b54d5993bd2571a88de9b74dd3a45c9d40e9f76c399fce784bb3407bb45b325090f6b33d874cdfbf1c6e0a732914dafe3da84d965157d621a564fbfbd0f6c731a45d750692345964fa238edd196fcdece938e4a9a3c636cdbaa3d8f63ce3ca58821f9ba4acb57addfbd79fa1c437bc9a86e763bdd2e653ea8fb710c8f6570322f70db70f6c1b6b20dbcb5db73967cf7882b779ef791ef62e7ef95d2c67dedd36bd42616ffa7a6bb3a9dbfd6ddb3e08b8e7d4ab7bff6e5be564d749aed6d72ef7e9543dbdaad1baddbb69154f2c03fb19c9abed7bf6a6c729dfb4baba67e37bbf7bee3bed81fb1c8757f3ef5f8e0b3d49338520da315b4a11e268eb901b48908dd31ed8fe6ef5d3b9bfe5700891ba83f6dcf38a984fe9a54d03b2e9d509577edb7a12477a92c67acd58c4045b3bc1619b5e6d9ab6b52b71e4d6367d258da657da5b4de7f0bdb256e7a05bce1c3111b45f5b5299256d87b2ebac68ff9654a260d99e497be138f7e8fdc9fecc05dcdffefb2bab2e5dad7df7a1d06deed3c13d7e2cbd4606eed3d954e0e76dabbe99c6bab5d8f62e9e3f46a06cdcc96dedd67dfdeb35577bed9300de9d9e32cc11b4e7fcb9ef3af76dee1caaa3c9008b7b27c8468a205920b8b92a676da3dd73ef33fe1ee5ee163aa5ba5a4c2da5b37648bcaf64ca27c902c16c42b92a67532955af466f1848a80d5dd2545dfa3e144a80559fe7e15a91b8fc4042ae56932c10dc5c95f3dd7cc65dfe318dd61274d452da5959a94b292757ad68484768886d2f1cd1b6c4362448b421c4361d90f0408c239a16b91d914872f09ceeee3e5560411f6a9984bc254d4da6bb27a1b4566b9b646db6dd9bb96cadb5d65a5b35500bb1e74dcffe04f610942d47dc44b69f436d378471c5983a9e58be94c61e98d3b67adcc0ae7f25cd4bd3a64ee9a4549e76695b3d3e60978ab6ec8cd42a652d5577edf3633aa59bea2a69fc279622641d39f4d8da55d2d05a04a967a49d5ea25f0e7ac35beeaaae5739ee7e59639c1999a680fdb129051526dd64adb5569fb744dfc318f6c7f5f5a2f35dabda07e619a6146ea86b3eaed4ea681bb26a8f377be21ee4f874f8953492663e36e5983b3e2eb870a94b4e1da1a4991f4a9acbe5f0367c3f1dadf1b4e5a7638e3d7bfb74e49c02f7d8f4a9d0559daf3ef6dcf33ccf9bf296eea7e3eadbc9d975254d5bdd8540bb81a5ee636b6fa51950c579f6b7a7ff853321cb5df331f7f531e6b8f7b8af15ccb1bde6bf05696dff5a6d8c952d9e6cffe9d43da75824f7361c4bd8f6f42309a81f5da91f43d58f31a5cfc39ff5a7344a9f34cee1dc9ff3673d82592b8515871c47df8e31414ab0b49abc16317b8e7b6b1f7c810dea7e7a36466d4cda0ad9216fbd40d6d82464cbdfb9b74243fe3689b7425f88b11eed73a3fdaabd95cd259888626573092696b0b3ceeb0e3ea7cf0fccacfd6690c7f9dacfdfe8cf8eee1364165260b0f4ce66179ee9e70e47d5b6777b7bd6606ffdd463e83d17d28d658d3692bd37fdfc74e6f5a6731d87d3e1d297bb9d4b1fee4ccfe170efdf499ceefdafc4f9de9f9338f8ddf4a5f71edf4fc733e9d2dcd8e76683a8ec7cdf272040072b3cd8f4354d69d6b610f1802823882724c3004aed994a340084171df0b1a9910e609ea23d6590fd65102adbd302ee3210fc1184c8fb462fe528a61efde8845117116dcf5048081ec973c38478cd78f3e9f1a5610fbb423c36a7784ccad890b989cc292656d7755d6b77afddddb460bb8a74f9bb096ec67881c145162d2b5a52b49e48d2f8a38af23861b17d6fce3053cce4b2cfb92b55546144155518319376785c800ae9318390a9a595b687d700cd2475c8dc179849762875fdcc6bea205dfe42803f6c7f4d175f13288c3cce59d29c514ae99c794cf00bc17a265d2637bad9bebbd318eb17f2dcddfbd73a373937c7cdf6e98492227b40936d20a2fc9b258f5d5724716ca8bd4c07097bde1f4f26d83e6ab2d79e7a359334fe39fec9208fabd916006c7b572469fcbba2ed43e61e57b3edbf7937646404ed7f6fedfb2d079de3d9538f37fc9ffc33def24d9bfa8637360d4d784d209fb12ad6b63668efa036426852065f0ba1542681a00379cb1f8bcc22ba3ecd3001b98fdddeecd9dab37bda6ddba34ea6d297779020dbbe04f2d466e64220f52b0e5eec9d1d3868d9fe0fc0a255155b39e7aca5a9805d49d8d515c69ca69492e666736fd2e3cd1eefebf57977dfabaf3643952eb2d852b646126c8d85a3bbc5f6aa1ff2e8bda88d7ca75c38f7b6d1fad994de4313dce526746f84fab4f6b1b63d7b0bb97024b239e9ad6dbb3d9b0b8378fbea294368c3ea2eecb5063f769d9aa5770b026e09c36b532937994d944ab96d52cad774b56390d7964fa50f4d4c75aeb5d6ead7a71e6bd5128a5b6b10ec8220aa5d2905af977daa767517ac92fcf22791baab9655d62a65adb54a296bad351c822671f5e4a7e36e75d4beca9fb25a0d04222229b2212f6cd4a0c15ac9c480302f2eaa14ea944da5cfc31d7737cd56ea335432e358cc600659b07b3613a60559d8d4d3fd5b55cd043098a6276cc2ec6bafdd784d5e5282dbe0a738cb82542f378f6f55350c08267136a2539090cc4563f7f292b900ff59a5805ff53cf0ab348f13fb3c29fd56f3e81ea5794e75c94f0c2848483634830905c18266a51ecd4d3fa050a98942793995c231dd0b788251994ca6d08529babc49e8147adf85b87b10f5a99fdf90ed4da6d49b1e654a7d4c38c55388fa2e4cc5845244a5eeb543b407c1dca8942d8552dc54a0a1dc2ea1146f38b72affcb14b7706eebeda050aa3085b2b5d65a6bad55967b34ff78a8dcf43c1b9e5b372fab2af3b55698af3f635e2d55b0bad45a6b939898b0477d1bcf7a191b8f3dcf7b1b1eab05273c561ff32dd07899ffc216561f736db066f65a2da574d65a6badb5d2596bad150441abd1d4af940292a6be873feadba8b587a4a993b3cff9dbb001829e4d87a8b042ea657e0556b8b236c295d56fede3aff13d22e6561c77c1a4fa3e82b020a91819aa910db1a9cc7065862675fe70d74a2a332cd9f571788d1fb1d6be8eb9ad0d1b35340f0dbdb29f7a19fc2ccdb3d2ab4da7907a99d4cbac78a83ee6551ff33261e963c2efc1303f4c687a17fa32451acaed226dadb5d6dad55a5f7a34cf4a14614fdf78377f5382d3cf4fbc359b2293df47e3f17f341edb78cf7b299be1cd5496659a955dd9366545462c1b3baa158dc7302e280f7cd121cfefc93724937d4fbe1a2c5c438afea9e085acc7e1eaa70b32efbd0b318fffc187f91a381dc0993623d20dd2cdbeb12c8b5ded07d28d026e6eeafd7abfa6bec856b67afb34421bf7e5c19f42f47277d32f3295e52712877bfa990869d3013094d872cb144eff9034aca7f13d565fe3e7b763e3391b3568fc4c98b7e8fd71c2643e06bf64bd0a5264e9169c6cdf82cc7b2bdd42cc9579ef79c8c43c18963ebf0b2a3c3d9940433259d1e628597d1fdc4da74123c562c5742faa13867141cdd9a46e9ed0161343833527eeb66ddbe636b7baba3e7157b7afdb57ada30d595d12669883c30374af97a459fd4b28f3a92fb2eff1b54a8146cccf6fe7e52beb258c81517d911ff4d60e2b6c01fcee69842d38b9df42ccbf6060b6e7897998df348f9797d13ce0bfc43c7e1e31fa6a1ee076b76635d4c987e6a6232c67c6ac5f3f63acef1157de3d0fdcb1348fcce4593dd6abd923ce0ecfa8cd8c6ddae6191b41d794d258fd78b3779c582f138b752e304f63825e7e9c32f0c7392b4a02148b69f1182b45e3f1f4c0d0e484c6b35e45e3bb90c57afc3458af0aa7f8f22e1b0dd6e778c5c9c001a68d06266a8ff208d5bdb498a6c58096c8a064d994199b42f3c9d04c9b79c86bb22c3fc9b23ca3362c6cc9b32d79c6c2161f472c89739f3e09d266d2205d947b6d1a8bc55e5e93a7788bdad0126a9e6d3a64b5e91d1aacafe0bfbc0fccbb3ca611da785658e35761ea6542d5c73489b36dfa26a339cbdbf1db781ef86d681e27daf3a41e7f0dcda3faee739c46889f1576bf0aa55843b95fe6fc563b299596d4555121f731617e3034a9c25488e7870af314a02021d9d08ca828968966b13ccb303d9aa7bac07266b421dbf3319e5eea8a3c6432f29afb2d939518dc6d236623a66dc47cb8b27d9583eef93326226a3345539136924d415ba852819175694b2a2f00ffa98dc9c86434a79b8c4c46366456c8b6f779218ba8779457a98d4b6bab50a8a7349ebe0f213148f4c7f97301a3269bfe35fdc5610a7b5c97473d0d2f74791ca2763c0ff5debb789aa747443d8d708abef252b872bd4a01e6bd5fe1e5b16e81f52fefe9169cf060fdcbb7b09adf8afb1eab87f91eac7f99d9bd5257efeade1e3e82b0e04364441ac9245906ece7d69af1b5e301442ff0ab92da5f5d1405240dfd1afea880278da40e36dda3fef6bf691dedb7df4030775c86a820451f998ff915a753583dccafb0d230bf024bbf7c8d8fc6af9e078d5f691e27dcf3b038cd83c6d7d03caba7a125755d6f396b154aea9209f3c784a64f85dd83e1e961c2d2bf788f0a71fed2dbf057508552945b2694624c28453094a2dca9ee4f19154ab1e2f0415df43db90506740aa5d883bae86bca5c7a3637adc06b860c2192b73f91bbbdad4a61d5e9514141d4067c6e88681ac966d1388f7c89d00c0af220785505256dfa30debf84f86142272a48d127f5a7074329a69e0b4f0f865384318539e1e9bb4f1541ec767c5cfe25f52a4831a5253de9fc12ba8429a8c0e302eeda9ce41dae052e9823d0efc2b9c45d4ddc55f50c0ab2f6eb573d43115c116426a9174ffff3624a6261936280ea75563ba9d3d36fb5e99dae93d4e5f3a22efa4f5df46db8939aa84994bf1dd5e7782af4f1f91e3ff65c90e790c43121491c1c6a937ada9abfb9b86821d445c354c80275d1479d42af05b9fe0cf29afa35f6efe8555d43d0f4f4a90d7edada2f6af33d0d79a4bec8db76c154facf7bfc929b424333225310984f3dd64d35501b1f27f77d5eb8e20b59045ffebc44f05fc822fe112c42daf2065b4a89e2878ddd9b8d3731312c107c99a73f633388dabc3c553dfd39a336a7a7303f4e21971fe7d034e2ad39e70f16de6b3f1a08e2e979cc832f134a31e6bb10fcf9e9ac52e811f1abd02362cdd323f238e1013efe98e7c1f382245e9840c4e0cb84534c418af25b6d394e42ce011880b3e9fcf9437fc694788d90d73ca1720b944d67933dbd6694472cd0e7a172cb9c3e28d1d10eed2569e8c3a020fb3bf82f449831841368ca305df47158923301e3ac6197f6d5f36708597aeb03da10edafd6b12f039343be7f579bde8989011f043d9acbc3bc8fea5f1ea43613c784f8c1b0fbd41799ee1f89535aa5b07a995f61a52595d12bed655e8a2bac34995f01bf8c6ec1090ff0bb6f2126e663740be0f72fa1f72ea1e95561e95121f7a730bf0d5590a28f8fe9bff729bdf7355cede057418af857484db18672a37c5ce8817d367d497e2a48d1077f27c570c6a88b522ab4a9897ea6443db01f9f3fa91ecd4d443036e4f166faba69bde8d57707f4ed8ed56ca5efc35b34cbe6ee9b1b01c504bf35802da518b1647b5b4a29e2076011165c592c7c9fbb8ebb0deb1ba9ca3abfacff767bb737256c6781e018790a7c92383f450c4f88454e3e109d541e1d046f003410b59067929174021488456828213aa97b66ea9ada6faf699e99450fbc98412c02630351fb4df34c2c50b648211661f92029cf0b0a51d3d71330bf479c4b6c40ea8168c31c84150fed6a9e5411576c118b7c5b88daf788365cf1b03ca921d1f688a728f92660f25832b488212616f1194e70030fbde2442c620a42d4f48c27603e965493543051b2856843038821d2706e2370b54f80c91d555818b2293600dda02e84c0455d40116443d30df228db61a80a27761882133bccb4cc389b4499b8e1a8ca966446116654d152445324858c21295b92186d5c52f5a287a3532d7ac10c098a16303a97198d1931c38c882a609b4976e447e6033ea272e4082a4762dfc3f29afa13c483a4a2269090c09ad022084df0604b4c1b8014326435a8862bbea21acc904284180ea8982223526e4822e402860b321f6021e33a27a40831d332cb45495392be089af24594294946449783294122e64413454e34b1a468f3243f9ad24549460576f49960660051581180f064636c31236807495cca4a4da25225e90ba2f204162a53b0c0b669cfc7ad4a63e69c750746b21463779cf62392a67b972579945b76f7de3d0b5e53bf7b1eafb1df7df733c95c80dcdde3f9e335f8bbce7bfcdf63ff743efaddaed3407c569ad1a2da7a1c5e82f6e0f5b2a550b09ca9f194525a6badb4d65a6ba5f44e20504aabbbff0f9633a394d2aba1823c82a0cb2b6f248ef46cc823b8ed8cd7d81aabdf5aed4dd37e22073fd8f23bc1b4a96ff1a864fa3676d62c5862e9e1ac9934d7341c825d98f18f5985abc9e99b5c0b7f989c72b89ade2927a9f860b42938049376cd692a3df4f0f5554c4e3e36f73037e4faf7dae7422296c9cf8b27ad7257d54101d24bf9f5a92cd161d31dc0360c1172c94ba5afd65afa5e0efaa6922974a74eb9d2d352a9f4a6a7365c99b46d65b97f6a335d286ae1c87980d7482935f0c26353e4b047ef660a9fd42e92463ba2c8c21d509e0cd5c4ec5ab1c7a88278abbad671e90bf19a9a4dfed4552dfe424fff088548c9a54f47106fd52f7d8eebf15693aef68b80dc3fe7f624d521ef7cf95ab89a2f57f48710b16620fc6374e9b51209026eb9bd7c1a6a6eddeeead59ee06dadfeb86d9b07bcade9209ead763f1dbbe9a86d5a2fe7d17094dabc324ceb3629a594d2ab514ab5209e5ba9244f2969add452a754db2895524a898130858164fa7d59774040fbedbbcd69ce8bd6cd856a7f603524da8664dbb61170f7726120e13c7c6da0741fa9b65a13bce547b433b23872e4debb27cde148122c4b88d5e9edf09609385ed56a5b0df946ab65350b469ef9d7b6ca02b74b55bb725ce7497935328a7238bfaec910450bf6286761449144892864c8b972c60c3ecb8e840c8a2b494fae1c196d5ba7d94a652b98a93360cef8721de7495831627174ba08a12d09255250ef11b19b041036d0a1a1248ef0e0f795af97893022e288082477c93d66308c1da6275172b31424b4a480d3d25b4620199174fdb35f11da36acd94a5f386e4af0bff2e3396102229f7878c5f0a4863d5e1e3c7901064390e1c5105af628671a0f4360b1c75b7118e2ca1152862072c015d88589754b293418ba56083ccefd0f7a384a29474692468ece6df9d5c75afd19d63a43ba7114524a79af875bfe7f96d25b76d6e9eeeeee2e258ea3ca90524adfa2c8d337242c6764dd5a6b1bf3d67cfb2ed2a02566de92a276da1105e62db969f51af1e702b82d1f943872cb337675262ddf337b91bf3c82c1602f88f267196e03ba6bbabf7428fe3ee40e1483ed46b6ff8dd7cd17dbad709f4644177265fb1e6510e64f12175ac1f6eb6ee4ee7ef4c476cfb2c7b965b3dce65619f2aad85b5c415444c60c9020e206e228b14082c5121cbcd062073db8fff0a20631d8218bd11949c41a1b7cb041162108f18419ae033180603b20a560061688331ce8c0ca952a4a0c218e3349a68ad0941a7428c28224fa0fa6e8c10d56a0e8220bb1b3b247166b8f33bb7b796577df75506cd99d152776f74f831a76f7dda7d3b5164080ed3df7e978ce82c2878df1df4f0797d081282213b448e22ea9c45d722f7197dc9d1e5b4d9edc40719734418b29ee927b944433c06273cffdf6e97036236469022662319266e27d2d5351658c8755025499226b7c0683b560309809926030d1f3dcc667b78a0f8e7d834e41146d2ff2e61754bb70f7201289ee13382f98c8604b24c722cf597433efd1163510a34a4c08465afc401c33095414c18892237a106305a23b152f60a224599a48079bfeeabee0079c32a83d7a9b66d994a8688c4d3f26db200997094ef1840f9b3eccc7830d495ab045104b5e10c3113aa0400995181056b008c1502f543821c5a6ef120483c164a09416151541040f4ba23cc1029107a5d4a770a207a49a1408a1430f53c070148448a9ead3a17506008b140a9055ec299a50b2bd4a133b902283141c4c0962fbbfa494295496708286ed8ffa74dc872bddac395526bed8f4734a084fe0d8236b66bcd1803de288c244cb882551b898c9b64b9969d9fe2f2682d8fea64fc76f88a6000229268b125b418f12302160c00330b60801247a0d7ce8a1d27052fa74bc4671a1844dff4b85b10417acdd0313daacc1b58925986cfa9dbf6870c2071c6c7f13726b07b50135ddf130ab38abc4b1469b46b1e96f3c282103016c67f29367910e36fdfa44195972c06496f41303719a3186100e6080618820ae105d8aed3ba86bfead924710042794d9a6f469766982d794b6ff0e1e3e9ee8d469002835ec21f27877124638473a0a24b06c290589297bc4437bfe8d2da5200134ff06d10d389359aeba46f9e8256dba224fdab8d18eb49145d446daae684f4b9434c55bd36a3bf3d6fc172bf2888133767d08bc0976fd283fde91ec2fadca8952d26d7285bc35dfa506ee6e9a0d57dc4b236a737f90aef942dc233213466ee4466ee4465748d28c9155de9a9fedac7649d4663681499f98d728f11a29e508198e2e09ffec39b3c72e0903ed8983f6f4c4110bed49858cc8624349663a10ed50a40223af193dcb9e3fadcf9e3f6d943d7f6e5eecf9f332d94c248e4f285366b0e0d8e314d2e2c50c42d11e67197b46b147f7d920d8025b5c12b7e50a1579e1355bd296b4256d495bd296b4255da0293485a6d0149a4236cacd8e1b22e9ad51936d6dc8ce665e637f2eb53ff6c7fed81f6a23c59bc1dfa3fdb1b22c12c77f6ad94cbe9d4f6b1ab214bfff415d536a11a5887f94482bec60f9ed7c7ae549e20c228f6e7465e115a2aef95289d704519b2ba3aef9a30b81f9c12bf4461e446da428241bba4255ae90bb0a240ea5dc8a051e2d5b6eb99b66eb0e12e7be077ce63e83c1b6ebd584f9c07490385ce88120520b0a330906db9d5ecd1f2352cbbea1d4b27f92c492c48a2415263fdb63404ae6bb11af59cda02576466daed015b2333bbb42767685846ac533010481e994d25feef977b3d505499bba1caf11bbe7c6a6f93f7fca1abb737c4a497d788dd52be93832207d44f1e3198ced5c6c6f4001a4cd4b978c62cb27b68f08d8fe725c4048e9240afa4164c2bcc626d9ee3e674343381d5ae226777f5ba5c4421a5de0ca761a6c1f57ea31f718414a9b066c7f4de2e8907b082869ea9f787ac4c98367c7f788f3310de7d0f6a7a52c694e41e4f052d78a87dcc24d52d748846eaa537051d3b0ee0763d3f41f3742ab90b79a98bc2df2789b78eb3a18d9f5e8e5f979c9bbde7a3227ed64de920f73daaec70decf9574a1a95f46469bb1e1fb0a72e1169315c4f7bbe3c6152375a59bda37d78cbe5d19472cebff29e762c31349de801694ef9f275a56b99654f2d5fb2280c998a653a672a96ddbb392e254e69e3c2b7fcb40d59db728a0e7ef6ca7bfc9e63ec85ac6fdd186394463dbcc6f30c5d89a4231924eda21e6e60b9b736dc79b122d7aaab9eef8222ec5a833cded89daea92da518a165bbc420ef58d9f479c82da51441c6ded9dd7fd7ed5c3dde4debaa65d19221f58710b99b48def65f7811bf88ff85175fe6cd46c97ca9d249d3344af17f61f7a530e63fcff3bc3b3d57cf6a9a36b569b77a35b76105e6082fa1f4048c528bb55b8eb987acaede89a976d770dbd205172475d597cff153c87d2accbf852a48510b57a8508a5b9b3e3e269fd2fb78dfed53d80343f568fed5c05464a44aeda04eb3f34af99b6171f9092b120a820549d1e58d5c4227aa47fd8beabb10855f8551ff124e11cf2f05950ae532ffe6e6e7cdff6a7e69ce59d23c274ff9f40e0705d131199782edbf1dcd58b0fdb51410dd186c7f8ba4685362fb5724471f14db9fc6382bb6bfb30006839990b8d8feb37a5a786ee34de1e267fb0d73409265bb61fbd6cc8ded8fadbf9437665e74430103339bd624d6be5e39393147e48a04a5d4a5bf3ba554064539d3de2c8caa3823978896ccc2c898080d054ebe30121a320a32022ac2c3d2830ddc0d5b30961a6cb8370c75584e10db70987144f8d16217a906fbba37afa12b8ed4fbcad7cb49b4971432d0d7bd79e1b0c54ed1848b498cea1442d0306f5e386ec41c82a84bde298462107138a22e79b324bd70dc94f02730eeddeeddec0fb2dd524a115dd02b3995a51221d729aa10acecf14e29820a942290b82e67fb264b145b8a11337c0f78ce2c6292c644808d4dae8d6da56e2d08f0a554b3a832a6943852cad2de345b2badd24a4dca9bab9e4ee98e5a6382b770248dd42078ef7439ce39ddbd4aab6f6ceef782a0bfe7fe72c658dfdd7dda69ddeb9c73c64f2bc89eb7e494d4eeeaa715e45b2b11fbb2d5561c68415c8771c7fdbd9a266b951ab594524aafb576bb9afa96d47a6ebd8e0716e4f9b7c6ea3b03469e3e3608e66cffb76ddbc21b12b1db5adbf296eca627c5b89a3bdc3eb72bbd8fbbe0adadd7cddb70cc5b72a79829801d0000cce82d515bca6ce9d2259f7edeb4ebd1af349fb4130cf2fc6bf2f2a7539f863853ed35f66c0e0595ebbcaff479b1cfc34974dfebc595bccae513adb11e61774279aa9c3b2ac40263a8aa84a2549cbd1badda86ef8de5388e0bf7c5c0b63fadbd80aaf3efca74ea95542e492f0dc7eb95fa74767290c8a8efe6269b4e2e9edda7fca18081f061c0a42d374c5feb0712921eed6bfe79a5ef84df4040eab140d0c348708ce74191ebcb20a9dda763f50f1e90aa8c27c3dac218e9eedff58dde9b33f8a81de420a1106ff98fd5c6dd5889065ebd8d69b59bd0be1b735fcbe8753335f05b393a3b1b943c71bc5eda57b226efa84342c9991ed435e79c73e6fb5aeb09bf6bced9da0ea428da830a6d992d515bd6f92e6d6ee6c6cd1b6a73758fbfdf09e1d61e73727ae93efd2df4a173016f790fed4b6d56db609c9b7e6e5effee9aef52b22cb1dd1fbc395721c6a655aec8ad932ccf970ec4acf7deedc2e08391b595524aefa763ada842c9f6dfa60f3df4b0b53a1ef258c2d42a1557b67ff5b7b456b0a2a88022041529a0d915887c038b5d83802d79ceb822c8075bfcc0c4045a9850d912e5070848e020d62bb85d6fa637acc8630bcbccf69b3b31b09c1951b2ad3d96e0f8dc903adde3a99a674e31431941883c45bc294b88f4798ab07c10eb17f11f1f44f05fbe27e6611e46f3c4689e278282da49fefa30df233e4cf812fa91953c66d3773295acd75396389ef3c93aa6af85b4a19a267197f69a56b2354d2f09c39b2b1ed48f34cf3c6aa24590c853c4a3a20711e6798ac0d8a04a16e2cbf788355cf1a80f3ea8791c89bab4af9ae7ab883c455a228cf6244f80f63c456413e28b76929f7e8fe859c9e31cca3ffad187f29367b2439e00ede711d2c68fa86b48e2d8e750dad3263dfa0fb6e65dc9f529b8edf1a90dcf9c3131042391a74877c61522fd222e8516b1f2d880816a27b36a27f94dd6adc954b2ce33afc0e0c50c224f11cf0750882f5fc4952411e9d790c7860a449e2233e28b7692e24111c98448b5937c05f5f19646e78b1679a4b118b5f1a34b633448baa90e72a42dd81afde1a43dedda7341a64a9cc668120ae435a7d7fe64247118f0e9f12ec94d9e48e07bd7a3e9577f0ac7d2af5c7fc05f8703194d8f3dd421f709a56df0b14f3f3f9d93f6b6f74222769b68902eed75406a4112fd61cba63149a3f9568d117b15ea4ffeabbb554e5c17add2298dd227ad31f1fd0a850ca4f4f9e5f7267ff9fca2a98fa6306f691a8dd1d8d1d6b61e724897502fa4326f3d150a691249a37d175225ded29ed3fed21c248df6f40639824663ded23ec737d7e22dcd91fcc85b2f57a064d963c2c0726634591ca66b42321d693f5fdb8626236f15dd9b33f807982a4c12244ec56f193003d9c4c4b1c1d4c1b6b28b6db14da65e8a8a4c595e8335f7a73087a650735a0501edb16659eba5a8c8f76536fd78b3a69dc2ab357d3f08744f75f63ec759349c9b524a71c852618cb5bdf7e6504ae67ebc3a384fa7fe0d2d08e6f6deb5b0f43ef6d5bed20d89d88db11e7d6c3cb78e935b7e9ccedeb2efadbaed7b1207c7276d12205df659acef73d92e7bbc9a490b0cd984643a7a6dffd1749484bfc07266a4b0adf2a0c8dcec9cdadf7685faf45b81fe247afba1c4711ff610b73fc4f7f8b38aa4b193c883e0e2937d8bf624224fda76d31e77dab1c491b736f8a20585d1987dec4191690d116f5910481afba3fd0fc811ec5391b99aa22277292ab25f1eb72fa4867bfb2c988694b84f23d3e72ec94d368f1e0ff096a51655448e65590df35016d96fffc36b563286a33dd2188e7615edef509b6cdf87d7707a557ac901182499fe28934e7abc7acce0de8478cdca94ff3ee64a615639913fc7a88d101ddbda055aecaa6512116f9576d542248dfd14963cb6b6ad3989b732508ec5b67d212dbb5516ea8905f5ed56eb56e93ffd5648fd499653a110eab28f0a59a08f427d4d0b99b19f7b5bc0b6adbfa26ffafcdfcbbf3b2bfaa537fd8aeafca7f7523cc85794e02d9ba36fbc65ff458b237a0a41eab29f435378a94be2d4eeba0bd2e686baec1fd9f6b1fd1b6b6db5e3cdb637db5afb399f7dcffe294aae7fb4edcf2cb290c461c0b63f8ff41c234f3026171b6683f016de16737a52824dccc0db22bbe6baabb238349fb2569307459eee535bab69db762fc775dd168ca52c7ae190d2fb4a2f1c374ca69c4fa78b42ddf0f24da5542a17979717181810f47462ae2a25232323f3c978b89391e1646464647cda28695abe97e3ba0e63cffb3e4f5eef06763ceda723693895f7b97381c44546fa7468c8d4dd9dea7c25cff451d09dbe0d3f5064bb7b25d7a367ca2654eafbbe297309c56dd72306f6d4009881beef3173ee4191e7df1415b9db63262ae185a375e3674096c7dc95c46d5eb675e3674016f5187d2271fce9672389c3804ddf8990363fa88b066993e910360ea9c4d521b740fa0f3f8e86b0a9b4c2c5177595f6a9493e41c92f8923f7dc946eef9bc6e12eaa0a237b4cbae853ab3d880bf97194efa5945af7317b126fd13fb1002889d7b8bbbb3ead20cf152e75adb0fd4996e96fa1c7a80b284a9ef4abf6d8090679f458ec24eb7cb6bbc73625cf7fb078cb8852aa69dadd58261656883c8fe3346fe6fd55bdd7d4edfd8d11c7f6bced81db93c26b6defb53d6d6e17f2bcd7a915576f7abf9af308d6fd0c6a3287bca6eeeee714259dd01ee792ddcda450628f5326c592ae23da5dd1ee7e528f05af197d68776e83dd799ef73aeaf6240999e3be6773fe3ddb79a03bd05b39eeb9707be7bed27be83554903dcf7b17f21afade7b13b729bda7c45b1e90b76ae89099fcbc58d213465dde3bd0f6348fb7bccfa13af363c15bdec39c91bd771a240ef7de7b0d7301f7bd97f17e48f57e02ddd091cc113cad03a7b6a874ed36553d2a11cd0c00000000e314003028100a098542a150308e545df40114000b7a90447a561d0b845192e3380a21649021c410420c01911912d28001090ecb362c958226b7013df3e20132b88dce0394ad7eb882d27111a8a5ead4e430846fdcc18a7517b0352dc996ed0cae8b5f1bb49153a1d032c711a307b8ae152141d08c013aef5f16c71b15d093c9e201745c1963419aabd6e1a2d2604cb9bef35813208b89cdb59c5cb037da106cc2be21fe699dbcd4ffaf748cbd281f4628721d07a98e2466d237ec85d95867e820f68ac5d767dff7a87a7abd0fd5ed2c25cca7b8aacd11d773b30c9d453434881372a1a2aaefa1d4b91d57080ecb7219fb7b80b951a03e19fb9bc01fdf69f8441cada5e1db16bfc85cb73d29d78fdeaf2d4153ecbf4137f751218601bb4b0449d09b225d8cb916d85ae57d9fdd2cc7468542f9dcb2314143a20be1b6fe700c3a4a58d9fb1a4aaa09b5fb635bf4b360ad1e56e0d45693eefa35896a4c78531b4209b5105fa9d903d99a0497a7a9f0dcae689ed8c32e5d240ffc185e2909f029beef0f134bafd5062ed578a5407626381b0ece717806e5e756093c85bfa607895d0e8daf469e1c6f3d505f67da57dcdeda8eb62b4579c7ef82f185038d2a8943e154965a05aa5fd462a38955ff59abea8d85dd566b8637cd8b13174e904fcbb4e74a65493b27cf55bd8c1041bc7d6934ff1006d1b917b107e06b4d515740ea4f16149ff54ea79dd2ccbc223e58e9f414e1f188c98f7f59e4f99108077e1df9e1c8f3139faa649a2a76b1a34d26e85959f12c0c904a9b3a5ebd5b4b2c51fc85559cd1fbed4619a7dea5a5d7585a671dc189c5320d45faa9b3b8c78f60ece9341ee6b671cd6c67c8ea2ab1f300d8e65204c2b15fcd4a880a34cbb2658190af899d182a5ecf42915175e80564fccb80cae35ea992549a85a680fd3e89ab99f57214acd35c0d75e815ffe157b9e5b78f1a4dc16461d19ca71ffd598a687f08e4c30211efbc6da065cae9896406c5529dff3781788f956a637cb72b9c8c241c22dd7210afee80e0647c4058f4a131978711bdc0918a508dfa553734a499acbaa9834e9a56eed841eaf2ddc495952d3a6a63cdd2f5f2523a1e0e1bb286e928763e543c3895d9da26fc89cc598afeac21215e7f993518c624f32bc895185886754807b20014f14e8f54c2db9b19db437e6b8bd0d5a1ac561a38fe6de003a544c90a3ec09924738426cb1f2ebc95b2612f75b2f99341ff25d3f817a2445024bf84ee1799bc9358254cb601dd323683b51075e16f77b976e6b0436dcadba423846cb032d94bfffbe884d8cc7f8e2682c3ea3607c5fe56c250e600c3df0b8456ba9a0fd444f6cb07189da3e5409007623a43f5b92fcc38d3b3faf590448ebc30f57e4e3c0c73dd6e30cac33b01395fa1765d8bb32ee4c5a62dfb2867fcbc0d3cc54b19d0cffebe085ff6b1bf0957ab8fe97783616c07c01a430d28a02b3e0534c44a0544b4475be26809ee336e2a54ab566e57fc6cf649a2989b28219964e58c4c117b5fdab1a277d11103a9b7e89e5abb39cf70fcc581b5ae0337d66bea7d7994939f8be62695a418b08a5456749628a1562d9e58e5c90413720b22b056a00e6a06469c468c6f703c5577e7ca65226be3bbac6fbdb4567ff87f132ac8d3762acdb3d99d1b31d1ecb4fac72cd6c50890d832fc973c1f5c67e2f6a238004fa1ca64cb1ed176ce72d044e2628376acd8cdbd63e399a993ed5e18a0ff50e6de88304ba05ea2950420cce34ce80ccd2626ddb93040ffb1677c611427b26d0533577527c85071d73a803b1c753a393d77643f6a5781c25363d696a049132ada06a0e94109f6ce7c8236d7c9cf3408d9115ded90b27a2d38e0c4f32de19a7dac65a54fed5e5f7c807d2266caddf8fc43560801ac3b57a3407080d62a3c4dacab737c6b30ddfbb4e791f65150011455a562817ced9a165ebf61d102ae86a5a82ad3b2b77b60f426748274262207b76e0cf1bfc36312883ace3d896567ab0be73d8f9c34e673ea619aa93e0dfb64cd5789fe503486e7dd59512503a70cb0dd28d1952b77bee176c91bddff91660e375139c8a1d28d0986322a9936daa1537611c7e472fbf6187469d0e4374b0f6146e4fe4994c85b8570acfddbf5a1db154706cf11ddf89bbb16d0d3ca958a867396eb4e75aec2f13d5a662e385279c22cc9261091076baa3b35b15ce538a37095a6d046207a1f1328bfbcb288331cddb9e533792703de7c788d4a68fe7d481d0456d794b9964ce0b52a5931d8dc1f8f9e1c4c55a5e5727121ac3194a80c337a02b82b63598001dd9be599734f333ad163b3aed79df04c95ce52e0041f344c629509e1cef2085a4dc765ccd7db3c3d176a51f3421987a112c6501fe98438b8ca3a2fc6edfd5b11e2ff160d027c941e35b06e8c10b8c544e8b5cc6659b144ac589ea2a1932cfa6dcafa21e363b3b55808be380eb1d22ac29c7ff063863dbe35748c5b985a8f1f102bc55cbe923977cc59d3077ff121f90d4371dca2f3938dd6915a4e411975200204beada0067ee866d9f58212358114caed010d89d6b6f73bc829b47d39a0988be7a5aa09669027d00db678dd8f4715367951e99b5d530c896de66e8872bd4a2b314468ac4de7732d4bb8a179613573a65fa67fae704191a5526e9bd6cf32bd4ea3d378a5a8d2d166ec68d21b7a50e2b295bd5a76f4d69653ebe3787013518e120b3060a720c2391e5adf9a21cd98c1f05b15c7f6bda758304235429fb5db19a0c2c1f2e7572f07e0d9776c3bd7fbee1069f3f00fbeecba88904838505c130ae4b62db3bd5a8ddb8314c8b5b7eb4c5ef41da7659e96c24ee98a319fc9a2ecdb6633d00b5b08032727c6de50f412d69f06505f27ab6f21e04a2ffb2d641b609cb4677d73c820701d7f38513d201b438537e976fac638e2d2bae804bc8011c102bcc7f176152df260bf434a331ae603adf81a36c6205da75c2f47ce35804095bd447bef462cb42838eb9faddf29c487b8b75a5525cca0c4e4ca6642698bb40c4ba5a9802070f26f704097781f4a2d741a067848a56933950d7c90c2a9e7338beb08ebd810e4ac30e63a9b894881c94fe81513f6d882ae4299f760664c4bb1edfbe7b2ad795a53785444757a3e16b7c4821f96498ed4c0e63b4e14e0edaf0317246d56c10bbb562c00f8db28dacfc92d57367382dcbdfe8cee7c178ff394d45d26798108f7f0db5d351051a41d80eb9f5495afd079ff4e2f8e6023ae33e8c1084ec922c9306a3512c14303ac6098ede25d1828e5d1accbae7b2a00c231e86bf75dd8d8a1beb7e735184350deb3fb77a9f16abda217f2ca2ec30976e68318378791c7e75731915eb012d6834cc00f5ee1ca3381782e8c73131f7608ae97734a606cfa1c5eb0074c7a6b80a5aaccbc377eed270a946a9b97cd61107452f154edce64f925997b5d5ddd076d507f84607e6abe7a0ea682ad7f1df6786e067e015d0339996866564aacfe437ef8659e89f1d63b9a2b79430a8ce21dc560f551e4805432b25f3de95042d6c4f01043c8bd98b7e81a988372c0744d0d2bc863882577640060d5425651e33c737be8662f55c9149fc9e5cf8fa4835a7a36f40f0816e71b191efbbb1f17cdb7cc49071813a9d296d24c5c2adc6fbf8206581b0877a2ba69f5c807a6f56bc49744d6f3b617f6886ae7a016f160f8c581b2543a55a746a119eac769baeed6d391e7ded897a84484db69aaa02c41254b7f2c1455817c29e709671957519d2088d28b48b2cb6785a73dac0ff45ffaa3ec0917adf8faec0b965c9e607ae1a1b2e7f12927a616dbf003be9076d4b442be4fbbd696c13d8c23e615f9c09835f9cfa91bdf5cc480daba318d9be233880da83e6f6041f32880594a2c49395bf1a055162b35036cd1ba55b6175bc86f605004f29e2ec16980fc766dcb8a4f0e84e23780171bf82252b0d2a93494aa0064ed6cf7742a27249bfbe2d28429e25987295f3f9565d314960e4656e1bb177a3e42486e95c18bd71786bf9e89248d1678285da85522e3a0f7696548bacef31cf0b85e8b0a1ff7ec2255a962a43a19141860aee634bdafd07e9907597f23441ee298b3b2b8e6dac97b33cb10cc1eea43b57355072f02419a6cb1f1de81b019da162ae6bcece5c079b5cc460c50c579dc04d59e7476d47882b948dd73ec8809c5d961f472ece44ed17b38e7548b622675a9b2787202aa175acc7c3b8e6788ded10ce927d0ec35f2818abaa7c1db1e4e70524a2515c59a09fe9e1a300a0bc74e092f8bac648e20754589a83854a9cb3ac71b826920d6f728caf65db856f9148c788feb1ec550942b138bb7c09c54c927b367851fc1cf607a762b765ba5aa0ee569bccddc629c543afbd2415ec16ce78683b8c671cf5bfb520221aadd5b46a45c50f8ce15c58ba2ea3839ce0f6258102e8c9a247da3091ed404c45e876ce41c41c4c6643b8b4629e8208a5f2106d46880c8a291e6873fff475f99ce978a85c4ed72f661d3868a092e4dc4141b63959e8023f6073b67f09a7b82214c3a27cac385d2d82085b43e9fa5635e1de596ddedcc3441b3d187a703b7ff38b25d0dadc9c434fce847140d5e3d1e2ba56d4ca7bbd17497df009807ca0a846ee7a292ba1ec55d9ec8d6605283d64e5ccc43dc03c1251f0ada466cdf859ada26ae25c53e70c0fe8f8d45f831ca515b72bb29f0ffb94f19ad5651729852d4de30891f2ca332eaa9ca6c0d42f6fafd690a2bb6a78032b5cabd43f174dbad61cd5ae1bb64f5ecd59acda82fe1d98dbb52423f19c7efb49f6aa9c1cf07ab5aa78cd2e9612b4e8a3e7784566db9fc9e8df1982b0bbf8ab2045a6ce280a14db86faa0d7fc7f1442e2e180c91254fcbab0f42fbabf7a96c00e42088bc56e05797cf402d7995ce4a111049b701c57c80d56e6fa3760d92c99599dacf654586403bb43e2dc040c9be1fe8c5e07fa2562f3c4ed29283070858223e39dcc501ff463f80dd2fe543ff2eb07bbd98534040d0d80f6a1b65ca5fef6785948cca168ee3ea09507e52160afb614febab86782ec18aa3ed9cb8cd31b547dac2db5cef0b533469a8a6179259585145ae41786f15ea96a8d1ca9277e0edbced94d32e726179b0e3159b2984bae398ceddd011f1499af6ed42e6e23671c1ce64c1fee7733ea0481fe7cf06ca90d3d9f16e102033c6e4404c6c334cd96f822769d2fdf92d897f89dcc5fbe6aefa27daefd174433666d75a0c9cd1deabc956c6b6c09f599449d2d059f7d833df79718bb08c9c0c23f58fd547f5ebb87c7687eba7786c1ab629e027f09ada97a692ce34aa8cf1e602c7c053fd98fa1841058bd68e8114170c3e81d6cf320de3ca7046ccc5e95365f86a0c74dfaf04e42f3c223e8872ca146b3b34d27c1046b176e6295336c4ede04040bd3fe50d59e1023d5f898696e409ced75f67bb36d3f0cb4645b59db049e546b6efd0bb86603f9cd5bbefd46b7d4bfaaa3aee595e0afa6bdd79f8183fdb77f42d612b65ece92675d049972ea3d6ec1c149afdd73c39d3d09921f49a73dabb4643509c922f61bda9814c5db0e2c46225af4a9344d23b22fd06f92f61a4983991e727301591863957f3ef565fab2a50d0093bc3cf62b0b35c9ce15c5500b2386f7d475f99ad211c01464d914cf83995e1a4273cedec60bcddd45ae5f83625769cf5933009719772290bc18eb612e1a165b32600774de2c04869929676cb17d7439a4b9b1e45d66383761ec6860727115f24e8856414c95471289229678b1328ed0847c631a30feaf7e7a26da25cbaa85411a61fc18931066b1155d0662ff1b60a9d6f2d04d9c0c6bb2a15576c2a20fda820f100b8516109c5850b33c5637981ced5a2aa78ec349db51379a56f3c75483c2b62bb7a441ac6dac61a026dc02cbd9e880c7ed6708a3d025c051aba2827fab20fdebdca74b845971c8ef03b48b6fbe3eb566bb116e5e7c49db7e1b2bbb2e70205276f33a57889f047f04d5c73f8b4dcc5c3c6315f92a1a648cd26852af69acec42a84002a3f9745175d109c83597b32afc93dca9dbfc7318616762c87b998bc9244afdb4403a924a3f1cd4d8458d94c05299fe5ca582b8893d14cdd2dd522de1502785c4af8cdcc89b9e933e22ab1c2b31f23453f59235ea098b93ebeb2993df3e5b554e77c27bf0df90692fe9fd8585599a20f972338b6d5436d4e045c00a98d1179e70db8e8f72970db1a294d3ce47e3d36ea0f5461d01fb021d73bc618a00ec1fac3ae97c3890eb9bc81d688228705cc824c415d91e73853efaf16683d6a5ea9061aecc2d5d1d4bed314d305c1f8e22e777315d598be8f513ec70a0505ff8d2a6d2762868592ea8167cda13533d7ef5e2af24bce69a00baa0aca21321e2f0acee2964f57e14a6712357021e26cf5622f37b1a4f7db1710d7c4398d4a8de7905a00912c8a29b5c09cc2a7e8a6055455d6e7288d1d4eebf9d1a0018d32fac2323a52cf9c220d6a83b031fc8646a0f359a5a9375f1f95119d1e0224c98dac395b3b84ae4317c715a06bf6592dc98d3c694f85ce59083761e2cecf37926a50af8fbaf356e6969fc9d7031683cbffb18f4eca18d4460d244be4a40eff90d3ec84d2b10c2d36d2165f6a11393ee60b446ea3a0855db18d177ae196ceb4400c3a66b514210ab755b4f9f4e8754085abe8a16b6512161d18e08f28f2a147b03d35a85d6bab55805edb6c227c2021598f1e256b6b79baea9c85c572cfdd0ee7349b3b1767fdb5881bc78c4edc427904864606b6066cf48a2990a18f545e4abd53399ae0e21c82bfa36acb4105e00d0261f7d2a2e22e4f20ed2483f2f22673b0d2c8529487ca15937b321c6915520d8aa3077d6893fee8511e15872f646c5658c5ef6e447e5731c50cc71029ca35a5ef8c8f2c57d4a74dccbea0840c917c7e10af5fd286ad3b43a7920c00c0a8a244a4f02fe141b84bd8cda9a33f14d73dd1238a6fe6956f2691641676d35e8f2f5a37969c87de934757cfe01012f1e4364ddd7267780db67df959eeb126353539cfed38a3968133129ed405bd7c293bb1dc6cce5589c8b1921b3d2ecd11d8a408a573579217dd2072b476eb9be7a4283df2e436d565be1c1bd38a06fb52828aa6a39e0fe52193a1e48df8d6a0f5cae1f3e67c87ddcb3f0421710f78cdfa4a48c9245bada8a7ba71080d65442ccc483017b52de3974af3c24fda9d6716a2fd6404f00ddff7630d8c1fe8285bcffa3421d34705d0d2a6eb67e1c5b7fbe19078af7892f129a97ef4813a4e50bc467ec2dec64d5d3900a76e652e28c0cdc8f28d469fbd9c0fbf9d62e0969459b5ce6622ffbe60a8faf08afce1a8cce320886bb1422ea8d219dbf84c94ac57d4e15998c6b07cbd20bf78445aa15adfb3e1c4f38bfd8b6efd74a03c9ae96ddac1d93fc5a8da12f1c0f9952ee6502e39b167a20bcb652d04377a64f41f609676323216b86292d46860c17d8098b8d4efe5a434b1f615ba60c27b81090769f1952146075e4a80cd896727b1d8835c4f15712d5549c2fb0d4a3816b3be025ee4d92225841770aff87e4ca279d5fe6da04b7cc195896af120ff29b84fe56310107051c8fb75f8a4c7c3f9093c005ab1da5b34c6c00093951038003425074ee17b81d25924adb6bd34bf0388fdfe6e4deecb4cc0e53e194cfdbf4c0732377230d38d62e420b9bcb7e0a6b6c4310d6140c342b4a67e8c1874627c9940eaf735454259c4267dee568c3ff69673558062658485cd55ff26f4b858ebe588f5da3262fc5d1d99dc3f2fe7d52f63c00b49e39f9b33dd1a438d580fc958372a504972ea58461c421be8da793113efb2caed66d112c0ba3252c597c9274fff65b91874872366e9b113fc8593d8b41923302f2fbc032dd73f8c8aa7217c58136e8d8c8011781c4f999af2b86f04a47289e784d5e272900ce81681c0387389b1c2fa6d224f51ed63f8ad4edb160b5ca695b8ffcae332a8ae87f5d4a973220169555fe58bb7cb43c3ae199a5b6aa797b0443d4e228a66548bb8e547e9129b5a8d12bbe00b668917f26f07ef2459bbc45ee86d9b98b853270fb59c3bd364b78e452f59bc87335746e8dd710bf51996c6c4469485ac460f011786b7ec7c79d0a827e282940e4e3f4e3d0f76b3ce305ea167c122b51511a849019e30cd6a85857e9f6f4d4568a6e7f35194ee2c07a6a3304d4645447696e2c50a40b00584db53c9ef33e3607dc6e17e4c0ea1e1feb1c952f4b5b62a130885a6eab5fc1c7cc69ba081bbb168922befd5dc69afa3e343ffb62c666068c40ecf79d3daca9ff89e1bc3b8f0be6c66babeb2f221648fd1e9ac892c92943c82bc62065dab19c3590ee449178ae65efbffb502b7b77da8d3cd0501b05043238e3095bf5605760c1d81394317a344dd5026f707b10c09424e81749033d588b2f629de7a8f0bac0ef3cd126d724ba9c44785b4f488a244f00a15d174ac1c719ab848361883c67e4999f72c7cf2b1a201196a8e72d0cac0896ef2486c2d41a250ef206d7bcdd14d8a78fece4d4eb990fb742dcdae697cf8c149b1e64ef3d366fe8369777121b442243501851c29e45ae4a0777a7b589c2d5aea99e63c60bc4122ef042faec8f52baa2f28b218505db5196cfe9df8251eb1b53f2cae0b3b04b9d61e9b654edc1b8f88a1e450963dc4afbf1f36fcbae0ea5cb16232a5a603fdd3d6c249a8f31f8e9342af96a7d419a4030f31959535d3e5ecb4cc83f30c308aa8f5e735f9ca66df4d0de4c0d9a60086038edece3c8335b406996d8f30dafda6890d884ba26e5a3ecb540d957e1ce4c10900b9d3e3bbd182a3e05e6cfa773069840b450040e8b9b5096cb324bd6dfcda27f6fb55cc9def8d5d1a4a030dcf229f56e2d554b089411a61160f82568560a946593ebdbe5698c74490d3de165899ac0534b7770b66afa8a77b18daa6af0e72d10956ebd1bb405938947c98a914cbbaee8d1d7caf8d0112f0ab452c41ddf3c24b5ff669b248591669e885d9cb2452cecefdcd7e7aeb801970f7302ed5240d17fb6acf6c72844ecd3e52f16bcaad8235b373f0e3965713457d258d63769c7869e32affdb5a4c67396db082ce62abf4fc92d7c9a7796b17c547eadcf893a97758f55b014ef7c97ecfeb13e2485dddcfb29e60b6e4e189030e6a840903c15e2d52089dd97da3c55effe8db37998f1a52026c3b3ba4f5c19e453dfeccbaa4f948a1f10b1193dd74804029cf097e820718b00e744387d70d57fb8459b0740c1e7e92fbc1ec455cc448685ac9ae0e2c580e9b7d0e3f98414669287adddaf1f14dd4903cc256ec21501d088659b805eb97fc9773b0dc880d131d95bce22358a01b40b0bcbe11bd62b604423c41f56f159f0ab5b27f627e6bb5ec203b8dbf4f35a5ee4cef753efa06f2afd06bbbafa7af7598ce77cd27c2e0fe7d6f1823d226233f55f0351e9a5cda3b8ecbd8911d3809d2cbced3290e9bdb72d508c0c7bedaefccc9e2d120faa7da7e7e8621a979f2b2895758871bd23215ce610e84fef23eed9cbc5a28f0add2e7d248b13743aae2a69271dd68d3661ff0ba53ae92dc0aae9cdcf2d13cdda894e6ba69acf8a711219790244de5af1e661042520ff595b887265a0de26089a424c0ac39c287fd2d567e383036553ed5bfbf23b8e8b5975a0a3f42894adaee4c7c86f484982604882f3c5c492d2c3bd7d31ea301293f27403fa79405dbdde990a40f36240eb754e6f0a22bca4de8f26eafd38fdf16792c23df16e3d4a333705bd82c95db9e21b466e40190b110f7678b62a2312e0d90eb8305dd2f30815c04089a34150336424171e0dbad64c4d3f4c824545461b49e3a646dcf831bf6c46c34083df698b7a36e9f1a344b65f25847589262ca324b3095c67176fd204e661ad31dfcde2ef6152a7e71baf60573df36e205d60cd965e94b91d1d6e6b2a44460bb0260116bf21bee783b696511b150e06cd9b0190b05e2a81c61b3ef82102a822ada9e70bee7b57675fbd953ccff4ec75485944d8833df5dcc3cf2477e3f3d7a8801c4609a89b8be789ec45152e39af3c0dfe73360c4b390753868cddadd4e8836470d6849973328bf7e12496acb10ed76bbd8c97d9f9acefc68b12e8cceeca12502b6cb338ed8f07985aaa6d1030170bfee5664985275e09865700a02d414d832586a1bc1d0ead5dfcd09ed371431667ad163c855a40d250002f5d8dd427ba84010fe336c06cd2071622e9fcd9d714e9a20764c3dcb6919dc17403fc144af49a135989b3d772b8ef5eab04a15afdd02541c90590417e7ef0c4b9bc480b1d5b97d8e3d4ee74e71bcb5698ef5dd13d1fd5739adbdc1497eeabb02f4f1403ed37144f2236a0e67761772e3276ac4676648f89b8a8e90ef3676afebbefc9030dd4b5ef528c18d1dad2d61d52dc0739002d980a6ae89de28204a2e921c2164f7582b253d84e868fb4aaa91362d36fbda5394487a7c128cbc1316bb4e163460d30d5e22c874133aa3d51bc653e92a2b6e380684221126f2891f082720b635c9f04831b627564aefd21099f365403986f0856f37655e7681814f622486bcd9eb2a63eee7b13f633b31467bf366c7cd1629c5c92e8f5cda654d675e0a2727077c3aaae7ae048d1026f928151b62328e912b57ddb32005e02342fd3962b5159c1b2a8b090a86d64c8a69e5e699bd109205678a72f50ec671a9428ed2228b24ac7c481558ed00b93a87143e19d206678502f9e5d9980137cc63651b49c4c96190699f1a58f108c98a86e63b60056b9eb64c7f694f92df69ce26fa85277c4e59ec9a2bd78fee84b10025b790df3a2c9ad877fdeecfda4d8b5eb1ef2850183add81b556cf574e20f84c7613c7601b88c718ccfbad22463a781cd3b8c44f524522ffdd979fac7e8526eac7e9c2f09603cad14ffed54e0ca02a432256c402d68b7e33ec3f32992fa3081c9af0118394e5fd417e289bb28d2cc95536f504da24d70012d1bb122a7a877d5981c1068eec5becf1aa4f0d4a3030def9e6334914e2b876212640ff89c195f36a5428d309228bcc8d27bb6334a9f2ec652cbaca55cfb4c177e0e9c5dceff28b83037fa9dee4303f00dc551082b91ad575d1c700ae5ae57a5a711719ec1e2e2509bd1f5e82123d1806070517e27aaa9bac29ad601838eacb6faa3f7f0ac5d830c8b048d0e96f7a71ec99f690b6bfa1cd86fd413b96c0025f56f95747bf8fa4b3a132bba1b92a27a75f6ac2b5161bc1eaa0209ca14d97785fe815da1930fb43d79126ebedff24f7f5c163919b063e494bc45c934f996dd254024261f890953cf715ee368337e64de6b8b72555b96bcb6203eff0b1dffbc38f39301e9b9f438b45cf814cd83df1aedb8426136c87b2515d87265ce8cffda657df2d02ecc7a086492a13687c6876178583173dd8843cc490fff5ee5ffb06284774d992da6b2161ad817728124c72d8e0beb8a9cedb2f5ce2d266b1ab72312158aa669366e8a5a6838b92cb9212e47aedf800ba48434df945986203a97e9ffc132abc03c1862b46960dbfb013fc207b56d851740e8ea6d9c86a50add4247bb0c4d07ab35ce95913c07812154478e6592d27ee84cd8aaa5b2507b30b9dde986b51bb6f0a54af40f0ac8d869016d057cb3e025408f9e74ea05ccf999568c8d00fef58e67856430379e2cc39143a3009491d1acaffd064021fb8db2d200458963efdcf636598f413f79fca753994b181035f1238e8462df8d6dda75e6ace64e8460546ea174de01eb5ac0e6a41b02290f84d3a050142027526be606b6dfbe03a04b295fe002fea0580d41215dbc6e6141bdcc7d9be40853f2cca668a18c759391b0cbbddf0e84b843bfbcb8d937d66136bff09708d68707363f4514085c2aa7cd13369d1d825731d2ea96e453f9b0e8f6acf51081a9d5cb456fd04714b49e47ad26f1dfc55132d3876b58276aeaaf52c8694a4af7de690b6f3820b43ab66dc51049a8c9817ab0f3ab5e794b9c9cc19e700e505363b5448387c8c39b3ebbe05cf502adc7bcaf8985ddaa1f2326e3e5a167e3d9b236f79a103b14662a2eda6099289b20b0879968f2b901c8aa3758b2f40f60934cd6646ce24be6d6171cb38a432213ea8778b2c095b125d3d817fd59890df410423528b99fa11bc7621481d4a2d0dc5212507ac0a0f4b80c66c99e95db08cc2ee2142f6cc3572667fc01707648b39c58ccdae3841cc35e6fcb929554b705b22bf3fb931bea2706c622e3fcf8dc9a17ffd60cfaa79e793c008730c9d8ffb7bc865ebb6d86e48d4006d875c0ff681cb177b1f025405f4c51559863d8a4fb526852d2570a8812e0f4a88b71b0745e28f9e94e360cd3eb197477178ae86a05e31dd3b1eb505b20bc311b964c2fe7c8a10ba871e7b02e2da5decf3559c1e4aa84f1d709c8bfd4b4d318ff55498f5c7ecdb47afae2976b80c55593f9c9352dd5d64b1cb1b6615c17e08f74c4dd6141fe848f6ca47b993dd74889d222d5ea4e5ca9fdb212e7dfb6840fd33c7ccd2fa8f3632786004bf3ce69b9fb6e2e03ef709aefc2a8b5ec6390bc6d7c29ea895b73c5cfb3dbf3653d39f92e8a251d3040257fc15d8b6d02c0530bae07d44ce2e83c994295f015b66c7f7c563bf5b82bb492058946202873f1b7396c711af42b24d3c6565ca6fd4b321d43358681b4a338c0361b9094f6966284d1b019001931eade92d8978874e1ebc1a5314c632e6df6476d5a644361c7ba748a13d089a57a7f06a81836808cb65654b3f1740ed2647e707378d32702af88a6f98134ff1899275ddb444eb006653073511b53ba5b49c5f7dda1d6699633b2ec3fd2812e1a463927467f58b956189ec031886f6454bfd798b3ea5a5a5cb559e43afa52f04b5202dabdcc942bd3a847c910c598a24401f0c0340dda154a86304c08d3bd2bf8a4311d06d6abc6a2bad48a0f8429918094d9c87aed4e9b43906f8f72009a8746850da0c41af19c58f1f2704574e0a6f4765f7bcfe4e7c165948e829a5370e37cd51f0ff49e2ad88e352c9218f34891c3f2cdeb02a89f556ba050bcf3006c30a387074c5ffc430bd957174c0e5de044c15e370e250fc162f9fa303ea3643383a6cc1cf83a035b06860288bd062eaab86641c0904da342050105fe460f936512af31c0887e9d761a5727939920222e9ab68800c6bd84afe9d640fbd6a465529bb1a219b4cb60bbca3e871072b3eff6316c5c38d81269162ebfb721ad3d8285c9a81cc8c18a6e8185db14a0a967243199f8b2abb4707dadd946c320464b2e2580cb6992821fd2588d7a3e6c1b674f7473295edb075c8c8ae328b20b02dcbb8c9637bd198cdf01bde9bc259c4fcbc27f9bd3048ed8e283e1b0114bd05b86c888ad1e13d0e884fc639992d79b89c07e0df7f0b44c2180029593c7ea248b5f12cd302f381c9796256368d3d1a01760e33763631564d833b4b13c1e73679871c6dcc09be4216f27033a1ac93c28e2c14b7b08051b39e4c4d36cd589218b8c7677af4dbc6c65af0b9568e80efb45b86fbe5b7412d08950f0e9aaf69ab5706aef5ed01ae7aba8fb3b3699855d09fe0f0fbf56178e36a654aaf237effedddf04d01959395db00bbfbef9b94cd39935859f06f7aaeef393dcc38d2a7ebc9cf9c5494e7a045d3bd57263649975872ba1d1555a38296c502cf0ddd3a6ed1110d7ffb33b738c71451fbff85810b3e7ff4210e4f94d710f831dc53db4003041180be1d031c321c0c1d938bb7db67f520519d0449cf85ec8a3b265f74e75bdd2c815c3ce52ac1f0027a11dae5b96f76a67cba56ea7e09b72a1026c5aea98289e1f0ec2fb450a61e95366731de462cd8e18dc91779d903064ada082012e9711028abd06a3e02d016ec5abc02ebaf74655a27b9d0e103329308ca80a76d0c0a73f98afdd7b1eb8a5538cbc61593e837f97179c448730d79c9427bbd8d1d149f583f87044ac1bc1cf9f8ecad5d9697c1a655be81913bea10740df16681eb2751ab26f39e7df25afe52f5beb5d2580c090bb793b1eff54750614179ce0f08ae1b47697dd45738315ed88ddaad39e8b8d982cb57a24f4b8c7a1016d44467931154244815636f84f9f9f9de4c285fd34ee351139eeeaa48a88228fa22214a1a0a0126a43895ccfc49071b551ce14af1d0d4f48ad253d8c63c6a887888e8a791f102f1b6c2a329992c234ef2d40323cc603499c723ec3159be6e0d913336291c277480d4f040b2434647de51d95fbea75e6b4d36e423af01daed4279c58d6cf22a384c75d845771bc6e21cac91833ab25e3ccc38e23bb8988a2e7774a50099d7206206f97cad150eb32cd9bc5ed262ee1e0fca845c21e2af77679aeebacf9f7e454e6acf2d151e375591b62a3d91709f354e38edf4311dc68ca607c05499b2fa3c1acca756e9e1f5e924f7504120501b0009af7670046a74d0b79f4a31716c6c97452873519fb34090f81a1b7c10374fd4d0a9c0768fa15e791e3c21beea56c84a3c9392fa1876e6db70417b6c0894144e6b1d56ae4ba60b398e7cc5671b1c09d2d400b6e9df8d1d732cf6a810965e4ebff61297b7096ea47226ca78aad708814ac1c21527227ea425bc9c1a63c16dbb9c397018dcb95600a9a54d22cb345473c0d270d1da81a7b5d907d98b2028d214b7a5f2347021e336293f69c982565f1351b4bde1e4a0629a9f307ddfac27a46c91bb623b1e57649343dfe5ebbd8b626591b9908e9fdc5b9f699140f34d8e7c6c9a2e9af913700d2de5fcf4ab94d3a30dfddfdf7571d3db4ce34e73b58e69a920f144c831ddd62ada64dd89779c7b7ec6f88a6486b1ad7128682b79eccbf6416c999fd8bf43783a0c318f59f7a25849da9a292b8f27f1e81d4b2f54d718f84ecfc2dec6ff63af6b7e04d7b51daa75b54e33ae9a9d1bbab1d62aff328491a1a78b04a6942cb0d1eae51de499a770a2a93bb9ec55a2bd8454d50cb73a9272d89c70f59d27c4fe4cf29d810e1246bbbdc657768fb7741170f4645c02546495dadfeabb2b09a7dd56f7868a761575965611775435d7f8e9aaddda5cf9ca2612d2c777587660b3b24f3f0675c38ea56057fcf9a2253a967678a4a37e3e060b4b007dadefca74057ecda1e63b85724d8a7c1be12440b9ee11c875476bf1a8d5f2b5b2de04c8d0c669a3627cb2fa39532221e1d02aa50e9e5c6e56c1694e5b77423c8dd70df832b99c7307633a529ea3d7505272d020d48dc720034913588f2bd2aebc3957ba3c8a2411e19ebfcd1804ad6433eb2afc128ea77837a99b3c569542ae0bf21e78d183f34bb52b036792658d5772aa64c0080b4cd3b6313a565755db512f612cc5adfe795265c68d981285d0f29bf546ca7cfa4c86571ac98e408543145c9243d464deefd4cd7f5bc67d2f0d39e21c44126db0fa462875f86651447a648d5650a7805e63b9d700983d1c9fd955a4f3cc33673d613ddd1c929a24ecb333d53b7e45bf37fb5b591ea27e0653219ab640d201ac59fe18af735883a568ee9f887eb1996035dfd231d095efcdb25bb2ac7764a3372ba8060d9d5ab43d785c1e239555b548e5310cec699e8954c8917b36c48ac95317042860ba07420d10f53022ccc80e3e3bd98a0b2b3c050141efb3b8f484409b7464c7ab6a8cb1b91dd3e7241818411f4225a90da2a8aefb03a25ca1159be0e75006c99132e2ded28dc2d8dc062614a94277ba20e225c652e6fa42a3f1e7928452a86580b8943418c4bc530bb1eb4dd0020e9600f058595c153e04571e8778cea8ae7168a7fc6d3b92ba7205b872bb6ed529ae4fea068c18dcf28885ad3483e1a9ce448aa886da265619812d97be86d700086c0692854bd54588c50710cce4475491ca311fc81148b4adf04b21fd3776562eaa3ed472998f3a2b47469702dddeeca69cddf3428b2c5bd357aa301665b5fa0dba0884f449230f1a401c2134946a380a9ef9e9a8662461897276d226e9b26741f124b6a84d21ba4fa7b791ee23cb6ae20711aad64a8d788ddeb20bb6e7df270401a642c56547f93567c5d104b43905d24f4b49ef34e83b711030bbe00d6d0aa22e222baf19b750844d60fca71dcf4c11f228f3baf6af93cdd75e3cf52c37b65ab56b17a048a04665593ad34031abbdc660c4846ac5c41110d7055a2c93f28bfb3d2f3c1a4eb6ab53e79635979b8e33699730afa36eca8a188b48a90757aa1ae8acdf7589fee5081fa9af67dae1d159b59279f86532135c07816f9204c785c5e6dad46381085d07b6091fed696408e1b9b3593c32356d335d0ca0af424d4145eb13e8bccf2d4e0a98db224e217c74b25887156bfb9be406e978df8883424b91815aec12a892055c4737e43a8875fb94c0f8c7f9a8981375ea9ab3970255c595115536a3c8eb38188697b1299e644f468b16b86477d85037ca4c5f19951df2b01df924d58005653c373e8597d6cab84849528a17eb0505812a6b69196fd4b68478fd11ac4781251558e70266ace9ef896937e5f9cb31b093fb323e419b127f45c7e8914955a69113603f3e26e02c1ff634494d7fe84710204a10d0d5889a476a067a11267f429a651f8a3254b031e0f98fa3085cadb0465cd18666fc65382ad20bc0a291e7b824ace0cf6536f486e843f28bc30880afea91f9b8e13047673e4350b3e075868052d792d6c4d06f06a0de559ca327f46168fd472874f9786797c98c6a2919d680c9b9b10e7864c49bf2a4690ec62d2007587bee8ebfa91a981388d29d68da35512e03f0dc558861fd7b0876fd908aec87134c83a9e88e7d3297892945090d2a5557f04494ff9b22ef275b4b25681bf8e75d64862b5e4910a74cac743cceddddea69a6e2d16b5d2a4c5073dda4d55e50b573812e149f1fb957e55492ae9dadc63397854f03057e12c2f4e4cb0defab6a93e869f580c0be4e81378568caa269e18ebd3deff6bb8eaac454c8770f72f24797aa3516fc3f03e0cb34477b7e6766b5f06d927e889d6cc333b57a5ab5830a407870a470530f3752dc3be3c4043d252db1510c4b886050d25a84c8a074813118dd35537467056c8d342fc417b34fe212f07aa05fc9c7139ec72e6aa7718b0187461c21a1bc577981d085353a43ba6928abf34a5b7ac065711a89c780b257381ceb9b7a2258321a5acb9704a6627ee1aae2b6c584172a514a22c29948f2faa02aff2c30292e8347cca515a0c249f3d9647ccf6100af3ad711324aad457d638928d8326d7d37b42b2d9f7b75cb55e5b1364853a689c7b06bd9f99c2dedc27d66768a53178ff2325222cb80a0a033af83af95a4e97ce8c6dd2d37277054076a7e050434daa292575a11885e5d06f68119fc4323acd27cc6d21a9573100c850de7ab3cedf32424049e28d797633f5276abef4bb055683e6ca7315461c474b48fabf0b650dc24b364eb8abec3155fcc64258aa4b4da42ca99e2a14140bf7f1c6c370a9a8288c0278dd229a87f0b131704a7664ac74f9865b38f06423b2a172cd35a7cf9cbb91af87583f38fc50e704214f32c45e04d25cff9c9ddc1cbbdcd60602aaecbb6097a5a3fa54dd5ef57d8de019e170c24ddd52ce53a480bccd04f7b9e59793178f04a7948bf7aa48a386b58cc110a20efe94d5805638701e066dc9739583e00a536e8307e7b2a31e87e7df53e6476a89451157c2d3541304c7e440a7898230d95c4a9444348cb4d4a130d61cf530b79ba707d2056d2126b096f90cd735f8152302be83b6993eb1e157ff21c68042b43a2dead1b98954c04b481a48877f31d00e93572c0d927a9677c209d01b0f222a6bb0cca4306496e867e13ace4752832d5a342e36531cf766e01ea1ab46c5dea0035520450b619a560fda724593ec10b3f8552b105500f2dd9acb38cacfbd17642c5e52580fc86130b5bc0033601cb19cd41914590a6403a68b7f729fd68b6735f6395c0615cb03b1766ea947de174e36d8c20414e15c4270afc907f3e67ac4fd573c765dbc14a4bcde177b3dda94578de2815c57848c6161a7ff4552fd03180f88bf68bb8056042fe9ddc92c64ec858873b688ca1cc573eba83b14b3e3c11dddbd9fb43d5a2d293951e1d262282e28eec3fabd221fa06903d2bc26251947c29a81ca3ac1a8dba438fca284963c205b09cb4464fe885e571bc7a7bdb1d58bb2113a5a887a995ad1b3eebce7df372274360dd534bcc000e0c96b2dcda69c449c6f7f0dda363f9657a3cbba008434e2a87a8c5e186b901ce98f7cefd0e4d7c99265157eeda276f9b0ce8d619f8f9bec97cdc91da7e8c65594ce255b79ba77c46087d51653ef8cbbdbffefd74b274003fb9b7b56a47b0c9417df16472de2b8361596eccf050e822ecb8bd92e81509799c68a41604895e25d85ff34944986d8f4b246884e88e10f450a244ddb1f0b097c1d513dd8ac912e287d65bf29bd0e8bee451dd0883f06ed22d86217eef8a21236ac061c3649808f0cbcaa03cd93a20c2e3a8a4ff67173911ad1b24693e3760dcae5a7934dbd21b93735a15446c660189c3fbb32dd296a52056083cda237b4c96866030cee67ff6a30e27d6d93868dfd34c44e48a288b94009f3b44468fd6bac3bf2caae98cf7cf49c6d722eb82333345868bb3886f5bc47fa2e02e2518cb7113015979c4153b20db4441ddc8485cbfa919971be411afe512d1ddc9dd6c101db5130b0326d70acc37ada4a6d8315ddd1de7221b331a8a22b3781f2609e5cace01dc460da6a18642f992826d9a2c06601c6bc707875f4070c0b05f1ccb012dd5ff9c9e6e84722617e8acb172805510cce0d738e87dafa1f6312b2b85f4d16b54e03d50aa54b9ce0fcbe43c415d4b3f16047da2cd492f2b926a553117c9876fe06ccd277e6579205044c6214524ddff0029253122260f1ef5f08cd28b43d20e4c798e5c3b9ed7704170c98f5cc4ae73c61419326b96f7b7b19f75680f17fbd40d24acc9b93f93f29d0e5f730cde6e5014866fcc41a6741d3b0ba0c3c8c10eb7299aed8ad07ce8b0732e8314b282a43331227a1f82a2e2e5802f3c84253ec703771519333871c07b3320388866b7950d1ceffc293c8f1612f300b1bc1cd35a63abbd830098ec6aa3a41cd448b060c647d824420ba1e16ae8189944950ad702bba02bcb4c3c1ff00b13d287a5f8d5685155ecec64fee51127f48e3805693112822c93d611c19613bc3047868fb81af6ef0477380ab45edc79edced144d91271290c5c10dc9b5c4d14fafcb699b5b8a0c3b24c20cbeab622e95287912e57a9e00d32cb761615ba7419fc20381cbf1b426ae2b942d86021b12cf34d267d04076c5b3650502839936efc856a8db2f117b01620f39b275e11fc38cfdcc6d5bde5225689e0ab273efe4a78d8ca0b7e0c692c3b18b2107dfa3da0edd3bca706e72fd0209229140e396e8e36d779ab144e603275e530fbd3f23ec42d9a41655e5ed8c236223249a2c1d3d788a6f137905d7094be4fb3146278c75e3d20e17e21ac5a8aa9ab67ebb0773825c6a5b6142bff05d45c1413e434330882dfbf44cf79bff729098a57da25da077245876a072bc989a505fc403b3cb88e95f6b7396c0087cd2fedd8a1e40cf170f3d7e9c652204590f860136f9a2a3e23ee13c06a9fb2a83cb9c1690bbbc2bc70aeab885ce0bfcd07c2b7dbc9ee7a2699045bab75e157c049f596ccca0c2444e507271732c88f550bc74a3ee0b42d47225cf068558cf0648228129321c736817bc8cb6998117dbabc7b9b73725b2850c085440d340c88c153d0b0d5ba103b63c09913920a743b887d3473e0081d18c7a91c2a821ecf0e66fd1cdffb957f6ab48244077dd45cfa22614eaaf51c809f5bd26428a248b33795c6cc5a3cfa55234ff5d575854e22637744ac5323cfd43312d737eff839eefba3335b5b0f34e361952e448d0e1617f72b4ca47a9c0209ae024acf9701e6d25770d40a4b6b89d6723b61ee9c1504c175a0d4f45560ff2193af2932536d1738ceecb0b31b698b5d210b7a2650913df98a831656a847f896736eee3f75e1c8ee52520e2ac4f92b1495292cacb33008c93c9bb846074ec01954b414aa229f697ae4a3843d815e080615c4f8662ed29e70e8e1171861333fdf39a14fc97d53217accd865535f9dec16a9182e64a54e522f171baab2faaa320ddf4f3a8a79dbf5d4d5384f48a72d2bc985b60274297aa781e739d8a356a94482c74f26dd855a92544c6a52d26402767ce46dbbf013bf522e541d7fc9e49d4a9c35639ff68d88c050096745a5986de39269c965958d7b326a05a8f1fa13e1aefa1cc0e18a50d27340905edd7600716f9cd01a26074d3167ea06d31e575941722c11e797c1530276da8dff97961513ee4cbd844973fbca826450e7e43a1cca54d05fc7442d722053f50888dea4a4b44a05434469d2e78e76a5d2ee073d7da5929aa59b7e8da0e94394508ebf93ec072cefa883f352a7ccc2febc1c5f76831c1833d174e259faadf83814cda2ec0f1ffa8daf6ac0222b56796275e76bbde9eadcaa9eebf10e1796986e47a588df7c7242abe073e82f40c23d77325c084b1b65d56d074f17e890813963d68330c62c04056477a4779a231864c932659e63d3e1909334c44f7260143fb39edef330f9df19165988a724db4970e4c356dd78a7470ed43529c453eceaa2e34ed98e73e0e4af58540a569aefc6a4dbdf6194c476e89eae9ffa86f574730d44491af7096759fc085c2fdc440d930e4495888aec8179b6bdefd56aede717d843575f2fe97801a4500d242e062503a3ae7dc7565c01e29595c45be03161027f818fc914bcda3eb10bb444511501234f7dcea3903d31b0308d04124f1b09d7e5021938e27da22ec6eb17dd774b2e6ef12fd4700efd4918a9d1706681e030a36d06ca0b898d303acf631a6082dce284bcfde55ce7497357d5e44f414062bdb931329f6409677673003c0055e0295c0aacd2ac93f018f5e376d3f54b398e4acf24105c7400b2fdc82d7dd62938b41d14d207f0deab4fd369f48fe06c72cb4a21c6c46f2ab0521c3d9285652efaf3a859d6122af740e15afdbc6df8192414731fcede78f22b019944a2d9996249cf76754351a87ebcc4f43b0d26c1766baf11cd8bce511cd8f9f74dd23d0ac63eea1fc2bbef27e1e88d4649a2948fa7c2e24f50dcfd8d0d77203215edb765b120f3563cde49fb0b4ad5d879d049c56b97d7ffe2e8178953f061bb86856fbc279c278bdb87d596d2259e6c54a59ffcce1e08252534f7a4a39379491edf15f6e3cf507a08322eecbe8bba3bd943a62be9c6bcf7125b6f4bb9835e94c5b5deea3dd5ed87b15be8f3fb1184c8421909e49d23408b4a35b95ce6f7c6f9d9c3d65b1efaf72bb91df57911701136b43108ea722e18854e5a97fd89444112ed4f5fa1819e9b45272614a696fcef8508cdc951ada106aa211d76dd7942700b24764fe00920b5000913ac64938a69781a22fffcde91d8e1c2b957763dbee304636c56660500e00dabddbcc45a8a86ba64aaa9a5b1256ffd562fea413f0b728f76046dd6e021c0ed8240fdf2d9dcb63539e47246480140e937cf00657f6afde8ec602dca97311ed1be140f57adfe6fa7a4172c50646776d1493f4c646604f0e5237d0379ffe59dd2d9c7b682ce386addfa792e2924ad853acc24ee5f325a3efa4b9e1d6958be106313712c81d7f6314f423c213edf5e374d1b6feaf3f7d713d233cfb85b64def3f599e8f79ea33f0e7de139d4644de94e6cf88c70e562f45318bd281c19e2e4e19c2bed924166b04a3c4336976c81d929705f8db228c0731e6927927ee4f36e51ce86b54131406c42f1275ec69b80ad95579688bb811c9f5496d6322831fba898daca3590ba93749d50b42183a12d806180f7b4f8e2d9b26b77ce902044ab282c47a303a908166a93d8ad7d108fb84dae40a2c4c7f5739c4654972f54aca1cb69047a3759bc8ac14f6617512e0022c4a5e2fc583f4c71b79518f522e466c089bba52e48cf63a990a10a4ad73dc26ec17cfa1e2cc2537867ffa5c10c021c253b36ee4b85122b219cd9a8801851fa454dc2b276de9ce7fbc47cea1beb9cbb4cfdda093b90c0e20578c83e11ce71f18d27d4ea323343b8e6c8d757e82e06e5bb0ca1f971938fbd83f3edc7f8d606e5b96987a6d64c92bf430d9b3fb89e4dd4e03a0941e32059f001f742df0cd17aca3c5b39363212d896e824bbaee6c387f6a9b64a83770bbc26c4fd1c26178d0ab08ba06fa36d981061a4e2012f09784c0cf3118e697a8771a31c164ab74cf33451e13712d6b28f8a99aeb4a9f228c43120efd63aa2785f154056187fcd2126a27eac8981d4bba41601cf91c0a2fb707aeada39cf42fa93645053644be89c1290e9a66983ec5c953094e14723fcc4448ae21f67f7099c5df8c1c1638e20dd32d4c8e3f5572a1c873825802073e47a425782141ccf833628747e9c0295b0f6c62e276b166813bf9cda0dd301439324397872fead18e423bc9757b32a007629483dc2d0754a48c2fd0c24c117f81f968251274477981410bfc09e18402e10e2671415abd1f77b7d35d910b02edbfb2a4846173759fe772a0e289a41206b2ab7787a004e6b145ca4b8b97f91dab67f6d8da93cee843dd0cfd7b7f2e54b8e3fd08bb6e0b283be6a81209bca8f5e712a87db17bd61306d7d067f5bdb14eedde604e7c7495f3c1a11073e9c1bbe00a7b995ab7e8b6ff7685ddf19196d2d34a4f722a8cfd1d2e5fedfd4d6963a255085e659fda899c1175b50f9471697898a048dac0ac7bc8e403fbf1cd294e0396574a16fb6c6998937f66444bfd585f7a4d7dc8a0d95226613b5b369efb6e08d0e46ef417745b51dad6457aab21802ab866639dbd67a592c24a460448326e7e043bf6f8494799fabf96029dbae9d81a3b20d86172023191f630fa4d9b0e57429555b55006fff35b2d5a31a0bab1e57820f220bf8291db6b1e57111a7ec0fb06d9eb00234cb0b765ae010a501ec20626aed241db1970270d16b6d48c7e43167edfa429f37df9dade9ca2740f7bc9b18836795e028858ec9b884a3ec76544b24461e4f4a61164cae86b52d668f97597f5acb7c295528fd6fb900ba25782459f7f9dc0e51694f27550cb29d8e88bf8ceb4cba5552ff17293fcb042fc4ef0dbf00dbb6288820fd8539d0d5498f785e7f5fd60e0604888a0ac97073e89d71e725c2d737c5ef16329d123456349c666305bb9c64aaf347e2bfa72625d3f3ffbdfed3a44a0260ba564f8b5d6285b75ddfff2c5160d8cc13bc25f961e408dd7a0f33ca3258c38c6796f0dcf1e032f68033d74d215b54e048fe79527132570b8ad96e38c4dc9df9eb3f6d65dc70e726a19747974ba20525328d3f25daf4bf63c069c7e2530102560298ba9810d98ff0a3b3224d2d69d0b5fd633010efffd4fc3bfc562d72fad4caa20ab516b1911a48448da3f7807d734c60f0cd6d6cc07ae9de0dd1272498467ea8d5b4054d53b2c492166ce23d1561b03964cb2842b8cc4cd42bbe80fa785425f1ee7fb5bca754c061c0633b2e5203ec6f7d01b6ab01d057aa7b02376f7477f32f0a0a5f1fd9b202e101dd039c5df31b2083749baf087a1434cc549e86ac4b6dbf32152d515a1bc850366e8f12e5c7dcdf3a01a5cebb16383fab8c9cf494d0980b03d382d25837bd7166c98b399bcd4feeff22b0982c6e59e72443b1499401bf057710b3ded9e163e49d155fb1d8954d518dedd6a84b011001e69a9cba47c2adefcb15ed7cbbcf11001447466dbb22d6e3c86ddba0f46cd9b026d5adf890e0ffd0c707070b4175364f69124e28e9f9fac8848fb29cd4e13b112000284b0372144b4a99b700128e9f380a515abd412c548a795f46cfe3502c8a01a8e10c6e1d277692cb195fd131c25aa9811bb809948c7c5f8adf5cd908e853450a7c567780815053d8a600a8e082e69645d307e52f3c85122ed9be6d5919a72e60676fe6ab166da839443cf10176996687271ebf5e263f03dc8307b7ff818cc94b0d8bb701d6f0266e6546ecb41057e6cb2e0160afafd452e9684f673b3d7120e4880f5ca9b2e12de410b201d8cb4be11e11c41c071af20c4901d670466e3622b8eec876936529e84b07b09203f9599f054af6ac43b2044071247c380fb23a0f0a5879dfbf8c9c1f4e4304e9ea567a8c08687b002328593b9c2606df17342a5b7731419225d74e2a632524ab309b4f4208d7e16926249d416bddf394a9b95d69ca633f9e268465a2c45c7249c8750aa0a27a8acc8c51e920d202acd7132ef5f86c068d216b5a801ecb88013e05c0e0f36dad5037959d0c08433a155eb95e6c3de9ab2d20455e63edc4a9194f4aa60ee0b212f826f801536a70b7c88a4772381289bd8ddb08ab140a0e060c5891af06003c07f68e63823d769013d7294ddee9aad08d6a561b36a012ac5bae1456171a7147776e6276a44a421f2965152e5bb8f178beb86e219bd1bdf08232fa033a01528da7da117251044cb69b353ee2b8a900fe052c334071eb7f05065a92152107a9bd24992e4d4b1012e91f076293dd7a840a151c585bc1aa6e10b79772a7434fb7b6f2dc401aa3f626fcdb9bc48182ac41160957e3cadadb047caa877da0ab5d4fa5cf852e4a8b72b39098d7b94046d50d0854f05973a574323359710c3c0db8a590f37ea3507dc38c5a7afd64ecd26378f6f54edbf92936f749471cc4d40dc17b3f4bafd4d5bf64b7005a578392ace7e745c1c1fc6d747accb6efd84f1270a711228a2f92c42a6a9d065b9e1f1b60f29dbed46ea01b840b8a033b2b51ca9b9734c3dd019afa7a125e8fd372211787a458b5e80d47a70112fbe429aaff7dc8aadcf7a78a9ecf4d4e4b4332540bd6f0f3bdb44fd7abf7d79183a613e9e9324c0fd488b7add3544bb50adaeb1db2f17c41a59c0bd47ec34f90dc1e06a06e6c6010b6aace47c1cc12897b2c8bf5d0f1e3bf1e6b988745e9e3099935e363185b191341d06590d750f5c21ef6e8782d4de51bfbd10a35e2d2337b9d2cc24db1c0bd73b6fa50ea14c0add73f175d9f559e7438ea9da65b8cf12441219580765d1fdfe92d4a58dcee0f2c48e7fd190e4890649b0dd69435018dbec8e6ea8a7d7e5a2270707ef26c7b1a41447c0f9200982cb4496f4008bda83f4b47a8c9f91d00cb1d3ecffc5168747501311ec186ca78710e5349d63f260a9cc35e0a38d6e0ac1184ae34c6f4bd1c7acb04fe540f3687095b47d9333ee7a1b4167c605bb30bc4468d0523febe994ce503f807467255e51aff81a97d0be36a014e3f88cae71c07df3c7a2bf8712cb1fd050042daa5cd4bf8d6b324b177120be788b18720b59c43e51255d64a05f1a638cd35000199200bd6b386d5d9b071db819aa604248b0cf7c6328d91adfb42a5f8f6dbedbe83924620884d12082515be2ef28883228546e631f642ac4969e9088e2109bf2f88cd2c3ff5e487a21794d0e6ee01332242464d1b15654bfd78d8bff6ee3fc0155dd0627e11425716a1529e87998344e02bbf1ee65b26bc9e04174ed628a430d85b6e16e84165d099b21307c789bae6e629a660a86e757afecaee3feb50b9ebca2a019cd756fe52f18375446d66b74d6b089b3f7e4419be30a31e251868a35e4195ca8ebf7e6ce4e38fde74ef0b20ced8450ef64e7cc5c3b501844dce12f91b2e81113beae9654bd0e618aefcf078753f3b268e1ad7d3f4e143c12f72a9d178e8083c645693c66d0b01043844f16a60b31ec2efe8ade8e0b38c0259aa61abe8b1c6327e9501737b70f8381539cfbae29da1d914a3621b8d3f8b8c38f44db680d17174dd858bd7352bffce43bd25e46f0e6050d1321af306889b118cd4a18eba8a82661629100c761f98024f10d42b8e295909f034f93a441d85679687fa289ad3c16e340068dea4b35dcb7ab4f80b7c0837518e5f2badb6033410e728e05bfad1b532e7a739cad90c1f26944e915e02216d7513e19cda598c5ad8e2e520dd618604e127cfd7c065f3fe33a61034fbf81296c770d760ce92bf8bd15ca40c4ed2ad5c8a7751032e308b2c179c189f81209f7071713524c7e348d4016253c2173aaef70251d92f52cc2693ef59f930b7ec503a7bc7c6f789624093e0401c3611e0c6b61537cd734b72f4fd241ea30624461ca9726920afa2a8034b087561f643280a61820e244188e512597bcf40de6fa23608144adc556119b897240cb49e8ebc45e87cc886832b1761d95fad836cbfdd0ecc04148213c9d732cd175b51841d04d961ee623a3c0d3b20a4d8a4535c79d188ae4cc6dceafcf0d07bf25be2f087544e07e4a23618f7b2c5f5dbe902188d01d33d908f47f6b78de992e20189a78b3216f0543a913786956d68fefd13abd7c476e41964123409821bd55284072d8e71403b65c43d2d8d524c2b6806cf08d8d62024c17bab65d36197e91bc69db1322c2d9eabfeb969b248751c0982109d0f24377d46d3153a5428e316f7e1ca9f25ad2f026c21433edb258d42d2d28d21922162ddf0f3e312886967508c406190f92646c90d949f47cb3ba84bb2fce7dc8cdbbd35816c98a32ee1a85812777d99882f05e7927bdf613458921d8f401a4ef21a0acca04020e52a61a89c79b3eb4e32c2f4bc44c39f2098eadbdb1ec87ebed0c82d018526caea8f9103ddb1284ca6260e7451c71d149822e0ac97592a11ed488ca64dd082a152e3a279d68cec4ec78250ea0da568144ec2388dd35a2536f770a37a9a8cd931252761c4e4062ba868ce3d6a6f4d06b24f2f19f97b243b87e5bb6b15dcb6716b46298b62e9afffe9b1178ee457c59a845a84dee9ab37aa8830852a68a62bde670700e423f232cc3a52d58038c65c0e6e35c7700fd82746ba3a00b47e1eace554c05ad5293ee59626e8744e17e8463677404fb23b4deebdbfb313ad18c280c9696cab885b83a38bc1b71a802a41d96c8bf585b4e6559af9c411b9318743b41c360144fcf33d9a2578a1c4f8cd88e8d5b141fc726d341bfc075a2b92d6a26d10e11e52da6d97da86032d7c45c55c7171fb45dc9e5b8db7a044ed798c2fb4fd89fbf3e0ef4e7d3103bc93e1e488f0fec07c5b1469a33a213dc924a557a982146296bdc15282444ca9572f8959c9897017c2d8a852501e2440aef2be90cde3e823151b7f1835244b79b4b760ff12506d3d1f47d9ef70c1e156c26a7e25ded048ffc7cee2eba9d713946e74c0bf20570ace151c89678f1e2061a433ddd08eb25476e3465090408cb0439901940e428f4537810cd55f90ef5a2ca2dc8855bc06ac827f9e06774cd6c4777fe4089265e4defc3f2d9379082b40a760296fe3c473daf273f5bf63348a0a9c2b379734bf2d5fe89b297da49bd5ae340da5b0957f77afff8dbbf9af8d6fc8f5971f6de7320a8278737a0b73bebc36a4a1ff065a4c62976c4033b6c16070d0493c614014fdf007661f53382203e2e2584d141bc36c91f92db27e61c31c85620926fb1443fc57dfd7ba18a342d78f448925b53ba95939810fb85d36917874883f23e20323863063ea0465b0cfbc9abb63cce3090a7a3a32a4a0203192424bed75d029fb7f6d38395f1567a4082b56022af50ecacd6d2fe3463bc3ba61774abc502b612b69cf106e5edc733801ee845c5b06c8bbc0078233770bda3283f40c22e5e0921a00332c5a7233d41458c240eeb4e8ce3b0b8eb80e43966303b9fd284042ccd5c8cf82b460cc83750cb42013427a209022e71bc5568e8055211c8c04236c12c0e6fa41d04fb0a486231367269052bb7acb698555b369669a399e5b8cb84ea844657bddc68d5a7c3cb099a953fc3c67f556a2b8c48f079849342328b2549ea9d89e6f32c351c6f1ccefaf59d130ab9f33ea044d10edc1683bb179dcb8167c13f39f231444790032ee458993809deb10ad671106c78041a19067cb51589c1c6a041c5e3f906b3bd1c32fdd51e14b4f7a0c1889cdb7a3430e03713fc74b2af5645cf8c42ad038f6112582502b368219c8c2f9f9b5f604a472fc3303a65f539c8c6f4f708b93d02651b6297d27c85f26883425fa806113544761886c6023b07f29b4cf93339f9dad63a829d2d26293ab6dcce837066560ed880af27f21fcf41b695b84d0b28e3d783ddf49ba727a79b54a5750855712bc0ef6a862ef7b87b0671415b6b7825420434b5fd7d08645ab09355c0c1e565c02e2faf09b7069290060092ab3675f825bbff21ab62a259abc5d0e1d11cf43120d280cc7a176562d33b3a99781a2c359c0fe7289de0fd00ca870e3357e006b467cd26ea32c4fdb13db3f81c3cb1da5b4d68f15d1c53f15a12366422886988c284c90e6d47239e2f3fc787064d1b07299c1595a80c97c66ac09dcf57a53c1cfc9718f2a9fac2c74efa0b79b82d2b1498888a2088d04c488a5d188fa881e8a3858806aef0319961bb22424d79eab24f70fff1a9f396f1711855daa5faf81e6b678ae73616e86a2861959feabcfc605b0397d2024aa6c78a222a0cdd73ddbf11720b2c50e68b3a1aeb20ea1d46da855da9b5037c224086e6e2ba0815c784ecc941adfa0ac3a9f915eb45478594420f8343f8290f2fba8a79b11a4addff3019e1665754fbb3aee1e59ea76fb36b51b698cb961834cf7c329755e18a805f94242045afeb6710a205b4eee8b40566710d240f6a5d4fb8095e16ff37b06da9fc7029cd109d9b11124082e655f4ebc921b25a377f718b0f4ad3149226e93e3e16c4d17f3f66f74c3877f572744f6abe44a011107fd3b551c88afdcc12f3da11958edaf8bdd3c8fbf0753793d4ad07ca0093e460e77d3eaa0ab91b78354d2221974a1ccb5baf7733b4b4cd7119f933571cc32fe81cfda318b36a2a44217d4edeaeff4ad0351f0a45dc40e5c27d81cd6b8e736a6ec5a564cd31f85a082ea23c88277dd0a6a734dec73603cd4ac5aec811e42f419175e4b425b5b7d5e9e7384df33840ee19d4849b6fdfc836d34c19d4b0050dbe97d86ea991df1729de288b7cda59587d03b5c63210337d8d440f00f18abdc74412bc7be999f0e8392bf2b23ae289983a0015d5926bcb6b14ed33cf05dc7daddfb731e007dd75e737ff7941fef0257fb2190ac3ff66538623bc00e93fd7070f4d4758de5a690725937749b3475951041ae8513567d2779701ab6bd3dea775b762e9c5001f2ca9fe36e087c5840f9786550dffcfb0e446d9b7e50b5c2314d07b4ba60a82c0ffa3800eb813eee3ee902fa416d977ea7173180dc15b5378bff12fcb13484abfd8f4e5c0862b7887eafa68ada2283d692ace890e8b43a263449599a340f0dc26fe591abc6472b5cd8f480ed9058021c11ca29fa15be73e72c7713f2a01d16ec7fafbfa503d78b4082926050c8828cf25ed2a04f3200c86d17318d274f29c7c4efb18c4e0123b920dabc89c240b5e081d8f41c550d91573bbbde99a220531cee893b642774a04fc8019b600764621c68851e5b87bf4d88c0d776655e260cfe74f9c45ed232488671e0d70bb50248e211d15bdca052ec86445ce2b3409a68fff15fe2f2aef9237adfc43304a31fd941caa434d9d4ab59a2bd4396ca732642a271b26def7df01c191e4645f50efd2c9f0148de5a40c4f38af96a2fc7d48815b4156b6352d573772c7f744bea328d66296f8209e45420d7b0fd0ff50897c61df4d92779efdf7e138b3843414b83304c503820f921c384839e432fe85dcb73201b34d8916d30635b486df2b432a79c1ad4d61472abafd623b3c0df955777b8d194b9b8c4c87f2b0e28aaed9bf70c810445986aa4f6ca1934cdcf13c481d8009382cad36dfc1a8adb0dd5e96a19c6c9034e857fa8d07db23119b080a39713ec7a1295e64fe6e01bdda5a17c4577b5ba3778dab2d3cb5312053979f196102dcdb5488c3f81d5d770567f3f8444fb8e4ab2bb78281478e04baa59e0479cbdeb852e258cc1380deb4981ac2ade9dce62941f89c4db0f7ce06414264d2e1e67a3caa659f06bd84fb84c9080843981d242a8a65bd7b1b852d6af5470bbe09a38494c06e7258806e1b5c57c754104d862c29fad627f1796ce44c98df1ad90fa3913de4c79bc2ae874e98e55df05b6c98ddfb0fb539731949bc85cb202070c82ea05023c1b1c8b609cd6cc073cfdbda5b49058f7a6546463708486f02b328740c809816818484d1ff0b1a04c282a7c7a9ad8b0f9adf71a1785f2776aa5bffb84818d3d8df4f16d2f78de34157ad27ca41b272410941da3c1d4f3719b1fcbab784afa5635a2df6d6650562484a96e0600399329788abb68a4c81e00c1885dbc5e65f5401f3de8b8854f6ef805def7eb38b60a7658ad4e1095abc17588e866441ff12427df9481de47f730890148b2d1492b921e22b0e9dd29117dbbbab6a23445658a8702d25758c930ab8aea66b95b4e2c3816697eb007c5550119a3235610062de9c00951e38e89e5d642a30061a67e28a73b0fe1ac3c6cca299c5054323d252868b2e396417f56a22bc8048755cb516ff48f1bf5844cbd30a01a29f758db271a7239da0991500bd69583a937e4992a693dcf61c363b770340a0da21febaa86cef08f21b54ae13a3b6b84bf5f2e1a40afac6b6111896aab2529e486c84fa652ce3e01f5d4121de3170f917d83c89aa7d871b5a124d30a9e1d190dd609f9d3971f9fec4557596876c26182e79844ba5cfcd356d868f8093a53d8fedfc2cd32ca459f35b5b4ebc23a08822ec8fe43d21f2dca4e5628d75fc355e7461b6121cbc65d0f62d52dfa145fc7959b8ca3882fb187ff21d60e37847fa1053220c8a50987fe65cae7ac322f0b6c379130d39e1469089cc1b2df059919e59a24ec4c56e6a9da74e16b78a1eff9f221096f56f51c7d41ae09b6054b9007a46c0d0558bf9061a2f4bb0969c7b854812cd2831b799fbbb9b69e9643a9233668f2dfbae8eacb2bef3d58b22b82548ae8dd88c30b3e05b12743177c2f81f6292ef83a10945d5a3fa1d02abf3ac8f01255cae4c436e4ed56da3535aff1cb08184ef5958ed777144a9b7b6f53d3a72370260ddcc6afe4e950e087227b57c3548a3708a22f721ffc7db586d4c09e51d46f9c960ac99837f5219067aec7230ba21629ef82705a80739e63a69b2f456a771ff2f03d84cca4ea202e12f3d252c32a43d65c1e530e84b931dcd961b4066331f6af652868749aaaab439875abdd049c87af5f0986a3ad2d99ae9859957674da100bbe988eeaf908677bbc22dc6cd715bdc08f8ab396b37b3a8e048bc2c9fb62fc863628577a85673c37bbb09734b1d9d8f7197d10221463cc85df50c70fcf8c82003a32a17aa3ea4498cd23904d9d17efb57ba2fcb8157b3c11131e161bb88938a0b0d24dace31f99f4a4c3d02bca628a831ea2488f3724b462eb9bf8df0db1fe3fcd9689768330ac2b11554cbc1e57071e31d8e19a489d45e11bdd2a9a74651b840ca9c3dbd44c0e1a8ecbfcebd4e9c631161883bab4a65c9200701ab17a835d0e3e38c01967156dd05b25a3d19bcb7d1c22f34a589713c11f5971264cb1d675d358c774cdc53480ed9fbd0bcb69f92c526488cb435ec01773ea5afcadce641e8dbef577c7c22d1d4cbe2f2b71f576c5ad88ead623ad69c7d892668c8c487ce71cae04a179100f94696bfc01b12d50ed17edd63a19135b70741e51401fae8d2d4c7736d564cc13c43a564848daacc14ba95ed4858b1237b85ef1c23bb615e1e0b59881fe81900ec649859af5b7e13c7eb49406716b7a8d3dfd018159debf40f64e24d4cd3ee164e86b95d3ad95ec476cb3516e20a521c392a56e5668197231e8c21e1b4c031e453a84d889bdbe178e3a354f260335fec89401231f93bcf359007cb832d43cf44eee3b2d476471ead51c5830e383a4ed4be219327729e7a2f50c34bf404efa63f21baadd50759aec8c9d0686a5bbf42db799da9df98592fa23a9b07e1054d4da10eb74545f04927c51ccb8dd458f33c6f909d8cdf0e4020175259caeaff9d58fab611b42236724c766edf409e6e025910e22beae0067ed220b5e2b0bf25a0ce51b5b86cd070ffa831835428b254e1b20a7ba5c4762c0d597ac70449997d82d9c08133663ad856b16d26ff1ab324c9946e34b2b1710abbf55598229b9a00b19e44361cd8b044cd5a140573f5f11c34564df4619ac20ed58243a4d42055a4b2ce74c84433117a28713dad77b767af9b4488e92bc71df2a2a6a72e3ae1c81913686ae6bc22b84e7646c50638f6ed327b496658a7fc646b840a6714b30572fe4bd50c7a05fa09abb15b3cff16d53e6e26c6b7fbab8553e9d9e15d81efc9234f5812ecdd5df029ec884f42ed0722344f79ff5b57197094d89d2481ec50c83f2a23562bd4b921ae05b01b810462f9c425e4cd28adbdb7f12999c033cb9f74b6f65e1a51de2f44a2d2f8f6f3b0acaf517eaf134aeac12339e385acf314e181558e974c20c3434a1c752550cddcff072f793b644cd85f64fc60bb362d74e46163080ba18b137f4f250fd0126ba5c54da06a9e89d25704e588f91c834bdd063775f23517696f1c42bfa6ac888e0446f268b3c69b3116dd93f01a9be498390990b243205baab2908498f2a903c411ae1e01384324f88b56f781b5d1cab814b907d6e3aef9613269cab527473d7b03f717721fea51fdbafa7711cc4e138501465e27df880e17a0000567e81d9985bfbd6d76ce63f1fcb3d4c829e0664bf34cd0933f5ef68c9534adc0875012995655323d0efcbb345eb86745ceccd1b584308d78f0836174e69b998e2d1fe6ce393a125a1082d45ec4ad02d24ed138425865951b98f0fa641370196dc1b04997727aaf15d230edc56652d01c4358300d0ab7c19c7cf5ca1286c0487432024b9819e3261c5021f1fd352c96bcb0db40f860d049887384f65fdf5f7929121333bf87b008f8d36ddecde99645533591f3277ad6b508e8e53fcc870a9165d5baf33d4859bee2a28ed93d3a66f90a4800ec3e78e081b4030800235a488e7bad88b8ac666d428bdcbf16409e5cddc67cd4d4a3f2d215e479908521e16cba9650a60670e774d147e0add24a32f537b0f6f2924ec160a34b12092363547fb26be525e030f5be553ea8a7f424c86796a68c73b00a6cefc19dd1f6fbb416446793187fd8e684c564f9b023e5a6d4cf2fae06a4e656974700f2c120844043e516ef45bb75415c26b85a0945c83a2186a5f5360ccbc26e2e6d0e9b2e69c0cc908e9da1481a83f991bf25c68b7a475bf86344de65bc90a7144c84c315689d51d26955c3705df6ca5c7ce34ba92c7a53f6afd3b2ba286d93693467baaa74da9a86d8bcb655d3e41fae0940388220f1bba6201945d7a5eb1019ca65120f258c478a4117e3b9b4b01a7973fc615f490c9fb24b378e9ba1d3a08417aa1a28dd26f24b0512d10c8159fef2e6ee749203e63d848b24672d418941912be66b46311939bfc842a77a2f9388d796ca43d2d8aed153d25fb4e47e861c6267ee7070d54885c3c8b941a41e10a1f577713f15c43791ee0fd8dbba28ccbf5802f561d242025d59e2d4c06634c820d0eccbfd5e71ef9c9b715c49625587c1a9fc5d27ba9d3393fab7c61fd092a1e5d0a90c734a7422ee1764be54665a96a963cc50fa9ed93c78ad6c0e98fca3429558b8110ac30cc33b887180e3153d011cc34eb173d69367e1c5f3b2666ec232fd6d775f43817ffe18f6c71c5cd3820ce1cf04c4554723e7e0238f3947f98eefdec25f1a44af41e942eac5aed56819cfa49849093d99018aeb3892c2f3cf34bade35daaeeeed44e42b075c5eef8bfa755d4d2699ca374303fe425aaa395740a4a429c2984f166fdef93d8a474a2b110fc0e198c90c851f6327e4ab46135404305ff5019c744be4a27746679651cfe73a0324deba0a33323747f70b340576b2b3d1bd768c8bd43a1bbbc7c6b27765029238c91020c6eb4f709597031efd63dc20b31744000aab722491f67b7381872c9313b0130d6f22b4516c5b4851dc157c3da9f8b2edc6c028d77697fee852c8cc3779a89128bef0fd1aedfd90b4d06327b758874133a83d39c0ac4b8497f0a7366767ac826f9a4fcef746728080a9b1e46bd3cc0d269aec7c659d1591fd26f78c67206573274aae969a425c6ce708e3376d3e9ed7611619579f6ba8f05b512fb460ff8ff84c4ddd4d3779c90fa478e61511e9f9b95b3e78217205a56ee0a0f6e16a24e7c04cc9693297a27c8a8449a82579036ee9d406a3c82a1b8eaa60b708b4e510d2782268027a8837a2582465a0783ee9e8c55c9526f1fed1d202c0be81110f919bea13e7a804b492e0e79187deef9f11184522f0f0c5d21c7455ece5ec392f934605f38e4e9b9bf9204155e59184850fc5317171a45d81813ced492c7005d26c8c23413b506ba684c79a0b13177a6d35365f7722e189c586816f5d6a768103b762ccd162f38e178b9f36c7301d68e98de8049e5c645c550415e8146fa3f381bcaa8ccd535aaf705889bcc6526a9d32f4fcfc924b0c8393db92d9258aaa9d0a4125c0d6cb51d595b67afdfd26a460561c9aaf321feb713ac0163170f2a4809a43909aabb47d5ff8089f091db5d883090dcb4513d86eb82a94cf04327d3213a03c5fada74da2c182a17c00ec39b80a06336457881df9470683efa4ccb7a017c2c48fe09d0ccb893f1c9d561fe3f0c1bb600df66448d07859694095b4fbab348acb350c2aa275421dbd80cb2d77d2a3254836dbca90e5fe10ad8f115f2645982690e0c66f67985f47ae4043c01dda95e59f07c9e0a533e5076fe3e852eb8b8f6e1168956d2de08e540a0f4a264cb062b5cde177fc5aa6fdd997cb256092b455577bd07956aa45b157adc4dc90c1b7db4b5eaaecf90d59b6994465aa7254dd24efbb4a63dcd6997465aa7252dd24cfbb4a63dcd6994469aa7250d694e731a5eba2b88132a21fa5175713d01804f601ac85e1ee2cbebfd35c281f7ffbd9a30948c9bd1a564793f84fdd52f059d5c3012d86b193eb1c62f440408b6fea6154d240b0d350d6cb6031ae7fa955d30d615710ef5d9b6b8fa109887530ea50b4cb23583c059fec3364dba50b1534972f5625de51e76ceb983ef5cc67c745c40399f9f47a7037301c057f9140911540c25ad9a19267d133b436b6fa00fe817fa857ee926224242b6943249192509970937093372d832a0e07a7db6edff2165dc1e8836432bda0a358af2b2661a435cf8c9c7ba6b4b280ed1241124433da670c5b4ed37e2acbccbb8a2ad72c655cbb8b2d9937f69743d6be545220c313b2457a797feff8436bd9ded2ba3b6276fa7bc6df75e5ac69717322248963518960daac032de568b65c795ed8d382bffad905903a0449a4c2d9ac3a5ca064da69696b0e5ded256d658c029b815441b84e1a132c842b8d26d70bc398c095946ca2a7de36db5b6c561f9cc22db66593b93d0e68ab6a29d6e561583e7d4b35dd33645d56719734a4a492b6925ed73b32aeda7fa9fdb737814ea198935212e4462cde716eaf9dc2ebedce776398c82727272120a9521b1a6d4624da887a2fc7f04da5cd1b6bf59d6b6ffaae62933d4b39d766475ae723c65d6d04357f48e54059817e4f82f2e2602a87c5b073715978011905ad5fdd088c326e1070f2b077884eff0818c95e38521822801ebbe1d71d4162b075d82754921ce83132f568e982ea090e4eed879b172c8f470c371267e38821633168e9ac30b6cac1c760756ad9952249c44b8b1ec08f280e563dd395c47756f1d81d96cd0a6477cd0663bb12a6692898e8fcd848ecea64c4cd184665326a620b2ab58638a82264d37dd85da7adedbefbd2034ac377aa008084df60a9b3201451635e1e89132787980ccaaaf4d5b68ba391bd476a500eb57c1b3f3dad4c88ecb49b0a9912a7a3648c51a1721b47f15b64d8d547122d9d44815ad6dc51a1722b4df7b2fa5f752ce8aa1d5faf3f843a1b73af434dc861a3492c6872961782943f3020d6d84ae9b6506bceddb7a5233916bebbdf7fa531853c645089ab08757eb5e7b00ba0ce102d3f4b3356a6057400d2fe9bb00a1fdb1db6a75d45a7100522dd347e80bd64a6600f4c4d7e027fc2d5e82343467e34a8f6cfc9526034f681b97def033eef8fc0ecffa9042bc5fb19e7bdedf4b3d7206bcbdf7c81bbcbcbf5303c45ee69e136beeb5f7f63b36fc3bd6255e628cf19b75070459407206bcc107c91b6a283e4b48ce806fc8a20ce06b80247b747fbf7bab64acd5daf737daa43c9508362b6de3253c355e8df046e3af640d25dba43c2e40b237d6e025fe3c36c98097f887d0f5e63d01bab440df3fb9354d512cd0f6efdbdfc13ec61893ca4e04e3292ed42dcf612cd365ef73d7753bbf37baac40fbe79cc31e3a934a4f7d75e71779a16ef1bef3bc9cbb23408f82ff3de9bf51e4a5e779f9bf07471716e8fbdff7dff7610f9d49a5a742118ca74032d41ef81ef87d305e123be7b539f4528bf9465fb7f6ad5fd79dbd5eaf17f7b239935cb0347eda3cd51db9443ca776bb3aab3322b42cd6647fe13a83ddbc543aebac677566bdd9ecdeeb5f5ff93f61e6c84aabb3fb20d2ccf47ee8e9fecc569aa6a8fb2318076ee0c87fbff2a836e1e3902aa9e1f73175d42ef6831dc92203ddddc74077077aee756cdff9c3f03f23287ff267d4b1f35843b845d27b418df9de4733033175c0408f86971ea982851e77dd7586979d5ddb9ca9ce64a579799f8897f7eb4c1442e77a61a0fdf18e46a243c3185bebf7de6b31c6183bc618638c31be183fc618638cf18f58a0efe34bc2f092eedc198054c300bc9fefc69307ad156b4ede8a359fb7b65a988c864d7b306aab62cdc90164508097f7bef7f87e4e6c8792514896cefffb1a482c4ece80b7bf933778f9fdf5f2fb2aca40772659fc3540923d340b02ec736f9f7bafe693b3ac86e1875f978802b657d8740920f4d85644801d35e079a3066ce8b6f77477745b9bbf30d7d17eb6def83902421b601563087d58f5db11f4df28fa89c378790057ed10fd0ecf129142405f411e085463b2d417bf06d2b62c959c01effa95bcc14bf1af97e2d30bd22368fc5e8b48d67ec01d6bfd53c3afdf68de5d5de108d6ffbeb763fdafd6ef1b6d806fc518beaf620ce0dbffc6abc1f196a012b449696f9607b0ef3a347859f5ed520073b57f94e05244aeac3bfaa1af97f55d6e34ae1ccea4520413ea96b72e00e953181b4ba916a2fdab7fc50104f13b672df6e7b07d02a4aeba2c9d1669e35ab568b482fbd78ef5ef48c33a5ee7616fad7fedbdf77ef902ed7fefb5f6267122d7d050d4a5e2b6a9112a766436354285ece6776b338d97f756527d1a1a6005411b759b345655007aba5f4427d9d7894d4351f7f50f6dcb5b49b3dc89811579a369495112dd3de7fd379aa4a0af7bef72a33defc31e3a934a4f819fb729dade8b603cf591a16ec9ff9efa3e7f9ee7640f6dddbe0ea2af972c2b9892667d5aa201ad94d2dffe552607a430d674a7b992d7f78d61e3c6e5a1b7062e99c518f08d6aa33e8bc57f431df48be82a73af4374f53df723baf2de861c1c45d5b7a16e1dad1c6c2354b43637058fcd711ffdf9970dda10fc46168f9c41c6f6b741636792050132b6bf8ced57ace9aa8cb5d6dafad6565b858e8eb5d65a5b2fc7695b5d0a6badb5f5adad1e046badb5b686559430d65a6b6df52088ac9591390192a407cd0d5b5bad56eb86a5c2ddf28093c16a4570329db29ce285fbc21456e6470ce9616532239929b00ccb9c669da6c3233b810e3c3a225c83688a1b77dbbf54609bca04163bb08d4e937b7fa0c087263a37fc86dfe872abd5bad1d518c7e385448d7d345cff09ae72bbb65aad28c2900a12c9fef5d10ba03062d7b7b5fe8d81ef20aad5abad175f8e725c75cbd1c75163b218103b6456ab63939e1e2e9a70d1d3a4c777dcce9c2339b5f3c8a9c456a3d55a6fea4df5515f1548b5a9ef4b28134b97509e263d370bb840e396c67461d378ad91a9d5ddadb5f75e8cabbbb5f6de8b31e6b88b31c7715dd7e59c3dafcbd9f3bceffb40100cc30f04c3301445f1f3f98040e2e7030281b4d6a150e8e4449bb9e6d6b16ef36e37459b94725352acd794ea28a29fb102a43094092344b45822e8e1e8300e771991b1f0eb60e9607d5e47f8e5bf244b8dcbfd7d1d2cfa9f913a416f1cf0cfd6ab8d1e71a15f3f216369b6a071c283d10c6a325087fbfd11d3d4696840b6a73a8a8266c94f592c59bc0901420d6c60d36ab15e065f4b2219e205279b1eb9e2044bfc605b62c76bd7257ea8edfa35aa8f6cf4ef0cc5f63a9281a6373c2434c2dd4eb27825df75482452ad36ad56ebf5ca27d8fea30bfb60b0fd45b72a03775aadd60f9ab783ed7f62931061fb876ab70851d8fe7aa7d56a91e0daba106c7f50add56afdb03ba11edbff43fb826c7fd15bdd0db67f786bb55a3eb86e0fb63f38021b4e8aedffc95aad560a4e70824511b6bff7432cefbb8a24156813bbf00bbbb04b245b8285d9171543f0f34024cdffe775a67d9366fc4d1f0cddc623adcbd21bc6a45d47ba69a069000d7455df5f0254658315b5b539e06e396084e63ee3d70dcc4b7ae3808575ee9d2bb49559ce5a9348ff6509be40ffaf4fda76a42835ed6df06555ce6ae107168e1c0460719f4305167e9354a5c001101bb070e4e898d8b0b81cb50733606152088b7dbaeb9bfa35f8cadb045170b43f4a0beace42fca02a4a4b3b743563fb832fbae23688c476b008f0f58436419709bae88ad6b7e4ef16a80afc414fa01005006396045f3ed095a4e77e5194833cbcf4076d401718046d72a06bfb733958b15b74857728cabfe7a505101b67c1c396a12bdfcef22f6370d99f0c058836c1576bfbaf9820f8025f2bb4256e94e73d65c3861cad6ddf86877155f81486d992f268e9b05d730e479bc91a5efa4dd34ded496626468d41694c254dfc6300544553f8dd922606b2eb9bd40847b96a3fdd5b6aa9dd397f397f64a6a89c73a62818262223436f5d14400a63eabc9dae2aad35bca325a90db58bda59dbe111bfbcbc176b013a8f97749f465a434d5ff0be4465b832cb3380ab64796f9a5e70d1b03c7ff1d39e645e35d5da6bedb5f66bb6aa16e8c99a2adb2b297344c3942ee341b1567b6bbde2f5488a5ff806c33245d52b23e33bdc0d409836f16c574adbf5ff655594dad7ae2e48c2bea4a93f9b86484a5612db9c38e0d976f45dc51a920a34f63a856df110e4cb833ee3892994322aa1f0d222149b32776f0660b73c7d15680c4fc7921e86ae4493c9e4994c229bcd643399c852278fc619b3d7282f920b8a2844369bc9e69124e8339ee49cb41ace0ed3d8427ef7a2e547114acb69fa9771dc3102408587e93e7be2cdf4a878004005980fe85fc8d1664a19752294cf9e843c150f150f6d7b114a41c95049a066a827a06e2cb458d08105d7cccb06e3a19240c95033d4135037167460a1859aa166a8196a869aa1662cb8665e33af7de69c67ce194a11d94227e307f42f64caec3c67a194eebf3fbf89af8d3f8caef13506c1b25222a984234c8521d906e39de7a88953a3d47e7005f162a9add44a35520d081d7e6d84a930448521dbffcc39cf9c339422b275a193f103fa173265769e3397b06514823f8f38ff271f8201c13105311df159ad4bd3904f99739ea694110c07086cfb6b11ca1141bacf824e42a6219f213b9472e69ca19433e77cf179c481f96ec4318d3b84a4b4bc58299154429b12173618ef3c471a65a5445209492fce9a92121735c60a8a28b67f57e2628b6ce4cb833ee34928c5c6739eb614531e715efc37e2c0742fbe05c6766a11cc0b0f6544be3ce8339e9852ce33651432752f42c9daf62e262dfa96470266e3fa13a4a855152b216c7fd30bc246f1defbdc85461c97968ea43fe667f3746a8c0f139deddf624a1965114a674f421f9b5d4933d3bc3c4251fe1f2635c60a098df15f31f161a26db6f76c9e1e4ddb6504fd4be7f22da68fc9a5657c214313dda10b08f342f4c8d2a642680240681a29cb258f38a6ff4c2d2e01084d79c471f9cec5c5c5643b85261717b1a6d4d1c18ecda463d3d1c18ead45c7062334a13c93375e533dcfd3c66114949393522764c3b6520764eb387c621a29ab65c52b001387847eaf7550479b247fc759802077d7d41d546b75f75a6b1da2dddd455c75af5d973deffb40300c45f1f301813e5013e20714b13f7844839a083f20f103d2a11314d1e7f3196b208531a90e6e4e6f127a6cfa18081ae332a9319eba4ca0a5631e68eade308caef0d3c7a7ab5e9e3ea6b9aae5e9e399ab4c4f1f0ff194f8f4b10cc7accae5e9632014bfa86a07e8e9631f342572d115cad3c742d018171381716050782d6cb2e8b1420a27a8eaf6a8300de8c9dfbce7a67f8b5015c646886cfa57099ac2342f6b74f579fa974657274fffcef0b9c3b384e41d42bedfe159a5a7cff2f4415aabfbbdf76e190e4c08fcb97d9a7c6e232ea5549271563ea38c33664c901521c40fd2068287136e05f43e0ff127ebf005657f23cecbe371868da2663099c1336367868e979e73d26a383b567e87cc72f93b838aed3f430a1ae32fa4ff1d6458a5774972a448133d378af22fb99c1d6be5a5096daa6c6ccb48db32958d38037d72f2ef32ee70f917bf830c8bfc71e6a6c6d4af33b01922be99d80c16333b33b71926d85a2b78677a78b6596e73457b31ae90d001f893e38a09da82ff38ae8a50029c5eeed893bbb410ea99b999216206f6cddcccc466b098d99961c2cccdcec4666233b199d84ceccec4667ab43d91706c571b3b3939b163081543198192a19480e241f5a0b6504919755e66a18532021543c9504a40f1a0b640f5a8a0642928d90825eb50320f25cb28190b2d104524faac0a2ac8505064f27f4f7b237f8e22185ba3cdd883a49232eabcf145dfc8d3fe1c4530b6c61ea30de94f953f53fe1cfdd9fde9fd39beb6ffdb516f50341ac5903f93ec863093cc6463f23162b9a05d1a85e0f7461cd337dab87f236f1b37f4067d68ba31c14c44e450cfe709f4648ab9c98898f27bca5a79c44f4e7bc92969f53c42a328d34d8d31a3888908222698a766286164fb67d3cdf6d62dd4f37982c90853ec0bf5d8508f18ead1a19e504fa8075484c6f8e315ede507da5c69d9b8c966fb4a2b1c8935f847620c572605dc81364bd1d3707188066947bcdc81feec6fc4f9f7469cf1f38833ee1022fa1d324b87ae8b2eba6009b17143efefed8f6c463d6859bf8e5ea32846b5d1ce8808b4ac2a6fc6945f473cbb56d2368e9f267eca1b7f4a1a6dc6ac07916de3a9194ad0d267b478462fab9a91c3288a9e51cdaa646831220293d18ea7646421dbfe2aa419b3cdd12b65341abdbad1cb1b8d5e7ac4b3fdbf9e7c6ea29e50cfe766dbe6aae71cedb82a72e3d9d1b1d57244e48a56d656d8f1942d693b96128a43f4ab880d5879153186bbb9b7a3b8bd11e7ff1b71c61fcb925663eaf8f73e18421943378a0ad5b619a3b57282c6f8bf8cab9e9b3df12c19573be3ca36ae94ac6a14b53a5747bc5cfd60fb97b41a6355646584a2fc6b495bd15e946833d43372bd3eb7508f4a18929749126e0fec07103ce4d02a6bb892482168facf38c345513d14b5629ac1036d6d1950a032b4a04df60c070958112f216ecf8a76da93ff0a4b68c62da3a0883538a615b106c7f42bde8863fa6c7ad088c332ba9e55facba4c6f0b8a831f7e6a9afe5970934f5e9404b7fd3f7edb1aacf656940551f135466551fcd9e689efa6a5e622334f5fd20e649b7e7b395423d5eca409b2bda8a66559f9b3df98c993df98bc6194366a08c33625cd4183390a0313acc08b25b9e9a51042dfd6724b1fdadc7858c9d5186cd655532b4a0272628cfa659950c2be8e9073274be9aa76448414b7f9f018bf9b1fd356996406c7f10693e0f01a09d97558548d08e3df9672dd6586bbd7e1ea42de86f9ba01d6b2dbe1187507a29bd940ed1f5316887ae7c87a1aed381b64fc3da313cd942b3c0c06d4b86f6c936413b216887ae3edb4baf28b619b2b162fb076087ae5c786c7ff38592edffa2c8ccc4e33273a18d34f2f682f6e2f454f8fe2f725c157a7184d46217d9a64b91eda62c4a4a6cffd20faa0aa54088d010456c2f421602226443514ad02e3f684ae4c35d5e7405a64428a0a5bfe972b34541984ebaf2bee54557df975e5f0fdb1fbf8dba413ba0259eea3ea4a9c3fc3e9a683ffc8c5d0d1fedf354fc748f6df7b8cb9b8a1d59131aaf9ffc53602520a10f6f5c46e85582792a1cb39fee8b7c780ae4f25284029a02f900024214044864846d866c527e8cdd835c9ec239d0d2079ada516d0ebb9e6ca1bdddbd290910db5b7eecb4bc28ca46dd66e96553e23cd274fa9ba55717db3ef5c82beb46db1a318faf07135321c5f6da054b93b8654f476c1b950a4f79429ba5d72dbdb6975ea55749fb78e808b09ed95a9a330dee3f81aaaa25a835c6105e5340876051a0d0759bd446f3d6fae7accaa24a7490638495e3ea10040b7c5206ac1d3816f82609088af2f781a61475fd9dba27923d6cfd4cc3edd76dbf03494bd2eba71aab31775b631cf0bc9b77f36ed5cbd973f7ef73c7e15b6b2111bda36d275b15ea1ae34f69a1ae314cffdc9c6fce230884a240d9f6c741b65b4b822db0d68a49e88af1b7c44ffe78fc763e1d2f3f293e2ac24dab253fdb4910da04cfef4dd0a66ef3bbd5ac0a8cd993dbac0a94f180c6e8de1ff40178d2d58e5581337bbaa9313a126c018d0193d01428040803cfed248843510e822421b409de60db3912cfec6d893ba6597cd21506a5b01decb9d9134eb2bd895bce37ccc2399b6655421e40592016db3c9d7097b1153ad6efe71b62e339882591be9bc5b16e6c792f6935f0c6e4c42a106655618afb6e094c2767180d8481b72d26a1298931aeac1768302ed0609ca0d5ce02615685693410d66996120da6051ec038f148c22cae0593244c922e198620a9655a6bbd33dad12f1306e8611db739d21e4ba3ab950c254bf5af2d07801efc1aa0077108a938e8c78183101c4816fb94057a1dac7cb5531b0d567583eddeceb7eb9238bc3ce9429bb467e320a486f89fc701fcf0fd6fb02a1cc4ffd4b0d8af113ef85664b1a403c2073f022169ea087cc82a9232d813988336e92943f80d0043121440696368aafb18b8a35db575c388f4dc00f33cb40148614c5cc367a5fe768b9c1bbab20f9bd5e76c629c082a0bb81054156c87dd4057e173e1a30966e227226c61058d81426dd7c7a79f6a4bfc17826881c6c03f684c7dff1a74057a7f176864e8ea04e7208a18f80634068a21bb3e0e72c4869c6b578ec7de4b7876684788504ac3c390442279d9825ff81141a193a7e1245366bb0c7ee11b0cc34428aafe67c4347c04ef8c78090fb783a23817c7838b79c905e164dc105cfb9690d12acfc987b4cca6244ace275a8748244de60f996bcb01ceca3ce86c4fb5b56b0e9587ed15881f16c040063cd5d1b8b9b09cbf0c1f0441110445f06978582bc620885f3020b120322f6b6dd5962cf4ef8429dd4a3c24ab4279fa465032b3a9912c88d8dea97701e8c9bfc8291a71883ee551461c283fe2b8235e668fc7f6cf362f3deb6cbfd776776adb73cef623db336dfbfbd8feda6e82d78d973dba20dbbbd8f60e08a8c44bf77252c63c1a3513daec5ca477be68096d723daeebbaae5b4bb5d2b9cd52ac94c3036d96ceb394e32a189667db029e6dbd9cb5f6603ebcf4cf9591e8b7aad2598a9562299b2271c10fbba27c18f2e80ff601591089ce35244328290529f97b51d0bfcdd219dbfea5932cd552e9b4a598a74c8eb6cf9ced57cac87c2e9a2ab4e9c184a031401e1174e581bc3d0f88a7625e10f764de104f7defefcd3c75f2fe1e114f85dedfa3794abf1196106053233c49d89febe381c6e0defff381aeb84ac36d1e435a8aef8d9a96e27fa38896e29f8c245a8a1f1a5b6829be1e9f96e283ece801bd2f4969297e37665a8acf8d9796a259c3febc0d63106108f3b6db9236e0d89f0f0a6923921f0f2ffd73e5a07f539a0c8e6cb37bfdbdb486eefbaea3ef4b9110e1032f094519a10999936108b7775621f4742f1e360f6772c40813223158422bd2f241a3f1c85b34561637dbce0df1d239d8f65ab91b2f9d8b619eee737daf9833d9f53f1f4030cfe671e329ea172fa9d1d7a27b2f7eba3925bbe21c2f2ba6f40836234388512347a87d3e6a7050bef2f0947d9cfb7853233c4c6c1065fc78f8c95f8672c9dfa677ba7048061c9c34dc3bbdf3864368f373916a744580ed9ff368532438b56d8fc0b3a9912c6cdbfc5cd4084f6c7f2eabf2ce6a3f5e128a0ab777d6206814eff4144e411120396c7f2f87aee813db7f8484363f17c9b5639b5ff7fa5c3a9a25bff9b940a0c1c76f7ae7f6b3f6b22aaec671655785d062df2357ec7c2e4fd9efb8bc00161917bad7ada54d91c476b02f976355dc10e76efce44fa47301e9e16241b63f47b32a7ce368bba7e5b2e178f6ebb6fdaff8ddcbaa3e17d9bdb61bb141dbfc5c31f8c628f5de5aefad28b7fdb93e57e916f2981dd0cf27054dedc9ae905eb0d0179aea5670cf5da5f5da8f077ef77efeddfb81de0d8c889724122d0a204d7e8af25769e9fa95a46f6dfe0729c7556cbba7e1f47fc873ad9ecfd3179fbe4859e6cba61507c4095ffc8861f8e298c37d00810958e183b5fe532791fe8a355507ba7b9528e88fe5fb68f0d4006a45b8f93c5c6d9ec25fbd197c7b1f836f8f8a0ca8244e48ba9e05bee0274cc3041bb659150da5d8566d345d4763553318886db7d9fc8086b684c936b2848662471988cc6cb51d4f9958c956e2a9d2f6c73a9eaa619b757101a56d9f0606244651b5087aaa5f4446898d91781a1aaee5f9678b514bd4639fa0413710c8732f772f77af13f4e49f145fcd2d88c782b609fa4e2f5d4504da04f1d436880774f3948d1ba026a01e4f719f338965dac7f60771e12a50dee1351edb1fb40faa7d3c98467dd75a2b5ea203e271acf1994135ab02f180784035100fe86223b8c8f607f1e46c7f29404d3041b7edf8882531cd92988649b3ad0213c4b364e7b8eae3b1277feffdf111c7678f8e92edb125bbbe09e2d9fed656163d32ab6203b2d5e5c763557896b1b8cdcfbed8fe94c698e3f6c7334b3192ed020b8ff85afbf1a7a85ce3b2bcf78de3913872b03249b2277f0c238d5aa3118864a2d867874368f3b3f1144a8dae04b0ebafa014d1ae1d9eaaa459b747761cbef8e28bef7dbd54dca5045a256f151ab05abf7efd8b398c398c71877f0707371e6b6df6e4b69cb5feb7b61289a3f42b248eee084f408295c3812ca1014b087e1d2cd3f2d8accddeec8efd7860d789dc57b1867b8ccd1cb6ad81fadfe73773d8f68703cbe308810e56cb97bee5fd4baba2966aab5af91255592568e84d190b0363a8e4f7e1109a65c4810315412461b1fc77966c4aa63791385abef43a58a6a7e12b2fff42e278f99596979691a586cbb7bc0b695d2cdeb7bccbbf8c2c35fe5ffe5f4816ef5d3cd201ce32bd89b430d2c66c886603fd57fbce4f89a7545efaa55ffabd975559dbeb656dd6666d9fecf5b2b64f2613994c2d41b4f99db07cdbfea11868d3f278cafb4ebb231abdbfb55995e9fded124fa9bcbfe5f1548a4cf69148d36855524ca3b33e99557de729fb642a292394ef14c5ef14bf53341ae9368d98255231b5fc48f49fccaaf2cdfb64a34f16be482525dfc451be79f92632995a4ebc4c9a158565ec801280bc5875a4fb2434ead384616d62389656f07f23ed56564a2b2b2b2ba5baf27765a5b4b2b2b2523a4f152f653152427332f2fbbd2ed6509a14a29ae8747af22f95700c07f114caade298fd18ce0b62230bc6f86c818665443ca5a4c910110b156c13d38ac0c51e77b63fbed65a6b6f2d8663db318e89aaadf7de5b000aa2898136694d7c93e4002b446bed0be9628a6b06412298666d036a57ebb80c034d833b2ee78ecb9fe779a0e7819fe7791e8c082dd3e0c603b2a12b17b6ffb89d3aad5cd7b99f32dc300c449a38a3a45a2bc75992558dd4e9c9161a3cd942b3c0d089db2df9cdbc64a24dd249573f680a0fc12fbaea300d68e98e6d7093703de021d8065c0f5d4d62831f3d58921214657eb3facde8cabe697324b52d8aaaf8f52291449a142ab08e600dabada38dcfbe9137c7715de7220c6368249337ead65adb7baf8ccc15600dd76a8e6b565b57716993c6003423a1940794424122914c12c7d1b0369f5e7ade34a814d4099a84c69e70cd094cca626b29b68f1c8b8a341c779d8d9734341e11b533168bd9132d665539c7282a671c668faabc089a6331bae282e89bccaadce58ab92b761ec04bf7188a0cb4e9ae23de83f77097fbe03fb8cb83a84edd7750d48e5d6179d8b82b7664bbff01fedfdd89c462a1dac7848b51f05e9152ac053df943e15649ac57a04dce55bb6d7fce6555789669da856bb856e3387cef25714164f08368936602345c800215b01d6177dd5bfbe99ec65a6ba3210f2186a2fef06be80fbf7e18be48e2c0218483f8e16bede52fa4bdfc79f90b45d0e310bef87990f8e1d700fd47fcf0232086a00f0834278622d979d9cb1f0d1d041dbc17ac14052342fb3c448283d6921ce1c6ca41a72002223160e52e06dde64bd791385aa860e51021c1caa4c809e06f9af0d3a79f179b7e39d218618d09d118ff0f263545f9e72374c7b3310cf76a99118c463c62129a7bd0398e9bd1d5095dddaf3f6ad1556ad7e76e402b925d73763d29aa26b1ed5a6becb32d37dbf5eb876ea0cdcacd6c62bb925ccdd6de5a6f26a93d71dc886b8167ed3c74f539f1d40bdbdf779c46ea39fde63c9b5aafa104daf4b7374fb1cc409b40574ea826d522bf14b4db4e98c438679d84bedb4f42a04d8f6d8f79caa4a707f1540d5eda9b75428df1afa26d42515e69e0b399256d133c8812b4cb3ce6650a16ba064ff92700025486192803680aff49c5f6b2b4f75e22e0134221dbf69cb52691fecb194fce5a8b49e8fb74e52d6dfe7d7949afcf7ce6339ff9cc67b9facc89845a746580edef37a0aa6ae348360b72f60d14f5017af277b120071aecc93f3b44d3a6cf424ae84ae34a14d9fe5c92ed5f9dd8fe7606051a6c36bb291222b0d895a6569a4a53693a8eeb388e7bcabd7ce6b3d04ea80368cb434c1a1a1a9a4a93bb2e774fc3bbaef33afcf26e686876381fc01e9badb694d6e59a6dce5a9348ff94e6b49a367326f3bd9445bd6c81b472502ad9effbbeeffb6818e39454fdef75c2b6ade19c7bb091010bc70e2c6009c19f131fb4dd408d6d0dd8ff1eb40f7016e94b2a259552e95748eb62b95ffa956779956721adcdfd955b0a7273ce7fefbdf97be5ac3589f45f961883948449744531a6317cef91e110ba7e2fbad2db9fb44357a98d596aa4a8fc6864a93122fde875b04095d1bac612695da5278d2c35569ef42ba4b52159f297486b67f6c4924907388bf424d2aa903616a269f37b81629ecafff90fa6ff46de21ab22a1689ef7c41a91289346abdd49a3b33c1e2f047a8fc6d8c72d2b8a6168a49b346296ca87460fe4addfe3b1aaafe5f1783c1b7c13b7f2187e2dbdc30f91a6ce644b93a4f78d432271e460a990d49e6cdbab756df1eb0e5de5f7edbd5980ed1ea528cf1bbb078d26b8ed5753b4cdef65c2d8e6f7b21103ddf7c5bab34530b67db00b479f826ba831dff8ffbb1c8e7834da94d15977cc146553de374e0a8923076b44be5e251a8ab7d44035d0991f472522c8134db0727cb11aabcb248ecf10d60e98d59142ead3a72c142cb499a980215312419bf924637b0bdb0be09f335996a01ad7c379addce8ac70087db73f4a8dae666c975575efdcbba82db23169ea2ac2e0b2af0c8836b10bbb44b7486b665598463bb376bd177a006ec99de84a00dddb8c65d62df691738dc1af8efb3c311c31100e03b73b12db6413cf76f554abe5251c730ba6c5556e4b8e5c94d83325b225472138b63c9aa2d40503b7339955281624165c2b54dd74530a8325ac7455296a8516006c6c6355d8c69eeabf5e30586cd79fcdae30a9406b2e302f3ea4f6ff53c49a2eb7e40747624d264505e8d83a1c770ef3c8a258ebe5aa08dacc2f4c58c0b460b162d1150c0058924ef44101a45cb1c2e80a18a89359ac8820b24ffc2282cc64418a98c982c4c4f1035908c5681950d521d1a6588844a1277122ddc2877b53c75e3f6e60de8f9b18ece6470c866f30e9cdb4ec63207cbcbc376dcd630562570cf34aedfd709f7d5012dbd80184d9aa2c7e1770fe52aaf0865d0138dab2618835dd0a5da5a870156a57e116c52d12be5768538331eea658bf109ad7894d6b9bb6700c7c1296e121f8c8be4eecfafeb55d356871c407471d38d06ab55a2c1cb3611ec311b7b0ab08dac433163615b921a82c60ec6ec4312fad1843b9af003637e2d60e3f391ed271a7fd19c06584d75518bb402cb4790310030015605eb08082b1428b004e65480740e6f3b5b08eec335c94b472c602c367db7755e8f59b5907a266a884ac97363d0c15cd88000000007315000028140a878462c16896688aa87b14000c728e506c584413479324c95114831441c43043082180100230334443040297d260bdae1284e63e7e683b37d88e95fb9d5ef6d8c5e2b94f6f7f47af475cef77b3aa7e911a451b5ba37b6ba04792d78a9f4dd887e45ded2d96865be42d17a9214ca26a0139002ff27b6dc9c53a50b04492571a5a9aa9287b3eacf480b30d39f939d7281866e54121d81ae9866ef0603ebf48be62c2742adbf72d244cc86c9ea5cbe327356c037280c9b47fecc92a4c92cf38c6af39bad2f8f4bd1a3e7613bc643012a77a758cd912eef42a727e2a65e00af2f27f79b29ced04af8c630088565b84a5131ccbdee64634d3a4f62fcda3cd7882429a59cd636da379bc5be4dc8687f88a38f245236a27e01cf27b2387a2c893d8d86274f57ca4adeac33663995d2d543a4cc12a0b565a5623ac3b07eb21b9fa0c50f12070116b961c47c72aa912c3f8ddab91f2149ddebe7251f3b440bbe51108a57b0cc43bd23e6795620bf5476154c4b6ac5e816c5db722de55d65556ed7b110a3ff9074636403ba3cd9f70080ecb9b4a64abb7edd481d452862cf6c87140b8a7f0832279efbfc11206dedf36e93d2954340660b6441794029b2ff618d1b122c5525648c2506c34cb93f6273f247aff9a4233008a6c1b56cb45a019a7e7d043c07b4b430afd5c303a21d778aa978208e29952ce881eee2c9d9f678c007bd5a200390c71d200e67c9cb42a10609b7f0fa219a81edb04f6a6b4999b4c807535ec83e42670823e224c29ae8d07aa0c4ad5dcf12f67bd666c8237813a411e5f9900ab2921298ac3271e34daa3cb4b5fb44731472df2ff08b0f9185b5ba8012d3ca02ba06423c1b31ed88d46c7ed93537146f819d8586bb021c466eeff1ad975cb0ee52a2ae997bfdb45ab0fc022b72f446a19cf705e1aaebb7d390b1549a2f70508f805ad716e3fd67262232dfcdba704e2bec24d1a49f8a64495fa7e49069c419db4be0000cd26a4486e816471982b90ead3b34652e7fe64c7e01b8db2ae219f2068ab70c090bf0d63e2d89d7e46e4ff73093c0a00b2609a4976fa653333fd833b29e7632b078b9a218bcdd991177cfe61b2ac670b7f928ed57df88cbe053fb5466a0171c2f19ee8ddbafd1ba9f6bdf73704d463b41663251c7bede5964ab358d5a3c4d0d67c5276314b18d9bb57fae6a260c7366bb1c30c27f205dba1530ac962c14f9bf64c9d225cdae247805be0328a2d994df877c0950fbefc7a3f6af30c842a42dbe1c4055a8a01ff81264943d92560deec42d02dad6b5ff6ddbb38fbd3e066810cd89be9999d7ebd18c0bb4c80ed9db485db0b90d2b4d44bea914b6b7a99b79f73c12052234fcfe7fb72d2212523ec5fc13fb2d5492ec7a0dfba3aa530705516eeffa73d3602aa22d3f3b06a3813282bbcdf89ab8de174e45b151fc7a0dc13061557b114787dff8df413bb7289e6ad14404c27453cbb8672bed87936a457bb7e62ae9a86d3c115ab3f53eef2ba965569d2427fac04fc3cbe19fd181769358fbf8f294bef0f619728ab9ec4f7afa6cb0d7e03965b58b018ac9858e1fdd68c9a534e177ed3e0f67155d5c6d0d8d421a625fd8fe10edebb6bde14ccbbf546da88021b714fa68d89ff5647ef4efbfa786b71f4a207ebedd704cb3dd47d239a583407eb84012d55f44a3ea8e725374b06af55f2eef6db4062ae0c79528ccd7aa0b51301b180cb89af066fa873d74d467107f874c229adeb942fe1a0d32d17cd7e3052ad823540644c37542402c355d2c71eca9a50f7e412c600e41111e058b01b97999d06a8588c1d038c5eaeac444e507cb2d0e3892453a2b02ad5d929268a851596c548f2118a923d5ee3c8d31c837f5353f09017c2f5f7c0e716da1098d8ddbe7baebf42a7e0c7cd7b35b24843b7c74d571fac1d8330169f66b7d34717addbee9368dafd5a769cf103dfa61ed8ce7df49c821df974bd534ec9c43b4617fe61f528ed750efdf011a74a9e14de8061e1257f09f5fa07f64192f8a7e6b9450834e03450e1aa6f309859f58cab3666e793e8b94adc8112d3a987ff5178891b366315079459eafc4c53f9e68f8f1659f58f4a923b4d3fd878598d9768418300f06f095d449ca9f47c9e7580f51b174d23adab0cc38c117f427bec36023794235a1f11d2e1feb22cd7fae632d503e53579ec95fa634c1bb375675c1c87346c32a21ce1b97b53c7ec2667970b426f643ede5276c48985b754c2fa4eef903f8f30f0493c640416f7259e402447fb86be85edcce22df0a7d07c4c999fb81ed3877d414b122719e6c00d61f9f9573aa402892d38dc32567efd926368668f8c2557f69eb39022a73601617395db22599129a88404a63549fe18b9a844248c52534975c07e62bfbe2fed2c448f4f83fb7b2ba1d46187db97cf90b3563261c5986ed432c63db1b06e9717b9e1ac310971f6082d249418d6ea91cfec059630a33755e5530b05180ff5468617b74199696fa26fad1135d50f37ca9d8a624e042039931e3fb70afd42351fbf818e6a028710f4a958cce23d14f59d9eac0fec9a7520d62529d0dc7fbd61fafed3322463856428c65d55680321783ea6c5c53a470647cd1a386cf1cddeda00898f2cad901a63256c851e682e3c7a960b56ddd154fc52912ee79fe5254b06646bc318b023c22bbe8dedbc2f3b1a5ef194d60444f2ca81109f7ecf153b72987094eb1577a8ba261efcc6610254a97795415b8ac0bb473d46d93c0683986a01ed6c64b4aca531df928b74a9698a34b4dcc40dc1db11cf8304d1a54535a64f21babe4eb382ba22fe7b025941ed37e947d2b646e92dfede8e37c48b9154848ad29623edf43d69214e2a1a9bb44345ca298ccf4cd1c2abf4cc896ed93ed7dc7958836f3fe1bdd46f3495c5d29ec3840d6af22c700ede003a6ebf2577ff47bda4662b08d28abc24af028981eb4b2a25872b064fc03f5e52b2aff5d175f3b53bc9dfdfa07f1ad15b8ecaf6b0d870c6c4480ea515408214bc270cd453324783038b528896a2cb372b28d90d4c97899d8026ef1e8a87fcb911707689c3d8cba2141668eb0a09954bd5ced97c1337ea92fdc4b3f7976b33751748c63011588438af9b4f5d75c85333040a75ac2b1e7b719ce10b2867b8abfca371cc641838d649bb9727762675e6da6d724341bcf0d9b985682c2981d6763293975dc1f6fa553e72cbfee90b63e22b4eefa05e5ed23cf2d363e9206d718433623947e7a23cef79de44a56fc30d981fc3ad0fa9ab9b1cb8fb171548b2889a4c97c4200b534ad673db98cac19590f81a0e137a706d87756927d940b1e67f15896f8a8c7050249eb5c4285f58ba78b299ca5a96bc82e8ed5df9dbcf13073b2b2deec5a6724ac1d77e3102bb03c8f7649b61527a877ef677ec9ad3c425e2f2533268a18b732302a53498c9ac5fcb8847b9cab997366c514f16e574bf65ce6819160472802b11e534774859a63d5d9364823d41095600719803adadfffc001cf0d19754ebfdc6f33f10197341ce47a8939089031662d6bc1461f4a00d10d12943955d4e4d9f39cea06359ec1be3d52f156890c2076219a766fd93823a2169d79553f3f235de3be7edce1b1da9310e1377d1ab64fd743e8ea5331690733c560826a567c94af8e24c0961e5234db181ca250c57a8f2f48d1705bd427495c883e1136fee581439b34ec93b92c82b84d8d26e4682903d7b1994e213290679dd0026db03f62029d65d4a84c923e9cb65e16f76e2a2851d2398139c9fccb4d108d7a8025ae992cae74980b4dbe318d6d2314a266799eb5fc5e82df96bded8f77ca7fdd6124792d9c36fa2b5e03032910689c91af91082a7e49c45bb33b10efc30f877aab60c0b3b197270fa457ecd1e8d81b568d0b3b01f9d9601bfcfe735dd488c1f4c6d04905be34f0a01d61c94684a31f9fc0c6002a7185d53cf142d207808a834959e6c4c48fc44dfd7014b5bd78663b23b07a63ccaeb8a7d4da1b4af3a5a71545c634d5f16de0baaa24adb9081b687559d19d09cc1a831b79a06e14a1aaecd774b9b5ba17cb40083e7a5dcae0c36a666191207160744123559070021bdb806a4c5a5fd307dae0abb1de0c7fd02e836e84a5329bc6b37790387de8631f9a9ca1f0c25ceff070c8f7ee8c7ef3325c7c958f97c039be1f26a437b6fe3c12a7f87b303d879d8780a8bd2a589c57aa3743367ce89b007d547b1a0aa74b60ef514cb6fd0e29c1616e5764667dc2475409d2ddc4bf312988d2d3d26e0941304254ed9b646d251a9dafadd274e72cedfd6b9491b04b041b8902ab348224040c77ee1c73f924ed93d08c60f03970c9ce783eb2008eee6c7628f360ce3decb57ef72ef073b1b13435988cb2177818f3db73263ddc1649720ce7f9930a2dc253dfe795a962e626bae7ebfd8d8ce9fdb07427286af2a4dd82a6d5ff9e45b99447e8654e31821d23e11dd80260c58dbad8ad877e31ea63c8e08522a6cbcdea03ae4f814cdd11601ed9b11e398bbaf96123763991f41f929b950c8e98e5ceb0dbd511db9fb2c226988a6822f5f4953b9c74759031ce81bac9ffae6fadda17a21226886610166efd92c43032e3a3a5712def41e2b463f7020810741092ca1b574953564eeeecf6c5e6f53db9f897f487be8a6f48671bf83494a3a0e28b23f4fc80603e81a2b4d9b40c4edda34932996f39466079180dac2610cc6f034c379543580b846b2dee7a901df3d67d684594ee6d52ce981891a497dad1db57e05511d2bffd9329236432c60b44857f43bec2aca93c10d60c542de420e129ce10e010d17935b1748fa3cfd7c2ecf982a964a5293e96a42fe761188833e00d2e0add7d0768aabd50bd8c0b6e232fda6fcc53e5d6666e03dc7374b53d05c417608bcfc40c6b9415be7e8c9d76ec7fe048c9e8118e12d9e1fe71b3ac01bb19a94586fe3d120eb43a6ac3cfd86d50da114c501bc9098c308b302f653cef2a025772202727aafee15dd39df77eff9eb52d94cbb5d481c1614b9aeba3ea6a142199de4a2a9935e4b3479f1cac897d2b4eda454ffa9a46a0e1baf5f0f53abf922f47553c04273c4435a486d4a367c24c422f487ab456586db2fc28de4dae68c5cba6b0b375e91cf05d761333b970557eae0f061f9f788d42287d71fef32f7e74970ae1fa0904ef0da7b4f2a7ea305890019e9864a1e71384fdf28e8cd1c51035a5a22f681a0fcd357b04437105acf9348fcdc3672d30f60a8cefd6837939bec1ea6ca903eb80a9488ff7d6b3b1ed9a2a7cde443dcbdd7e9c3dae6030f80bad55122b9a2b94d86f15be9a0773e8f1887c308c0ee1132081dfa0fa88a1f8f6623db02d5dc4385472642c12b0543556ca2682f1db3865f62558e88f08f70b74327322fc57ab7fe38efb1166f36d98110c36bb501013da8e71d3d593362329c48437bc307d256a81496c5e5997e1684553f0537358c0a52cab27a406bfcb126fe227cc0941808ddeb04f9dcea6a7194d05f239c34375bb1711077f78431878c3e97f98b7d00dc79efdad94b78b38e1e978da974eae42c76e01ff7632fb5476dd6ced1125ddf2d6897c34ea7f1cb92c66667f1df415028b2c69d60d73c96169cc1eacae08814050fdab35361d7d68ab368c7199c383b8b0b857b026d711a8be7a1b326552f4dfb6d3853cba000d0f8e64998d3e59b377ad1027c20f14a195596e63e1272d68aa6d1d375d8950d6858a9624045bbc31d7b998945347753bb23e43316d10eac1d7d054e02e3e40e3260fb3ed6eb57865f0d0e9c1f5bbb8425b9660138bd0d767c5eb94509f88ea236fe2e7c1325d9376bbb4607e758bb61014f045bc65ac1ce7550d9bde99089bbec28b0ea1d218e6cef447430c9baac7ead2e305467e9b19775a75d87144f86f81e9d51ad67bd680f96a7eb6b971eced3085e817452827fc556ccd051350c3efb211a2e84b61495cc6dfc167a2ceffd562bd728dd8391f753ebd78c87f18fb1e310a70f9663edcf311c7865a1ace74c67ca3e8ec15b500ea49eaeff3eb7e0725cec0c4b2406f568eb84e1bd7e088430d6e3d9cc6466513bcbd781d1361274186968be6c281922ff8d779c33f44e5aaa575f0e434734925cb5e51c62a4571e01f320ac5f73f18a9addf47f6f8b9f404b789a2d60bd6a168aa7005945772f471264082d2724b393f0cbf59201f41be9510543fae0d68dc227ecadfbbde841e104d02a721c0fe00c69759398e6b4647d5011956fca689b28a0ec7fa0b11eab42625f6ce27901f195573284f44c7858009062d5c8483382c666957127abc11bf7dab618dd8a0982a8512d0046cc9c6fa0690f5a272659bef97e33445ace0a3bcdab3595135698cfcbf58d669bd3a04f4ee1e08ef4e6a35a91d6be67f0d4ced4ea2cbd9df8a0ce220aa17db546946c5c03b176b10c85719d2da50720a374265075f90f6acef26b1bcd215b5ffea0a65eb14bbf943f2589a0932aa9eda1a8e944141135026db4f227d55c37ea5e5830b770b6d84ba05e607c292a4c1fc10e16fe1085d659fec6814dd9bf04233aa98d88dc08db1b311721d5bc09c1a2f9322022ff37b92b7ce2ca0c231fd99fd6b8ab4628e25cc5b2936404785db812ddf0753125febac2395b3a4c16825981f8a1c5665015f46d750acd597630df3b794e8d1f5ef42ccf2e5a5245e82fc76717ffaab9381a09f2fd8d638e3742abec3d3584ac380d8abe34c9438ff7f56b16295aee400fe891d6cd46e5798f776a11735e8c3b76804dc1a1a7724e9719963b0798389d993b8a0682b6e3f1f1d10a08261193b6c34480af7237b6f93e43c7155c7b6c5f6db0ebac816666a0b5582012c1ad8447ede7b4817792ed17dd1ad020d50109c6f1d62e5c118839548eea40f5111c9b15c5a9fd989fa0ad69dcd0c25c9a65a57aaa41b0daff2c0be533dba4c5317365b31f7147c3a03376f3f6ffdd715e6c765c6588d5a4ba8f4c3132bd4257d94c133e30ed21b7236a8b1f417ea63eea922011acc1392605c2e4984c82d00543145ee8140dc742cd1640fd7268202b2f6f0fbc38066178f117d6b371a8d36be337931e42f4ec3bf902e4a20c85e8dfdbd95109e3f17a2f8a19c680a0005246da7eecec30a4498192dc8d123cdc84ec79357deb8ba36befb09ca57af2ee6cbc9a9a864ad953d7415d87013d16d33900689625c24dc051f5dbc7940c4fd66e116f8655076ec0d826f6673130b28217d0d3dc09aa95a7375982eafbe45e5126331929abe282a577df83eceba17ca2ea09afd9ece1de30c054f2be231a7e3358227b194e645eaf3fc77526653032f42dcede2a1a18fc9a13be12493e44db852de2bc83696c3658b43e92bde7d597bc01cafc0a2c30634348a836e0be8c03f3bb8024950f17033fa9a249cdfffcaa51b66e16e6b8e6965e5df5002d82d2b8b380e14388c69de5d4e453da0210c0defec25b0895b33cc0aa9183309da8a6c392c6144e9edaeb42ff2c3d843acb069d65eae8a88e6ee284299e87845fa9cf1127594405234e790190e653dbf7e197d6a6b9f6fff96fe39b92f075c031218ec6440e9043ccc59a8e9549fa44662857e9ab8341bbed2dab2f574afae63092e40f4f2a6e292221e947fc57c35a9b08f30604d6f326a180c96572f1d39c03caa486dbe003e6d3fd89954e204f4340b9e0ad6550f879149965b229fdaccf90c32e3b8289e529e861036036d46ffe3c4ecd8cd81dd7c19a54899d67d69191ac1519808be9d678e6a982690252bdc1a1dac08a0f25893706c394fdc19ba9798206e8fbf4b4fb611e7a8b5f604bbf5143316f147876bd85c90d218443ea1973635a61dedf1999b3e04cb45cb38bb77b6f81ff12069a78246abbc005fa451c326bcdc950b513585039c3ec2d25a8cf1d0ad6e2410249e01200a72b2afda0322f66c997660f1b6dec9ad89f57f7388448e05600121275f491eca6460de4a29865a1b0877920cc2240b89db1b27a78c2c997fb07a924a1c9d39685bc5882e2288520d46d03e2dc0a589875a9d5b59bf85e1eaa40ad691e0a5acf1e08f45dc73eb27c620d1e24db4bc43b89a4289de42ab415259755b161a63841f5dc952913fa8e5e9660482e37dd5672a8d908236b9d016e9dd17b0a468f22a04b2db6554d7c864c670bac65a26fd7bac39a5e4ac0676ed57cd5606960e19e1b99ebb38e25384c625cf7695242c1f5defba9a0130add786f6663080915eb8bd32b0c489457c7fed54c3e847a69816fd5a99b598f3e9e2d6b3ad622f9a92a641c86ae9aae393cc9e8c28b8bdff87f0a08041aed0c800d0a0613105bcbbde90920ba00c8d019ca419fcabe28e806aa5945f30576c3e4f5131d817563f110e86ab00000d7661ba3707682f91883d2e15d62153f3e6dd2b6463922f8166734c8c7d6457b5cc572d3e3c9bf43d1aebb99490d4449c9f2db1b7bd3b8ba9638db1a1c23b3203600ad3360485bcaa9f5857aabed4f359692b1131d9eee06991cb82676240b7154fbd476acb82fb7f0acb736cd4cd7ff8576563e3ca006c800beefd30c679ffc78db80886f82a7fa09627968da550042c743a10c1395b766c91aa8111085db909e47566abe42e32dce2a9efbea4c0f6b33dbd0068f49bcbf32999fc6525eef850f98068a537e6d84683d09e5b1f1e256aee825e72c631c9066f3481d23c1e9340f5ae5d46b8e2a90a2e95a8f70574131e19d8f08a4f49155058a192656000f9ca92ec2aa3ba2bed6674744433bf7efc53bf1a5597d9b2bb5e77beff3a92a1c081499bf1cf47251dce615189b170acd9d228bb16a505ff3fe20f81e274b05d7b78b5db1131b558aae5bc7d3fa8a9b8b5793abb552cb37e4a9eaaf6b094e2d4b9469cd8e0d6637485ae8a15557056f4da555755276196f227b09bb93932f9b612cab052546b7aeb4e8d65b52bb6b2fa280dc59c7c3f81ab5fa010e05d852f272b0cb466d4a6fc33f86bcbc65f29e8b8833f53691ba22c86152d1506ee9f680ca57bb7ad46d1e1ea97b2906025252db6b78922c3bb45712984852c75ac2151be4fade546878418ee5d71a3b607272a390b5d2973e4813fb25dc1d8baf75ada5b3e9ebf6930694097dd40fb4ba0a9158e7148dc4f087e7a9554f7c2a2df138d577dca520018cb8a699d56e433dd9f7278c5d50876b3b219a02f51f9b6d4c5ec8a4d3b10d013c2be9c54c273c9262720afb9540aca6e3b0243f57452e1972ea476a26d831492e75fc7c419603cc295537f53556cd45e59cbf72717880cbc863b1b632e58b4cb547373558d88d900d819249521560be414b8dbe9e68a27c4d0508255cfd1a705425e9beae9e059f0c47c69123924c60cf9c6c71c98b295ff584c7d469d25c8e721f2ce3a5d127bc3405e31e9005dcfa3dd718b2107a0664b2a464093ee3f72250b2efcd71a51cd4ea769f1507021747be7a3eac2b024e0b6c0296bdf8c2e4d0d8f17aa53ddbf20671fc61b6e8ffd59cdaf2dcdc7edb17b112a0ca56d409dc0a305fb9589b48288eb60b2bd66a22618d3899dbf05bdfde1f843f76f78c6239aba1a676c4d5a81b1dede6f4d5b462580176a32e90a3e333c208fe3ebba89314e3a571bc34524642b78c39d234583bb5a25efea7197d931ab83255e3b302b9ee2f6d0a8cbce6c498b796f60242cf866c02a1503a57f914707108b8db55dc8db0a544e36ff1ddfd9c63f9fea37b95be873e6ac44cfb3af13f3ba251da7215691a45cf57cf373c56e53ec7e966c3d29782f9067147ed0e89c87f3fb9a29162aabaa2406d627af329614d1e1298ef6c6b9e281274b23e8f1048b0f501f808bf5c3104479a376e729e0c8453f12807dfbd7ced9578bac820024c2b1c6f45463ce9beae707ca25a63296aa15b51bbd457c24559ae92ab45d48c353279c5de1e16c9146428fab6634f041e4f59c03d380ce9cfe223e5135e04302daa01cc6e060ebc6a90a26be024933142edc77656844582628bd8be45a1b2cae01e1a1f84c0b05f1bcc158f49c1a53089a614cc7cd22d7df7ec8a20036749928692fa3170e54539a4d4b8d1a290d29439ac4c0131a88a518a6eac24903493940ba479c01379e3d0e47d35661940441a77b4c7ef420433d997343df8bdcab703a27d3ae91da13d8dc1e195efff5471da5f4fda83a36fc573bb96d7eb3667dec408ede8b5947b17d2888f978e46b20a0bc4c767ef9ffbfb7a0190f91e42bf7deca226c5ef122a1c446e436270ecd238d1c46e02cebd80261ce09d7aacf95408b7929ef1c0e463575b2656bd8016bc6c4c6a53f8225ec0d814df2435085028b98057e051d388f37e7c77051943b7a1169d06f1852802e1a2fa5906e29deac25eccc7bf58d21086404a2f79050f46100f8e4b42092d366613cd8f5cc95c0366a1b629803055c947d0ecce3300ad95dcc8e6766b3a42b6e7b67ef4c37d6980dc7c261aebc4f09278b284cebff12ec9e31bf73b4216f3c7bbc4461d3f35482413ce78e02e230bf065f82ab612064005855c8b755640353d0ced6033d9a0aa3185123277bb526a30c941295a973471773f1c3a0e24f980671e403c9acb850e02646faf8a4132d89801ddf45b2ba12b32149d8d2db78df386790d2a870d2afe6b1c2b13e1f9bec73747aadaf59e802c7ca1b83532ed4cbfb93332f6fcefeace72fa88108f048199c751cca5659e2e1a11c63c5bf4da0661ffc0d456024880603ece680b4a4fd251758ac6ff957d6b122f0a4b9a07fcc854bdc6874b3d6629d4c0ce248e493f2a39b453a9f6bfb015c05dd35b0d4b566c6697d62e6058b2a2a2f10af8dcf4b930f8cb9e625041c66f43b03f788a9e62c5e9df36ee3514859d3c1aaea88a2520d53c89ec89c93acf25adc3a8d8a26b4f5978dea079a90aa1bdacad1e835e478d1b8ddd25fa8d396880856f0da91d00893f82564c9557c199612e24bc636688b9ee61e40f99e856b8d6539edc64a190e09cbf727a3917a5d75678f9ae80fc9f13ab86ecbec12902554c944ad29bfeb2206e4c255116f4ce85fca80b8da2aa9eb2c7908bbd56a72ae21d78040b1cad2a605b8e4682856c7ba073697e169c51e2ee2dc4a75a71825f2df7d0129e514200589692e9b201b89ebaec56a41bc9e056dc9bbf52345786198a57795678e31bea6e69f8fd22cfca1aec329f28dba015cc39aad7aaa130ad690d4cebbd97169a2e6d7efd87fb9eea9126eaa8364749b7bbc59a34638a78ff93f235ca4e737a2ca6634f45744a22b25dfd6f987e3ec445246dca0c689fc189d043ec8f7e69966c939ad456078d35c871e1b48bc6803a69790568ab16c3db69d8733a929bbba95d645746c2783db3b4a3032481ab8826b6ffa7bf76bd14ff2891905dcb6ccd7336858a547a0ff74341172fcae7e2b60d82c48a9d073282aaab3425e79211d08a177804d9e7d6fa36ebe27614b789eea689f8ca1173076f3adf3832e294383b4ba34d53b81d14a05fa46880fe63b248684ec5ba097ee1fe9df517a8b94abe998d6db5c6f9c09f4b780158600c9fd9c071bfa298491e25e5374c90514a58313f549db1498093afdb5d17eb96a28449e3d804e91f1fbf07155eb15c57eb14d842d5c7f5c49cca4b8411a5f357227079e95c3d1c475732aaba0d0fadcbe65cab70e9068807afd56b75a0b24ffd85d31c93a159d393e8fbaddb098b2ce4d34bf98d30a92720d24e1ac63915d5ea3e1d30e2609c6755eec898f9cbcdfcfe9ca4f5e88cd19699d89660909b227df14e072e363a0837785d6fc4d7b4039e9d5d3f9b835a16a69fdd1b765949bf1453676b2461ff5c555cc18ab493db17ad02b32675998fbe04d0272f1eeffc484f05849e63776419cd08283652033f82df98b0f4e3564bf36efb3c6ee5864fb2b2944b6fecbfdc35ab604203db8fbe473a76fd239838fc2db1fb1b22918c8705986d1c0851b23ac5b107ca731a17c42cc869f4f204e03c9aa38acc0d59346fd122336a859b0d4503bc9661021725d7313df9b183cdd8828e37c6b1d9d192d54e598e2762107abc9bb2d13f3b4e0eaa70e16b7dcb44e1320137dc88b2e9cf872bf9b1345147f81330aa35606aa9719ff38b984207c82ef1808465ab050ac14da536838efcec75887235012d4438ff9d688bad1ea1d6ac6b4b892b0b679fd47b767fde7d4b69dafe57b162f0ee550fadfae1b7178339551fdb62c8bc12ceed5dc0242e4cb251ba874ceed281ef2ca2ab22e120f4defd0a505521ed4996471a01ffeae5f8bf58a67b07185b64e4652e190f845e7f8c378c895af99736a128bdecdf9d0e09b09a9bdfd23d0bf2fc1276b3015bb33c7041ce837ba80774347c62cfce25be0270b106c4722c237aab1fbf70e035212bf711b35ce91b1de98653db2358f29cb4058e6f3f704370353f4742978ec397d5519a9b17ddafe5bbdc534e479100da7ccd03399d602735ef375ed266c6b53e7476106af1d0beb1f9f45db72dfdd42c5861a4b529a2414cd36bb9dac8bfff362fce9340f25377e87c9ad22c1c0e322eef1dbb12f9d455089ade049c57cc9699ec9f76e95a819e1ed202c80eddcc437105c774d285dd8cb55646c6de2da1cb3b1e00a54aa6204c18bc95150040c8d723681f6e4466df64fd1a25a39ed209fdd80aa0ededc23ecc554ce493a975ea168097b19206d5b15147b722b9675d1d42c683db7fe2a61d35ebee54f4cf378a72f20de5ce8d0720e6099403b76e6c923390e15994742ad414c5787281abaaee4f2c7c21dba63eff5e0ccfe06b3addbade8ad07797717bdfa6a3927cd09625197dba66b0759f768b2887bcd8ca39a2dcf0d62c112c84c64dc523a65060398837da88ca9de9bac8aa18f56634047adc9634bdef18484e45a7c7f574049a47b350578b9984ee5cda9bc11f2c0973fb225ddb4a93c3993786dfa6f22e291b6fff83414f1b238d82881969e5d774bdd8ab4268c89ad69f6c2d39d483573f56314890c53a890f9eedd60184a6c43fcc3638149d57c54db0f4ebf4aebcff5c4281c15c132c924a1c8e6bfcb942251af031d51dce2b9ed04c690bdbb011e9428ec704f20cfed3dbb3d4c9dc4df0e3e9167920daa34d229a6e649c39267687b84d2fba59b8fb25385b2f4db91290cade91a265b2571c8f0b3561de1005c92657d5877d49a240a3d67f7f4a58582ab42d255e0c474c3cf0149ecc36eca6baeb4f9db1305a1229aa61828bdfcf248afefb2a23a212d0492b9cb4cd159225847a57d098db029914286ee6da879bb803c6c1b8c5b5e2500883b515654dec29a184759f4443f863b03023e5159967762bbe158fc8f902435551c214b44c57d8c4ff50833ed571590c0cc99f71880d911861786e90d16236dc10c383351e6a14881e38fac1b9b1a665939220d10ce7f9c55f34135ef26804e97da1524ae50d796750f28800633815a8c4ab3ff9ec16ba447ff2292e7ee707e8ad937b2701a9ef5083d5c34c4a652538861b4409934a4d85b3a1ceb990f2cdaa4fd23cc987a8762a0f16e6784b75bf65cabb7f40fffd6db1ba9fd01868db64f141b884786042b932a19c044bfa24c0b9044cfaa8c3e40678906d69141b7ae8976aafa01fe7292d83d1810e523399e0d3fea3f190db82def60f724ffce0edb47faa0750ee4886ebd7f07ff0a22fcd272c5e75d201919338e4eb22ad437556317eb5a5df29af8fddead6a6a450b1b3240d7e5f9814c10a51cd1c568d53aead6090fe56a39cf4ab9dae46478d91c58ba94339d3e6c60a81429c6ea6d8830f57ba2837472889c201cb1e3ad1a4c67441a07acdc3d93cacf812d7f2b647b642de435a389bff6456902ac6b1c34256c6a8e99af20807f54730108372ea190cba6d4f1f057904b7395eaed3f77bded9cae18d90e03d138a62aceef14cc310c7c69a2e237a626fc905f175a3265fa29a99e3dc1e4c94d8effaa0d0b209c188f8a6a40b3bd3b329702cd0f15e3a180b8d63e17336fa15a2ff5a64dec8287c7f895e86b904f40a45452943666ac87b23766b6807c23a2e63270260bde47c2d9877e0a49a624c90177ed3e0f3580813860079ab77ebeba4bd1ac09b21fa1b1356d87cebef1b245171fd68b9a2f81598141b678861d62dfa16f8e053d72ec2100649ce922cc9982fb72053e3b24d37633b137aff159b87963e966268296d98b61bf6ac15c65249de286a7bfd7aecb4d2202797bb68dbbe4c22f25d501899f46a757b1fe9837df59b740647a366b06c3b9b8ba9ee5402e51b07d134093f7e1c8450e26cf556d37776643addb0096ab65af738c850b940481a94223415e58a4102d3c345e3be64ab97511c642fda74137929358e7bc4467556c281d4e1a11e8541a013e6b88b83dc2ea2f5442fd2a966825925a01e002389f904114a558e4e1a063a8652ade2086c734a87f209292f9b85710502efd659b00221b5d030031544315e52cb706cdc61e388c4fef17377675b9ef9997926737673624a66d182e1363aba71d9b4b4c67d66a7f8dcf88bffc2092cbe8272df20bea95b88b56e9a5331a85ef1f8dd539317540083358290ca41db639ed94021c43505cf12c7b85acd08a1930e35bbada753833d2689c117187c35162d902c33cb86b900f7d65e0e42cb75491f0dbddacc5293c8e417d135ef6e37494047907e695aaf5e3609cbd6743742341faaec43b0c9ad3147402ff2d1731b6bd55554b8080b5841232f77400070747e199ebb292416c620c010ed1d044c4a434cb3c035ddd02ae0ceecc7f1e63e9682a147223a5dfbdd76e7440909c6601174e22356c3af88d001b7a1a10992b700ee1e0f314d0b01657f00659701777e015a360a8ad117fa8b8edf42da22b0787dced0ea8f510014a2f9ba497081e8e0172fd4f8766286713dd2bb313e170cfb61a48cc8b3b4b1204d1d0699c42f8a0891bda7d33e5dd3479425cc873c19edda89b85031c0fb24090d353e4faab1e80df8e68b9c22ed69880e1528e4cbd0aa4a136ec76ac00a51940d0237991e978c401b4210fc362021d3a9089496a704be0d6453007689aaf44336d43e19bb29e17d8c6936f5091ece1dd262b1a4ee27bc029e25be70a93b6dafe3c345a54b6f8c5b481f9e2926f6934e3073b8698cc5cabd8d6b340a965baa864ab13e38a126256b21cd56d372c758290d2f372eb7df53291435c2096a3b5c3d7e2b965c4421b9735bb3d116a46b61a3687b365d25914cdd8102285d0728f7855d4a4300b690d50211ee8e4a1fc3ca880d4c0cae0a8456b08ffe91695f4eae50c6ec588243a765f4947986dfccbb04b12c0b82b09e217f05f37eceedf11fba38c46523342a5721dae1fb8ec5fb4d565106d8824033186fae6a1254508cf7aa1201bcd56141b9e38320d016d07e7113549741883f317ca1c0365c74808224c9c51106657e2e0f4b64a7b48d1a5b224cd582566586afb7555808dee26642ef1ebd5fb7d9843471590ccf49b0c6f0b801043aaae67fbde7aa3100b93ec44e34cd6b7616d1a5c65c1f43eff38942429e41cc3f325e091d5d9d7d6c580c2d1ce38ecaef65cc30e21b1bc5824ad86547f4e2a08a2b73ee1afdce0796a50b51c573d85dee7eaf5494546e724ab9f4bd542434234485315ccaf5a2cc8ff4d2c375fac3038768ecc5b18c90a707e41d38f257c9034c64421d4a6460a7126a50ce4f7a5dc8e633e95588b822427b9a66538c931bda6ac46b93413250af192928868ead9145702b7c259b641425f6fd4956ac8cfe5f5db1bc18cad5d3fa5493c06fa723206ad1fbff46f5708282b083daecae1ccd6b6cff493dd0ff435456f29fb1deba81b211341365c8c40d0492ef26b350452ff8bebf3fdf37de50bfc51b6a3b3a76a7fc2d0ff430552e71932494fc37310def26398acc11d68f7ae8d241899b80421c3ffdd312ff037e2c413c88576604287eef64e03c8aec8da6aae3e31342591949f76ca958ca8e48b404d530b6db90003945d9c438f4baefad7a3a6f680255adeb7d12f1604c6db90a0264722f3cefe2be1b9d156a36db95790862f8336b9ecf846b2a79ae1f93f83d25a972ad40919fde28d9bdc7e9d528d48e116df349ed6479bafe05ef2f598b0ed644c05405bdc6927d1bc5879b3193845cbb07c912b4223e1c3bd292552c0c7adf3e2bc3cccb93488ff3be3062fcac9a7356b9656108b7bbd40129f28eb05d46b9cc2b6d5d10ef8e4542c96f29fca6031c36a5be036b6a57f9a7867e2f73e4f9882e842e166e0d7e708cfc4564695c27f938f35d09e70c3600577f15b8205102ac15ea7f5903a79f0fa13fdcf093ef7fb869ea0d078073b82eb4c28fb750cf273c30586095cb68b43a79eaf3d498d86bfb38e6ebc500b2beb294ad9dc24e51b9d47fc4c80856319299c56c4c5be411bfd66fc1ff6ecc57983b23c38e2ce37f5ae21e3c9606469c6d8af57e98f0149554e5f07b491fe9e8869379daaf45ebd21c0f572e9506d4ee5cf5f5e1550c089bcd8a6a1f1ca62c142ca0b98c1e0c6066c15cdfb588c987ee8b266cb5229d656f923f0e18789c39822037e386a8090f3d0e9ac0660e9f80a73fc50948cb0184b60345b5c388373149173f85fc58f7599f0db6d66835a6aa9d1a79972d06c259b9746b69f31dad5e5bbac07474754ea6e99f686abc5588b148a12614a20cf30bb46429666f0d9f3ca69f300ba0c313efe910b54e55cf5552b6379d2319d17db172f3aed2a8e54172853b648c5e7b76eafdd4efa701146a2de5db5708246c9203bbe50cb8cacf108f3f7eefa1ad147ca2f8a6dbf1c7d0001319ed69912a105aeb40c6b42ac0edf25d2fefd91b2bef136439f0ef2e6ac8c9df211f823195ca3e2a0feffd7fa6fb08302d6e60da4faf68495b3da31f4a89ddffcc5178983bacc231c089f3105e572ef12182807ab0e7915f04cb6e446445f25b7b46a811823e7d673fc98ee6b50e7de37a2f5f1b84915dd589f39ce9550a443e79803b6741db37f50462e41d63c8adea6215a898ff002a1cf0f989e2dcf3c3f71e95742d44f6a9de5f006c1eac305e4415d6f768c585739f98c865fc7e490da05928e238a23acca44a71db7e8046322d10a39ab1d87de259a7fb5337cab9c55d6af83c04df07e3efb1d3551c0cd2c0502ded0829849feb40f1f4d16b330d8a87f43c4d55661b78a3f8a371bbc4725b703617b6d1c196a33448aee8d4fae12fa9a6cc3fdc1c3a0b5858ff8a0502df0ce0510c84028314f8dadb54cd3467eed138e988b197f2b51d79309d744279b79f2c017d1628846966869bc80c02855131f973510a3553c0298ee91326307ec73290c891466dc7cc5846c0c8df1bb55f77ae691ad1028f9745e452799a0fd9a376a1cbd0e5b71366a9656f65c3e119df82eb4bc8660dcd207e0d4733f88945d39209c9b90305493191bfd5f3c4c9c034f47081547303e29e3ce73a10bc14044ef6f09cb378cd112cc9985b6c9a3570f5afc9a08a73afbd9f6b8f0a8f337b234674429081826a9f53fdc178ca35f41610cdc46e733741b6df79bb10d6ee0e54b4d716d5be8353cc1fda24ff9d630a9b8f9aed99aad38a15e5c8c9c44f9e63159a31b4e49894eae90b59e2020c7fd3f1b0e27a534d8b71f4052845f71e773c0d883bbf175b5519a6d10ce66202b32877481fb18e182dccb2f66b06eded6cd8833a337d26ab588562be8dc5ce63c012d933cc09fe1fb7edbf389c7325aaf922bf27c3ae8a0e8a4a7a99126a2d4d56458b166d5a9a56e509474e4d700e27320ff2bd91be9a4aff7d33c0c6a890905fd236873b8e3080415faa139055af1162643732428b367db74188359768a73bf60ed877b3ad59b74945caef18d10f99e4bc5da9a8f25d97dc165360a5a05045f4bf019aa4a2c09e2caa9bafb95c67117f86da8f7531c2e4b08495bcd1f4996d140808660cb0ae35fcf563edf906ec7be103fdec99b3912205e726474ea7327636d59df5d4bdbf6851a5406e92ab35af7bed49c9b75d25c9f6ab7b50115fe0d5c1a48f0c435750a1408d12c7135f609f81b171ec5e8a7c5ecee3a6170f8f372424d734c20a39e7905b4e45da8cded32b5af938149c9bc8666cdaa65dcb6cacb99ee8a5f5ed4cccc9c151492c39df0ed05df6cb71812e4a12ef9ed21ae137a2bbf8474c7ecf8a99e965d74ce3206ca02a13ce2a8cdb691a795d4eb9064d278c0d36a8ed8b1fba4066353683347fd560015db57741ec3a974c454d02160f4030f990deca4ca625d8e80c97dcf105201e1c473ef5c20fe6192e19f9a482e79d3d90da9fa6407ef24cbda358abb73df039cd3021eb329594f84c335cab70e8b692919626bbe5ecbdadadff3dd981688e26a99abcacb785ad908b26eb70a23da1da442ce50c6d3372910908d8048ab9aa6c9239405f8d6d5d5e0a6757cb42b0c52929a2b4fcf20185032474bf3a3181ca912dc15d020d1cb6861f049aa4e140dfb5096f6f8e49d33273e77cd91f4ab9272d595b0d162c637d76aa88678a5d21ab490ba826d421c857476a1f44f865957a3dc5b326266eb60a5aa9b0bafcb387ecbc191d4765c9667caf22696fa7c868a4bd86fe5c721f3b8e5331e85a86e1ca66d5a99d32f168ad8c9e2c95c5558e6b08332b43a8ac2474567a54560e3a48252fb881ecda8728441c3f2186dc9ae9c03a7c19eb58214bc41a261cb31056694874bbf28a07e9057eb860f2c1707603ccdb2dee989245da6d8bb964b5e07527722bb85799d11275f8db05d36dfbdc4359d1e75824aa926279d1b30645fb3d8550d84298e223eece9713eed938de2f3d71d40e665546ecf25ed683cf7989b8b0186bcc84931d58c990b8c80a39f4cd92b36cc278f886690761f3f26a43136c7dba05b230c91ab2237289e9d95c155074c535a034c8b9409137542eeb8dfb27f0aa723246eb9b811a635f78345f44c5f3c0bdf05ab0833d7ea44a3aa8c81d2c1b29e1e94f4c08d7c866c91dd05fc8d39a6f0fe827f9624e1360bbb8e72dcfb0dcc1c5e2cc4f2a1f635b5b081b4b321069e60eeca7be01847b458ac1683e4ef3709af57700213513a1662654aeb1423c733f2134e713eb45542af29bee20c0840a890abf3c9ceea0403f3e5507dafd270836b550998142dce4e8bcbdcdb0011db397f4b4747398505a9f42ac47b707d81d20139c2a06dfc17e8a8357405ff4c848272ec9831005bea354aff33f9997699998e8612016bc878852cc60a1c6b75928c563adfe9f63282fda701cdbb530424e7fcae36152d2ae150dbcdbd517179fd71d8109d06e4b201e81a45bea864bb497ade8cabbee652ee4b83d26e4812ca01c5315200abbc8d678e2cd7ae1bcb09dfbaee01d32797d5f6c87fb32b29ed0ab89fc6229fc705c9f7675d2f60aa177b15fd25dbb24d9182d3f6419d1634257b52a3c3c9213ea9a7d36009490deadae17f84f3bfc35c66c739bd02e591f6dee41114e2a630c405a3bb0f63c1a5ed5a81f5a42fb82143460bd1fed9038921cee0befc35a0518bebaa07cbff2f625e82f53d7e87ce1b64be8cffb4e97b8d4c29727c084e0fa3644ec22097a327d9c950e81fc1b9405d420a0f6bc2add4983568faadfec71bfb0579c73e7379daf9d9e0e9bb36e7d7e4a9d94d2bc15b9fb81252ca7157f23dfe4d6f63c3a7654e387110e8fd75d138f815aa9f23c39364626bb95ec3fcbcc3165e75d70e5a62660a50a778ba57a8b1597eb424a351277c383edbfaf6df1ff9d7284e616ec45a641d712e04173421d7732a6bcbba19d52b5ae6e5b7a653b5e2a6dfa4c20c430cf59919a5b7fdbc2f76b7866b925c59f540c7aeacfb048c52fead5056ff0ee59f4a419960b4b2976563cd3a741aadf0e8eba4af58743b3a38e3a799dee03014f54de77532583feabad4ff88cfc11fbd43b49507fd9ad651c69ddad634e1b34915a42b088d67dc9d679a1ce591f2360470c196a62d887497e6863afb11e08c5803f29499e62c1f556ae5eb36e15aea9b0bf1b729647d4abd12f16e319b00ecdfa7bd19a0ef55a300441675040ed5a8a151dc3407c4ffc1433f034ea0790a4d48fb2960e4e9519b16414af9ba446333d6d3469bbc23882c0c8217640967206cdc1e609a525df41563765dbc1bcb61c7530f60f6a879dc85266d0e8578f5782cd1a4cfb274210db2fcc7bc1a83a32fac7c8ef32f58013af453b9da45f48b902e13486f77b8e46dbe2f0c68b7f8d8ff720e72e37a672de25ca956ce573e7590bc2e238cd4ca5bd66d41599527dd9fa54bb48d8f57428e97a24bf166df29d9feacd00860b799c5b95e789421f01990d5ec0a98c893eac6c7a5c6756fd6a97a2b6c0e973ae94046f118d4c218110a0237b1861fdd1ef31f531952711e2a439cea36b0e80989e205f8bceb18a6bb5719a0080763d4289f7b2a135cf2615b2f5bc8106b2af2df31d61db3fa08c24c06c18c488c4c3579fdc4fa514e166bca834824c918b4994e631c74a7b5b90d36e5f219c76831d67918e6815c94b9fe759ea2947cd7a9f40f454d91b0cfc4f22642cfc7d41393171233ba42a0c1b3d6aeacd97c576c1fed48bb45ccc5b5efb69acb79007cceb5d85f6d1a0c333803982dbf20018a2750907c090b3805a7ba01a6b070ea9b17608e389d05e71219fc51d80b59a346db9358fb52bf2a0a7daa9b27f59cb2965977aac34444d942e0e7e6ed25f8116dbc2757a2e2e9a472675b49cfda6abefa840f96fd96859e3b6829a102455d3b10cd53f358049047276aaa63a128df4f2bcbc16f043fa3ebb621b5317c525c0876a25547066651e4eacc6a0332e8b9dd850cda2ab8642e40988608ec1ba792560fa8264de4295d5a689a23831e3b3721e801df71233a434ceba9b9ca5d24458c292092a58d2a46e04765bc3b18b18e181b1fde0e0599ba51b3f025f228ea9103319de75b2d3c4d87a16d262f57bd645b817fa6ae40ed6b133d683826091febb077753fa5597bc40a0a479dcb9971618ea8b72c02c990f209a167d8f1685250f828c4adda30c750cdd7fc6c70af2e033a29d924f0e33bdb82a0442d3ce8c92e66e6f8195a45d85c2dcb6b3f708d6f53637c951e502f5787d8ec605e8f5e347188e610fc595e88a7cee23c537a97cf09816cbf39fec03009dd0f4e21d49b420e9c4257c01226120333139a9a105bf71d4e1e8404915558a9ad023be92253471d98c316da285224edabd23b1948c0fd67b833240d90890cb458ab2a9e170c5955302d3f0442894d58b84bfd7d56c75d710857311bbc1fd736e512e4f5cc6d9f793274a1c0b5d08b8c5806b139721a2d0334a32f78453137a6847f8f9db3dfdcaaa7e5355fb7ffc1551eed03ce39ee6fb89995c23ef780946df277607a12846e811996b33970bc720c1808dd0bea80cfe788bca17e0d8ec1ca237c9354d033307c7d4f59f9bd1ad7d8bab7b3f4373bf550f54374b0d7a08f44219e619c807c8282344c890c98c4116b44500b8a6c7a44098ff3b8299598459815378581541dfca6cd87d888cc3e59c3515a0d11d01683f8f846f397481ab4834892d6aa4f5d7be706969c80f8bc8ca70b55713ce0c251e01e204467004e5f7b040657beebee7ccc8bb4cce2598cfed186efd4bf04449933eb23bc7fdacd73b699e2e263fb96aac81d965ee1eefaf451f6a837a2a7eaa7dc5ad6240821bde192390e15cd8fbe541070a97d01bd57588330766c517830237f2aa4c0ae184483d8394892b5b80b21f1a8204e0886690adb578424964bc85e0389917e82d45d48005a507ebc60a6337d411cbc4b6fef41ccdced4982c559cb7514b1ff1b007826d1dce4afd61bce57f08648815dd2cec658d69436655ce6c3f6b4c2248c285236b90c6943ee4852537556d26d9efa91592bc3d8dc678c20035eace81025ef33d809442069566d97e3f2d1e594a4fc18bd9e8b7560dd4597548890fbf625a321b35085ea719279df1fb935ee9997e6835a08280f8440ebe49fe67a78ea7caded566108fa3e86a84ec9649dce54681d40b77c52b1b34bf2ada0d7bcabd2aae98d3e1e4e89b805541267141e9b013d415e7d1e3c1103c380434c521e35df705cfb6fd3054d2816c3efdd4b41e281dd43ed36193ed225f80c34848e8feccc1ad9c62f24127473ad9cf1e3055801e57bce48433eb5fcd643399af0184944fce21f1b6633af9ae9c3e75835b4025042d45101e21634b694b7fee778a1d707f30df971aa709c5d8672b256172dc53596999d6da7e562bf53febfb6a1871ca1220ef021898e7cefacb177f028f4ed68bd8c464f668448e184ba0334039dcf4dee0da244ff5c3e586657df365d7b264c186c4bbcec827f0c9fc0156136b308d10a160a93f8905da75210599fdf6b18619acdae5b97ad4c648b4e6116d82cd10415c75950615ca315422aebcf44364d834b78886ff0c3af39b6d6500a0098a091e8290ff0e952841af44be3217f281096291710a14c4d2307c1811aafc318a166e6baf82fde458f7b70ffe706e749d812c9a84a857b99d8056e489de81867b5a3d2823166c06556633fa4fc5b47f5c9285d8d1163d98eca4254a05918b6cb8adeb22e09b8f71975ca55d3b59e0cc06481db7837e32a2d7354dd166e37f05fc208ba321429d39c9382c60e35f134bd87b180b14675d1e564816e704b76fd226257e1253d975df210501db9fc2831941bb652b53a88f19a92e1948ce24262543146149c2e3f5863537f76cc05b71191b7114254cae2bb8260ada0f07462c5f0a0c386f07b44ef39ac79d682849db94b0bc3e4c85e2eb8654446133eb340bc08f2074d32491f2598719d8375fd375dded2da2c1b15a655b697a109127068060a87698464808988b3b0260839b9080bfc93e8be60511f6c135f03132c8dd9e5d38e742c5803869ec9b4ff133d04093ba4968eb5341f4fdf6ad206ad132d7f59eb40bddec52f52848805400f054eefa74f7a5bc470ff5774d24a80ec42009da5497a26addfdfbbd1af5055ea31007bf58815cba9b6c42a757a8f302af0a982a6d803a76f0f2feee53b571f740e16d71461129752ee3e92ff804d3b195e3659ca19ded0868a12e8dee5293d6a53bad0c93d32664365c8bf674bb54ea6fc3d80aa1a129e2759a2985574d59df3de85c1f548285c096efabd126ceb47670030b34313015fa6faca525439649aee5b93eb2248ef6652a5e06dc9bc51beccff6fad4eece331d1c160522ad8bf7cf344c6f9a35061c817e0f8b94951a2e2deda50644f858206c324fbcb11b2603efc6b83dde7d316ca19c7244ef00c319663c65c291c0002a4b5b8610d02f088831d617141c554373b8ebc3ee76ac4b4fc9abe6b5d0bbe4f51d53149dcd904f964771b5bc50d0ab4e837674dd35cea9edcb9dbf3e348e9e4b2b1dac8dadb70a6c25f16ae81a58bf2d849b6878562966a0af93f956eff65d7dfd89d75c798b58e730f51b7e4285fc962f7f5877fba30231f85a4ccbdc3f3a8e3da5654dc3b526d886db7766dc715d2c1dba7176b55e12760ec4da87bc8e8cc00d31d2ed22dbe2717238913e81dc6d8832b9ed236c0092c9d4bcd92b071bbfd6145e3242e108be665465b8caaf0f42926afa1490e6d0b518d0047ccee38f3c2995a1ec975ede0128591c67c4ae7cd6418e416ca366cf38b3ea021ea92e2bb0757ec2c9dea932526802f3b72cb48157d3f8e108e9797174700dac508580b7951f01a23b6a6ebd1c0d848ee5371cfd980d3e56437828fe117a853390e43fd98443dc447c523da237a3a518a3ff42946a3607059bcc631e33822088e768e03657353d81ea9cdc3ce958ead748af204ff94910b5d07f38b5814d23e5882a8338588f7e7730f0c08c13181e325fadfab364817b7957eb79926edc1696ed3885e8801f9d2764ef21111cf65db9a5a41282aaae1a678d508d8a0eae28dc9c564c6763d89a017813e8ad3f9d9b8ce2dc2f6b18b62b190e9b1aa8b981214d727d9f9572eb058898f29b228492a4a71c1b947de6eb83519ab328540aa485284aadf2eef28b7d169fb5f2fff20e2b4b4a7fcc1258a260c967517690de484ee2da9b32876f9bbf50143651e7e8b20a128e719cf320a64a6158fe0a4c9b6cd49cb07313981744b103d30b5d625f20cc943c6506248b3e802facffdbf73f38cad876b1c773670b8a4f43948aa2073534518e4b19f31160e3184d387ab2249351e4349f34375cbc5f93e639761b5a2d7a01c12ee0774d08af1c7fdaa2349678594a5cc6b4fa98384e227e118cdaa983e13afef2c43a91259d5a2a4ca0eab4371577ddfd68a4fa21775887444ed56e9b56b02bce5a9bf33dfc194e3997be192bc3110812b29e6a2848ea1ae03b22e8957fc12c975bbb7a5054a45748666a5e900b2ab9c7277f2497138431a5d47b93f5bcf3e556594054c51f31b492325d90b10b93176fab5cb0430e9b9baf428a4eeb19d08024498f5894ef271e96d798f89f26f4433701315cfb7828e201afd53d06317ef6f9c44382d50d77bd2fc4008baffbf42e0ac4183b329f2577f0012a85452516219090e31aa9b72ac22729c4e7308a775246478efa82085dd1607327fc2d258b638cdc7aa7b7cb9cff8d407bcc0908f70a7d0cdafcbb266936e7bba100094eb0fcdc6444ef403ddefe9e4a77fff5e105ca7595cdc43aba0c52e9da58463501520ada2d8836342cf42f1e830ce2977262f1288904d30181dfbd2746cacf2bdaba4c098580c0c2b31892eebbb76ef2c13fa355debe0ab3eb102649a99589d47911d9e91b33ebd77620c00ce4d4486ee793f98fbfa887523bce5d77a2ca8f1bc1e444455deffa25123f4e33f9ab6a83f0675aa54023e05c9add4fd981500ae0c3f84f3feccf3d6c89db6d2ea1e90783e3988f13969c86ad666bfdf11df10b5222e7b5c3aaa990edaaeb56363a1470174f8d1a42784ed7749a4be8b9f434f1c454176f27adfa00e72adc1664131ae2c2e9e0c100c87d4027d93e329fe550a9403ad35625f2cb169792b35d94052259e003ba9513b9f764b3811c5f57db72f5bc5adb350aec6502fc265400f917180c9f0c55e3a97b0008e3c1b26f8483164c573db9b312a948e56cbcef90a7de5f8f35d8908898dfdd6c03d69b2c835233a5f6097988957daf06035c00e6eede495ea00431397fba837201a9d81516fbdeae4c7e2a2280344e9898e9c3137eab6cec35e216e9ca89dd72ddb77b13903625251781e54f5df5d38bc9676882e973520e8162028562dbc5abbf033041fa8b29a74f99643d2660fc18f78942e5875896743a9622317687e73f1ff46581a9273700da885daf7ff2bd3a59ddb04f0d30738bf38a250eca851505b33973f12c4f487a226410ef19789dbf448e3a21e7ca82b9e04ad27bd9cf0c310078c2d1b07053919ff10f3f086a85b298b68181e2033ee08e27ffe607eb60e416bfa94bcad3bb1f5a9fb4804ee407132001b03cd43d7d630cbee25d006874f9e7ac2d50249220a8c35c5dede05c69317081afb77fb430fb3465ce8c0e7c318ff11c15590237fe59ee5952ec438c46c41967abc254b739a65c3c9a4b6fcd91698a4ed80ec4e9225c5f15d028aa07270b125dc1308294d7cee8decf39e2260ce157621370e1ce4d71feb129cdedce08aa2bea3a7c428edd5afab0c7d1fb28e7d63f45403f4632e22186b60881d881389be28bb6f920fa73010d350a580c84fef4b483bb04c4e3264c6fea3312a7457d80a414853dbee6695a751f705825cfa299b630529a46322ed624db1106f7271246b89d3f41c340990cdd8a027f30b3f09ea746f3976660ea51ef0588e2ca1890f9439a15367018083f64c6159219b1998a519f1249cc60612c98bde69ec4be7ae4e208e1a2ca8e40fd1d5a0e1b2eea816a0184ef12a7b35a487c664e474ace4eab35b64c4ce45220f14ad348420d954757e939934adf979935278e0e2018301022ac4ad89e1e632cce2b2d48c50cceb73b880a6b22fb3a64b4ef4e7bca97ab1d63b8eec989240b267af1abed42eb566a4bd8da965c755cd065cea7caaa096a8813b11990f39b53760d4eed6db6a036777402952c09e8cd770d65cb8c44a094382147418c43def329732099f728a8469290edc7d2f9ac8643fa7ac7fc0bebd3fc19f1edff8d3f38ec17128f1412468ab5988ffc80a63e61b736bd95a3afbcfefb5c547c8af0b86d657b3c716ad4e729e8dafcc54bb404402bcee6bc80104c38274207a723008aa2756a8dc26cf29545456758262538f7b50e2f38f6f6e45a51c8308b1c9c0fdf6499c838d1b3762dc81626fb0f54ffb310d7d62e118a816440e88749e00830c22ac9e01128926030dc826ceb3312925b6dca95e7f9748f1238298860b323be9774c0c0f7e8f9c33e045bad668d4e8fac42116de7e74e88e67319a19c218b55c80dd7ad042269331e1eff84d3a27f95884a911b5355799b6ab9821e542fae007f4443c931cb7848a3315acff1c9fec86387bd7ae6c62e56bd164f98210cbd83ab4c367593a2c20565b568e437007303b90a8ca939075e115dfb2aab01fb67d09b9f8d84565e330dbc48c8e9c8103e340cebcc4a2c2586e4ad67f31ca21698ed7ef3844e7acfb88339f870395eb4281f0910d9be09e1bb65d313e032750e8ed886f60423238d4f248f417a2275994412797fd433b7ec0275b98aba7f903005b7e906749ea3830e61220cc83780208e0048ab6ec9100da1f18be81e92a27c518e25a1a66dee799897550ea50d6ba522d9740d81dbdd58a2d5b3e41800d5b809927ec1afb96018cc1286ce12cea193cff54e72bb6a121abdf2f00d8ae21bd1598848803dee6995d83d9730a70c5b7b6ec53d0074689a4042ead3f8d970434fbec667e25bd87233ae5a50cb350c34a4f935a2259f557d23f53194d13710cbf691967144dca67c34bed50d801382b9da7732246967c2a48ace3cb3029e7c40b9c8a8d02ea43697c53138d6eef1b21298109e06ed426198c96120bd47989db2d6aa1e766dc68f06fc748981dfefb151d1fee8808e8f662dd75790267a208e0dd15c377267dc44ecb29c1e702cd55d242319457bc155cc5966d3ba15e0337c3f795aaebc1f6dbfbeae8471f219134e6ccc42917a0bdeccbce68e6b7f9845378543bdfb8be55081918a5fd85c0d604ddb8201a97baf74429cc1f6c1e66664f3e6eeed02e15c38c9a7c055c00da7c999c6b61fa7fa99b63c0fc41249075b9e7e76f2530ebe0cce563d09ff4d6e33d30ea7cf044bde9296997b13fac818e551da97b9d2f2df9b9f8e3e5ab957e159a392a5a49287a69ec49964378d7c20af414c53eb874736dea2df86bb789a275956db1762f02954e5d866aab12fbdf7c8a30b75803fc173a227d7f2a4f8c5f8c6ca59b786d2733fc755d1583794abd0fd5e9e6d0fe76e84a1b92bc7bf55f10e385ad7bd862de85cf28f21581af0311ca17b59f47c63da490c3b716bd991f665f0c10f65213cb86b31f81be94a05b32805fd604481724cf7a0bad0a9b1b93726b03077e16d212ed48cc73f738c5af88981c2c81c40d86526ca8af5823912f09188b59c5e62c5ff32be76e04c324b1eb61140935e24349325970e8aa9659be0dd17d50337c6dcc862cbf374a65678d9d60bcbca7741a9f54c8f30b34b16e396231e13ac435bc063c06cb52fa5818b4834db9d56ab302e50a0e7d8629638e7ece9a1cfdf4268cb0aca6957c20d39b6f26a45523cf3e4eb73d823163b4d71d34c47ee0b6a95039c6888b9eb3402ee115a47a6afaca8ef6c9dd5a5d1abe93580faf003ed946b25ca1574b9c0d3808c0274d0b3ab6f35b195c474b0c421bd12d705bf6696b8679d038183a1ebb68d01724a6b6cccb792e7babfc5fbb82e517e45fce54dedb57636fb826b0b03f124602844541e5d5db9eb737337ad9762de8ef58f02d1d17766a937917416eb93ee4cd6c5ca7f54d64183b8da0a29dbcb9cc2418c503135033d4e689ec063d2895fb2fa62f979815ff73ef9bf05039120f50ee6fe9e0cb6af1acffd0e3d684d72bfa95e5bcc99c7d18c9d8390f5bbab0d339bdaee2d2569c444401df8007238c0be0e5e09b2b400529f29c6424ee8cc29a1f5d5582d62f77d9159b8fa524042d3adedfbe28731928c212d3a4bea1aebcf424014d151cf324de820d950e571351de10dec2dd650b7c44a02a5f29b10ad521706c5005c07df9e7afeb28dc8e2d1f703a719c4c04f40250bcd8ede49656e426a34902da0428ae57b1b715802971da9333d33eb47180988a340b6805f3c463cd581dcf34916d9287ead2f4421ed1c7e352ffea23698c5e77285d3c87e1972574dcf428ef87ded1de728cb44b799891c894b9223bbc8815f45e5d3ce46aee0e55fd12a268f0bb2d5b89acbada0b6a3184cbed8cbbcd6d28800ccd591cded4c8e16465f2f8d8be9472246062e22007171d8be52b1046505b51642cae5b7b4af8561e06b06f3faa846aca6da64ca1b3e616316452295a3814a91a36a41be9d5d502d95ca1ca72822ed07ed7a7b297d4fd7962f7bc9c5247d25e44f764ce968e05227a8222c36d91e736baa7cd9b2aa13834f1521eaa9a8bb9f94af9cfecbcc69dd362cf58056c4e296adf3724d859751aa76b0d1e932ac3e8b35f748f80a9d88e9bc8af996096024a7e450e8f463384f0a44d97395c682a38aab451c87ab401cea1fa9079f82c8175f1b22a6a7c075c597215c179bd7ddc5c03d1deee2124dd632be5a9ef1c5d5b6cf66b4aa72aea07ed1e633a15194b27f11171563e007e63840f2e86f94c34e7ed13aa616d885a345502ec3fc771449403f34994474fb197e223033b3fb805292983aa9bad52724a33ed34d5777d0ef623e499e23d17e5e2ebc87fa3267e8b2db3de4913faab156590ac61ffd1b7e607a3129bc919912ae26cc399c03b89fa347c309512aa16d5f84d3a9c5724cbdeee3bad2e4856038526476ecd3c1cd63335fd3fb16a57ecba22fdbc0d6357ef417cbd8580fd6c80eb1ca8ed979f6f5e67982b3461b3ed144466b6c356ce85ba3c7f1e207d4f1b29d530ee8988b57d0e00cda921d8f12fb1f64aead5b903cfc7e0b3ab4c38ecb5623f5bd388a3b409c80c0635776c7bcdf21f3cd4d0508f6ea4dbc79c0d76a53c7d73a9cbf631eddf48f5509ca711e9a1859588505e97b335adb418713e3c21c543376e9c39da8a709b69d76c6fb3e6b4682d09bc509a8032f857b3f32bf82549ea67e90c25d549ed0a2b782b71449c045d0fbe34540ed86887c31a65eadcd7b7213930eda0c0a54b5f751cde0c1a45a59b29cb02fe4f2ede8be503c9e666853ed22681613a38c82c5d8e0bcdc4d7b31752eb4f9dd81c972c7a3d3a45325c52077d8fec3fa2ac5506bed7610f106f7b06201b1e1fea9ea1895335eb270935baf3bc77696704337f440030deaec8251f5f56937067b4bae0538c8ff5942edd422a4828ead3fefa88cbf020abed95a5b3018daa603fd4dad26c5771e0d420df5747e34bf5161b784ca38178558d9731d2a45050150fd777bd4e38ffe4e6f041c7ac1001e80f0622248eb371bc17019ddfb30be1b56cebb1eb5b37237b3de8dbdec4df6de5b6e29654a290578058105a0052a6fa290ecf81fed847ecee7c4585d662186082c9ee69a38832c6e747ff2f110fbf6475331314bb6703adcb2edcf3293463da231007f4b43cc11b53f6aafa01402ac836b3e5b522d48294869a0041dd2ba85003b57b94ebff0e5eb2fe42bd7b3cd524da3946e29252d1d9306cf75ffffcbff0f8206577e71e4dd1e2c2b1cceb15563288e388d72a1c8b17ae22808d7bfdc42a8c20cc5f5d088ff4b62ca5668e594197fa10442335106795f2ec6285f5838568fa604faa4728f767577aa4711b876fd49c42cea529144eb96046cd22cb76290c46d1b760b22770aae8791643a887d4660c33794b6a1a16db8a5d241b8ce548ce06cd84720714badc4cd328e51c475d14a914677f8f8f8843ccfb35ef5bc1af23ccf9b44600e6a3463f5bc984666a1a1595b142116e4d5d5200a1229e69c1c992373384a37123b2dffca1ca9ea1de9e47fe5a06f3b0efab6e3c4b7264c83841aca1c997253b835914832cb832f20b36e924db886afccaa12355a67511dfc6bb42b8c6bdcdddb860d9b81030d104b5bd1364f83b6d155340c6c18d3b810ffdf301a34babbdd1d06fbd98564491eb6561483b67fa2d45ac9fa261ad539201b76b7e9a9b3acd9cfa65faebdab7d40628c9476a3204ff21f3b2c8b836bf8c6cf16804dd3f6cd267d160ed41655ea7e7b57c4aafdac12a2717e88f80124488f0db849b3d4723b1c5bae7150d775b6f3bace03755dd7a594a89cdcb89139d12abd0e6eb1c8728b5b8cc359530011d68d666fb899f20b45ccadd275bba307f75cdfb8a81c8353fb863647932c06a7fa0e1d3dd41d4f02dd728b862f2a8eef860c25547e92734b8774aa847be667a6590663459593d22ccb5231ce99a343c79f44526a285f2faeb9c2a71193dc6a5a68ed0de54bc79f28ad2deb839ad2818aad9ddee91d4a6bb576c6ded9b20982799bb129da77f93efed43b9c66794701d7c747bfccbe7a67ce4f4a39277841ae691927bf8678b759ef304dce979393f1ab735effff54d3689665d9f49ae0f2ea2d2356bb9b51505b5fb9f47fa2b45691c85a8efbc135fe27bf298160d5e10922706e8668495c37596808ae9922295d84134f805b4e4a181f1d3e7e704ddb5e79806d7a08b6c1f3c35af48e116ad84d6e37e19a9680bc326d194688eaf6717aa777aacf86c4db582c1683c57af89a320b869b343b336ab36cba0d6ba67db2f5846a2f93dcc65833bea8f2076c33021904ae1981e8c6e61a396ad259aee54856712bd7f816ffe3067a9b7904e5e0240fc74dc65eae1c9c52df42913c0ec6b42f16e39aecba8d89518945c2e4cb419003bd8f594c7a19b341c2f854396ac2d93892abd833e0707a3b07a9834e5d3130168ba580022561b5b3d14869dbc448b72d7036307eee6f4e884eacf850896db3096189d802a2865c6ab5bd547fda7e389c253148adfec4e56c59362798b62e5b2cb575b165d9622c27ac6759695161f54459ed000996942cc9fa150fd73c11aab4a8b07aa2ac7680044b4a9664fd2aca8a923e0aab8aa432b3b3bd249397cac118d18ac58a82e7b4c5beb333b338312a29568da130ac666aac68f03089a130ac666aac68f0ac62ab580c857959cd9092a0c11323da62ab2d1643615e5633a42468f0d4985a29a57595c20e32a662e6f81fff252c9bd9dc52fb4633893226a7c87290e35c37f3ffff8398078a5cc5b873bbe35234b34c433ffbd917d2a2c270fa679415141e0739d5ce969adbceb6da545e280673b283cd49e79c71c6493596e4688c31f606cae17d07cae1d918a3be2fd72d871227846399ab562dd71d0894c39399b1339f9019991999910c0f15ac8c55e1fb1c9946b555a167ec8c8c937e89496166860c29b51998080281e24c8cd14a9c3813e38c4cc718ed86d33171664626720d136d8c115ff92273a8a187b82e90de09636eb4dd28ac01820ea3064e73a6a140e88c32ca28a38cd1e55b0e3d3690eac12957caa5699aa651aa5129299520ba51558f6651f7aaf0f727039828aa5bbe3ce54aeb52764fb12542edc7fff8768627e2489530ee6d92590665008788b7438868cba019a8cce6457ddb567ecfd9eeb11a412b754a6b1a7023b361c08d256a30836707d47d778c1dd85f0d07c1226a5f0a568182fe34499911c71895a8b0bca0729ef91904c13ff978925b4a6b1589ac2d018e0f8fe09ffc06e417bfc0cc3215d245e0e0bc6e86743bc46e38fb82d595e3b860a5eb1ad59873f60d4bc0354dc44d3624b6e19dc3f6814dd4b061a994924e81ed9a966f283f8c699a87876b3ad540a452cde3637236256d83e62703d7b0cee224d8bf0464a465d0bd61b08635ccd2b0a9542ac6c87130d80beaa50aab838d70a4d4388e89fae3812ad3785f057dee0ec3a5d25b67fc648393fc04c4496ee301b651f3012e555e182e35deb0d26de3527bc270a9d9c63181824fbd62928a6b4e7e025967c225ea52b1b87dc5a5c3a1b83b71269408927ec23ce5c200a106b16e59bb401cfcc1dd56b9e9adcb91f8a9a1e0b05da51289341a0100002f2fffc5a4a04315c11451c35eadfec4ccbd924dd4b05ddce38595eb5bdb64be8d806cdf8f9c1ab6cb552b536f9e0930963bad8372f8e5b6a1591c0e76830d36c86ddbd66d5bb76ddbc664c78983ddae76bde0849a084000b66d83c13658f5fac2a70d8badc2ea86c50603c08a6b18b075d9bcc0e13a0ca64aed2f94acde502f182c00320aaf5a61b01fac1fb01f408e70bb80579da4516d637ba76770bd7fb89cd53a678661393f7f72dba1a31a068ed3adb6a96d533f4e820dbb091bf610ae7fcd8af13193bc978ff9c9cd6cd8355882091cd8c03a48f525617224fb42076287fb7ddce72be8e1ba94523ee801946bfee40186c13eb4b01d447e44ef8332fba379df83fc7090825c25bc2182410d193613c541158b613f2a2ae49d0b583ca9148ca65231529a4a714d0a4a5e5c13c3d57cc753ac8639a87f1cd42c0feeeb188f863de96d17699b7fa26db80ea99413dda9f9ff99964ad12f32549623128944ff2c7a52230e554271908bb6e927da865b27704ddb8ec2d34ef40423c3993f0eba95014594c59a1003e7e5a7dddddd1de6723da9b2596465e72e774d6db3194886c7e6d9ed130203032b5adc081902b2e28688b743f8092c008d64788084c8b4f5be204240a99b2292a35d6ace2dc70e99cc72b6fb7c3cc9c53560bca81c0a7c6ad493a0e093f330c9edf3f03a50cd5deea280df705f8f76a1d885017631bb985dfeca3e77398f471183979b5c1e859b3abec0a04a0b9ae13f776df746b67d39f646fb64fe739747e12497cbd52894bb28a574821e90519a65d99c1968ce941297ab3ee1b8540f70fb720cc2e97eb223643e5db842d6aa22db8d42d61bf5cdc75113ce76a3acf527ea246fd1ac051af10de849fdee183b6441a3bee93aebd9d1c48113e0b64733871901e1d4815f08670a4c3c84f834514f7215f84d6824c303643deb7d421660848bd70dc8de70c38146d247c6fba48f67b9910c8f907475b6fb244cc6a6ea054a0db3ce5a316edb12db48db56864f9207864dd3b69dc1a6cc265a1593588621ec30896f48fb00974a98c3240f8c6d4fd593543015ec6e1b9daaf7a97a3084a1d6284dd59fb256d652ddd902e9bacd5a9e391143e603d600c1ac95b5409a875a31763ee7735839cf19f52256a2559665cc31fec33ca99d0d45a378e30d45a2e7c14deff3ab3ff94bd4aa2cfa3c775557a2d5736c04c4419919fe86dfd9f1393ea1af427f59f129a850c1a6ed0a36715af0a9f46a1b1a4aafd7c6693978e24738127cdaf1a4b6f9c13eab2ca351faeafdf539af9c07f4fc9f2fbb4e7a34f528a671b74378f6731e45534adc247f880fa26df84578a3cf71bfc25e74712c3cfeeeb79ec5e19a3b19bd5cbf41db4420047122b8a6fbd8e7745ffc418705f692af1e9683adffd247619a31354a59238233389e44838397ade8d04105afb4310d0043a977a89d9b48d44d36e27bcf206228c10425466882040751f8891a7091c26189309ef8218b055500054b144bd8d9e94112597868b95cf0021d9c9e23646891458a98e508f72f4fc9624514614410d1ad2332f67b44d490e278201bcbc68871a9463dc906bbc0cce1476ec1009399f973a8205154c6ccfc3954801445a928c0a6c9c8a1b695e1ffff4b940c140c80a3c1ccc2b66466ddcbf0ffff3dd1b451f27c39aa1d85bd441b238b1562c404001343851898991a99cb2c0a40dd540098d13d333347916806b30cfe97e99867ba2c89dadc0caa0a52a3e2ff5f854ece2c8b41e5ce0a0278b12b54e6a84df18dfeff23caaba94e9ba2b68d2029515d94ddfdd3e8b88d99005a019899795bb24466f29f5533b6d03188d9b381350028075b7e192a9051b6d0c950818c31c658a38b11ab6d63db6937d54fb62ed0d870a1246d946cb84053a3050390c002106000345828793646e2cfb6b56b270296678318632e471b6bb871816cac1b5f09e7ef9d83b287a703f0e3c7c8a2b67519cad57dab51c1325ee0d2242f4aaa3bc721aa5b79ca68763f90b18355639a9ed34acb4d3947a10645e086901b85dd6550836ea1d428ed8fba1ae2052257979befb2794eeb777ee105aefcb8dbc312ae642e77772f3d2c057a52a5a5520a71d2c86d085818c1e06e2de96a9fa73ce6382fc70e8fa1e8c1345c2a954a81e0cc38191ea019eb81cecd90d77243c4db1b6eb8ee404d40379e8443c78b936c95adb8a6dd95b82a9572d35b57b9895fd444cd564cda866d0892732335b548b74daaa4944cb257c889942f55241d44dd3ea594ce0ee6498d338a545067374ba304b2315c67710b041dc6f56c08d680e2e08c831efa440e7a236a276886035c6a419b3bdfa69693a3b719688603dcb7ddfd4b286e12c914c764c709cda69414888a13fa01c1182235ded06e5cc7f5f0f1e34f9c8a6b405d54f6c1b922f796489537b43280b7070fea8d1aa6b581de4cdb00d338077a585117d0011f698069dc66230cb00db773d483693cd280a4ee908145e527b95c3d2a0e756d4a0d1a10f83bbbdb20f81be5c7587b9072fe3487dadff853f6b50cfb15baf6f55c6ebfdc861db39e524e99c57ef52bc379026fdbb66ddbb66d3194547650427170e5e00f92db1b187e8ad922dacac325327a1b8666fc6ddb66fc6ddbb698d78cbf6ddb8c31af3f6d5bcc6b8b79cdf8dbb6f5cfee2df453737eb6d04fe827f413fa89a1e22d02a386ec63011bdcd41760d3b4a02c57dc25884aa592cf8e259d9618cc9a10c0600801d24d8c8012836e998b315a2f147f4e9a7589665a0c991a67b069abd5b9adb32010284690d72951b17a5e0e76ed5d2f61d142d529ce524b57262841e77002be814df36d06386ed36cc82ebb699cc5e19d8ad5f3c2a2da9ac06a898b51561bf23a8ee74f2f1f7b12cec3d31a985d62ae3f969e32d39ef2684fffc68d1b348ae61e122c5fd265adb54165a69193078d049ba8126cca7ce412316619e59aa6d9db28b2e735a7e59ab641044c722233a0f05282a06f0d39deb605012808d3b815c9a0ca48cb7601d3fa09024c72ab6900d0c134ee57e4831a728c7fc682dca08a295a46503743788a112f78a2c40dfd66aa0c1ad3363ea66d46ce828cebd6e50c1dea4c0c6e827d6659cc3c4ca1020291540a05aa000e2be175a359199a020ed50af1826efb201e425c88dd6c56a3c20a15542ac037db679f94020e3a66105b6eeb68f597655aaaa563dbd2ace671b95c2e97ab07ecfdfdddda52a947b675b46f386ec47d422c132248b91132e445cb4d8fd6c2c50d17b221ef0b5282192b3745249775530a7a405b6a3316815ffa99119463874c7f20db7d3f9ef437a0cfc79386609538c94fcdc4d9a681e8244ce356487f1104273d374286705bacdc7456c8101592b869259e00b7431ca7871bce82464204e0a4fbd813306474c37544a8eca0a669ffe1f0b6597f6fa9c5f1326dfb0b5264ecc3641f24fb108bbcd4ee8e94facd2c0ecf3a8b6ea733a33a1a0b356736a5f0e96e9f2c29be072ece4c3e6566ebc395d7ca43bd7a50444747474747e75fce2cd399b2ad37f1f9516694ce2b746611cd155f0959f228b32ff2a2a8e33ca0fa12f23acee270575e90abe63eed55a49966b39c69db4885bb7d5f78c34b7430fb6afbe03e922daf0810e7f205de3a5c854e28a7b60da5a0364dacf1ffdda122211d42444239845010c22184134614a000c613bef0e2e7ff7de8e2bf8bff2eb870c2164d60429718972d5afe5f278b16596001bbc28a2a2812429cfdc8068ff6a2ccfd3c2edc080a82c6220ba4a23150acbd30000984f1895a0142348654344696168bacc88251e209f09653379e59b15a59967571308de3d43762007c047ef948218c8a530216f8336dfb386566b5de34fa956838e89e65b47d74718d642950a098c12ed7595a8c255bb247b26e6c2f84b691f934bdbb9ba31827798d5f7cb73b2b5c66534bfa896a29062a3df2bbc1e05542d5c30d7b4bd19c9400047063605161c6ff24e5b7370b4495e74f33fb133de2862459ea1b9ac9185fbeae7cc16adbca4222c42ac5883e2f74285772a5bd36292fa070dc5ddba45c77edb5627d112f75dbb2d20c759b66c6d918d14bcd4f40b374b4edcc40ed662328c7f6852d83f6550737260eaa246a9e3628db2a09ebb7a8bc6c0b62da4a848d24b96ca51237453701c1369287b6e1da482291284dca16c4f5d8fc3496f7944aae4b249287b6913ec823d2884485544fe098460883737d7ae4e19ace8eb861833c9fc873d94a24d26a3dd0a2b40db70feae2f95c07c55834cba62472438d0a8fd6d27aa2b48d26459ba2f5e03fedc582c1f928deab94f1899ea6e578a54499adf5e1ca6bf59f877a7d8cefbdb20895527043ad2f6fa8eb12b5a13416d3c8d041864a468c1829193162a4e7ccf8446da97350542b68ad0cf1a3bb11bc980fd7485584f291c62aac6da1c580a85e10ae4995a7d2629a4bb3e2a08f16d37cae5b2da66de1270d0bbf625eb57ab1cf625553bae1966234c58e57a45c7e59296d8d61e293d0955311e3cc21a56cf973d3566e7ac9132d537b0316034ba5d41eb9e1001d34ec78928dfb1f8e1c1c0159d25f8b3797984862848ada768adab173f76c885ad3c26daee9d2e566e75da9dd79afda96bd25d4b69e149e12bc28bc247848f0a0f05cb5ad7784dad67ba2b6f59ca86d3d2b29784dcce83ee21921003232644a3329fcd49a18af4a6debf9d4b61e13b5ad5784dad623426deb51a96dbd256874de1006d079422080d7023b5aba5e106a5b0f082d74de0fbc9edad69be242e7f9c046e74929751eabbed0955e28c180000a83186364667e12f7cc99cd23d93c32df7b3e20f614524ee9c3943ec81bd93ae09846b4ec37db0f35c7f603c7ed7ee3deab249e8947c20a3ba68d81febfbb23f1e252d9d205cb0e34bf45a55144282a574562e97952bdcb53ba18d145171b4c21bac8203aa10b0b5e8a2e45a6c49a7084c60b6acc12e213b56b228b96945263a084318413b1253fc47ee822a6822e7e90f981cb155ca878a26e5088da5226769871fd0b81d0007bf0e8c1032e3d43e0a2831bb2cf0e1f2e3b3a314570517243f679824b0fb249ad61c423ea0cd8115485b93c654b2b87da5d9eb2254a135b8a506d617243f6d9e1b305882d29b821fb68d9c2474b126ec83ef1a5a5091f2bb4287143f691395a72e0638416216ec83e33474b0f3e51b27c7143f6d992458b8fcf0e1e3d36c04df17a89818e8e8e8e8e0e0a858a022a0a2814cb7fba49b36cbbacc98c9b68e4cec1269cdd8ccc194a777e33a2269bdd8c5492976628ddf8b59107625bb2247edc96f80e3a1b826ca8d970b321476d66b9aebbfe409e67419ed5346eceb7d903e9faade038b7ef3e8a210f4a6ddb5c8da82d0378ddba3481d4aa9032e41f7d236eb8314a8952ba2718354623b1c6a665318b9f8efac4c1abd12446e6a6652e2594f8cf8ee8c41a52e6e0ff7f56a133671537b97045de2dfa130e168e8cd5ecefed4fe30028d4b7ccbaff059b36a8442df9e53864330300000404a3150000180c0886c301a1583426cc92cf0114000e64823c7456381608448124c88110055110639c318600420c3006219a9aa9092447505cf20880d0d9c937b100c4c1c58270d41bde852a9d804d9d8bfaaad2d92db1caeab7be885706cf791c4a45b648cafbf9af2c20640b296eee9a5127a85cc278885300378202324076903b281256c80b5c4012fe6bf1aecae6d2d395276191bfb5dece71c2712cd53dbb6ada9d20de92f2259259dd97290c1824ae2074eaadf44f3bb0ad1a386bdeb131c58795d93aeba44a4fe0043e85508c3f6a202a827c9d59afe7254acb3a14fc26470533ffbc9cc7a238ccb9c74138210a21f1ff616fbe3c302555c743ef2080633d2a91976008516940a88c73f29f58e1f53cb38118d7909f58411c29f68238a4600f08158ce14928c81b3df5c925cc20ed2cfdcc2d59cf5c4ed8d688dd12354eef02637b27856ca957bde2951ca612a9ae55286821167476ca867306a3d3c4d404e0fc1e43e1882561ff91e25b7d0208a08c82ad615b1ad383d67902c37ddb6264722a0fa7c58a17dfb6ac86e5af7274599494c499a338eef87440e46038a0980c102e6e7945afc702a23549d18c12358b2afd885224e10dcf7252d150d2e3ed202d69ca24ac339ee1bb9f7039095e07c002a64717e8591a8791a6ad96c880da0fe29dfae56131762893f46eb4c91c791276feb31fd167e5178b71106692045b8b5beffccc8d4b59418ec5811936e8445ce3f033159a66d27d943921ed46eca082867f41e80abd3c99ef59fb7453ccf09a7d7b060218e399a3db8d4aa04f1138aeb0c5066d3d5f05dbb85ea10b09a90b29c07646fdd3826b4524f4a657a8ff33e8c28ef062b355a73476edad9d64bf6287bb26e6c5ef2debcf94e78bbc3c7fa29be58f6257d7d1cd43d6aadf66d777b332eb1160c0cbb2cf4e4de069a317ef7833b80d17a053b036a84e63ca8bc01b506640dee7db43f0b2f9a6c60358f88804e0865021a91e319a55e5e10707c4a3c58f3dda757027ee9bdc591086ec185d9b9564bb999406bd74011b8736dd75352ea001fd9b4c4dec133339defcb9f9c96ad090a2489bd89e7af450fa5fa28b2b5cb0ff3e7b638adc87d1af1b4a52488635615febcc9879412a574ac33886b757645074029ebcf0c67e861d960eb7959fc821a153a6f750d752fa625e264e6bc6703e3ac90e04bf9ebb1d876142e80414d27a631fad3b08c4d35171c72cbb5798f5843db66a91913e1e776e4c2d8af7b63d07151d85bdd7620ab10d8065c26ed5fb8a23a14d0d007f75819550a500ab411a9693d1af971f99f5ad190694560a9f828e741c60ef9db292961854c036cf0480ca38032a88716834029bb88913b78a34848d2436dcb4c09c9e950da3fb82f7ae0bca387bf626c85fb2bc08bc79f6a80f525c3cbcecac9a9460adb5fad841ec8a10a6aacebffacef5ef3b4c39e75e67838559ce09e51e5867cfcf124e252bcfefbc432b578be0f32fe92ed5039a5121d80016717101f95ff97a36d2e4286720caa4517e8f995ee1559827dfb703e22726acaabc4df9e96fc6b3707472ca370401523847be44eeab885b9d10801d9b48ade2743af34788aaa0b8110b8313b5be7353b09b8226778bffa168e9b0a8f43875d4f56ebe3d79571f3d8bfef2c613ea38d41c9accff19dc5e7409e8c3cb86d9ad4f3bb204f30e60405c41382f34577b1470e15ef55cda221c21b79c08ac483993e0f541d6589859178be17e585aec62ee07e076b67855a4f472e845b103c70ef6fb3346c66208c3788cc7099ab2324662f57fe0b8650245bd32d4fc3c25b29e487fa0fa93da6b0725a29159899697f850c8494d83894cfa7e6ebf48ec72e4495410b4a22325c19e82997a06bd31fbca500de22afab2a9b789f9eec1bc17dd4e40bbcf62d9bd05f11e4eadd00952753317ad9ea821aff59001552da2965fab241375f9d3564a3120e3b8cedd8e5fc3a0bc02855903daa12759035392f5fe994cb771990a9f67870b4759a39de96d861c117ccc18f2ca54123956833bafc3bd75ccb15192839c621f20a5b3624f58d7bfc28a2794059dc67292f35217885d1b151e40b541293b0d3e0fc5b2688b79aaae716c2e4a31004cce9562178d7c1101cdf7b00431d82765aaa45874057f2005c04df121299f741cbb62824a2920f8ca643dc559a78c1686fc6fb249c49534ffbe6a95b5d98e4d8944cbd61487776b6fbd59a0f2c7bea63fb8300299470a3ab24d46c15b86bca38a3098e89f8b6117765130a87ad5226539099715139a1274ea389fabed2448667d81492022de79092279c4ec3a0ad06f1010128849508ebfbf3c556ee86b2389834a16dcae06e0fbe50b60dad94655da8da5f10f756cc75d793cd52939c9399c3fc31f8a2b417308510662e1dcce587fe3a7667031fa06dd56f8669281739e7ea2526e0a5df8210825fb031c001d5d09fb4c6366aedb0f46b5b0e10d7e5e6c714fd72fb4ff61ecaa3783e0c8bf6d0a1cbd9e3d451fe0e294d1f121d00d13389122d8039440a158f3e48ac55d5963d0c7c85c36ea214d4703128ed0eec47646817b3744096bf5d08e4b973885d67796975bd6622e4ec959d2ed0c74a53fc53ba1e26a362f7302ee305a3ec342cdcdf8339c43ec486e3aeafe9c8ed1596ccbec41cfe0b5b4a52f7b92380bcfa1e8de7219c9e63c204199288727ae8fe7aee0063213ee985b3502ed99e31a551903e734127a890b03fa71772a0d80dcc6c8c14e049418ee6ce4b7c6d8aeed3e00601c300ce71c0b2101044a494bec6af56950f6a4c3eea832ed411293f38ef85e41a05d65ef86fe8c2ec6e2b51890a95afd9b3c1a1168d0e927bb100cb8a9bcb617a83d220def6c91bbf95221381e015a680cb376452e7562b0e783d81d4d2ef143afb820375ee9d20defefdc8348d1a1be27f17f45c638dfa25bd0273e1d34628d14fddbef28e162d15b2c08b8e7f646859b7490acd6c1e950abcf02fcb1a5f4184451aec102686748ddab7e202b375a483e75a108054b0da28907c5932c223deb64fed13d47786eab63ec89cb773fd653391c65496b98c2046487cb52351759789c3a684fd718314e2ee68b8d299de156b9a653daa564c9b7e712ce57228c8cd4c4d3ff41a41a6b04d7c089e70cc12179c6fd42c0b34f19d187ca69d8f9a0977a8dd6044e6b9fe54c92b89e947fd7ea4f252d2052e0b741434c91053798ea85dd3cdfe9bfa507b5b5344a7cd61a875cfe701d8bc1dce6e3bd6a572051af96ba62cc67a83c16088bce33753e8e8420415172d19a11d6c3363107c9a086021b43fdb3a1a4e5332684983433fdf2b4f87162dacc816ab287a70ca87f321a4c1593c6811d3586707b4b1021e2ef0be4bde6416c9024c08993a3dc7975b2ba177b667a66823789231195b2535d1ace855e094f6860c11eca08f8eaa722c8cf4ac0d431f01bf257ea17d071561903a62730b9182771984fd63027a2a2f045c6f8290d19b26740694b491afa0ba9e4b98263c0c84f2d12f096fc6df0c16f5d72dcfd6911145e0ad017e9737a97c38fa555d2ca74845493f12522846e0c2fa38a19162145832b1ee66bab46f0e0b0ec99079e1ac6ea24c6c4429caba9024cb8961c63886bbd324adb8f2d1e2cb84ff69a1ec8ebcbb299d94abafab07d89624f5865ea6689ce132d53f022b360bf32a777acaeb4852500883c4925ebd7b77a2fb2a875ec55a7bdc39df489b8131727eee47067ea91edca189847c72f647a0cca8a770c5bcf14ad3b85a9a592cf52a397f8880c87b001d4440fc0511271dcf2fbcfa664451ce702976781926f5000fbb244dc691973eb7d8da1413d063b8154c3300840e62fc879bf49ad69e40659966c2228cff96925e5bc32543264dd6360688f00a28ce56907c1af7fb5fb698e2d43bae6364d2de08176ce7e4d372880e088b5856ded332885656d1b2ceca9665cdc0aa5b2374586ce91c2ad2c421b4f0ae6fdc10e611392019b87a92b695624f5302b7394155c8c304bc13ea468a40de787b1bf9cc53eefae666e41dbfeb59ed937389004f46e2445bfa9f05981e20817f8485a74c1020a75fdcf8e6b9c8e7ca20da9ba40d0c6fa63d2158ddf8193357fcfe5704e3e810a8b097210cb0f4777c9ea6a404f98fdc5c672859e1177d5150cd6e303fe7495667752a4fa7d2d3f8645ea09caed87d81cf9e959dd973001f88ff803dd35d85fd428d516b51981e2d1c4894158344b234fb612d1a9843e01d7fd0bf90d7f53acf2db06e0b08bd67beba9028be1e1425fb580f654f427cc52903c26f5bd5556415eec1e09a37c94a28762c4c7e2ce204ba0f4639c800469a9a70acc4a647548d2b0b400d6f844be1b00f87d024720a2e06b277813f6a870ed48c8f414042980f21ab9d9b177c8e46b8ea0df8c1c55b195db5c2b7959ca6ba9aa6b7ccd74dd6635aff6a90270bd76397716119f2e9a66a0bdd071a7c8a30a65c418893b117845e99a4857a4594a5b729c2da5e4d7e8b9dfb4c77d3f635121cdd3c3bae4d603f6aa0db8e939251a1c18695113fb59c70a71445f46c66b228980211251a8340687def539c3702a4c0b3b1e7002ac2bc0522a32a790bfe84155770812dae8b5192cc22364eecb55bce3abf337d102967e3b780f5b8597554a7ac94bc43ef84079df87a1af46a9337d58694812c86d52d3cd4ec2faadd4a109e1566b3427ffbc44d1c205de4a03926fecb6a8f16d6c8c5bb401c918e25c2a9170e8f8fdb8d06bdbecfcb4131ac91efd65d4926f1d835b38d28893cbadef152dfbc51a1de5aa9259a3b14de30c433a4cb2a8f4eb3fd5cff139ce9e2d7993aeee2a8d934f37fe4c6419844919ce61d93748e9f4ed7cc78c24c4acb1b858f01903a491ccaf1ed5b5bb0b771afe6a965b37891f0c1820af5f5f7f04d288b52f038220e5cf870fd3c056bb01e7683d700e6933d02e3e06c364a8f501705ed9b80db933a2d0f44f33e206356ccf88aa6d6831a600aa606e1e1503cf5a267bf4c700e721f26b87cebfdae9c1edce71cc40dac23c0ba44b8a0703c588b9fb86a8aaba6762640b92b503a10afaedc1e16711157ceb6f4809075228565f9d1a5b0dbdfa6bec2c1b19f4edfa7168945ea937b7bde1882d9f1c1b50a12b492056e75c8125a91cd7214ab3654c425214eb755fcab0f7c1d6a4cf58a14bf93f55f362d774a1ea9f40253b72c7f3d328fa93a355b271a88ab42eea0f47d49ab154a0da98453b47451856c95f0d11873a804074a346ea62721d70b67d29996cdbe8953751e40a527a8ca74c1ccafe81a1934d82ff1b8e9aa31ff98486b84172a8fbd8380bbae4c1aad444e870226db032645d4f569d12b0445dc5e794bd649717ac868f738f614dcc0862fbeb58369ab885b7c347cfc6dfa692fa080961b9ada4c422039fc8dc0696dc014e2291db467c70f17547693ee5fe7f1c6fbc0fc59ce0cc48480742a7780355c367e8a167207a09f688cfcc25d76fe82aaac3253829985284f3b80612d12da781ed007aa3ee3ad86d6266f7a2b84c78d5cf7d14e0189316d1fccaf60174d55cfd1ab3e54a54176d3e6d337ccf80413e873b308713ea65eac4126dd4a54cbb27a56a35c2c03c0ebdf8ef6a71234d795d4479d380de6bd6ddeb276d422fbd8c69df6ce67a726091d1af4c961bf35475711580db92461068d77b90e477e763f8d89f953b675edb68c89c2f4ad9e8fc57ce85936a9cd717bfd7c59149a80a0ef417c47d14d74790a78e281bac417785f2c6eaec7b5901c73c13799ac182b5f138043e4ea18977c0b3f55ee14534babac130d8ca967a8216dbfde5f88e04f79e6adf4f510308ce05c480463fc6903511fdf8c23298c2e473e10f42d72c1088074582c595951027762214b20844157ad4f309fade00fb90b0fe07cd815cc5a6c1c650611b08b7212ed004c4e50ccfca7a4e75c2847cdc4310c634f6cf465853cfc2b41c12bd515d971fc095797e80922f5dcd3c93b36ed32e1634ddea3b12972df7cf575426465bd0aec2e204de6f99c2882305b286ee8ea2f15293c2dc3b33c2a830679528a68352423f94837dfa183fb76c9a9acae758c939c013e63fd5c1d4b6f5c70ba7873a717a01b50fa02def1ac65438e8bd4a181a20bde07491d4c1b763c963513e875fdeb538b72e457ef7f6da9e0b6a27128660be5f69cb9de6ed60f461d2234ea4e6ab95733638834166291b71f4486b8fe9ff17b89f38e5c6c8a396be4c143e4fbfc90d9b3b263c3547c261434e52d000cdb56e6018639cba0ac289655c401a21131aa331f51dd9870645e001a07973634ca1504ce1f84915d05f0f4a32832a92337cba62b2e8a9895e83848b9bb0953f673d67d65dc1d75b38ed5fb402733d0d3559034367fb7022a0ca0ef0af9502216edcc09775ce90e14b68c23e79d40ef348b722a0743a94cf35089e1d374190db6f95f497b2126627d28623ad13db368780461118abcba452a1e5951329bfc03a09c0caa84b23ef8069070450629b0ef06c2080179ba90b269fc16f6ff486c705edeb9d08cdb2dd70c742c700fd8962288f38967fab23537ffc9204ac11e85f2374cd67d54b959c0010ffcfb324b380fa7f31ee0f28fda4ab042ee8f048811ea1eae70198cfccbb1685679cc818833111f8325fbabe5d72ebd7f37f80a4a5eb2d2a9f83740c0b256251d2febcb9a89125780a5c27c227d078da342ae7f4435d3776a30d5e891fd2b6bd1d2f7daf6f4c21fcdd0c73d3912563f386c268a4e9e7815e8565c702f23745d137ed5e8d330185842cd860112fe1bd78aba4be8cf3c72d772167342f5c7bbe0e4668813d7a0cfd19339e7a2631a01d8b99a3ad723f8d7227cbfd787033e61673fb0fc0b46c1b2c591f6d3a1447a66454ce86fec1cd6c61373e6db1c66ab9ee0b0ad53fd9859a5646680d1a2bb7190ae8e55326a5667c5c67d08acfdf001ddb8be5f893f1f7b8102c233a5343260f6ae33fae47ac94803acb743e87fc171b043f5eb32b7989d9f78bbfc3e051ec4b9d0b30b5fe0aa6aec081fa6cb59f86092fdf6ce5f27aeba2181ad0c5267c5e11c9d91442f610f024030e718724520a783ff9de7227ddedec09944f11d38c1fc5f90d24e17bb33b2e2c46bf0f60f0522d0ec119779694df1829742e88ed40a997bf659962b69660c2699b670735b063813d688c54e48d435a7de4109815a92e5906d8c71ff525013fb4b103267b9baee47581ee082e3d54e76248d64c09bae5b89772b5e9119ceaa7f0ddec4b19019193bbe96e28df671b6fef1e821526a4aed9fb9e19c874b5ab3eb996d58a8ea41f640022c4a530d2dcc69413c28b88910a03fe6756d08654edf48ef6e4b8520f86b6c1d3dec36f4ebb7663a6969fcd57604d18ae85c99a97847c887bccc5472e1a9c10e597d3fed99d590fcd900ec3df9457556e5cdd9f26dbe65946511697e9641d79566810ac62ab953fb10188649080adca6b72b81fe9da726369fa047d8c008a4dc7fce4407da9ec7e9786d113a9069009e69b23121be4faef90eb1374a05cd103206c3dba3b67bc93d9a5b817e516dcdc09a0c948b891ebf4ad9d8634a334f4b6455de04da5caa31eee5e429bd2d5f5312ed6e7da94cd22a2ac68cf66115ca56df05d6dd58d2e5f94c5d323ef8d049c9a5d44a25ebb36fe29a1c1ddaef988a77c951d257ce1a162f791f59be484d5da189ba15b1b7aeb29d0f3726fc134e1ea5e99a0a6a2c77420f322146beb40fa2258796b6d7a5d787b74db4671ac2f4abc4bc1e6329dde97f9955e4535ae93f6b994a8121158487911706d6d380489ef5a3067fe6eb605ef5f3a8b3c1c7781c3fd1f2b634d2b43c1124fa2e3e398d405a0c6f5950034a73df87cc7c86ac4771aebd48637c16c6d2a488c11172a91078c41a34b19c5bb215ef31954db141199a855b6008b5a7fa1bcf4d684f4fb227508823238a322ec58350173622316c4d6cde0b06c86bc29ef9ac34007498d664f4b39f22958410374fb814fa3cedf4f22165b4d5073cb8104d3c853aef3859e5984366efaafccbe8090df75ace37ca077465ed9a4889a9af2b289f0428b9747cf514942139a79992b35d6ed96570906b6f07b74130e24f9461a278464e2a21aec15316c9340ab861fccc8006c87d7fd8a5a3ea292698fbf02ea3ccac1f1d797dda2b03e3f432503e702dfc137b4ff6e207a534bf72a670cc40a4596913c2c29ff16b5b729a0dad5fbe9102547652228c8ae5149f105505ce87947bf025733a0cbdd8122bc62a7f07a643e43447ff0717ba8a4fb9abc92e94031ff59ef26d614cf5029f60fa218920fbd4b72b3508c2315f9afc197f3a0e6f8d230e2e13cf65063896cdf854bfa19877e5984241b15bf3fd7de54d4d96667499008091e5f1235b3ee6801382ba8f81bc7a0882a6383a2142ba4bbddc1d7831ae207818a86400a4de1838c8b0a418c3b8e8b2c82ace13c84cfbb2662d8e13a95dfa2690dc6a55504cfea6aedcca1abd7624ae5ed0f399d0268a214b841f0e2c62c62217c954e820675c8ff4ab3a243d4a8a1c241e6265dcb40443b54180d8c3b746aaef8ae3d0b30ee35d7680adea7559c8741ff2694e57225b2ca01c2cb83621755a1652cc46d8694446c31f35ed2414adf81e05110be65673837e1f3d53f3cc95baddf858c03185dcb77b72ef3a559efbed814392511eb74ac4ba25b7e752e516894852f66ae2625ed82217560d3ca3fcf659ffdea8cfbb34fddecde17d5b1dfbc534973c306012ead00fdddd3fbdc2531cc018625c3f026cd5d76d5a4c30dd3dc2702c035029dbc10fedad57e74700f19228ce4bee2d58e13506e13a5b3051ea13d06e68e03ce5ce255a50f3a2c920cb9d0835c7b3b9377fc61d5888a1714a24f96f996b963930fe435042e24558ff55097340f513b3ff80ddf5d8af5d0d962421e05496a0c0e5bfc7ca7122cee316e929cd1b703641e52b41cb85439b2e41da18adba8eb6e1131a6f4935f1256d51020e9880821e2d3558608f46c8e4afa62d4646934fb8ba43b046bebc066c4ca569ee9838888c78cd4b699a33918b8004e999b66d5d2e15cdf617d7bc97c5a55026b96887b07f000ed06fac1ee356deb7c1ff5342de83eb539d57794603ea59883c1a9edd64826911515d01382179366005687536910f64c1aedd08544f121c593e06d847c9414f69b918f306b6cfe125f1c045b15a797535246b2f818268d8aedc5878c8cd9edafd41b88f585e679c638aa4d5b30240e1753d0152a57e0a356179ca277ca4bf0da63429e9df4e87f7846ba299dbc9bb275dfabe69802fabb83ecedc73ccde9d28d6aff9e0b08dec3fd4f39d5ee9ea9e0fdec76f4ab7f7d9954266cadc0b4b1e83e6f331d9da55dadfbfa9b260a57cf5e516187fc6daa48096be211cf3a2426abf4c2273c8ba74a20206af878c536874c916aeb0588bb67629c4892aa1272adfc733b8b02d0be2924d5aa04f3d672f976b41e958aff209ff5c7fee644c44e54c1f88eadf76e17270087be96c8c723c3f7a7f20fd30a2d2bf607b1053028574dbff4ffb386de5f061e42ed5a298a615224f7074446a8c306ef81826c50c1ada00f4210d420d5c7a2e1620ee9ffc002e9596f5a417de5be06650b14e925615a515d522033bd78640a1812486d10f2798978ec9be9a0020e3313ce7f600a29fa39855f304dc025ed7f81a9d374de662ed402b25e9373ec7525e6c303a208d90c9661b661cabe4027f48ad9d03b17ddf4b0cf959d5f168b208a0205a649356871b2725fd1f8afd18ac730870465f9a3abd57092d1e7155afa6dd9fa9ad345fbadf5df36ccf501c8fad16053c3ab567cefdfdcf4a7fd420f6f7829a94a30951d8ca5a60f20f3a7cd068160cf65cd9e3f9868760955b3fb7f9c187993420b4f647ad9bf7d1ea6bff60f38b6c20e7bb0fda14ab9d41fe4cc8844b6193f00038d95275eac96a23fce2abff022a7e1390ddf356bf316641ccc0910e03ab415eac805254e77b847a4b69e0c6165bcc583d2d935a57d6964c383571fb2b4f41391f09fa50718bef5cad62d5a35aa0b4dcbb3af58f2f8e8d4f359c8446a2421269770af4de95d5b88edf38993730acb8675a00c6689cf8c4fa33a971cb2030d0aedaf36241764b601a9ee0012a2349aeb80b2a99d59470ce2917010840f4023f6d5614c6e16c6134526103f1e05b8ab5802af18f5c3b88bea5c0429059ab8290861e37670feccbdd739de35e6243c6499b448ebacb8a8a4e56578d2393be62681aef78a36e5199dfeb7b70449533f82df61cc9726207ffb6a643cc31d61f7b75ddb0a03f876ae7d4bdceae47015218318dc15c53dfd2e7045b2e5d2523847132b73a268d5d18e23c4f1c673822e055550d4c253219c86bbc935d9516a955ac6a8aba9356f6e4dfa20e8fa6c4d76c8d4e0d49a2ab986a1d8b9684d038cde9791e95d8140f742ebe82d6b4aecd93bb5bf0057fa397c358598039dcb23a18be0472c4325ba6853256ee7934ebe4c677d61822403989e8d5abe39934adeb43f3d212c5c48cf0174fd84f7485599de68462377a319bbae0e5e1f079589aea19b4265129b6517c8f225108cd07f2e8992e9b133aedf48a3244423c6e31fdfa8e634a579766946a852465df682b24fb5d38a12ae9868940267be75359a149423e1ceda5f07940ff11239641f4db07e1c2292494811b3dcf8905913c090a718f25346c4be6832421388fee3087090f5261251b2c128941d36b3fcf4c4a7aaf97ddd5ab0a67bb1a51c0032976b2da7e39d283f4ff44fb188b9e45ae2f14be321a77f371dffe9cca4c8b6098863b9a33f296a0db5fd5406f5f63a06d6586f8e9ba29241f4800ce5459806b8920a1311df4df7dc7c01461f0067f684b152be1834d2eef48015fd5e0fc4a83c1cf2d1b96c6ae613f84bdb2b70e4355f6ac2e0d02a43bae831584386ba0750c04dc21ad6199b1f14ed13e961e2d8eda76d14090442f235f7721157edb9773bcf2be56afa896def421550d18cb575603d11566eadab5c23c753d64638ca9fa95fd9dc759cbc48b2f07f2d98653569d7f0691011e704be67ec666b93844660465327e21fe7ff10af83a90bea1778f1b907171a9654e16a5adabb4c511d5131165832b65457e862e5193eb81ce11c92f64d3b64c1fc7e4edef5c6896c9df60a3fd45ffa65b9f1a7b0a618408d482f011f576c47e742aa13d0719fe47daa3c6183a6c90c34297e490c02cc70a5f95cf67de89d21e4bc15b30a027812f3cdbe4a3411e95d6d0faf8d5afc6af5252af0a635ab00810fdc53762998da5084fbcef3e5e275934305e7b4eab5441ee556f86f94fe79f9b11253cf97d35fe46fef0090f5446678b1c492041df49ce0ef39e841b48a5ca91721b08a09ff4433dfb4d12860cfd2a0b2e194a8b3846d345a498bdee3d7816adf948798dfdf4c5094b37a7fb3d73a8e01af7e58b1eb42a835dc884c09b8393857f81bffe2a9533f12a852856da4f91f77d399ba0801e5c926bb3a674de4db82141e76465b41ba5a307b4e76f38bc56fa95b6bc129c9be4c6ab917aa14dca599ab775946b051cbb925aa3049640ccb216eb2dc42d1976edda27d3c8778bf06fb671eaa3bb7a19d78340ccbaf0f8ed21d741909aa6bf9adc161d88bd75b82635bd9c6e2d390704c2ce26e60ac5545337e1f09986fbaee0f0c884b88973c2478df9a87af1b56cf0ec1b6d18c6a31364c4cd1926b1c22d619941828ff82e66d4b24c7b226c41baba031ddb3529bf93bcac93d1d3cf1be43486012bd56659b97c83167e9b9b42fb5e92343c89cd7d74d8a5aade5b07bca533656e20188d2023dc3b5f2dda18879938f311932e0aa2c81e5c4a8f059d58526c3bebd09bb25087069d13216757fbc9fa6f8ccf0c31828748fbaae1e03f4ad5b5b5a17e4efc71237c7344e6733ed4a5b43ce3fbaa903e26c1935a8885dc8d25d55af95955d91231093ec15665d72d44cf545f51495c14996cd15424b71db2cb5417e5640f4e012c46ad4445e12609a2e029a227376ff52b7550c9d8da8a056cf502016f7ef547531f22e7bc9b91cdd00092ceb267e1aaa48ca2253cc94d6166c8c42ec3efb20ab5b88e32bb8bd78b60f78965f8fcdd9010bf2a159f462b1e7ae0bcefaf776eaeacbc5d14705dabe6b11e59919a380cdedd81297db28dfecfc440e0bfafeb5348eefb0bf7526ad2b5b8dd3566e5dff1735fc76034d41269b135a3f2b146ac033122e30881524f5198fde28ad27d23050563e5d527259a4c59b5de3c0e642705b0f302898ca36e75493845590eab51da5e52ac58889cd49e7b7f53997e442fe5a9f7760008c637d266630fea0f1e05cc6d79c5ee4f779206cd665811f89cdb8fbc3286f2fea5cde53276ae49f832e439e740d750f5d7f704200602c635800f47a40afa8e4c9e8c531b4d26b8ae96c58ed34eb6836eeb5dc34272497f6a940cc96c7a75a610b60469b577e11b31352e61f83fe3a10cda58f050a1157e0dea096f331aeb18d3188abe5a246471a646c97e01279f08131f9df6daef6b623c10c9ac9c0315c6502f93e902189c55bbdf031e455f161ba0252239492eb96846bb20f153499adffdd10d69083812bad20aca398f08585272881d8d12698d5c2005d02bdd061838a4cb861d81b606dc690a7e47ba49027157572deff2a2236d1777ec7ac7835ca02b641d666b8183a4a7a3ffdee2087cf161449208789f5aad0c6854d18f976c7f1c502ed162db570d80380abe5998568b20b688e0445ba5ffcfdd6b5f82e5034178416103b7303924ab43c023bcf5ea5c751b3fa4829d66efdc8310c8284aec47be4555c7f5b0ff76e23959eceeea72941d42751308dd1d44d4320d31826aecdbb970496408a06d7a71776ed8652238e0cfe6201d74b221af1b830a02ddaa3452f293e107d0d01ef5dd654ba10b042f0fbae67888e7e457efcdd0e0c92dfaa43fb8a277eaa740f6337779f68665dd14b20a5c9e4177a456b41589365e0cf8e7403824c524843b2282cedf595e7815bdfaab049bacaf08d1db1889c31106b026a348d2779641efd12f684e5a8d6b3e6f72bc3ae2488b2a53f90df9221b3219adc46bfba21e0027bb7db30dfd6fb572410065c09d5fdcde2b67d0ce404c18c7a1e75c508b03e09477093ba149420a1702130bb99276c02cc402af0b37eb51ed6933466e9ff88789b7b82c50a8c112fe2852ca42ccb40a41322a29599a086a14a23d4ff3a292ad3fe59f37a44aa99941f7c8a10224b4880918050faa6144bfca924c4b25a92f685d553fbe2f9fb6ac021cb3e57e2c6d368429a43e1e192e2303b4391e374837d5e77dade079256ffca096c45413f0dab6a06c39f730b6ae2660f411016f76a0a1da4e754637ca1800c88866efe2968e89fdc66af3c7fd01acc6cb5374a4ba0f88c2d0771f72ca04b09e9db070706812ed04a8ef4dc5984c1483a45cdd6cf56fe8b66af8dba571ae438a59b22e7c7d180cc422242c826046f73834027e7cdd58995e4e23f865030d65702a4decbf51870db1c043d834c5b36f5883e3135f8357129b4ccc50ffc29b03065b105fc0bd29b6de82e55d3b17ddf522d7eb0b0056fbf91173a922e732ba7b5e687db9aad578bf65c557b578e19a06aa430a608e92978a73e049953c5b80886d3d3ab5d7acbe1da6f781493945bc001b79ad7747f8024bba17ef03d28fdf1b1aa45c1f238cdecec0155140980e1b6d814652029e814fb78ef92eb19daeb6649007cea964f034f5d68f8032547978f9c596aad37be8464b042919243220f9f8e8eb25d2938f31d6ec672098537cf98ed3cf1695048d443f87fba3e1c017fafff39b6462c34a705e3a8376b0be26da9d46d34082e20470e763594b4b0a23e867d5a88531948fed59c1cb3bcf19cdd1d088881f09cf89be6e0f082e52d452441f10e3a1d3243c02d7f2959ced55185a8c6016f5da941fa2ed202141307a0aec4c677f11c308ffc5e00017977ca58cf342527f6e26c1cf03acf46ef93aec6d65808693d6bab9f83c280b627c3a7d068792e58a434bcea8e423116b6da3ad368af8f34e9d5487c6e07719a4162021ccea6e0e31d349c11687bae4d68087ff00df6d3effa2f9ef153d1b2f20bbcefebdafd24f8f519c00091d7e7480461315bd038e3833ecf48f1e2db9eda527c2459f08188e64204e53e6943e87cfe4667443dfcdf13e648b7062308ccff6df3fc10d6b34af6af191f0cd1fcd5031392bb9827cb29e2f6eb2b9b24a560fc7238ff0e7dd274c59d1e40aa3cbcd180baa885dc7a7a14d544eaf39f8c6b5e580721c290362720e348021a6816e9839e1490432807d40db72cfaa7e08b99e6490efce81f87e0db301afe85d50c6c6f9903cbbf8e7716458747a4c17cf85f48f0be4df5819b42214ebfebb1ad832f5630fa1d34a2dd4babb5de9e662563ed4d26b33d2a7425ef06d27ca82853b0f611fec63063050745f77129fc41216e48ec8fb879edecde8d84d2b64fb6a6aa184e962040cbc37d300775151b4eaf5e9c4183bf1b6f44f9f9cd007f88a37b4dc0ba5dab35a0e686d09d2f50d551ad5a581e080019727fb94bf9ac807a0c0478df5244743a46b94455e159bddf1302ddb97fcf19f4d8fb61a31345065fa70f1ccdb5f39301d1500ee489984fc034b3ca832d9ecd36426b1c2ea1679f4b250c4c78d73c0581d1a8f527471239b1649e2ca9fb63a7c1c9429707d668ade31601bfc72014eb531eefe65f323ceee1ed0c2da121119c280ef9f84c44fcaf524b9ba689367252dc5e00d1cc29d74810b33f20c58940383a27ffa08d6a27c9f193b4ee6d44c67c385a2b460ce7825ea2544d164d047dfb9054f33b833e2af0358fdb82dc5cb5437331fb589f5855acc79c74cb2fbec5ad46ab02281fceb357dc0270776d284350fac5fff442003d1e5e4947daf61efa03642eacba5446fdf1c652f149d6269dd76d85e718f58cdf35df822739474546c9aa2593b43a453fc38bf26626a5478d9980c3b9d31265b738d278bdd6e0aadc7f2aab3c9f0d7644db638cc8beb13f49cdb4b19b5106e99a4ffe42ce54d7eaccffb3481120018b1f569e1192bc89bfcf948190d99100b904abc65f3f5d0d09cf93b5c21c8e7a7a7a37d59390d118701f1898fb1e82dce8b1928c904080fe9bdb566197bc39e5170d08b09a056f9c6ef5c8de1e4ad90658390b66e7c96d075bd96d04e7e8fb8b73ebe496a25701666c65325dddbe395502f06b45a2ba904f3e55561e13ce0a1cf89d87ea9b62ec1444e567dbb0e67b26e82d1c13b9417ecbaa54a1f28a1c6b46a4cb001608dfe7c52874d631277ddfb82cfcfb2996f3a1dacef8498952436e0f4c186850ff0ce5feb2048aa208e5517bbf9adb39cf18ad294d44efa820d86380ba3fcaada305f459be1f14c8c406ed4d94b6b87caf38319509bddd939403bc2c6c8b74fab976f5adf777cd8598221a14428477e9f7a0e4bdedb6d527469f6307202beb70a82e85d1349eaca395e885b0a65697f3dbc8e7850a7c135e6d7c212bf289bd244641718f4a7f1e0da0449acb01a9f0737d4717cdfe128899622cfdba1e334ba85875dd7cc5aa1a07421b0ffae690aacd1178f61e57e2459e56bfcdf16f2113f184b06a688a9ca11f2edaa665363fdd6cb6a9651aa275732953f382966a2291ea5102424c09ce852e8812649cc0b80a0808b4ff0009d87d35d4da9efe6f791dbacfcc61a2f0617ddd7e071403b37ac52240f84b8210df0092dd6ca36c1734bb6b814a051e0af97b1fedc5a6bb6c92eaca5dfdc17a292d9af093bd5447de32c6f4b2c421eebc1ee8ddbdbbc3b3da43e37a5bda3caadb925c5d506fe74d59f8b935cf50d0511ab3a5fa443c2e86ac921206acc44ed11fcb6de20d00bee1dbe427cabc2220cab2422e7ab81ac95d0d773bf9be9f5ced16fc4f10c66c49e072e662917a6547dedfb04698ec38f0e922c6304227a4600d9bb43b1c7132028c7bc6fef8c3c1e715d455cc42b6fda070bdee4eb0841b8db002500faa0a9490b290b7b0f776c0eafbe3fae12314a4c06487cade967bd92a1c394105b070d502e7554bb15cff6027643824d00a124bd690401c216e2de04f36569d4861e222df01c305dc33dd43c95dba7759abeb21d37478b4a2b74d0d52dc3033c2d29cfc8135338847d3c9d94c65e2fbaba83dbb907ff90ac73783820bf4bb89f5ae6c49571998da2fdc4caa6e646a7f71cc3047ab468351f42b20bb24c4206c4d31c397a653b32bfa2ec1695a856630a455c3ff7c8606e02ac5edbbc1aaf4d45e9821ced128480058100db197a183414584cc22ca115a1f843acd9c64097908393c87edcd2c82c52a464d60c4f5ff5c18b62345c4998cd06ea5a61701d491a9a62ec70a6421ead6506bdb05bcd163d59d400e5117882f4dc90bd0b8ce9b0a7ccd8ff153df2ef58dcc215e5ff795fcb1fb925c1d524f638dca5c6ab188c28f675146e0a63292c6e33a993e46955397d1d807282578be03e0f254c37f11530967c4cedcbc2d20e0a8a6dd04e84687c936bad14ba3025eabc0231373deeae89c14325923cd5d10cf357c76a3bc16b0092c4c3f171763e1dc152ae5e34190d09cfa2f7f0e5108c1b3d2a59e68925e09157fa14349247b66f6392605342a297bee3ebfc6f1837f6cbf8b9069047e314c4c3fa2a75a35d9917e7b8d28712f166a1f788d59606836542f823b0d56f96bb950090c7d9e176bfcbdbde239c4e8a0c1defbf3a3ade43c381fae761fcdc98c3372c2d91835bcbf8f0c2bd7ff47baf9371ee957ac14d5d9ec0fbcd02a0733c6e38da2bda281089204256d85a589bea4965899450020ece5722da86fe6a87b8a56929ca8cd583795737e547c6b247a297e8d2d8ba84c19120d3753572c7cfb4650e4d1db4099e00f1e3f182f9a3b170292b61d067084dc96bfc4d7d8b030dd0aacf0ddd2acfd29d821be38fb1e190d93122431cb927f0ff81528cb4f16e8a0dd1a7f8c327e8589dd0936bd094085aaa59c9976f6dd009d0a69c259d67de1f62ba4c1f90b31c7471b0b18b68faae910d583afa6c16930c452d08211c23a00a52c9fe97517065ad80deea284f427493411d140608fbb976a26baec094da62bd3bf30b6b72d0dd1f49ffb3fa00f20415f942c811338375cfff334b40159c177d6ee58ea8da519e80e2782f1742284f5a650f2edf2c91e1265340c185ed25061f6375762697f726f5630180d7f5bb3c6e4d8a16180ab7c905104f84387ecb5661cb9738853c82391d1d40aa578993014f94b6f1e2d4757981157888b76993604794d388407e3fcfd8744576736e16b1727db3f4e7f210cb8c467e17ea25ede80887fcceda715584c67c40e5a92355856e410b9f0be16af5427fd835712a13dc37575b7b37a9c01dda37b2aad83d16ef38541409972596d0ebf08f523968b0890d55da82c27f758e9e76cfeedc79ed6f7525057846a441c2da6c93ea450761648b012b5f94c74039aa3e7a6469f472e004dd37a90d2b42c7f6ea3c70b1cc742254e9d790a40e62c3efe9b5195fa66c6f30832c156fb327dbcb7fc1a268d4d577ebda844e96eebf7ecb1632c3b89277d0888254e1fbca62896c4905278088868426a23d4088fafa94b5de2b5139877efc4522f10a3c8219a9aa13388ce986c70523dbde8eed6e89bdf98fe0f69ba87d55b1a0f2b4d3e8721f436805ea0fb5e2a95cc0925f2ed5b77fa35236b1217f235ccf80121d3af7602b20f9573f570d3e0b4e00fe5c60a708c382ebf905b598f0e6f445ec8a94e09ea2d712c73a75917c028bc3398ea5e2e92ccd4bfd4ebfd308cf33f579d0b23fdd6a562eb1c186d0d795446a7eb3151ff43e78926130cc80b4aac19b9e91205f138202603c801f8c96cbfae5f99f6888792db4556bb9a9a4ea6acdda51767d0b72a1458c93f3c0bd3bcb17c410cee8c4383ff76e22f48c75122b88851246279230122cfb4b8688846d4c1e930130e579bf7320323814b066a380709761a924f872b7bc16b2064c4aa503b480ff62950a673d6623b717c5ed3403be7e8d78349571a2cb6a550ccdec22b0612e882b177eae7a09ebace70f28aa5d4f9734a889ff36f4c15a1cf1d28388a7ec6f8a1dbd37377ad8014ca0771ce3876e6db72a5caf70c30f9bb0045643e3e307eb84955003ea9794a0d1a3d671fc744d1b5c4a76089e3c90588f3e58d617f50e30d917deaca347cb26e73a3cc577c577710e7fec40147950eeb54b9471da9b4ea74d972622cf6a1a96f0070f4f77c84253a01c2893a2de862cffe1e41d3c834e0853edbc01092a2c047dcaf6bc07f7b00f457f90a899cf4b571dcefb04a0886c69822fb96e23b8236e0f053c711c7480fea11fe2f9e810b9cf4b613c732c6db409fbd08af57702c423d021959ce8b85a8bca2051f6ce1c0dcbde6ff111da633001a13776393806556600c57476ab3d0eaf5d802cf42e40a8698aa6c95eaf92d8b4fa4338256693578886b6c116a89aab678f389a72c1a5716229244b31fde9162153f5c53b979157b9646001ba210594097f2364f66c7429b16e53aa2b60254dc656e1f3080fe5ba89600421392b0dd494b1b4f2dc7faf0995ff36c405d70002d5c8ec30dea46d02b906adc5a37792679a8adc2fd6a3cb4cd35659f98b4a5ce3f0df381990c08cf5f271dc8a4be13f59e2795a1c081b99a450b3a2089bf688fbd7e4293e4a05ed9c0dfdef19019005b41f67e7ce63bf006a1e1ce994b578c0cc3b091daca3e6b91e0b11f42889aab1cea1dd95d1459c1178ffcd7773d78a6610fe2e04cb2d14aaa6fef9224813a734f01dcc84fd294c37147636c0637b28eac2b028fd4eafdc63a7e7cabeafab25b44ba9122376f4519ad89ffeda42a870507abf89a0e02bed6ad46dec00bf3df640d9ab791217989e95520289d1f08d51b68fe855c1616d906b408be503a03d44c589a3f9f90ead3943fef9e684254fa885d51ed8299d86ba818f8110c99692cfe9ddb86796e6afcf3eb37d73c473a9d69b258c750b46c0a6063f72bcc58d490a66aaa9d1aa0aba0669ca13f0b78eec852ae482a79070ca5992f8d88cbf65e3b1a03c24777d4b224566ce8345e994874b58f6977db631ca7781811ffd2b3b2f91f0f5003bca1976e09a163417517a0882eb4796a61890eaf2f7dfeaf28a892bab313817e551ccd9bab8bbca5e928a38d77bcdeec517f7c4e6ef3c30d37c31171ffa6edc83ac98fddb39581d196ffa80a431f4ee5d6e2b0a31d9fcce85e1866dc3ef1d8d5c8e8c29be425d6972445c491a6ab03ab56a6282bae4310313d27fd12040bb50637966a8585cd5f106a1de81121b51c4d5e3d47694a76b1df1c7b4ffec5cf446faae2bd86f114abc9e2f4ddc19d4641e00967dddd36a0d201e54185d3fafe48fc131e84a4cff7a1135cac7d9d144d4d46fef8522c7a5a89a7364b61b5af13bab88865a68f9330f1a10b1dd06629ec270264c795f655873784220c8597063a43266e4f60f8f3f81b79bf920e1f4fbfef5f28460b5e0a435774632aff0ab7c2bf281207f1f4f00923eecb54b62b24afd9b05f47bdb7ea8f6a60a590afd63cda33ee7055941fbdefbbde85843505405ef4f5dec246d75f93a5cd3431366bcf4b8447c9c237aa668f0b60d2010bc8d9fa80cc8bf3bd6302741890f729d7afce0a4d096b1b9aa8cd088611ca8811670ae7c16622ae2efa2877c18068d0722a395c0c1908aea046366bd2ea9b36f05c83ad5de099cac7d82dd4b66a5b6999d9f3bc2ccdd4aef8f0ab72436dab890ccdfb7c2286dc21607c33be179808441426e11b12869baed52e969df0dbeb08f6739524aeb363229eddd9761602a8be64844f840a94438c0d8fc8c6fbad04f9644e84ff30cf5e13b5811b37ddc7692ff12e856c1ec4dcf56efadd486c6402aefe474f423d3392e781a9584e8801947f60292debb178a17f790f51736bb942f7f8103638d19ee198786ad347f802f9975c455691fd306a4b4b4370f97052899bf6361e2eb445fa407c293664a466677883014ad2eaee047be49a16f01d022bb89504138b218803a49717889a314741c6ad04e830a0fe8d1c0c40be40f1b40639009799fde88633a48cf091b33442ae8721d041ac3383ebd5e46a81b04dbc154fc9e5a4fc1eec2c708c7948862848a814aa18e5913543f470427ac16e0c35deb9c057afe2ece17800c12cd5cce2360c3e9472135a29625eb10c0a9bd1a76b8a858161eecb1c3d9dc3640e84a4a3d69859b8f5b3ba997e7c31a2d5b6314109a1b9ff798a5d4c66822f7685f592e36cbac0a048ba83cbca95a4a11c449198f346b3199e457fbf5cc86e61a09b05601a7b9bd81f664af38c89b317d3c7221c1e210de370070c024ef8c37c018238c6ad6ae80eb60f77d10256a44ffc259dc3f1591f106c635ed93f4837cedbc7b68d130819664f9766dea64b19ef03de04e5a90447a1a4b97a52f4e53dcf02b4ac0e48a0ca7538d80f34eca09b214ec04b0b08807b080d6d122d728e82b60b4e98d5e9b06d77098457f4adae5425d0b234db07f7c3f32c69b0248603104411506349e4782f743ed10fde7e2a6001d838f3b2e33453793274c9376702138cf5bb09cc5fc9256b3c888007f67906ccda5f28a93cdab01cb57780f129902ec1e226f9abfb891c2d8d0d8dbda9a489296d7e9c90c5f72ba0df30a5afaf4fb6397470a82c27ebcdda992679324114c317e1be2b7a79b647a5b619b21f586b0a4d9f10f6551f737fea230604555d4efef75c36eb447cb2037ec6e69bb38e1bb808d310af243dcfae7a353f20104648ba3a44615a780858afd1a071f002380a1a4d01ad0b4c932c2845e311b63f38e8a02066bdc0a910945fa4bd9612a901e114d51d903bf001e3ff696cb1059e38b279ae4b017ce679e277ed8881f1df7c72f26fd4f74e64448a6c475426b0cc30f9403115cb8510e40f03c02aab3d3d689405067d8f21f439c3986f1205ca65334eb0a655aa038c1b96d7e31a30c5c3e0d5ef87ec1a815618a5ce435cda2d61ed83faa61278a0334541306c63308a90edfbadcf59eedc55f4d4d8d4fded621a2e2ca2f63a4079d155b7ef4d3e3209014ff0aa16a2c0d395e6d2408637326c07bd86f324d2d7393bd293ccfde545908a071f0af50a684b16ac8dc37e2ee3f0ac9d986c92271cab3ef6b213a729063b8a8cd50afa1c8bb7396ad1b0c1808a0318f18f22e91dd8a6872bf48d602cf0acec362841f65c26b30c461efd390380d24add51ae921a00f5854f5eff2d1277921a1773f0039df51e5a3a870d71c59438d436680ef78a6a7b56a708200131c15d20e7b2ddf24e23424e80eb85362ed45e4677d06e1ec069cd2557b2a13f952d09ae3226b1361e8c5220ed3887dea4f1a2597e54703f0c176b7c8bea7befcf37696587f84e0a215a0cad632e747b36ab455d16271823af6eeccbb967d24d3b16438ee5558e566a20ccce6ea2ce81ff2956ec880cbd098607019db9adc835228886d1cd2bbbada0ca25ad0bed892b83d7078a241e4c38164dbc438099ee24d8030846d7ed1342c474e5c80550f3fae3b078d229a6319b3ef6ad4d27287ab3ac49668badd2459c820962f58456bb15d0ea8d5f5d901f2e068c1dd70adb87b22fed4c4f828f0365a685e614ea0e816b8582a4b67c584bc15a21fcfdebfe1f3ed08f2bac1a1d219f957ec0c120fb444c74d8dc75f512aaf9370c5a54deea14e8fb2441beffd625b25648ed8514c8b746d709d0a9e924b72b0a7470c9dcad0550b753812f3fe15e5e2ba97f6d0d1372df0af1e0a14ad82896cdd6565089191c71b6e3231b77c3bdc3557aa072a62f702001c6298920c34bc0f9010057953327cedd79b65f0e17928ac53bdebeeaef85a67092482a373c0043d270f38b7fb46a2f12c43a138028fd47b032700416b5a6da6c57621ce8ce0c9a776f56e4e0d95aef26d06cf0dcc373e07c76754d3f1f193a5ba73726626424f42a5c43b0e210e9df6588289152d42f0e331cfdf96865431689630e2d6f907771c8c2a0d435617e8537045bd2055f78c031a30d9b2b20f549842349d0abbcd7e0f317dff5ea707cead0f0e40064238f1fc01a46c6469261fb00a8c4a56608ffba9473e6aa3e1f93c3053ba1aff5d6fc4e714ba03876d5aaccefa3afef5d16aed822cbfb9653db0bc564d16a1ead981850ee4e6bb3fbe6ae78c47c59b3efcb5075e7faf50c79ff5af29522ffff5223fbcdd7247b75198ce3d1ec5b4b2bbbb5336af79ba62dce961449e255196569e15610a5275d90bfb68ab9d9670ea043fd1e4053ac348b5980bc95ab9b3e90a81e6764f837ed0bd918d0401dcdf2ffc890e24bcca4b1c87618a04fac91e689cd250be0437806abc44e408ad402b6b92d6a434a3c629ff63d62099c849e68ddd77579c5a83b89b779b43222781b8160dfb4efc0367e189c5d773f46fdd163a5acfcecd9b48fe47aa84f522d8fcc391ee47729d57fbca23180f9ade53d638c2ae7e5acfe8bead22eaf07ab7e877a42ab46f5c45973e6f407923374fd85742f1dd4c3467e22d869f360a1e0f7e5fd21411eca86d014cac4e5c82fa7d684461790f61abc7773aa2ff98004fc996d464d789fd6156d12c5c86ff190f2edee152bf4dfa85ea05cbbf3e36215cc995814236e3bca9730e1d5ea7f961791ca0805f65eecb414c0073a1bccf652235a8fd03f1649c52dea501d1563e99f24fe40aab2dd54613b66c8a941701cf3cd782994970498293cc2a71ee8152b7102bd38d2907a79fa862bb002b7423a6f041ab6897dc3b7c7675270bb5a8932e1bc90f5a09789c4db0ae93233a4bbe65fe37b2f7149a4ca29a0cc33608fa4f68c92663e227cf82958a355c1d0034e77f9b98086b2eb80c0144fc067e2b54767291dfdd265290fc013e60ee1b32eba50974847832182afca83192c0d4f258d468a911c4b23329b6daae433a8c50b277ea6a693c8f066f0ab9b7f7d545a32a149f3a3fcb379ded9afe068f0e2e1da91a5709a503b9aef9c0c9ba6761452a01a9a12ea3ce8c68f4bf29cc835d574c3df61fff69b949e828614fb900e40372874f1e0ecd440ce99b8e9247e85b9b275448cf1b8c327e285cddcf22d60d8bd8a0c0f5ded18c28c5d8696fa3e70e5a049daba40115e71c9fc619d5c46f35d29af9d4b848a384562136c8dd7617d88e250ad502f9cc7701ed9aef4107b258660e4e7990a05ff6ccda08222207daf376b94a859b8aa3229fce9b2c26d631192571cc5619e1a03e1c23ea7978fe4e447dfba963d4f1c12f0162e83a25dd5a0bb91c830cc68c46160c0391e2f3b7480a7672a626320a68706421ccf564ac588526e9f314ac64a82ca6b956f42266b71ed22d48907686756c467903c78821ed04eb039e91f91e70f8f33a2afed989c9e58d99ebfeef34dd08b4b1dd18c80bfd8f03b2db467b4021fd555d764e201b768fe2892cb6e80cfbea8fdb4a9d3ff3ac443bc71dd3bf8052aea702222838eebb5747ac5c4b01c9d08592a20af34668691b24f1ceb3be651decad17be1a703e490021acbf15c5c40125a4d07e6d8afac3ff18450cbc236be3ce6704e5aef9f974f2f2c9900bfcf064656d7b54fb9a12998568679ccb99b43a96b684f1a7bc2eeaa7ba6aef6b8ca1b3e12b42ac5ac6ca6756390111bcafdb6c9b6b67737b9b74c294919fa059105ae05dca6a29f4c102744b3532d2a3b4dc96dcecddbc26dc7d61b3d98c10e080409840d9867afc8788917746341bc11849e5ffa674b8625bc942e836441bef4af04c9c23a7d09e437d52284ea32b08bb552d660b6c3af2aac218b7f7d07ff7a1266032f7a1ed2d0cd4bed5ecac7e7a5a65e4f66eaeda603a080801b5a2a71a5e7b6e49dcbdf7c860ed7fdedb3bf5b65432d7954d1656d9e6373705d969caaafbbe804af13f4729c4a05ed5b736fb37b77a524914451953246e781e755b9314a196f1a04376e6eb4632d2db5cab5b4d42afd8068d0308adf93ba1fad26934e8b7f4f2a68d261c98a8abb71a3741768bc54459618781e5802039c029ca20446090c9009758fd26da394520a4e5159549f0732a994524a291d0afaf9cacb2278ea9c6f0b0fb5997ec8a56210507ff3ba45c13ea8ff701d54a582e9cc266ee39cbba910307ff34df581654dea45cdb15512c10be97b35bd806d87279ee054cb6813633851e58c344555dc8e0b3108a824d8790ea4c218689ebd430a70847952be72bc8888c19b21a9e2a52c7d9c2161f2d2557102b31c6a2f73a07d487130c14ba722a8dcc7590e4e7c04324bf2c1059221a18f331c8e78fa718624e8e30c49ec6f78940f0b785df778bea40de2a236da1f4d850a4f077393c234b4cd1c9c5ec06d334a45462589521b5109aa5462547e3c2a2ffa1d4531512b4c1f98f47141694cd1621649af53984c997df798d52942dd72046aca102b94a5a55d565efa149f18b21853783a2a647451cce81829559a0611806848d9424a4d480aada1a8f1259998a032358c19219702242526819248f9a9a996551595f282d120255112908c4c3fc4540cd54352c25762f2550180afc444fa37fbeac7254842140929261d09862404e605894629f2882495c2c68c875ae62d4c04206849941eb68f4ba224f91e267c5178b88f4ba2f870a4cea812d1806660a0c6255dc8967421f4b447350171c28d9b0fa85fc61879e0908f1a673a1c313fce7420e2e34c8724df7d9ce900fb38d3e1e30c8917df7d9c212182ea0231d4f51919a87149173f3fea0ecfa7a81f134c50c11b4799d8deb653de571725b92536b52e2f313e8a050c060b192b2c28b95f387f986d3c97542f3e626accef953c7ba6b6396ce739a712254ac2907ddb7e76ff36e35fbf97fafcab2f70930bac8ffbf2aabd63b5a2a121e19372dab0012e1180b82d6e092c4a457b02abe6868d009860828d3ce143e1c60d09f52785efe5552aaad217c7f7f252a1e55ac15be16b1b4a56005f8e492787850044dfe66466e63999274f1626f32c61119963e4c82d7c2faf2aa312252723aaec940c6000042080ccd1dd3962e7b0e10354ad7d317be362a5d46160d609500652a4804a8049803100910085e6162ba50e03a364ca14f005a87a32e2431bc924ba64cda8c9d76ab152ea3030478be4882fbe30a2054504b160e368a90b929de46c9f920f1b21a594331b35ac2c8cd04ab4a0184540641d71000c3d34188d36775ed8962f6b5734ae9546250c345a58f31d8158d35ce9db03cfbc82815d35d64cdfda0152cccbcccc3276a74dd5d166152f3d563e3e3e35246030180cb6713e3e3e47b239030386849b614c454ad92d4031b4c20d8b8b4829376e25c6cdc93d6bbc0960301f1f1f989edbe6337db218d2c4c7c727a807aa36b98194b24b94ce006ba2440facc90d645b1316215e6fdc64ce67f3993e0d8453480081c1603018ace7b6c1a64ffb30f7c0cd4dee8deb8171404a4442603190bbcd9ba9ea66d8946bc407d693c9eb3a2029196d4a5ee25cd6f81255551fd0e7640afa7cba9d37c0602a20c2846ddbb6d9db76f32940c1104042040104f803e803d803c80318034f002a014d20a5f40193487904298f00ee00ea0022017fc01c401cc01bc023a00da08f941206f68030d00858042402f2804340214b7d60a5ceb35143c14950ad0927275890ec04933a7a60609a058684c7cc2c7160a386b50ce50814223f5cc038c28a081122443ab95ca9a3dbec7a4a3db4e7686e7346645b56e2f19cddc2dcb28ac7cc1b3799db6e5a806268851b1bbc4813ae1cfddebc0c47bbed264a2b3c34615a8999e6e6357e9b2a5e39ea8108919e9e1e98ba73e374703d5b0f1418b8bc71b3639c77291c58b4e17c5db2d2eae8395f1dc59cce5345de8936eba5947c8e73972cc4817d9c418d1d5c5a73ce39b9a5e7d8296b5cd4cdc3396bdb2ada96d1b6f8b52d9e7571bede02147350f8f59a49446cd662532617882699c81ccb82440d6168cfc064d186beb71e7bbd2d637373a7f61c0bbec75f0c21359c449348b2207f1b3c922930093cfacde5c725c9babc9873f3eb4a6ccd3a58259c3fe1fcd1e99db3ee765a9b5d3130481d9d2aa6e491c62e452778146bd6c1a3f9f313691044956f55583910a9c12415780454c31a8247bf33300e065ea40929ec398ff4a3109f7380be10a67d511d4feafa7acc6cda51e3a977317a9ee7795d7cf931e66c746f9ae4e4d91acee56b3f8e67599c11275239a7463e21e4003ee7a89198233f8f99f31f2a275fcf7929257fbe624ea49c4b0adb29d8b72ba2aba49ac0d6f0aa8a84f03246552ca92825626bd88fa04a3c6f4312b0a2865b6d435ad716e3a36d358734361fcb6229b76d87c6aeadb6b1cfd40b3176d1d8ad366b4186438879abf11fd570dbd97688b81d211d4893f9def4a78fdb2a71afecd8dc8982ac8fa26e7ec32ef6cd37cfc1aef56d12cd267b4a8a39377edbdc4bd16c0d6d75be6ddec2e65b4bcbe6218d0f6fde530d06a18637dbe638368f945debec9cc3b08b16736a3cc7cf99f01ce51e477803d26cf022cdb6581f9d461654e9cc004f7aa409654cf28369a1d1f26346310727c2308dd87543a34733a9dba5046048b20e2691304860595215b31e5f7ab704605816a5b5de7c13b13be79c13045a568341e00fcb7aa2de7ccc8675794f9d1e469a109c5776f52761701a2a188b7dfb9a76d4100492714fd237b0d3b22ee71af7a0d4f5d05fe6e5c003bd28fbe8dda98eec71078da73dc4db4d7dcb628905f8047cd2f29950afa857344ca5dcd6481a2cf6b0b6987458f27ef279a71635fc3e7eeba2dfd3d82e54a15428154a8552a1c4273b4f3d0f7c524b35968e065ca8f15f16b5e45ee428b73def5b16adb4e5db6ed95e048cb675b2c1d2443df97becb5d7dd75435b8e9d3df50e8aa7db0d2dc7492e02df75e5a1058ddc12b0a82d1d152355424cafbec9929f6631a74bd1bcb886faa668605c8323b67a1c311c401e88456d078bead7434539751e47ec9a4e9d4712bb36a7de8006342048cc29b9eaa9d3bc5605ea321592b093fa0df6d497e6e7a993b043c26b4d3c56c754d1ec700d751411358c3b68316a316297d4d1720481cd511e4d10985e553c6aa8140f23aea1602dc64f5d9f31d399318b36d44f4035a4a1d1d0688862cee7d469a8883925a74e53a3a1d5231ac9a3888751270423c58b85a87e3dcce0f18a39fed40b005e51c34e6889eca9e739560774524399a45f79b1aa023a9862908ac8029b80414c5480ecab3211451b2a5fb149d28cd9fc6208e151932c6c0f1a819f9853c38aef01121726dac6ebaf0823f670c60cac3de54ca0933a77d8496cd1d0bca516733aa71e638b468a58f4614bcf536f81c59cf619b315274f7da51673404f9d1c4c754e43db216828153249403de879ea21cdced3299c3cf570c6eca983a907d4a2cd826037bd4ff5d44b29ea6147f4d43b2176515a2b758f7e6b026b1e093d38029d54e9a14cd22a29da502a9e7ab81ae2a9af80620ee87488a71ea6bc78ea2999a415f55552cc61a74574111fca243d758e002cda50f71f6ad862f41454113d3da5a88dd77d5f0fb502403167e6e90e8c9e3a8f1abbd6e9a7dac00ef99dcaa30df51d26bca712a23aeda63c8a96453dc7ba10a93c8c543c6acba2d45fb8a8eb61dc41ede3939d1899a01ca494bbaae9e1504310362798645b73aa7a59db8c5f8328e6b0be4fb3cff12d6b12f1acb501409e7590675b5d83caa95e50e5f09726ec720eab8ae6a08620ac5bd605c26670504310f6ed2922d4108481b06ded919f243be2ff000281446c8bf37630685b31d2231882302564df3be2d0f7ecdb43108a6f9016b3aa6ff31064f201be7e3a39f17b14fb751392d842fd2c6b8b75a1626cfaf98c76302579d4ec888c47c8e423a8ca2f0ae84342d13c7e316d07f6f1b32dee31db4208686e351e1563d736012a4205ed1628a14542c97e512eb87cab96e644dd38c971ddcf8e1a7f9a459be9a566a103f435c08501c6ceb3d8856dd58a51959e63c3eec785992f09459be92b574cce27fbec227ea2683fa7738fd842c5c018f34ecc696f6d2d940f91352738ab224312da020cfa39e72c214161b47fa538221f787eb74583cc9084805a88abf1608c5d5c11d016414842bf5c95df751fb3b0db541cd17c6db499ce237876d95ce25ec9a7d9125b7912a316db316e4f0d66b5bb94d279843a3f0e0de1e243984d8a0a7e1c1a02849eca7d1c1ad283de662f14bb306e8420defb3834a489da1594525aabcb48a1781f82e022a5cd9023bf6e32e96c8c1634f96eff56562024e699749a863b103a7a85d1c3c80a2a66106ac20b1b44f1a40842463adaa3bfc02f206c509bc69ff00200d48b96170f54bc8c108407df302c5f7cdf40621448956fa795e5083fac884d7c3b4759c2f8e1430bdfbef5093c04718a2ca3a881898f2a354653058def242ad1b7fb70c1b7b30351a5873441b87cd3f67823882a9f0eba25f02141202fd24c29f9a3cf5c72277278f353068f2e871d591677cb1fceb12cae61977247064ee580ad61e7a19d0170ac8ab2a05aad30c93238ef3c94f1eb61a9d7657471aa55857b545705c3ce91e3eca0130aaa01b63503f2ec2fb04bc2663bcbc71ad80029ea603a61ab82995c30219c1e4327fbddc93973331593a29562bb32a6f1d264327e95496b89ab9d3c2e89ae930a64a2faea0d2a528906cac777dd626b1aa4ad5851c31aab47ac0b84d1080263df208c6bda29ad1506c659fff5509dc4562724bac05c6a33403127856f2245df3d3ddf3ea3e662c42e9006ba1c7dbb575b561779506a08d240dab6be0d94b1abcab8a6dd24abb07a24557f9605166d4d7b4f554891bebd538515ac527d7c3b5585ce5365ec026934da1ec11a7864592de5047f960582305add62b66d7aadb14b2e51ab4648bbb3adfe76144fd137483bf22d633d7a7cf88535e97b07e943940fd46b3f44c1503fdfbe4d09d2b6155619d1b664db0ae70e936dad94ef291f7e2da5945d8fec5afbf650fe6e0c9dec3bd9ef8f9e115628a0931a977c41fbaeb1ad92ee3bdd823d330872d9796a63e757bea8dc465bd68ac9b238a71185ab14845a865494af38ca577c5503913ce72e59cca1ce1db16b45e31a4e7aed393f1151e3b2248db582a2c13ae77cc584a76bf2dd8aca735dace13cec9af8aea37dd731f9cea3646153f0ddfcee1525ba562bd917cf81200882a793c9d439f1d2595cbab86c71e99d9f624b46685934e6802ebd1473aa6bc5a5cbcebba428d76cde4265cbe29c9a745643cbe23cc6d81fa58e55d19c2ba36571383f2d38b1e7726c97450d57b5556d55c4e510a1e88ed038f1928689c9439ad9cb245e84aba497a1ca89f750357b19ce38f1d2676431c714cecc662f6708cd90bd9411f49c872e412f5d805cab2397d84b79637ae852e425cd45c84bef6431a77b96971ebabc5c82e0e4f09c47170e2cd670ee027be9f2f3d2716c88146787e756321b3bab2376e1c0b886d2b62523fb70457bce3d1c18bb64c4b886db968c100eec4319a1e73c6cd073ec368303d9b74e9e734ef3aaa95511a2cd2a896b389711dad6aa0b19250bab29f206e7a18c12cf3da85a1d451bce679ea82d311c2076c9c8b886c3e98939955d2bcec9cc829ef3b0821ee2083de72b29da323276c1f0aac68532b3e75291a74bf7568c504f298924048f246a65df5b41795dd775dd9c5ef436132ab5425a1dad8e5648326238b16d8532623849f8c80e00e59ce3c0707e64c4ba239b4397a413c2879f0eef7114eca18ccc949a9e7f5d92eca55876ce794928e678ce791724b65635e73cc6d6ea8ac8e2e62be41ef415734aeec9d4e7a594f4556d9df3d515ebdcf6907dae269ef3b025f65cabe7390f65642d58b4e164c43ea76e7e2d2bbaa9bba205b4ac8ff90a8fec01a14a5f962cd1eea61c7b7bcc9d69ce125d39a2146c1ab93a63352c9f2b31558a36947674ae89ce3146ae89cdcccccbecd2052d6b6ba08ffe1264ca5aa44a8ff125c609f5ac0a2df038b4909959ddec6d66668e33546af4f951e53d54fa21fb6edcc05c295531f243e9bbbbabfa9645c150fefc30869818f49dec3fa99ae19b047206decf47ee6498eeee9eddb3bbbbbb7b76cfeeeec91d63e4cf5e254ab65ea2934928b8dfbe7fd29fb4e51ab175592e29ea459009ef8b4f54e9bc7ddd2e9b555432b73c6166e64ed2d269892a9d619e7273b13bced81db7152154e93cb9bb588d35f7b6cd745b3ce37eddcdcc5c27737777b3eaa392d9fb4e29e81804b42d8a2a99bd33c12ebf0461666666669eed2aef860f5b111166e6c8488a70e48a1489d10537c27336d7b0518efb096edb8eabf2a2bbbbbbbb999999bb7b034197181931334e0300133e4f95e2523437ba04a44c2ff84c0d9966dd6cc184890324f092c1a87624830caacc1144cc0c18193728a0900290da3152f8e2b62bac38f1703e1cad8202d8378fd9a45489a3bbbbbb5b8552a430a61aa4360a2d6ea9315e5a4c3ad3c55481e088e2fa9a0b82552b4955fa8aa902a9d325ca5481d4f67675f70afdaaf364d29915c80adbc904638414ee4777e46d831237220cc563666666666666de89ce1de78f4dce7883dd7ababbbbbb7bce39e7ecee39e79c932badc4a0f1b1f732e648f64fd5bdb8cc7851b9ac7a2ae12ca603f4afc8b0ac98794549e09e9d99b72d25236b86e0dbbb040074cbcd03c0ce9d3927b39874babb999bbbbb59dd536b60a1a96154092b35a839e79cd3464f099a74a66a654a95add36d033c9974aa8fda5d4b50a3085bd246853d15a56bca186b90da61fd289f78d123cd7750cce91d19a3fc22b236ca24a02a31a49f2d60453b5cc4ebe94c71f20b0ab4c5cf4b066d357e77d8c53559d8c6b82abf33555cf470728c1cf914ce7034b73bca9cdba692896506cc0c99995509efd578365226743e2343a3460c099fcd5769605807ac8bfa5295bba89f92f06d8b992163c2d8d01372b81b61d47db9d1dbdac89acf9c4ade7c28f06466152dc64cc530e9b4bf9874368e9123734ca14bf4c5547bb89874f8041c7669596141a1f045a93938369449a7552b54aaf43a5dfac9a43341138e2faaf0d59d3adda4334d26308caac32f154ade9411f3629c2c9b26e336e3f45884eca0d9725bb93ae68ed0139fa02a7c8080a8301f877c6054d41723cc2eb2e8514f1f877a88a6097a966c30e8414107a92d1f877a701842181b0faa4b1090a8a62a9054132d0986c40db0219cc072d86ea82c1f87603ea651ad482da4d22d70504d5604d5958f434670f0215d811127b623b5f471c888cc8890111867446b1835b0d4e0426fa2f0acd04abf5a03ad450b144f8c85061ed850795668788207fc4184a24126e4f4a2551a8ee03109798134f8d0f3fd889d68b8a18817e465a2373408e968a55f05320342fb2a0d3b424a4288bc28144852970511ae044925a2225b901a95a28659844be2a74bb0b30de1c35f82c9c36bdf07504b8ac31059c447119ead891fd23ad463c89021b22133031879754345ac4805d129c33144ad1f878a44f121bd79a28850943af371a8089226aaeec54c52657e30a7a832664054514530a91c0a36a11ae3e310111b3ea45110f1c144ed8f4344760cc093b4021e1450229456e003228c48a2830f6a4655dcc0c50e3f5c0881c4921214383888d0b6bbbbbbdceecabe48c2e4777777777765557efcfa5762988f8767658847c9ef8c2e68a5202f9c01a386f4f763e497aa197e86f73815ee7b0f7567a8d4754f72dc536881507e0f553a952a6760b94d782f4126efeeaef4bcd3105cca415d8ff1f5d16becb676a58b3a45ca04e9601f7d5752d84797bb5bea22f63b99412c6a48796b6745d8cf97e900f2e775e3bb58f7b39417006357f703139bf92e26e39e4212fcee9c45f6a3047f62ce1698f3a8b42db815a9748848130000f315000020141089c4228120cb924013ee0114800c6382406e503a980844b11c885110845110c61843883180188308420c51510d00de9de67101d77e98ca3021b6800d3cd82786c65f3be2f84087a01b16ec87e147f9947247b3bed599d6957e10e94fe015f0f6c05e6b526d9447e54691886f6d1e42da10d443bc35e9de872a2402026f984e8b6e0a390b03a8e9031502e0c7e0c3dff5cb666d92f2f2314430c52af0e5b447367ac2095014349b6f8712919b6004fe1158b6fe3ab18fd08e41e4e4597acf75308ea640b6b95da5dc3b747ac3a263f84e56fd88d6fa03bdceb2a8a5f87dcf80e8ba07b161c068093bac81d2d42eeb69297c46cd142fc5f71f591212a37db0edc7b83032e1e6c27602654ebd26f96e1984e55072e0e40471d111364d43d039bc7f96a417627e18678ec50684dd2a410763f867868d49ed80df189c3a2eba8599e4668a118d1008aa5690c6590d764ff9075020f7d31328260d604a7925b5227b1ad71a216207c00678a94434634be2b774f8a7cb5d0831d8e3603db1f41ee83bc938dc496dab064a569c26dd6c10e00cd0857efaa9442428a7e9b32533694929e651b27feaa7a8f76b0de8fea13c93b00588324fe983dc6d040d45a42c8f7c03392875d9e5d4b8db49a2117801e6ea593e06a68c1a9d877f27bdb9335e80454349b67258864505f023ca4b51f95c3f6134fde95cce8145a2ef1ce3851106c820733b3c937272dbd74ecc7d89e56e21efdb2f82a6088af36519a62fd799eeeeefce0029366475a8f98f7cb707ac9c46894a979227add1a1d0c3eae200e46b1707ad7fca76a13bf357918d015549676381093326df078d086c04a510dd319f113c7ccf87f2cb926cf6412c6e64b39317efaa4a8cb02664c24c81cd148844292cf38a435d537059984aecf0268f856455a6be6c8e70d4d7be6e39f30f99c12ca7b34e6c5ef1163ce452602e79e8e5cff21ea36654a9c469582ca79ef93c60d27edb6b4380459e2ad6c2c82d41cef68c60114ad03000a06f2c357dd85c166af322a81ae8e16c1b8c9878521f67f01970ef99d4e75132111f58513bea83e1bdf826091259462f28c861b12c760c8f2922862f9923a67627f0b4d35b7997f261f7d9571c9eb3e9f4e0b1d89f58315e628552367c9474f8c25aec5344b5455ee127f07c70e1055670214808aab565f97e4b4529217bd5fa0fad30f69db97b388e5a4cb8f6ffd5f0449b82b34c199a396b45068eb7a06d915e18985f4c57b95b2f1702b748a540fae3d6b347148df6bdeaf04669e7e62915a46b8c86ae66a39df2b3488555b26051df2c95ed0818246ceead96f4d95f6a989703129a730ae1cd9b588e0bcf8e6ad01cad6e773640ad5562e7a228afdc841ff4578bd088a6a61af25185f55b7b28fb4ae1306f2185cb58b3664eb3112d8ac7cb1e375e831711e2c760bbac0349dab3d1499344bc427746a1bca86ee2df8ad3163fe53cb8c53b9140c39a9444bd1adc7d63e9982c637d3e2497b4d1466b15ee9b767736511f9fd01f40d3248681b8ea552689802f85be30d3b6e0db76c2a6d6e467f73dd27cf4bb1b2cb0453f208965837604f5cecde803939aa2670067118e92954a7ac20cbc7edeb9abd6b4adfffcd536263cb5d85594486694584fb0b6da362cfcf0997a4e89c864b25d6201bf510857160d1227442be3a8efa0e9f1cd8e9358d799c0ff223d615b59475b77395a7ad8e87d46a5f839f8fd350377517410f66162810a71588d1b1c1b0f659ced73c979924e9ab138a570d85e80df74f9034f74dece67ab26381a4a91363df1c35d72c6b6f062ff7cf155f125d0b89447106d201752c00c2b3cb82d5653c5be397201d160c4a239bcd80a850d1f05809d69b28d374fc34e44aee704405806649d9ae33f4c360dbac749866d4c4154e5aee5059bbc34679ebe8ed1aadbfd6f142a12f48d05ca124ca82cca2d7fc42735e65d8aec80d138003874d38b2eae47b721d8b9d7f8ff3f58a327e8859bbcf5c3b75de8cc6714887734f0a58eacb5a9059a3d07c1f90526a9d248e295d1b5f847ebf5f6cc51569c22c996d08e049d6791f734689a30c71791f9477c7307ee148bc866ba24a565a2d2bd6faf93fd6774d0703319858caa76f0d06da7392a0f9c24c836ef5f8b377123a9c8f1fbde71f2c05e466b1f6238be5297adf893e459b2a1219b1d1b61a25e97c8a372f9a907127c6d9f4c6c2d7856a7b29f1efd839cf883a3b26899dd3a63bd860fd06aefd2b9f55831fdca3bc278d52bc9b9ecd202e1bd25a1f7588d13fd2b5d99f421fec1537ee8280004147b10d9ca52ccb5ab4db5250eb388ce380dbde7adaba541dca1180618aff4ece262a746bb2b16b9d784eb001bda9eaa2f933dfb5c28363605f310203ce3db85d47f297d8cdbf9a2d38021d88f29d9ac288eb44e5f5e96e25dd6181d074db594361988fc6c98ce8efa1105981db0b39c11100e25a68079cf134439505288fe21ace22b8d359542bd0d618c1aa20c1f7340f56100ce78c35938e886906fbee829271331fea07e0d10eaf8932ba1faa52ad22b880330f6168e047fcc8c70ad095eedb3ecf4321702288aa67a393d83d45a064debb851b3c84be093cb3522608770207e532ee55a8200aa5a6b5d39a274c273d67931db5c22557cee909e671a20d4f9198ebf912892c60d79ba7b53622197e2d76b143aa7483a960c78c66af9676ff8c2f39b10903a39eb959ebb95497a3612cb0cf09c9e9a140f8bed61fe332801cbadeddbb8b750f49f9b245d1514daf5b7a6dba40400f2459c91a1d908b1a5e2478555ac9a94a23aab8dd4038e311bbc546cbe1180031bf8ea2dd19ee6201673ee1800543714a1b2f7cfe30d47ea9e6af9d034d9f2f3f67005941c259a6c91495c623d16562cebefba07673dea2c6370e49d5057f1ab7b657fddd6e3f4a3ad86812284ed3f99d19ae22f68814895df45a6e68c27b7965caa0374316cc112f93be3f3e6a3f64ff47c5afd232cdca889093750077cf494eca085ca5d18dee25d78fe729990087207b6fbecb864a842f7a756c7464dcefba83add3b04c1bbcadcdacdbfcc18af221fa7fe34f2023b889c68a81901842712e9b70e32fae86b3bfa0703ebcce9f475f3e8c4f196bd193c5f6798f93ca573a0a58dd69d3f6c2716fa851f71d4527696f53fc01f52b518d54b719644edabd81548d49735c9cd600759204d620145a36a369e95e6fc0ad89ff4578f5c92019a65e1a8162dae12a6dfa096692c8c8d368ae8423cdec335268ed12bb87301b5f2fd400dc9154b15aa5adcb23cbf86535c43566b38e780748c8cb906c06b5c5db2194a6dfce303135aacca478d8681c50d8cf81d3445eec238a663e9dd7424ac0de5351bae0022bdc4dec32c5a53864566e85986425c5e3bc3abaad035278dcc3747250ba2752644eb076d9ae81565f20f7ea2ab9be6592956e1b730c90b066a34e810048e486e7038e5e11eaa1e48774c6d58febdd18fbcc754dad494c4aa1b580d5e609a900283fb3e256338106bf5dc5e5c1472937ad8055bc68b1aa5624c9a01cf4257be8bf403b033d1eb7871379b2260c3eb049a17eee94ad468b1269f91bb93f7bc3e4f0ed7a6e4d4bc94c816baeb1ae2e23cbbf585de662ccd1378ccb3768a48a84724635af315563d622efbe8ceb47fcff213a7598b751c0256c2548a49217edb5ae6ce068cc2dbcc7690563a6408f0448b74c6d76cd13f01580631004d722f0fa1a1cc95b94b3ae4c70cfc94abc75b8c8bf80f4d60fb053a00a7006fc6feb4cec85f97c95082cc85eacf12486bae23d775a68f6bd988f7b91dcc73f3ce621f37421600302392c6af5ae2cb7ad15169002d223428fb4e6bcc8027aa9b6ed213262cfe29b0126e593cd7557fd17c0e0b3898fdb8c2c68fee1464a085e3b7bda1950b1c6739883b051391e5d1c98564f14e99bacb5d9eb8f73d5d4e207898875b3c7490a2f5886b380d9ebb1f77b3d5706f9ad09b99c5d9ba85c40e89cc33e3b140fc6ba0d01e42403b510b1e25f8ef50a687b18506e92cc3779abeeb560633a18a739e45297d7b93b6875d840667aa0568f163748602b6946642ec6b6234e5226eaea77cc4abdbb33b0334fe11f150d6598e81cc9ad7abfaeddc32776a47b16b0db1287dbe06fcc300bc2febef97f8899518d1ae964a49bf10429be5b17498442eb3423faa81ad81c761158b7e524806be74f554507fbd7ef1daebb23591343584c6400a43acda4787d16726b54907a711d24765f06457cf8327693b6d79b6b399c3731d1da8d369dc17aedf2a3b2d360df943f0c0c7e93086681827d05e998830206566c4c64180e849171f180c72d95074f4799fd41d428e4a349d596643cf8926d239c40178e7d37e7d556ad3c80142d5cd03272d4a9a1a022c83e4ba2e24611c952cec31a9a9205ad2c2770c503d313f78c36ffc219439469c3deeaddca9281845d6b8878af41551bc36c94c2297a44567c534dd673f1493c1818199d4ea55a736aa7c0487fa6af999901a2db353e1cf59ad5eafa60f222d268bda37c63b32eaff07295c044c7293048cde076910383c579fc4e6f9e47e1fec9e58d65b1b07d2c1802c29e39197e98001bbc246b68d0d51c720a49bb8e12a9dc45697a8b6be2b9504f0ea660ccecb3aee5ddc02c8e269edc8000b6a061ef71198035c3cbb8a6c048231026c20c5b5df26d7cbcc02bd5d4ff78a34e85e54c5dac917f0d7ff0fe9957b486e7fe22a0ffd585aea855f691403da187cda98c9d2ff3619e64fd7841792d359e314ea18bdf196042a6892a6746d2d8f4157a21af3a94b6c6582127e63d0bb20aa3837dfbffc32e5d7cdf477ce6f9ac3dce54f008076b2f72fd9e5d07f1eec29e1a7fd13dcf033943e7c7620dda6ce1614048f3e8ca08b1d2c7200b6bd1471a29d4e5587bf5ab3deee6f864fd4ebc0d9f065da15928a73dde4a708380a5afb56781418bc33f9b0b7fb0e624e1f96f6f603a991c15b98e11f33e83b5194f043f5c26c0c6988d007213734338a57348111fbbfa992be0e61231eadf1c5089798ad9419e8a7cab85e6b3a62736d510897e92c039b02cfb1f42a1b27a9c02b4b33e61633c1ee0c5f4331be187ecbb5f005a2e9b8ba165e94ec7095b19ef39e848d70052098717ffdb8b1c2a8ae69f536d9594e70e8e7f9ee719b717c13ae7527d890b89ed57f4743a17857b3294bd7082025e71933eaf6ae7cfd86547e48959346a2c401ac795f1816bf3d4473c6099c2be449c8f90bd111185456e0853124324a4ffde2431fd1a56908c0e41e63a0fe5efbe83040d8c39633452ac19b36f31343c2f5eb02af59c11693397bd26e8643e4d84f97d6e3a92d8b700abe308a1a110f5f2b8eb19ac344a733a6ec44fb9169d6e8becfcfc3373463acc5ced1ed8ba453d46c63de0a0183fd563faddba17dd13c4c371deb8b72d97a85fb664c87558e51da177bb7f1eb90bd0f1a7aaf7c46876208023c8262dfc11a4215b8d16a8f8154bc837947f157a23739187a6e70e2697bcc14ef737c441b8cda649105b08bc5af4de10d8de1a2f7602977189ba6a7095c145200a1729cb64ab21a6bbd889b6bb966b46960038e092b03b059e3749b09df39a5662c76964e2ccfa5af3af791186ae10d2189160e3d904405006712fa246081af1cfb8224eb7aeee92a6f0798c72861e0a0bace84636faed6648612a0ea8db67e689b1e23c45ac891f7fab692db9a97cf625eb3662410967dd1e68f9fa0846fce7584966dc5aaec3d38344498a88d174ac5e8cfbb1e13ae43e986ac3d3a67b0005760d763616c0f3b45585f45f884c4752ec00d7061465a289fd5ea27e9825d9bce7265c5bf30031c2b6deb5f867f4adf1afc1bbf2f3913b0801dd7eadccf947a3f57269d950504d8362a5e2d9208893645d80de8d1fe1d65071e8a6bf53062109376a5deb830254c78b06fa0f4b3f99564aa0a7f7e303e491c9207759202a811737323af5b30e32219906a0c1f8c2f6c22980c86e2a92b07623a29e6f8ea8d62231743e08a6ccc52971978203c3601ddbc09f0c7e271b9883dacb617728b9627254902e5649da5df474b3d7ebd0ec2e3bca4000269c626707b7a062e83be44c153a890d06e560c8ee907cc3407e00dbc02268cb1aeb838e08a022639aa0cc242811dfa509c18742c6ee0a32e78d2b752089e63c8afb5123e44651b66135982d2f4cea4d4b48d30b880c7706717108688c68b4c842b122f00ceefb1e4da5e826f9ba203a8aef5695f7716e9f2355b2341e9f0ad142e09c8bf586eef9e9ea7727a09216438ed602f04aecf5e750d14d2db126a254874d10bcfa411baa9da8acb18cc023fb05c4e19e59aee916029ef543f7e5a5e0c31d1ac9088ba5ad254cab494743b613676adc64b049099e94e3a2c4a6dbb0c174fa41751cc077e389fc7e629e2364df25a0cbd7c8533e59bbe6ca2f2ec6d402a4ea945b17f95ef2da7f19c739df2e3b4331931cb48fb4a2a167a38512839102072ce4ba924dbd0228701b633cc4ebc4ddbeaba863aecf78baaf3fafaae854f2ad1a10d1956dfc615a0393d0876d02ab9ea0a5ea1c66c40e41347db298e1110dfb66b60dcfe9a89393c219762ab848130b3c9de9fd3ab9ce08d07c1aecb776707016b39313b11de077cc58ddf25987d647144f181eb0923814130f06fcf64cc40e3f340ba0dfb0c33b525654744e199a39c36ab890d30b02e6f27050166d557a7a5ee095adfa24339ce7fec3fa9a436297c893f14f7d7ded70687e2c9634e88f09cedc7d46198125e1c0a981e69c96d1f4c3bc9132b4da4cce357c69caee8bc713d46e6408146d7f0cb355a05c3ebe23d20f3e7b644b43d33b87a69f830c0ec3cc3327f8315fa2b3c3c5e23681d7239537894f6ef3b501dd38a8f66ddac6a925f00691f6fb8a2eb94b7bd4c039abf187bad2dd45a79b9056b07b64fbadd596ee004cd5f43e3fe0b91e6c921ec8e204f3e5286bced6537b3ba34bad698922361fcfe35713bc7d2ced793d39ebc4490b4e0e4d7f0f77ebd8490d2444e5dd00678c7fa0b0494fa96f4a7430c3c76e65288a3ebee16e9f969c0ebbd6de02a14e5f426a307b4e2bf7e000605e3e24118b4fe7a60b1435ed13ab09e49ceeaeb80c0427ab886e497849a75d5757a9200804484a87604f404a8910cb3058d0761d7dd78d97251a73bcacb8f8a4d66eb1409c6a6db02d047ac5f7865452ac06c61bd30dbcbb118b7ce9572cfd81f59a4cae5d6b1a507f362382d41a332a01498a9b91100fc8408584d4ea0567945d2158187167e4a40e356e15f4fe0eae6c0b4c9cb6c044009be500546032e65d04961261ed5a2bf25ad2ca58657caddfb1bafa07d88bad3f1a96e100880af35eed73be9cf3c800ca7352f97b804261de506e07ab2da757c64476c6e41379b359fc842295a3ec2d25a71fd18cd65b6d745e9b19e1d272a52bbe9a3a7b43c691fa07f7dc24363403b4d51ad3e77e060d6b817612269285679f6046d4aef31564a9722e0c487e73f6ff8d50a3b04d6a8742f45e6e1febb6861116fa8eb2107d2254a397f3aab186a80cf98735fb915e37db58cffab1cf6498d9a17017262cfcbc2c6fddfbd1be3f18d36a506df4f14d8577ea6ddf82414428ce4527a6bb230fac41082b53d9ed790b16dede1578479d2168d6346c092c2ee00a2c08d71abc58ed5abd4895da3ddedbf4d3d7ac3bbb74fa5a7f17b689670aed810971a94368866fd8b9543e5c21c4455e24447f4736f0eb019f575987465839555721b204d019dc249c62cc0debda3d1bf8b5c290ae2e9e89017786d1c497dc97d37874531ecacbe1ea0372d545dccae0ea2b6ef22d27a562066800f555261d085728815a2cfdb3ecd75591e5609d54018c93943a9d697f1e9c97d9e9d0456d9535aaf149c60b98b83eb40b8d3de26ac0021f57712edfc303135e87809d805d6fa4cddf2f3153f40d22a80fb7e498106e8652d290e06c5c44e43b19e7d68a8ec845687fe884df66945ca95903dc5b818c95747d624e548ed654f18fabad018efd5874324366631b181a84f90de55bdb090fc7631c7d9a1e2111f0906814f7165e7842b8a1679c2123a3914a0924b846abc1ecc0343e5c4666180967a8af4bc1d9648c2c5702a3886483cb697bc6efdfc6a0ad1d6b36cc7c78026b990402caa35064d638b1e410cc59e4bf64e8016041436c11cf8072043b88603df30f81e0b2cd697181286035a766a309477ffe6da71603108019adb7551486e272e5730a63b95f9e825b8f96d9dc4002338e13231966d43f45c83901d9cdb5e07f3caa3d076b5d9b187bb8800fe92758fdd5418f13017712a1c90518ba5692dfd8eb6380e2cb2c38f573cf1fbb5e8c21030574846eda65351abaf6c87da3456c4569d02f1181c10409dece43e261dd737857c297cdb64016f49b576f43b9b0ee33430534e9e62436e57f97f58c6a46dee58833e05ee49cc861a7eba63c0d6a512245d9d6123803061546651cf8c49a88d83ae67c29a7290126738ac5a897282e053d34288ed1816794ea0a28994e8993edf7615e684ba2679df4aed6480b0b1e5a744aba22431a3fc1a9c0521bc6fae85299756a532313c3f9db844a24ec26740f4774996ba42e3e40f10b6d25afb74a284a04ac69796009fc84ad0838e03a90f79d207d8ae503728140fe03dd11104000fe4d42d8cb9bfa9fda061221a5afddec077de450a75b4caa9345cf92ef62b0366a14cf7d714b131d1079f58da337c9995a52631e290257894ea7fe9f054b7a7ac378a7214c68800b1d25c1b6b89522c99e739dc9293a6b0a1b7630a243279fb49738b281b7d13844063a7da0ece3b2247539986a95d9aaa028ca9eee3a3fb2a73dec61380d4332c7bf9dbcb0079667d7a1e067ef338cf538a4dcfc5d74f65af20a2e9dde428d3b0d866c1375388d9aa41fa58fbb6d1d4688958f7f20c36968f43dc4970324212229088b54a2cd56109ec519812be7163c11ad450e31a3f43a2a5d7d09b8083124a2b2d8995f320a948262d54f325cdc0317cbfff2e0057ba3852fc7f0c1a1b09bf8bc599310c161a9424f97589305cc2b49738c87ca00b0d03da63286f8c628d314f036f31e9c6a9922a16ca134a391c0bc53e6e13716c36d3de33fbb11a62eff4c6894bd3d2da3b13516bd574f2a93443d41196da02424070af8ab420c01c1acb317e618cdb14be85911b622ab244a1eaf236139afee2a1d784fbc66d0c3ad34342248336e20aa2921076d74b644eb3b6ead41840cf8ee0f3140ecc43fe770d091625fed5f9714f4050eba8206d4a4c8f7d6f3fc6a1d0d2dc285f1d3075c3990a3916cf51b84622f13477ef921c3a84e3ed26d02b77caf74db011c8378a12694d7007989730c17b805247cd3a14273d32e7af1990437a35b1a2fede17a32d0100080e16932863ed7701208f948ce49375974241dd945a7470cf76d3a9842848f51cb1be042732cac86f8a7d91492f4c30fca747628369145e6c11cb2ccd650e42063ec665860c70188024ba6209da42df5b0111b223e1a8facff32e976286916eb4fe4af27fbc7726a40063611d313e2533e3c4e6832c0a02117096f46376a06376c2868b2d9499957ebbea8c4cc87cecc3d8e1fef085e9b8a2c0eb4bb58ad7caf20d5f78bb961ac5535483d669d896d582568499189421f0f6526b5ceb17de7bb84a671a65255d9b38822b87a78725615f0e4973e67bf16cd4c7c3aa43d3284a9d9dfa2775bee8f1840d52b2779e248a683015a91ee687dbee32ca020da871fb00763497f51fd7ae5fa3bc38f089a2f8d8cb4b56e518fc9d878e213b011fc9e381b0a0b51d44d24098f19c0e78aae7c77dbde3fb1dc070106a78ed545663a92da6b1ffa127c73f95c10422332d851d4dc5a00bc0bf9027459329e67df799832149927a63a2ed031ea2c7430ea38641b36c34eb99838a4dccc2917fc1aea277ae4b289b74bed32bb5ba34cdcc62d2c6e6e816bca8df4fab5aa33ff2d6a9ed0a26e2f0bb018d85eead7a322207b3ea6960a8b5bde1da577aee0442b090cb9a2c72f19c3cdfea0ffc7861cb4c6c91d886eef8b98e1cd40ee670a3e2189c9710ba6d8e04e79ca69b01eb558e17271b1799ea2b62506fc72b96325ce0e5b2c3d1e36bcec73cc06bbb6220e2ba4225d7bcb4713ce11559000bb809cbdb20cbb9467f86bccc19bdc8139a863087f0dbe49ad726d1ea6bdc58ad0c0fc0a4284b3957cd9d94ecaef9682f11d440a9d176a5e577f47b62c127685a28be94fdffcf636c438b71ec6c36fbf3ed704be47cf7578d684418600c47cb40d3a3d4570738efe52a8767cd40176fe4f32f2840c2782f57a263bc079c7fb0e88acc3e3a1b905bc2fa3a09987de8890eb0d8790157b2e4caa0b073943099453d59326ef23d3e992d015606478fca518e17345f4de83724505d1f1b2524d9da11102b09411c0a12218ec8736b862b743fdbf9d6b2c72ee7d847940b6a8bc001315d312292381ef282d8ef572e75c9c09e80611b502e0dfb44f51c6e741b0f21d09d4ea88e94d2fe010abb7b31e68a75ac97e523783a496a38f773e4c79de1ad48190aa4023a4e8c92c22fdf4a3cb6fe55d2c9846160c2fafb5b11c37926c328a75df415532f6653576bfad1fc65766b6f25686a60b0216185663b8eb511e7a9158ffe54ce5240fc8fad5b998b3fbba1abb9995f7063cf1c0a860667cff321985a14e13dba546fe3e5ac4f140f9dcd86baae01b7dd6c0d7a4cac26d13a61792289ecf8b1a96f8e285dc8ceb84e0220f527c185bf076799481ebf0f10ff44d71cc5d9d2298d3554e667a66ee9e458345d9f17ae39dae8b6e71ba35c6e688790fcb58aefa54816f73b710af413c8bef38ab051076cb080426e386e16d4a10eb2e43b5a2062bd021ad9708ee24774f293e2f331f748f9bc92c2700a0b9e945554407c5165948df255d89f0404590ada074ea320b8a40b2c95584bc9951f7f3850cff972c7e1dda299e383dbd601caa577d5af9c8550ef2750652c0ee20dd9f96651ce7e2d6a47024cf999be15fcd7ab8e3b7b3bd3b483a3407a440de61b8a8b76221ba50a9aa6f53dd6b61b9ce266363d2ff0d9a0f1d951fc71d82ad31b7e0a271c1409f4de84bd8d293db8236e22df0981f75648a82b363cf1bd99b8d70befccc7cc1c2c2c75bfe81ac16dbf83bf56e37739bdcfaccd7602405802d0dc2574c72e67007d21aab7f96c26e3a78adf1e92e77c545355491df62eaad7136888acc607d90d6565fc22595e3b94d0bbe4bc253a4bdab781910bd1125f8940b74f24d5d4d55c16a6ebaa869a6b843c27050b38a2a35816f26ffbd003ec6e2271ff11e2634b7a06ff49e0a2220300aa1d8b390cceb4b96af0b4b6f04ef267f5d70b0f474d0ad667f32e6371fae9a85bab2a0787aff5f6530192ac0a6d28941c702c40b8149fedf2207d87e760b31b451ac6c7ecc6c0be073e9a872521c82fa75b31a034004170f6c58d870226f59553df241468fce5d336df60fd3a5ce1908e3bda7430b3fcb35ce396c5791ede16e90e088542efe0dd9c13f725457797d2b13d1b4b9032e99c7228c4fd8642bd0d0d8b489328a89a62de3e1cb047de0df20b86e1227dc56d66f7003c4f21e590f6ca6fe94ea0a03e6fa02264f1320acd5045fa26852669b75caa58fbd33c3dd4e61812c840917e8100937e0e959c33a2a07416aa4ab25505703bfc2d04c08cc6b147c2a97455f56083630deed5bbb5ca7ab7905b8b7a67bcbaddbc0ff3c464ae5b4e11abe401ad09b1790bdc46e3665340f6cec149304d084cbdc88975524ce01b3d2d5b32c30c68c2d20da4a64ef0f5b5a8046d8b6cd64bb3ff5c0c8f3e5d7420126721d247cedc635909951a93ccf901e4c6c21d3086078cacb723d38695b561f044d279870a0ab12abf77d4d2d289576caebee8d49552646ed256278ee3a67701e0b350f4ff89eb971a230d6ae15ecbb8425e2ce565898363ae2d876f7408e30fa5c179198018a5b7842b6ccead11745f25eba160fc77ee28f5fb6432609f6a689c23bce29699e1d433694854f8ad1567899b3891ca8d7b49a557e8b873aae81cac83a8e34aed3015f40e423cea2fdd3ce65300a279e0715509671e98282714b4c6b3a8f1c1ddf1eb0665235c14bc4dd242a78dc16cc4a44f22fc66b6cfc126374a89163680cf0c4cbd264d1b9aabc8e44351e0ed0226a2bb646321ddb065d03f8992474fbff4ff3e751d018113aaec9943f4abd465a1ad5bc340018e2a0bc4d5fdbf1bbc4b0b4bef8542b7160609dadcc4d2127f2b6d89152aa2a749e2b373a4f95bcc05fac79fb93ac651ec3a3575748cbf7d557785e5b2f9042c74c2f67b6efb64877d464b50d501bcfa4fe5d899a406b652ec93c491c9d9bab97105c1eaac878666b6af70a6142000d4907c4365c436a8037080f8cd3003a05ef9145058fa595c1a0dc5253023e16478576bc11aa81eb37aa8fdbdecd343a501b55297634ac081cded418d309def62f7b35e3756bf358cfcb3913add77d9e7258f82f31bcc8e4ebb36cf6279f0b33b6fd6612568abd0965d554fea70b4e03ee8e73002f061eb8d3627af0acdb489d753f41d36a0b45bfd383af89279445f10bc39c70ba10305234cb593f142d7c15ce21f55992055995ed0a704130f7f49f84459f9ee8ee419b135e43494ccf412746a9aba7f95f9a4c634908f3bda921b16fbeb91a99eb77577da63eb1d53dde665a02625053fd10fcb81ca5af1ab086c9ecb00125d46e83d053fd10ecb43655df14bbadb787ec90d316fc6fb0591b64f9c6727db6a6c539160f36660d70363449e7c4c5fff8219e28152f91b5849fbe3415150226fd09d6ee94ca44a2cc3f366b007ef0467ffa4302180da39d1150d3522d4f6cb1c79ee7648437d81a570aecc3edc5174cd78b03e9be49e4ce9abf12b34ea846f8aecdbf3faa1eb478a9fd567c0950a4f0537af66d50919275c71e67adc93f1e9b3a04b6fa77f81e7aea3afcc8e4e05da1e568e0345b164b34604ed0371ffe78313337dec48ef31a5f2bc40278628741f3ddf1999a44116df367e305e7410698b3975f6bba981b32055ce772e29638e79d18e8f8736c297a6934ebe2bf5f61dc6f1fa2390a779b65f0f3c6d3399c1fa32670f88c10071fce9755062a750a6e7b45b16ecfcbf5a03c5e049bcfaa93793404e5cd1cf72529206fd569098febce60ae61879d0b5c0b15bcf94de3364691dfe75c80eb2092aad35317a68765870c86577708cfcda5c6b5e4d36afb5a3ba201c06812e9276dbaa1e508535bd1d9367ad45d03c5940fdbcb35296021d128401416d57593ad0999ddf960b3a0ead54848050a08ebe12b704e7363c50f9bfd44b4f08cacb761eb8b1d13477fdbc4634496766cbf51588a1bd3e6b030e27264ac061ae3121c9de2a522ddaaa15a8989f512e36539316585c31040bd226fadb361217e61c7acc5b357a898fa9b65e4da04f87a794b422ca1403ce8d724da49723593fd206488e2a5eed78c19c878171e530059d885152d56be5471b387f6a1013cd34f70a86ee7befb341c7a75a7a49735ed0136b44700e5dde2553caef051198c8d4086d5290d18ec74881771532b0b5cf173c23f16c85d9bce70ee3058137b7c39e7f23054eb528e48dbb208b57a0d45f106899f761f503113dc5a65ff61e0cb6bc232ca1aba838149ec65ec4c2694c8a7fff208248a01669e3cefc8d7de692bac5a2a5836dc8b66b0858ea4f6e278824190054edd0d69219adea2845aa49e3780d4c32b7798d7922eb2a5986385d8c4fafc55d333d93ccd78749391ba7c0a35f2fd0f23344f0f8c9650067c104471a54fb5cf9543ad408c2a9ce93c0cd856030585fa598997a6708fd44f6950d324e27d858c62ee3acd0d285c0eb19b7c23f7519dcc4cccd315ad6237bb6f65fc6bf120fd27c3b62543d3a718fabc2ac7d7f9064e1891bc9d9ff83c2c2cf0ddb9a9c95dc7c38e6920d818c7117365056a2b3db7406b1d11988703ffd82ea370d1c2cbef34ae241f6bc213bcb2475331273db904384f608e22316fa884bbd5deff4db7d811bb6ed268d1266cfadbd535d23f613c2541cddc0c47b954072cf19317d0ce2575ab46e74ea08d2b910c8431880cac3ff43228b7c531cd88428bd4c2e9b05558d1428028f9c1eb9c23907dc6b822fc30ae6d2bbd876bd299ab7982218a3bc0af7dc7f8af2c8a41df8d38b6bf8827cfbd9b464a84daa8594a80f7210011da8c1c7cfdf702c8175d943c1f2d3e6e41c5c3cfeac8782165323d7dab6890ddef03fb381960bd60bfe75b4662d60cbb7b9ad31f125f013b1bc63c38cfcb00c00b1d1451199f5ea5393ec6e43267e223e8fbbc5e44a90905c5aa994342906578f815294324b9a879e3623f609b56afd5bed3d1e75a8268ef2cee25126b6a2c2c219ef3c2aeb2aacfb9f5fd26b6520a3159d096a3279959603e711288c6db5db73c593928b697d96cd7a08ac8a410bb2f52e337c899ccec83034466f27a06d6cd41d1b9aa68e01bcef9f4d60c2785cc0b82155e8b1fe20be30fc5d03bf40cbfb06ef0011dc4c489ea972d682d650c2c5f47c740e57765d7e7a0b1b0eb88d6c3306346fbfca41e34b62b837dcd9b6ad90dbe982e3a56e959c6d15cd734c7b3364f7930b6f917e743630f85d491226e212b55d498e3bc3a18ad5c8abc52d3ad58cddfcf930255eb80f347bfd8d144506877f38489164a053e5a554d916c075b8ee7552a6c9ab604366227e52e87854d55183b54c3b118f2b3be6f252ae988ff5625971a04306858a61498348c57298a8fc9854064b889260845042686c120eeae96eee698c7e7210271e8894cb26034ca805535676fffdd01f59df2e25f604c5ace8c15e02e52f57268e039954d6bddcc2266f17c4ab7622f754bf4a6069d9f1b5d91b4d2e4bd3d0bc4450455dd293355e99d041a2ff34241533107f77ffddc0b8e0276cc172c61715e1ade1f787596a09fe985b1a72404f60238311f8611cffe83dadb82d265bf21a2b26ecffebf5c235fa176c74a2bb93a46f7f94f6b312c357d79acae8695e5617331763003778256cd2dfc3d5da0eef54f3f2073bb59d5cee8e9ef4f519001d1e343790c946a3b2400a739c1e8756152e307547e280958e82d3b879f46b1cf1fd0a01d984f8cf14b09dd696d3737885200ea8cb3c0ccea440b4c28c4ff9360ef2b0e08d6698800806c0a170cf70786b95b9a3711427de79728f879dcdc02ba3901a1adecdd7568d591702db91693a7c2d5c33426a5d8209ae69889d0973b3c6ef05751875eeca23f8e76321e41fa76007b3ef7306ae28b366d8c723eb4cb590509bd73085ab5ae8b4e42048130753218dcc80bacadb2b4cacf093ce4518de3da008ca52fb1f0b8d21628987cf83ccbd2b406827db581aa5fed84b7af2486612a98d1b9fb98b68140edc4ef337a77a812f4872d69420b76c0128d209159121601659271199d4a821280c0de99f3659479a720f2d6be2ecd086dc5b63dbc8f86e4a6b841b740b9946ffb58cb49a756cde9bb66a02ab279a6747e48658c396366a7eccba6c055319167b41a87d610bcbd6a1f64d0d8cd91938ae6e940a96d1032d4829518b512d0daf147426b920691e4db4fd33899dfec68137e2321cc88f62fbc7197333c3019f2b36fd0a54891d247a495031f4af18f25b10ffd470afb20bfb63e62730963abee7e6973d848e70501acc6d2d9599912862464c453fbdf4808d7d1a0486a2230d186197c007629ee26a4e7997f9f2fd1a6cd3a729c1613bb9890e5c3a8eb9574f6d25dc48ed2d9449f19bbde019325f7c61c88d204f83429926da3871d6bfb68b7aac2c4ff31a3034cfe2b21ea0b3f6ae10949456c385b8910e7ceb54ef616a95372347a51097cca9bb63e6215b9d2c17321517a4b8632a07cbbc90ea9b62e773febacaa944bd64fddaefaf491d76686ba887fd423594090a690d073b5cd98edaa28c48833a61897afd383b1dbea121ff6837c59faf98efa6eecf71181bcb4c4a6788b3a891f1eb8d8e04b1c184976c972fc8c9883a9d09a920c9c1618aeb0f31350037c6875207c9903b27070f141200c498e5d921ec4e3071362c9691f5ed8903706891fd9c6249d99a068ba6675f06abae64f76d4e8bb5ee24ee6ca28fadae24f7364f8fb54e12f76da28f55a74496dce54801240a5335aaa8530fad6ed2773743834577f27b6ea2c15e77f27737a0c14e77f23b37a2c35eb726c9776433c75689592328158a0b33f713adc0115394fe75b4d6b4930098345e09e477c8f5825467e2a26d5d6ca8eaec6d217470d0f5c9973ee3998d7e00b8d0b22b50afb5b63291745f04dd8a09177af92abaf9f9f18b6b51b16ce7840b4d4b067fd94cee60ed610b4bb8d0a014dabac6848ba6ebcd63c6c7112434f1c21ced6ec455fe753fe1a24ff3adcc5c57acfb400cd2a5f1876e7d06cac353056961d91f084463b3451884dd997288cd6b8ade9a1de77abbe485017024c5e221969bb4fff3b521105ada875135e353022d7de9aeb3d2e7b801d1f9c060db2290b46147c4a300d8d8774cdf5247ccdecd8854fe8b29878108af578f922e39acc35c8894f28ebedab7d6a60bd3fa8b42da320c5d12c8a5bf8c3c13354cbba9424baa5a2b5dae1b082b90a5181723fb8f927429e73b40cc8ce5483c3411478541d821e1e8b59a3219699dada16f1e4b9ee90348d680a237e62a13846d057b227435059393072509c1757e20cc4aba1eeb84ff1ba0f9f3d6bc33079c194bf0eec65b307f0880ae1906793abe62ce9372286ea305481c80e2a91264779d7675ca712b79cf24cc14d0c16119ef15a2a5cc51aeda1d0b65190e71b060d8b5278e2c224a33b0d27e21ff12ec9f48f5f8fa90ae0a645e582a057a7d0c717f27edb0ba677409b5b7e88dc7c37489fe8a2b05bf972c04fca8c3b0a2dd9b484f97c46890838cfefefc3a3b987f09759dd13c36ab877437979b08d7ce5a12286b6cb16d9dec2656995b95314f0ecc6abbb8149dcdab5d8cbb83224f8770d89d81d3b7b0d59dc29a0fe451992e79ee9e61879176e0f500aee3bcf49d97771f6d50e74eb4da71b284b3609234f4cafb2379e89fcfff555822b62fa4c813e7b3c3bc848ccabef51444e2d5dc87f6b13338a99428756c433d065ccabb41f5b08adda2bbb3dbedc19e9fc5e301075e3191658ba93532bea091068043ae51c6c61b3245594a48cb8096d741c5e5632544e18b6ffd3dccbe22b98c1b22f6449eed4bd7b2ad6d0fd822e0e3a358e9f27be93f6f4c9dc32bbc2dead9d85800f4afef3edd2d9c4bc26ea6ce22356021e58e595c97f1acecb13cf64fb2826eeabad9f82d0d3e6782a3eea67ca529b95dd0ef4aa74559af6ecb749e9eda281a59ea56bca6671e1175bbe0cd410559b7116bf64e8581f0c0eadda5baad94632aea2baf45b4e1b8000866e4500f0f7ab0166e6aa3c3c929d02b8c20f3b1742afa76a777f5476c10a6ffe384c1780453bd1020fc7978e885bdef55864d033c54f8fffabdfae63c6ba1707f07eb422688d7167acd01cc381dee0dcdbd6425185c165dd77cf11ad1be8567cca12f3868ad4b516b452734ebff332f1cca5aa771babe47e6dc6b282413b614c2c03269c0eb15cb59732cff3a7635a318a5921f365fcb34980355b9fad7133c40a4ab32aeefd60fd9a030015d1a2be84d578838594aa94eec745cb4eb8b1667cc36131483243564d07dd6013a52b93e69a8dc3ad385f0ba13cf866d675a207138ed30ee1d8bad9b6a89e2885a15b382b83508dede916c3df846ff179b3a70fc94f7a9fc9ea2c1846e79e8ea45bc72d13b15a61796822df912abc6133049b13a9e5e6840ca692819ba04a469121338ed804a92106953212c8d41f804e2d8ecf32aefec90c2c5d3cb57d90b3f7196c63e51ac6732c8f926443c78c7a90f03dd3a023bbf3f84a19bcfbf75a96054f867e8b51349a59efd66ee34b13cc65430d195c827583648a2f2a42e6e818573099ab7e3d89472350ca16be5f9658d0c0156c4b62d23fd3ec48ea3fbc4a80dbf4f041a3c0432f6aca4c915ebbe63134ca7aa23385f8a52774809ec4a9a120fa7169b1c9115028523372180f8de4d2ab140c63e5f47cab1270024d2d3bfbe87eb2f36f83ab5a7f4c745eb0f7f6faba1654f5a2435ee01abbcb17d92adde61f10d762bcb7cd508f0ee2415f5b367a43c62feb666295a38987a686636f5a561e3396cd1cd69af1df4132d4aeebd90dadbeadb727d4025684d7db7d8ec3e59b2d70f4938d888947eb6921f5b1424c630140fdb9fe50fc5189625558866629fe814ac1ddba1b2a754dc3d130e4b27e1e2754de9b5c31179214a928b239f94f4004deac4e65e8ab46537e89a4e758a4798ddf2da61b537aaa42f1f5efd1714251e49344c4a36631f62c41dc07a8d7c5e0cdcd6a450542ae5ce5da66c4a63045b56bb9fd796ece82cefb228c534241b421f1087485034f3c3df6442725766e15b3801e1e719911b04d199f432d9ca3d5788b0f0a88cca631d3dcaa35cbd4da79b38c776142d84e0321063b9614b85b7e781624ced6a83b2a8e7cddd1722b14094513f29d7ae10a21771bdf5935b02ea2ed0fd71219394e5e9b786adcadbefdb9730d6696d9ced9886b53278dfde2d1662ed20b98bd617be789a2d4ed7b0851f0fe813c70ab08818b7f0c92afe9e085c49a97e87b2cd5b5452175a30a354b17368cf8944334dd96e91a32bfb0980bd580f709d757e8793cb07a57337964e199fa02a643601dcfa3559c9cbca433fb9161a6e4b1c44ebbb1a8261ea689cc4f4330a4edf382ce4e5f656f77bbc4649a9278885ca8794bce78fd972416e265e064a9ae1c823a1ec7741a177221cf3906e9d86e3b0165ab9c46b6546c0150728a671e4a1bcb8bb148700e4f73ef4a42ed5fb87b8e6e2be5927e246ad176814d0ce6d4f4367b5869b6fecafa0b8094d0c4ea46b6111f6086ef2772f5200a9b7e12da6748ee60dd702964e7a39ca51a3adc3233214c6d19cf81c0b61ae23b4323644ccfe41f365a87cf19c6ed7d123bfbb78f70b9c989c3fc522341775c450a487753d1b45e634a6b80dd26845666ccccac50345cbf0c7446c22f6508f80abf5c03129d407ffbf872eddeaa867955eb8dd177fdb2f39f78684aec7d12748e3df6aa78e791397de646de90aaadf71458bd2ebbac0f911eac1a4ac7d9514a7f03b116ee5250a35a55e7e3b2dc4603a1e78d5f2f1e0b8c528572fd55b404f1c97c7adf9b29cf23d271a5a96db7c874ee051e6550271e0fe71d80bed73b44c764e655de50763278804255859ec2a90020799aa711d374b4871f1b024810a9ede3be3c6bdd2f5f3e0a97ca7ab7675deb5883508c2a3a4c0861a373c6a8fbf71c3de1a6cef9222f7cb3b8de37581e9fa1d3a5a4b781652b0ef05791a21262f1dcf35c96ffa805e4087ef0b0c2a79c723f45a747cdb42d65ab58f172e7ef2c72cb970f64d0ed73ae8b63c1e76af8cc7117b28b62e4a1b7705bc95214e50f89b01706852db05cfa9fa1c6a86c95363dfaf483b201a5bea946a9ccfe76cf415d8f08df72c71bea1d99f229a5d9d8a6fca560e21ba4c649043a97d1698f3cfec6c10448950dd026071e05cf389d4b75d85e705ff199916e8b4304c908a0abb7a1af3798044dc690eb38c284d508d432b52ee831cf25936380e94f817542559cc960ffd36d3ca4a625d93522c20aa3b41829cdfc62632c0ef559cde6365ddfd2a94e6b1c2b00a65fcafccecef87a5ca47fcb76e763f2bed10702bc9360cc9a3ebc447ddc74b36e0570b03103b4ee0a8825f05a590c044e07aa79d817357a189945d8329e1970615bfa004a504f73ac52ba7b13c65f34980b81a1fe526457e49c2a015899a6accc1e6e0ac282808c60e0e2e598e44205f5c84376b9af4495211ae7b18297188cdbeea65abb5b43eee73eff01a310965fb134ee54ed61f44a0c7c66f1f08b7dd0af930eb18ce60c53d148ae5f78e0813b1a918e996d2d7a4343b5c77a2dd147bcf1c17711f9aec8384d663e52388e37b241720581c125a0f43c7ade2fff118ac624a5cc1c9b38207ee3d6eebf7e4053414b457d933f5c03d6c706d058cf0f69b972b80a2e57036146d0c0bf271c9cd9195bfdc3b2923eade1a098a5526de9535d6bb19b0c0ce6ebb08168100a384f3ae075160f823f82c02cc854b7ba4c6581c29f5b848dc066b197f64da16b664f71e3195383258d4cdc8aa2a4c73c3abb5c4c03b89f03ec2c2d72a7f60f89488dd5f3ba96e7080dc9c2115224187f02c5f187dadaa066eceddcada6f97c8c22291897dfd8cb0217af47273e41f38e6b8a41f812a0ad29c8b15c7bd027e32f22e67d861db81a868b5d1abf01c8f2d480f7d5a46b978109807503261a3e4a39a1981e68cf6d7783816ee96af0b7241d34b53d6aa22c0326738e9ba5f8d52401a7a69b59687e6b9824ae1f66758f439ba90be84c98805b1c7969738e236677456deee45b12f51e29a20b8578e62f22888358ba23152e2afc7e42057a1958535b5b4a7ab93351778f94ba3c7de0e4340d7f487dd6c9128cabef920cd80b63d6bac3cb1631be715eec577105f0a8d6caf16ef10bdf40138205b34450bea2e5da231dafd2a00b519ed7ebff6b831d87c5916f45cba69f50af61a6dfa58926b070db3d1335e80cbe05c0b1ce086d1c5ed71113276874d89802c58de3067b687611f38b731cf535aa21e09a907cdf83cde9909bfdeb55b16c2353c0d404df45b753578a14f8109835a8c98edab5889e626d36343e7781a13aac3e0607b9f72f5f69d6d4528d1fd45af1245fb7148af8118a62f8771286d7b830361a0e1a7e1006843f68caf0029663cbf52cd14ce818e5ac01ebf0d1851233a083c34884a2f153a44edcf3dae98ef46c1dc1340be442f82477c6c5690a4e1d37bd0ab1576a4c5cb40be51a01ad4a8d5ac56bd28fdf3b1d6d49a09b862c7c5b5a83490789f9479709be3707de706fc3bfbb8076d5074966bc91466340b30e96983f2e4410536b77b1078299ae5217b4b490528e91b2c1f90a14df5cf4e539a775514ab99730a276433060a30710222f9020fc3b498bf61f15771dcf1efc6935329ba3b43325d442fa003b76135453e04d7894b80d80f792a2fc82400143a7956d00201103109d5605fc719810fed99ab2f130a4f5f8dc6d5dd33a9ef96507cc973e8eac6aaf8c47edb06648d04fac04bbf53106858351d9029371e6f45b83e02af81a7e823fe8952dfd8d5c714eae3c8cffd2197b9385a870109fd0bac6fb5829fa81de504a2924059e6e32f9911ce9c41fd752b4db9963a5c4793d6f6de7bcbbda59429c9b40b4c0caf0bef5ef7c9526987c4a18f2377d077fce5c6728c201de48ab72c8bba106a77f79b762ce35f18846bade4b9913800e81bfaf47932fd5126d30164fa4ddf650a9786395b484330966303102254cc08e54b9201338a7987410b485a4c6ed95ec98d51b9eba3dc382677eef52037be913b5a4b321287da5cb12cea42283796c961961fea458beb3fa26aaad6bc72a6442f08b2928c98cb0b79f4585400b9aabc64517b61c8a327a74c193eeab68ebbd320b34f3aa54fb9fd26f789c76f39edfc1bfd5e69ed2fa8d5340bd2d7c6249352ea59e1c8298cd3c9da2b8400f3e93ea7cc8472ff0684db8db259c514889a8fa4a843615a71fde5bf9c2c40bc7881a806ef3dbd90311b26893b5e945f0f51f4e4a1a35c65e3ef293ba5933ed149d9435aefac65e8e1deb465689e4de2f0b495388e86bcd693d88b3bda4cbddc94522ff7d32b74b54a297f5a36e8289553cec9849c736a404c7091b5105e8a4741263f7b133a2955eeee47e860929072564a29952d4a29a5f4d55956299d43b8bb156ab5b4669addb8cefb4aa65b595a3e97d30b4c0c4a66264563a3e6c66310878d8e4a4656f3e69356d4cd6c1736d3ecc675de57325d9616975395375f085e5e6062503233291a1b35371e83386c72e888e12686b044412a71ead739c1cf6a60b7496b1643ee341db9b3396c3287ffe341ae342e70e4ae0373e7e1dc7d9fbbd28ddc996a72776de48e8526772da9dcb9cce4ee2493bb1754ee6062721703933b9447f14bb61be8f245892273cadd8c4bee522db9a361c99d8d9bbb1a53ee6e9472f75feeb0973bb0cb1d0e2e77365bee72d8dce9d072174396bbb0e6ee0600337701d8e16d58ae421d386189d2efc758bb859860a4da87d7be7cf9281737b90a63c8ddd4913b9a23dbe40ddf8f07b9d2a65c1cb9d3c0dc599cbbed73c7ddc85de7d9c8dd4793bb92674d9ec5b2bb9eed5850b96bf1ac8b67bb9337f14bd66c109b2d8c4bee625a728762c99dcc4caa943b9a2f77366abadcdd78cf7a16f42c0e9b9abb1c34773a3c8be52a06cf76373184616982b46630939d3559baaa7fd6fa438724cffceac44c42aab41f0fbd6a4bc870280bb916e49acb35a02adaab0323fb07f4b5bc98fc9ce41f577d4ec8d0df7fc84a1050e9d53e446bad297a553c3534206f0dcde559d1823e269ad0d7441be25ada2bfb3b05bd18d712828b85147bcf483a4b096e12474a29a574e9df730e9973ce164c011ba30c58ae639451946b75a45ceb5bfb7d4bdcb18738a0eb2171c78ed9d0c26d2457b1ba0ddbae72a486abe81a49565c457fab2e5759b92559c1a2a57c0f4db0a6280c24a3e5aaedabfd0dc4416628ae9233355fe6ed6b0f876dac71472f8f0ee41b768bfd8943f1b07e8f177195cc5072539111a83aef404ec64e9e532c5273c2af77b4218f0ee44093c8054d728f2c899e0c21779527aef6fdd1ef2a2e16c9729c844d7205c777264656728d3968942bd69138d38a4b7fbe17f162a7a35959ed489f133d63b9ca599aa3ec419ef375244f536f711767f1537763e9fdb4802ce0f879f41f0ffcc031a7048e5656ebe34754eeae03bd06f211daf0e6e8fc2b1cad2779909db09cf0755039374c42bdb4e0d2973234e5e52afbf52791f6f52719aee2befe84b96afbda3f86541aa85d5dbb3cf48e3257fd52585d0dd44fc0767958a7d0bca97fbdd37b303fa2627ebc2c25703c81760a7958a75016038e17061c51394b9a37f5a7d01cf29f297a3db217e8d6cce0663ffa91ff489cfaed49393961f8dff5048eb67ba1e2524925088b162943af26eaa2ce05b37c0b66f912eefc61ca227309cbdc333b0c44d76f3c3a16cd9971479bab774f289ab709e9aa7ebb7c7055e9eb63a0fe1159899ec0b2a9964aed6107f6d82e226d2a6864bab40b0c5a4f584852c4248ba6022949d01852a682191c31cf30aa2aa082098f5115281145a3e19a37d2a6200c4d72cc758314465c0e0d3a363877650b496028ba36cb1d2469e10b431626d4b5bef4507efd46a1ac95d5d5e83c6bcd699cc635f04433de98f5e143ecf57a559a59cf677ba5940736a4b4b59829b690671857ec608110f29ccfd9002c410b4357b2c0021198b01a6f09aa50e3090c5c4db080c1ca5f12719f4b44017277f7539e2f479a2c93c7b902a03c5710853c5970833c5f26e519deeb738412b4d0022c742185100e8ed004179e60e58c294cf1c46a2a51051154278f5e14571002d0944651b2f0d1be094214455ef0e1f75241449e73ce3927ad518119d9dfef9c40649027141ce439e9a42af0e2c6cb24854b1a9766182fdcfe6e89120fbd280720fef2468a40c0334820714ad04e9ca184d13c015542417777d704a39336dd69fc9c7294c132ebeea659d6190e1d660a3e608003ae9aefdd671fe40481e83c86a1c499188099c21d256cd219c2308135040900296ee011700079f2e499c6ad5972e13692ce1df8ee1477944540ac157273368770a04a1942412047bf49b1e5cd685f73cacce2f484075c247557a73ead692465fbdb17e4267bf6ed5bef4a9ecf87f5a1814d2efd209eed0ff44b00fdfaf30b42bfd6a75f9174b6a9ecaf056dc0a90c141266faf4a47dd0c6fdfc8edbb8cde88eeeca505c35df5d9247fbf94e85e4d97ed6afd656fb3daedd80817838bbcd73265ed7cdee9c96469fdca346a60fca97b5f33586598a3ba6b8b7afa538504898edd3bc81639847f90a29bd55b8fefd2e7485762d4f9eec7eab25d3f566623fc30d06bcc4c33669759b456b2819bdcf9e7aef5f93ebbdcca3d5c193f3743a9d4ea79933705c82040799a5c4f951f3c91d9c523c9c43738a87b48566cccfcfc749688af3355f422f108aabfd697e3eb2ef8716f3533238a59c7e5e29eed8adc9ea16d01397507f2a7b49e402a13cda643fb19850b4d7269eac299ee68f4d1e2deb84633a894c5f768fd38fad44ce680e59d633c9985468276938613fa265a05a683702ca1d276bb69e748fce93357f889ebcb2247a2294c7ce92e8892b37abf4f4fb47f27c4fbf936825bac7f6f48bd0a7c155a7a7af33c51897a77f838b304f3f0757b53cbd4fdfbe3ccd768c3634d90708c57d01a5c76091fb5d300c967e33f650ee6fc1fdb7a8bf84ad64fd1d2bf76f1d869c039166cdfee91e6e69d861439329d546a981638321f72b719592096b711734baeeeeee3af304c72520bdc994da931477be7f911c1d1b8832fd1e173cc9a3a402042099935daae49033ee6859f0fcd3153056aceb625d2c96fdb7f7cde75f17efeb28d798da755dadf53651173519f77dbef58103313fda1810063475fe7dd57e3e4d92b3dab5772fa5f4719099824240a978fcfb2feff2a717707433f2fd897d4e3849cd2e3db385e5efc5448a44c0437f1fa69883425dcfc35db7c68692a5647f3be48ceb987ec59dbd5b419f9e47f1f439f9f645276dc6d6c08ec3a9eeb0c9e47d0914a2f49e10dd7fdf03f71714c2f4dc7f20f742b07c97eac7a5ef2f95def3592df1de04a6daf444ba377dbf89fb0f5c627aee97b07c27bf17896353fd3f6f70aa412088787f2d8a07b92afd05972c91a0cf8a059bc025598c514cdf4357c1063e60ad8418026499de040e2144cfdf6701a7f7a5f15eafc18e39ad126887cc9bf91f0cfbac3cecb37a165cfa8b4ddf58c8cccd5ae2c3bc990f040f72c58179331f090f72c5f23cc8d5f772e5fdd82c3045bff42c3f4aa40ba6a85c7defb9db356f66cb05e46a75ee61d3cb4f87edbbc61b184423f1f60f0822a62f814b9694be04b609e441ae98f4d034bd5c95be67ca0f49e7f62f61e9e15ec9afc193c4b1e0780495b5a9a5e83707a62808fa00d3dc12edc892c889937cb3247ae20759a57e03901c4200644904c51472294ba227bc1802155b8587b4fea86e0297869d41beaee291fda5f547e554694d2a243fd3faa55cf90da2b89a1becbcc637cbc636775f09fc175c6fa314fbadb556975263afcba92063e72d8fd5f350768f36776dd0c1ade508f7ca0d8e9fe5135df99d3c9de889cb9e1131b40ecf21e5b5382a9861eded8dad86b3d1d178a96fa6246342dd18161829c5da6de7cdcb9c2ea793cb4b0b0c4bcc4599644a335fcaa3e96c7035db0dfb1acec08a83dacc1caea3a50c4bf7e484eedb652ac8cce058244ba722db61fc5ffc345d680b523501650e8825bb524a39e79c75ce39e79c73ceda267a9bb05a75cd1bd9053d051ff9ee021bf9e6028fdf39c01df81ec21cf8c601dec0f70db08e6f1b600d7c4bc100f8de0267e05b0b1c80ef1a600c7c0be11ddf34c017f89e01c6f9ce025be01b0bcce3fb0a5c816f2bb00cdf55601fbe8370ce77144c816f1960017cc7004fe01b0a1ec0370cb004be5f806dbea9c011f876e119bea7c010f87601a6e1bb05f801df4f700ddf5260077cb300abbe57808b7c0361f13b0adc806f15609def14e01ebe9de09d6f283003be9fc03cdf4e6022df2ddce3bb09bc806f14601bbe99c03c7c37c104f85e02eff0ad042ec0771278c8f70f36c037125887ef2370cfb7115801df4c70fe2e0227e0fb0478f54d04cee19b850ff03e58c80f816f782130027e09f6f126c041be04f8c78718c8c78071780e9b720c0ec00c5066089ac1e5e10cae1e032bf9e6011ec1b71838886f222c82ef1de024df61e0107c838181f87e6124df5fe01fbe758041f0ed05fec0f714ec81ef2ef0916f2eb091ef1ce0f17b0877e073601ddf38c01cf8be0106c0b70df006bea5e0007c6f8135f0ad05def15d039c816f218cf34d038c81ef19601edf59e00b7c638165f8be025be0db0a9cf35d05aec0771016c07714ecc3b70cf000be638029f00d05db7cc3004fe0fb0578866f2ab004be5d9886ef297004be5d806bf86e0186c0f713acfa96023fe09b0558fc5e0176c03710d6f98e0217f95601def94e016ec0b713ccf30d05eee1fb09dce3db09cc80ef16b6e1bb094ce41b059800df4ce0057c37c105f85e02f3f0ad0436c077127887ef1fdcf38d041ef27d04cedf46601dbe99e0d577115801df27c007f8260227e09b856f781f9cc30f817dbc1058c82fc13fde0418015f028cc38738c8c78081bc0c7e791486790e9f3e06df641c553c741c47208ed80c55dce93f836b8ae17b0cef3f83d01473bcff0c43373f24c03c925e38602c2f030bf388c1601e555e308fa319d7c82396fd55ae292a797f55d01447f0fe2aa12906f1feaaa1298ae0fd55af2926797f55d11443f0fe2ad81481787f95d11491bcbf2a36c51fde5f75344510bcbf0a698a1f787f55d2143df0fe226b8a47de5ffc99a291f7175b531cdf5f049a6207de5f744d9103ef2f064d7103ef2f0a4d5103ef2f0e4d3103ef2fbea68881f7178ba67881f7176153b4c0fb8b4653acc0fb8bb129faf0fee2d11429f0fe22d21427f0fe62d21425f0fe3aac2946e0fd757ea60881f7d7694df101efaf03344507bcbf8e6b8a45de5f27688a0d787f1da129f6f0fe3a435364c0fbebbca648e4fd758aa6b880f7d7814d9187f7d7319ae20eefaf139be290f7d7399aa20eefaf83344505bcbf4ed21413f0fe3bac29e6f0fe3b3f5314f2fe3bad2922e0fd7780a618e4fd775c5304f2fe3b4153c4e1fd7784a6f8e3fd7786a6e8e3fd775e53bce1fd778aa67880f7df814d71f5fe3b4653ccefbf139b62cffbef1c4dd100efbf8334c502bcff4ed21409f0fe3cac29daf0fe3c3f53ecf1fe3cad29f2bc3f0fd01477de9fc735459df7e7099aa2f8fe3c425354bd3fcfd0146b781aa638c3146dc09bf7e7319ae200de9f27364501bc3fcfd11473de9f07698a32bc3f4fd21479bc7f0fd61471debfc7cf1477bc7f8fd61403f0fe3d80a60880f7efe19a71f90c9499b9b7e173313cc771dc6b9f0f2ec5bdcdfbac3a531388fc897b2558e55205a9845443aa97aa48055319a962aa2315922a4964893f624b04125d629028240e892fb148848946624c3c1291c4241d96ce8f4e4b0748c7a513a423a433a4f3d229d281e918e9c4748e7490749276583b3f3bad1da01dd74ed08ed0ced0ce6ba76807b663b413db39da41da49e261f1fcf0b47880785c3c413c423c433c2f9e221e239e18cf110f124f520f568f9f1ead1e403d5c516cfe06ffd8950d682377ee29c1334223c0334341e0999708f04c51123c030b019e310202cfc490e099a31ff00c1208f04cd207708ae5019cfa3982532d23380534e294ab033815c4019c12da004e0d6900a75e19c0a9220ce014ec02386564019c8a5500a78e7cc029240ae054d204300d4b0298e6270298a605014c03f4004ce37200a6092a8269841a8069867ac0342f06609a22229806b6004c63c403a689ed80698e86601a241d304d9202b00d5602b08d9f1cb08d96106c030801d8862b08b6110404db10c201db18fa816dbc7c601b4537601bb003601b462b6c2396b18d1e6cc300d84601700d01708d0db8a607aee1c1353bb84607d788b846856b5ef3c6bf065c4303ae9901d718cd1bff01e01a01e09a1c5c932403bec103dfc0c13776e01b01c03700806fe8c04c6cbe8821582b1d7f835b5cbe060d59434dcc86b5e39202701b3b2ec9737a7f1eff1b56ee78f38377fc481cc79909f14c0c7886c333401efacd8f0b1e6ba230d63c21fbb3f088a95c3dc8e861344a22298c32b0b2bff6fda8c932415eb8238f56128fd6145528940a0b5775f8c7abc2c2431fe34e9731eecc238fefbecbbcc78f65384218ac695deb01d7c5b5f9d184c41df5089a37dc91c7a023870d57a4e28a72704536453db8d28b41470e7ff9f1b08be147cbd9c4a023874de71726491e9eac78e8a5ef01e03f9822f26ff336e0927f9f55e7e2c5e57eacaf19a19a98c461dd9967847a0479a8f358aefc23c2ad703c0f4ce2b080e19e92a6a8e373fc686d924e495907a872cd1ca09c3772de3ca89ae202842bf3a872d196b3c43d8e57f607318b5be90ccd1b57b972e640eb2196ab1b58ae5e9adccfe38cd08cd01455ae392344c119a1ec131cafca95fdc57855e163c32510844e4e51de1c7f2c6795ee5148c38a1c8059123da1041650494546e56682bbe8b0eef6ca20c08e3c69b0214f49e5258fb20a511ea51a02c856663771d24f4a796c2830c0224f23e4f916ca09f2fc8b82c2449eff5062797e188316e4f9393140caf3757a8490896470469e5fc48713e4f91c8822cfffc15592288a12f27c254d7e5a79120555c993a88a2ef224b2028a3cdfbb2b9416294930a3074128820828bc20030921844145134b0c91b19a4c0439a124ad5bb9842ea818810a60f8e2085360b158ac961959a8718414572862ca128858cd262fb082c545bab2527c82fd523bf87f9fca523dc8973d7ca83795ec386113df3bff1b6b52ccc52543ca62d97ef6e3f23cc8958bcb477101672c6b9219b9aa33d67c161a5c206ec4cab6057f07b160fb3eab19c3a9068764b40959b0567295c57d1fe68dfd5f920591f9a55f920591efe72fc98288e91d5c920511ff0b2e19f225704916444aefe0921e105c022ec93181e384ade68f39ab09a6ba97abd707a6bc9f26eb606a87f9dfa73cb087f95faa87d2bb5c99c05407fee0a15522addc9f307963dfde09eb9ff953faf9a59f6fdfed7ff846715344be9fb19a5493b29f59850ab9aa451984d6cafe34924168ade44ad6a46c533cc815133b61f3c67e2a35c4f43cc89509ecc1f4514ce08ccd1bfbd97e4fe91e9d6d67fb1dd44233525cb9e251d40517ac955c750d86400323d40862b1567225579ffd12ae48d94e585e69adeadd133a5395dbfd53b43cf8ca5b160f595271c5dbfbac96a41c4ced50ebdb7797f366fe920a56d4fdc1a5208bc4991968a79c37287b575fdcfeb983ae7dceea596ea332a78b9c704838b5197a49645895643ed5a71642b9d69ab1d6c8b506b93e272479fc6bc6721593ec276be2aada05b99c20c35a635d12b9d60e28d739e73c72951ad533cde7f73852b5926bc6aa47d5095255d39061fd5aebbb96a5513f63d5af4735fbc975ce39b3396736e7cc264e65734e4ff99fb236fd27d6322612a77e6684dc517f7af6e3f9f4e9d3a763eacd8ce5617dade87af6fe6b9d1d1d9d134af26444489cfaf565a4989da06fea57993c662c948363f604cb04c74c895c2b6b0af77a58bfbe873356573de55eb31f57397195ac9f61e12223d73193926bc6ca3503ca3583926b9d79cc8472cd86727d9fdd42b5d6aa85ea9d90c90b9dccb93bad8e95e9b543f467b013ee5861443f724464fa1c4bf2d4a75f61954a35aa6670465c52a6ae7983b4850c2915e29090b918779469cabff7409048a904faac1a1c93d0ac7d36e4aa29f4fb1e2b1ab9c684b6efef293b3f3b28c83e1fbdd3aa91437255c9c8f4ab6b8a15366fe8d33ae4e1165255bb90217d4a1b1c291272ff78e3ca1c38eab0c2a6c17eb50bd8503fad4659acb65ca9481cfa45a846997e1d423b28250e8c8c2bb3ccde7f5f875089f04d90a949805558358a657a5461395a55ac58c9f465c6a4c2ea515da326659afd64fad5fba79934ab2b75d1499b51224d318b241e3009cafe62c0b283493c6b1708b99b9ee353ce41eea88745eeaae7d8650539a5bd1c030a529663c4608aec38a5bd0c59955baa402277d673ec7d21b74821a7eacb31828a90aa7ff21c733fa801df6b6ff12c954aa5d2f7fbe42d7bae7befc33ed9c3496aee40aa8296417b0e8f6e46d67ec3a3c3b2e665adce35a0faddcb50ca9b2aadd4e45de3de00c455936ee0cd15ac99b784cd5e92b3ef4c1f026496a6079b70dcb79d7e831791164cb2f69fb56df33caf73ad0bf270bebba07cf6b487e35edc733fa2f287c3674d7beeed779ed669da4bd52665d7dbb675dbb675ad1b38a378afe1283fdfd0c6691bb769def2b03bf19bcc85a4b86acc7e13923c5d03c9d3655fe7775dd30cd3effa0620436606e6e0208b69b6c95fde934eda8c1952aedf695a27bfd814339865b9ff65a0f62d2fbd982c7baf7be91ece22aa412bd37ff90e252d10a4867dcf7bce7beee5b9979787b1dffd262954b21c4296445258b9c35ed750b9a65c7ad06bc9137a1c88f188fa1b3535a9981f6d62bef43233a994cc0cee9c4acdc4c4c4c4c4fc7c9998eec6cb217b7c4646c6f33ee33e21cd619961be20decbd3acb38bcbf7c3f30b28bdfcf23554eecb979ebaea054c21e9ecf241d0fcf2484cf9e539ee5f5e74a0ff0206d1d9e55bbe1f2e7fbf0380d79227d704e18ede8ac1cb6053435d93d669efa2694f6359d3de3b2a05c983a49172eb403f8bb9aa8aab8e5a3e88ce27703c3dea2915578d9c91ab8c70efb9ea7e42da26c0be67fa8270ef65de0b4db163534813cadacb87f998d7645e9b79edbb19ee631e867b19ee5f5e9e83c1dccf70fff23d2e13446798c6e97878b27be07c3fba1baf254fe3e0028ea877f9fbda87834ce9d39e1a81f9249d5f1e05d600e18ede722057c1802d57c580238c1357bd804660fee5b5ff5edefb82c0bc08c06bc9f3c388cb6b2f355c03845953c61d9d9535cd5dae1a4dbfbd66c4f49f101bc4044a0f41b72d672d796831673f036d8e9cd9185f72d6b12f6799f7599665596ce34e5866172c730b66c149469a44d6be647bdc59ae9aafbd33719546939037da3bb1024a45d6e88fc4d1c0cec5e10d7417922b7c4991a62857f652a42e95bd06d290afa669d68236cb9062fa8de0b9fd443ca40972933329e5943493999499bcd9a4c29def5996a971c79b3523f3ed6799061ab1eda97165aee0c9c3cf83f8f7d34ec8f663671f937436e2b596ac8716ec71bf1e663f93340ae561f6d7c36c87592b2851b3e9f7951410993730b5d5df2c1864be4f26e26388c4c9fe22dd0a9b9f3d6a8a45747272c2f07f6619ac5b1d0b906a6f81942510b224d2c249c6428b2af9e6fa4e4c5f533025d7ffb0a84f3fcd89e9eb15c888b1d452eba1b51ca520100fe9779df4aeebdee5fb4133a5af792f67cd46b863e7d1d618e11a49d2d9484a2606e6e5e4e222a98776e6fb6aad2c3377de546efdec6b8a70b33fe2e5fae3fd849872fd4ec359b66fbbebba8ed24abb94f73b503634274a29fd985c7a64edb77c3eec8f3a7a0cf61ef32aae3a923c9a4b81b25c4dd3409d14fd8cd240c555f3ddc8f409e931ae80453625c0f4b5f405f9501fa6992fd646fe72e4efbdef68b4efabe9de0f8fddb9549fd2bfa6ef038d7cfffd3505f9c6fe84944c5913225b0f3f993d8f42f8cc9d67fe700d952b73763d4fe27c5f637433966f31c2f2dacfefc992e7746a79163c76e74fd35870fd93f63deec2f241746601ebb7e051fbfbdd27c4f4f5b92f88b6452ccb34b224d2628ddce1f0a4ab525e1ebfdc5e96341564e671889cbd8edb3caf96acdbcd4b2ce02844d6404b6756a9f590dabf55be2fe1d1e60ffcdae10d8f7d341ec9c91a38fa64ded2345e746dedbd28d4cfff98dcf9d87eee95ca9b69edbd28d4bf8f4772b27f95d25d4a7f2be52671e845baf3fd457580946966659a3b1376271e8a57aea4d00e0fb2a191a2b71a29b7a6d86af88dbfaf91fd6923e5d1bbde24fbb76279f4288c884c41f79c34e8ad18dccef2953425bf886c7651177585d4959d9533213a844eda04b9c9945aab232f152efd7a838e4e4e4e183eaae7aac15a4328cf22f4ffe421069244c08723ae92fd12539d9ab3b491819c20c058439638af0c74900439b234fa2273ce39276a4e6904e4ca73d49922073a40deccdfd0b0560a57c8b3c12212673e13aeff78c4cbd2680ad527dca37b748fa25029a744f9f9af29e8275417577ae834cc232e954cdcf91dfd0c4548fa9cdd60501a3e4ace6ccef994060f33edbb0c6b73d2d73ec743e953ae9c5b3055b1911e14eed3dd7b764719bb08a646a6528c32aa64eaf990937dbc2707471afb326b3f8a21c6c54a927c290785d44cbfc73daa46f68f65f16ae49186080b336850324ba2228c8e74cf4511ee10ecd4a4f439674645a5544a39e73ce5e9928d4c3a27756d47b8fd1435e79c723bc29d94ca25f60a9b11da27ad59fd79b273f39a83413d4d4a2fa5548274ce39e7694eeba194ed9e94526ef43b831a183a6943e9e7a37ee9c3a13335d1598b7a7aa8cc1f5ca6e006335d9696ae037b727a9e78b5481670d8662a79e4b7b09c4e2f36d6bb30428c9c4e2d2c2f2f1f103ee85b98ae4e8b65e65a3e1fd3e5baca2b7d3f603c980f081fdc6b31dd7343993e211418bfabd55e201e3ad8f3c42d7d318e828bf2baaf8a76d7662da3d65a6badb56b794e7c93d6acdb89acbba5d09a7e3e348e526abd7b3a7282316d9bc6d1b9c95c69e72d67678df33c4a29ad53b3b408488954966f3ae192d252055be2646077b73c256294d64cb321356f44e83a0d6f56cb72cd5df5340dcfdc594fc39e29b6e1d3d1d1b292892b69daacddc765f954dcc0213e04d5ba6db7bc82db96473ec7d950ebddd39153d7a1a698e55bef9e36ef03c2c7fc1a6679e96c9be149a4c89096847d199859fae52fe689216595538bee2ca7cc2f645b642d4614a65ccf92c88a2748870d2152240249407d38b324b2e208d9cb92c88a1fa06233e8a4cd4b7bf223a4b70c4027735a2dcf82270bf62e8c102ef7f7b7f7fe7bef05f707d390e491af963ca6b7544311e16a1605eae8e4e420d1167bc2b27572c2fe519bfb3acecf07e5dec1249910d3952b5732d7391787e212ae987d94b05122e9d41f4244ec892b8ec202a61afc21098ce62d1797c3237def9378e8ffc34f565b807c7c20920643e61e45c56a59cdf2f6dd7de3314996b3f7ba6ea494659404432a3a8ad19646b9df8639e0d893e95bebc3caf4bb5b923756f6bec7b7ce6595c46ffc07dcf9b4c67d895405112fad6cf60ffe4a98b49e18750a90f2e8a520961b88db2c0ab29f78e03fa9a48288dce00fa59fdc2d93bf70418cd729c9c31338fae41387c117d60f34cbbdfc70387dcb731c77d2beb9ce064b2eb0e0092de0e8935bb8ef6684d4b8a3cad5c3950519baca54eff3c06e7e765c92c7f4d8e54d484e84290bdc3bc7fd78f333599973b94fdf84c3031b67844eacccfd09e4be67ce5cc1b11281c779c71220e551fb23b5d512e5c6dbf4008216af9835eea87245d15ee57215e6fe065641f11b7f95eb05052ad70c7a22cf1716079e9298703957b5b8aa7bff1796ab4eefffc2c455271c053f87bf736f46e84a2edfbfb805cfdca9e1a12375d7b5477b3cecbe928dcbf3f09cd4b498b20b0e404e7dcbdb601e3f3799e679b460deff9404c3c2d252639aa135436b0627363a7278a5748a36bfe3f49d7b2fac5392872e34b8e3cdcf2949470ed5906a8aab4c38ccdcf23c7e248f0b8e32b2cca31e6748f270cf23867be0282326e6fd6dcc08bdfccc29890365826670b9e07020f7362c1c032b1492383af08d1cf8860dbe517403866fb078e18e3862a3bd17476c8c7b7f54b92e9619c646cc8b0c1e2b1179bcf9a1c1e34b93ec9f3a7958b6e0ce2f3fdd823df378c2c3c5a3e5210f27332ddf8112d334aecc3ca0b4601e4fe4cb1ef75e7047954be5721507c555a82057c990a0c7681eb4184dd43be8301a8c7ef517ad83f6a2a77417cd45e7a0871a076d83dea26bd034e82cfa8aaea2a3740c1a064d454fd12d68297a051d45a7a0a16827ba8966a297e8241a8936a28b68227c843041184309960cd1ac3e4133e923faa795e8268d826ef513eda455d040cd827ed22e6857bfa0a1b40c3aa8ad682c7a062df4fe3d82a6d85abc7f0fa129b694f7ef3134c5bec1fbf778f528bae148f2c4fcb7b572e9a59b70bce60d8efb5dc7715c29777556ef2aab563a8d8147f024c04abe798083f816038be09b0827f9de010ec1771818886f303092ef17fee1fb0b0c826f1de00f7c7b813df0011c185dbfff9c73b664f965d965c9e52677b4313bb8a3f5c12c40d49ca4da39adf5969a677447ebb2c41d6d96f605577e67bdc6ddcf6d81727f74a6636d81e28eb631ea0677b43d9fcb5fcddf47a41bcffc4db0747b4a9ac1549091e67effa6a34fa612471ef1268ad64c93d6c34e767da59cde2d5b6e70a440d6a41840f691e2b63581c466648432e2425483a323813a02c5052b44c1da7b51a89857cd784c11629924252600db0c6f291a8a5ea288ae8ae5d4b8db1a7e33b695ec461ede17641a0e0a950594d119a8289a40a2af3417da0a1d05944c42514161545f692eb4153a0a2824504646f6c708c504d584919111462d51044a26a164126a0a547341460952497fa1b3d069b4131a25935062a0ce20e2614b1325530e540d4c302f1747b6f2e584caa817cac8c8e80c25a8b6424701259350a82f5020cc0b8b8b2cb39b0c5dde542ecfd634bb715dc76d56338541b356b3db66b52fecc67599d6719bd5b22c0c2d3993346b35bb71dc66352c689a6637aef3becfebb8cd6a45d0acd5ecc6719bd57e908ad034cd6e5ce7791db759cda569add96db35a13b5346b356b352db22cd38166ad66ade645ad29a39b2f6d3a29e736eec84d93fa48865a962b5d6559c5e207d7261e7a859294bd3e41cafe13ac2c305cf9f3d65a6bad95d6a759cd26c859dd80b0af3da5f428531966d96b38cb3c7993c93071ca9ef62c5930ab2d2b45b7ca32cf56dd942d71f71462b5f914c2a927ddc6bbcacae8102bc3fa146f32acdf90ee31c344f6fa7994301956ec5909b23cdf6a1508b7ea4f76d6bc6155560682199d59adb5f196c500b295e286e2502d6fb2ec67fd59b3cccbb17682a34799228a2690b0f65e14ea3f0cef096895e1edc671f7a250313aa8198fce7bcd035b6742f19b4e9a37fe3769ba4e3729cb92b2a42ca96a99d4703a0e85fab757d0ec8e31fa0a0e68102577dee748943eafe3727274bc32ec1680709b228a2690b0d9c588ee24896394c475375188c5726744e734183b4900e14d12b657c0a0f3becfeb5028ee3f0c73725aa8f062f02864be20456b419d09c512d9bd086eb33a3cf84a3a8e00bb92c4c31614944c395a862d645f1cd94a9c5a6b65f1cec8632749a0fe427689f3f2450bbe9d9424b7d19b702474743cd4810bcb35b594be96969616af6b69e15ab69616904aa1cc6fb4c075a92657147b368c2b9f80b535276db962e2daaa4042a8166ae6aa51b9f2b3ce6a9665129738571a1deaefe94483f2aed7e0ff227447fb22c61d259218aecd06594df230c98a870ea4c2266bb226ab265991b5c76fc71a8d3682cd1b962f6ed24d82a192acdc2ad9ff4473bd3b947461fd4a8225f5eb4564bdfa848e497d6963f1eda1a26d489b3d4be4bcb1efb31a1b96ea9c545bfbf589d8afbf814b96f8ac7c7c821488ae40036906d2962b962f684cf2cca72fdfe61ef2d904d12948824048c91274c71ecafe12a43f1e7a500f798c650577a43ff4a789a4d495b95059278706d41ad99fc6a6e75f29434a5f3057b9275919b28329d99f8819ce4aed509f7e6aa67ac8343135c11eea7fdb6ab37fede9e8493ec4666c220df12fe2f32735c43e0f726541396f7a8862fd679369e4aa9e2c97b023a41c3c0c7b747446594404480eb49555f19d6b2b68074cb2b0a12f1de621cc48bf53e9313282ab6883a921f4251899256353953b3a6c5aa1ac9944633fb8d54585c4f10ad49a372b1acb3e3aacb68a3cdc41a856d131a9356674479baf0fae17b991358ac18cc220c38c2a3ccc9503cd9b2bd7df5994089dcc19ad1786f124fbefa0c146520e2471476bede76659c126a17f4fd2be874377b4ae957c4f8e720b576609e4e7047b985754a31de5eb863fcafe363b686e903d7244d9a068ace8ec004328fb9f689a4a14949b13b200e18e3753a70d5e9fb2ddeb708737cff0e2b546d2644df1242b93090d36dd73be447977ce39fbab8ec4f1a4c93ac21d2fea8b3bd62147c20b8da2ec527825394ce2b86bde70ac98125c455d2f2650b0982e84cad8eec801a9fc215c32eee8ae76d24f504ab82e5446c7240b9ad1eeee1d72887027682528b92bba419a8952e286b0ecbf83862bfa7d9c3cf429c32a2ecd3dc1ea0fee1740d9ff4443ff885fd9efd6344dd3b439b5cec08ba216a5c41dafa7c5454db9f7b2bc1a5c97161d93237e65335697c3b01b790dfe96ca1d2faa8bd8148fc079ef4912e9808a9b917d8a87fe1a9238d9f77807b9cbe54141121c5d48c887661c9681346671706d75d524a81749b462eb35d4e0afc1e03a0a1e0a1a2f9a747bb65bc2b8a3cd9d1fd9a36c332ad5e4f6fffc4ca1d24d9ad53f5e83ff4c947b3df4a33ba2524cdcb159d99f058c3b36cbb1e87a95a45b4a2965b7047f50c24592a712c96dfe0129fb2791dd32cbb26c3c729a5456c9141ca5159c44c90fa82677ecd8fb4bda2b69837272c76e59e996cf269c3cc92d49b8cec2a97e97ed8249f6f74ef4a5cd98b3e3e45e837f4bd11dad7d72a1a0b287d975e616cf852bfbdbecc862fe11bfaa2f7b7ce20fbd067f8f0937cacfaf28989a2f5736feb2c4fdecf2b34f24887230e44c9ac562b158364b88ad66bf1457752c4074e0f2b003f285d0ecda73294159662053865c25c780d204c81742ae4a01f9a20a9d7db7a07d9929b5ef19d11e0c4226673f5a3ce79c78b4b62788249bb961b8b3350bda7edaf4adb5b633304acf2d3a252c168b886c244af6df77fdf9a82fadab8cccb72fb32f959e4ac94333caf25d7b2ea6ec4a66f98ee66d666dbae7eebf0f1c5be270db9b9e3e87a5c429f90865f9fdf038ef91540e0c422663297190d40f8191edb337b23df5aa575f7b4fc3db6fef6d2012aee5fbab0bf6b26fc1d9cb7c5f4a1c1670cc40fa1ef5fe7ad967416cce7c7043e48d329161b8b23a7d11bdfad15646f8ac4ea006f64c8a645eb972250c597b0d49676dc44166245acee88ffadd775ff7a38f501eb73fe223b43d12ee4725998241c864d377147f39f8501009f7a3f641cc1ca504a7df8670affdf6146b78a4afd97c02a5bc19351089098cc22571bb97b9b40191dd7fdde82394bfef3269b191f9a92036737f44cb414c1fb089cb7d5fc9e3f6dda78376e5ca952e04d95e03470e1c6d94d3fb17e5e757277008095b6591b299e65717a8a8f14aaa12c406469ffc012d6b414a59a33a388bc562812921dad3d7c00404d1d982a9235ad6c020bac53f2aec8d57b69eb77ddf0c50cd34af64327dd7db58584c55727b88c687c617cbcd843323777344b9b9221547c6e4604df3e8ad928b3ff1d02905aad567253f1ee4ca629f15d784cb0db94a56c99c140f7d52a429958cec15568d2a558d9c943c8572525c05e40b294faaab934e669cc8fd9e54d1eee157b0e45e8d2f4c5e9ae419a0dc609471e649ee99566e2aa5aa7e3f1832afdc2827f28fa856eef1e5f3d1375ef9e459d0762f9bbd2618ab994a9bf66536cbb44c2b7d16fbacbaec9b3eabaee228f66d8b4443a31b12ac44c306499c1a64e4ad6e30286833eaff3e1fb4f14d43d1f29687ee3e2a2071bc06d521578df285aa94c923bd1af44e04557c65a6cbc8c8c8d096325d69f4e15e392ee8a4cdc8bdb2ed3cd5751c0cebe42293fa22caf3697eee18ca5e96443710cadd71eeeebe65af5596c4d93edafef99012e7c3a165ccb5d6a4a669f49ae0951d1cad87997c483740cadb485f42b2a714f4248c884eda8ca758aedfb519d93e0e5a1bf1bef3bbe05e1f3fc5fdbe7b165caf7ed73e69cd34afc3762b7d6ff3d75527ae4ad92ad96b499e2ed7df4e3cb81f9b22d79237f5ade5e84bf2c0e4fa9238f53729dc596deebaecbdfc7ee4c0e974b059fed838dc4a09b19fbdd54103b353ac1e75728a73650332b2d7957cfb11a94f240381321d525bf386ba0c9909eec3caf37dbec840f4e4f93e1247a6aacc46e64b8965cdd764ff1a035079234b29a51c7d3c57dc57b2e3710822b2b3f2e7c3bf6b59319518495f3122df9fe2d404851420fb03215f59ca2bb9a3eeee2eab35e24a2143428780fa3e368bc71f7dc8f5b31e9faf619f2cb3f975cecef2eb23cce9432c36e736e7e647deb67d097bdcb66d1b9029fec062b158ab39e7f4e84f947d4a816aad9dc5e3cd76e49e66af713ed96237236b19fd9e59698f71bae2fa30ad1d428378e5e847262945962ccb7ae60dfdeffbde3f1f1f05ca7a66e79768a2f12b6f5a7b5751b0bfedbb0d013267e0e6d2d302a77ba8742c56765d2b199a11100000004500e3140020281008868462b14828166a82b67d14800e81a05a6c549e09a41c87510c1963080242444004400040a0246d003fef75f43eafe37339edb7d20b04b871e992a4ba18ca8138e4083756a78019d1a3ab61cdc3361dab86af9b7fd7025887c0f4cfde6b3bc3c7e896d1b4a9133f7a9e65a2b3f95f43690e26cf1a8fe0baed41b1e448a86a82647c27a7c5432b7e72e5b619723c8f8372d3d0afa57119bfa8060867452047cad4669741151db796fc7a18c6e065c4ac961c00c5d1d1d797c0f01aa271bb8a78a84f2f3e7f6b7fa31bd17bf9ead02b3f33e265fc7fcc226a62d202421e1ae326bf7837c504408c7336819c59872c50713ea89b2cfa764e8781ab7d42b0a7f6d96331e4f83f7074c83c63d36692bf87e538cde49103edeacb9d46ee8ae7fae64bae2197c4892ca594eb25d15218d0050f3d690f56c8d0e4b0bb8f33f160749cfca5bf1bcd919bc61fddae81cbfc8943f8ba081c58ad38570165be817286c9246966f059e58f4b8d65e9eacc8dd688ce64dde2a11c08c4af2dc9f5a620bda76a190f9eceaa71687c76d6fed472e5865c2f9244881f9c43d2b72ee0e07fa55abf2a98fd92947e3ef7bd92d0c7058e10eb58ffa80ba95d42cbe43e642bbfb2fc4cec7bf195c18d91e39e7633bc53a73c8770de23cf350235cdb76d85d9c2f477148547eb14cb4244556c24bf4eae6a32b333e50ec7c49c6080ff39a90deca7048ed46eff2f9a561b8f27d283c9f1ef03edb73b7e0b01fbb69c1feebf2b7f7ff9f2029ae1fb64fbf929f70a2807452390cefab49a7c7acb30c61ca8fa4531a6a95eda7c2233efc9f63d432c4540761cf45b5f1fe2678fb6b6c5565650cfd605b5f444bf5b503f83e8511f1e06c6ef0cd579ab4f3a42c726f3ef5da2e5279f64624c6b1cf611641186b7a2912f13227dd297cfa0fd1987e4eb33a95b9b156bed1ff6bf52e108827ed9474962ef526e44f6b8026e6670bb393e3692bc9bb69a7981e7579d06f1944a3898de49b7d9c6a0df1f61109805002a773613b58ff6f80276a8b4c422a0d93e53e3e643267c7a75b5144dbabb9f0b27e8071c278c4184208c00f9d9b9b9f0fbe83ef2f144792f9e18d25c1693533da87c2ebea8f15df233934be03243f75961aa2004aa078dbe1c602b70ec55c7fbc894e991343ca41f0e9d73041d3e35d0d0ee8304259ce5351ff38ce8bdda3567b048273623895efbfa863ed654e8dbfb89326730117f1c454d4026a0b113f43a065aaa6420786bd57d4724f07d9c8932b1b7ff5efbfc16113b70acccf4d7edb4f68272df10a74e3b7aecbe0e84c24ed61898f43ebc1a5932b3ff00f00dc6d3fe3d3a302b222c2c8c286de4f770b90d17908907042f34a05dbe2501f103e343ac387260fa6c546d9664000c7c1f890d7c9f88c58a271010c8d48239307281f199d8f017f8e3b1c756aeaa911ef30281c5440eacaf44073e2bd51b0ec05ade2891e881f2012bfbd830b1d80ecf86b00e7c364f9870eb26f0b250e07372a128744a43a81153b9ab130e4c6923762616bba3e9086c022fd6bb86bc71cbae2da9f91cca0df11f401a0318036fa96b123e174d6a520f24428ad2052e467d67e7a15ab17f4ee9f87f1b742ce8e20b864d7a1b988a797a01203d73a7efad4a0c2aa2763b03061c12a6ffee488f72a367962c60b5b050eab17bbcfedc1ae53b200f360f8551e05e0cdf807a040a0ccb89169b8e25b034e08f6fa394a346f07f620d483140f85016154f2139cd200dc4859e532d5fe7c9302f3ce096c42877c53d938e3ee8261038ffef1d142f8e0b70ae7a0c9425607c46c8808e8969b0d2e9574b8bec534b5e10ec1828204cb0dda3afdb91330ca34a48a779cb01abfbec6808089963e4bf4ffa38b316b667329afd762a2aa93369f1656e9652670aa82e4b09a7f45ca023d2540d047297004ecb766f605a271a441d46a7551e07a266d5ccb82163d217b3f7cb177a505ac2e21f5259baabdc60737c2c8042a2c2c096fca083112da055f2654f758c03615c545e3267e8a1b42a8ce91612f5d51dff733f0304bee72cca641a3304173a489a778f1349519b927bfc51dbefcc1369daacea75f6e9fc68049372b8367eaaf98b207452e0d016efb051c2bdfa23f0307ed74c1248948dd97e6f3835de0df29e847af0ac72d3e349bf234c3e2b7e801d9aa5a020dd3404ea98d21e9057d6729faf7781cc8e79215aeacdbdaa21acd75f46ef510e809d42cd93b31b22751de0c110a098e68ec155c4c2d55688bedb21c12d54423a3491507135e2be46db210f78ed795eea35a1de10d95540c814cc58231de5ad9e1a89574f36c411cfe631523e95ce93bef3cba755962c800a791117f1c51fa5ea969edfad675112a05be504d2562301bd1505beb93d785565515827d967fe5baf8e79efbacb72796d45f12867006adde0c2fca176c27d7060c6bd9aded1f359fe8ac00db1c92541ac3a3ce61e425056fbde1836a90fd38fe8fa8f4efb64e80a46214d9cf5f7a9c737cf3716de3312ebf9db6aebb16c87928c5771561bf5908758d536704ff2c015b5eb560d212fece6bef6524aee42916fb5879d0d6274731c2c53fee93aee8f44be277f53320264c98e04bbf1c157aba557b219be6e84dbd5fa89cf4a731924bc508669838bbd8d3de018bf819c463940d382d3497d892d0eb5bc5aa864b09a5e822659551f6eaec6e7daab8a3e838c911f24fc233048b844f037f42af3b7280e92ae1aa9b2b5ee3a8b3a775293008d0055e52a2245eab0feb1ba4d30f93e82faf4e130a51c2a54a64b65ab210431cd0068b210f224fdc402dd1712537c7fd24fedbb9e86162dc02bb36f0606aab16ce80f40db1908a07a70af0640b5d67e0dc4fa717ab28f309c7270ba1a332358a2b23f7a55bf33cd5342866c970315ead5854b8179b6271fedf59626fd7af892296bb1e18d53b504277f57a8bd4444314d9b730f2082353060387d3f2375c1187b7c3937620030502bb54b0aae9e4ab76726ff581e141425fdbb07d217eafdb1fdd937d729b259a215ffb16476df4a4b7e38f043b14c16d34ee2cd3721695f82d5c723f5545f998090fcc98cb95ba242586332e9ec8a82dbb66138f5475f118f93d8072d15403b7df53cb4b74a65f3c7ef36b9f822da19d9ca389c24a82f493dd90667a9047ec7a18b3372abc8b7bbfc577df7e1b307350248dab37aeccdbb56c289a3004e969f3dff1b45faf48b0e76a1804221a34eaf82dc6e62ac4e9d9c75b423e008d1dbf153954ab14bd0fab8da698a88a1401a6e7afa701ad70676be67809ac8f3b18945c520cf2b83ab873cf6fd6bb788a7441cb96033d92549f90b45233eb1e1c463469bd1a5d9d49e0cc9aa0af77c8e72c95c050786deb4dff90a15d16fb71fe70e2b80d53e1f459cc2f5ff8f12d1b4d48a720042fcee5f0b2be1ec4a1d43371b525076c916191458158fd3fb45b78a055fda48fc2a3a1e1d3665e03b9628b52901b75eee229c8fd1b2ff8ee1dc95a8c9b5a11fe8bbc0c920139a7cc3857b05b1dee6bf61f1e3bd2a579c3429e7c33b6289e197285af897d6d9b3f447cc6d26e80484cf454822898a945b423f46249966e8890cd05153b7363c46fb0307455b5bbb6a394139251b9493eac4e5f8839baadb56c989f1dedad5e10cb91c63e387cdf2b3541ba138e5df3aebd81d92b13fa62c75389b54f2547b8d5bb4ac98635dea7618281cebbe9d82c88d0abbde7c1af82b9672f017fb58a78f6d5c8a35a4c505365ffe0320c847a8c4babae54bed9b79aaad96e8cb4ceceb507d33ad24be0570c04978bc7494b8d8c2ad6e8e0147280b4abe7a5ab12f12ea140b4bb7368826fce8ee94144641ceb2365fe0b97cc17933fe80c055716873d05d9ffc2fa966222431b27cafd0fc3c02ee2d6e674a2426324f6a56718de47376309a4b48160d3bce56c2582300204a848110477c783093b05624301e692271578cb8efab59db06916c894f7c2039be7d1a31c58797c7caa83c1229a3c5ea480e35bde2eaeb36ae0a25a351c11718a193f02cf769583672447c0567afe0a7872e820aee912cb37ab030a847280981ac5a77fb68ddafbbb04c433f67a62f27b319fe69ffd55d0e857e3281c1828408cb464f5ff4b02fd6462882d0435f9144ee637244694a83b334b91442a1ff2c13bbf897f93370fa15aa3fb27f99b0de129f4a29b99eb8b1b13c1795072c7801f20f441baf93f8eb36970a1ff9a726851008fcf05096c76cb0c78e408110f5a7cc279ec6e7212b9681745d3188088fce9f284a825f1616d6eca7db98f96f007e39f3fe9e5b07c0d94c6482fede2ae2ba4e8fea7d098a84f0af71776160a12f130e565aa0282cc403fa3d1dff608583f0c81160d5afdd9c5a1c674fe8d0f88d7917b5c08141f554b33b6a58193168d442c167c4be74bf8ce5d80a656aa441418dda375fc85feec45c329a1a5485dd45ef71306c361c212dad78d302e0aa2a2006efb433fa8f43780b5f08996c902167490fa705c237d8e5070b659fcf6523ef30c3e6365d306b19dad8b9a0601b2f31cc106cd81efb8c74fb7a5cd905588753fa4a2d7cbd388c4a65fcc4c995112b3738b3ba3ee054475c2201a29a20ae0eb8d09f9c6fa3fa06f07d9e080fe34c4da749f21cebd2c1f8b65ad4f8bba4303931048580db4e5fa8a4076e5124457450e90f3998c8520872f17ebcd4857453e639cb02590c685f997a543c82dac3501b3524b8d29a4b5969382865e0e17f471f9f45ea219f28a5835da93850644256c3a92452996c259e6cdbe4313fb37c0876cce8429d291fa493d4afedad2b85d1a20d02a083e33fd5e93cf81b0db7e2d82291176035cce6c677c9393dc7073ea2cc47b47e95b385b1aaa2997c61edcb89e8de2733d96e3da2e0b5eb377505ad478c7d7bc63801440974a6a61f4895c2bacdb8b0f8075745dbbe554066f839d7970f3a388336627891e74adad49608bd8e523b6cc0ab302b1015893ce3339c433ba41f34adef09e1b634c2362b60beab9c2207b008d615342de69dc7855cc5648063f316097d84b1e44564036df7c70639bc2fed71aebe4d98499180ecba481d9bad99ccc22eb05665fa664f29718568732055920416c907161fbe495fb1c2f1bb7582b0b049ea1c786fd205100cc9fdef61bb46bb6f6aef5e600416ad40247bf4d680ca7bb80aa4ad3ff346a2f6506bc25a20b5c7ee52a290839d64d61206f38842d589943917c6e22012a24c24359e39c42602b28e77da474b741f37f27fd06b28cb40ba37d124323e744a29806fa16a11a6c5a607d7b47c7cc65237ba39ff102a0aa1f0bc3a7da7698bdaaf77ed46446dbe6f370ae9350abee82dd2d82e71c6dca585ece361ad27b05ffdbd0a8f099ef2978e6d489ea51549f427cc03ef1daab28958782650786b9bf873752e50adf256196e61293ad1c6a3c47321bb9958bc2c37357fb058a19c34939b765b3b6f252f3ecfaac8bcb5004c442b78b7e5d4f4ca605d8c9fca56ff4ed8180a7c87975db2185747b4b03d55c07d0afed79a2532f6ffaea383cfe53406711de1064acac9d4fc0789624196294e7464bb11f8ad64a66f009322816c9976fe1bc6f2b1277ac6207554352b4174d31832ea5d0c74fed2d2337ab72205815cba6fcda636463c29aea83bdc16dedc7a3b93624f97a0dafdf08c062fb4db290be719751bd0616b0a3c1ce7a255ae5759a8cd6bcc03a14d0fecca451369747dfb797e576584382add9f2ac21b44fd6afde81342878fef0aa901f2fe479e948ada70010687b8968e54350fcd3b8b644d36e56a0f4f2996a46400007a000e3938038991931b07677b411b59967abd93013e664390bf23973105e308120a6b495a46ca0d7d700828e84c9229ac716d83490d3271d77d1f486287cab711f9e3eb9a2fc1b36799f702b934fa372170898b683e75b02478a4316f0b9f4c4c1a61d0bfa8699dc3aeb0d510928b0dbeadbb205164f061cd563ef43bd0871490cecca3f4e4688ff9fb1da380de5ec0b35dcf93699f9705d4aaca2d8e1baf636609c9f2c8375aad98db58647b38b2a9fea91f9b36d3dcafb70d77a25fb4454530ab663c2dabc2cf324989772911fefb6be847491f7d443fe24910c6fe20a442df86d0075a4ed24fb286277907f561554d1dad0a010a909925af0c568e0ef177740d239a1811a6271cefffa95cfa416750ea0523263bc1055e4ead9c77dcedbb09e748c569f0c9665a7ff4de0cb5419447f288624510d1a06458682577fb6d4e643528805268da2700daec29270c575db5ac9365394b67b07a7a4faed52795195af8d253c5535ba1a1f1bdabae543cd8aaf4ccef12e3f332b484952e44ddd6f8ea2e884cc4502ff1f9411acfc5b123e459061cb00dc0f1234ad7d68c297d0ca1670266f4c5f91bda3412f07c2bff86dd4af3071981c222d27d1b613b2482156072902c608e8de67b7e8fefe8fe61182c0116f4a4e47137010f00975abcea0c1fdee408e4d40a316f1c0ed8f8eb92a8a4bd8bae09c51db304f75d04ab6e48074d63189115fe0188f636757c805694725f8ad7abd22ab55b3ec5dfcb2efa3428708f3c6755a538cb23a6c7d5f83228e5785c6f8893d745c48b064c181095269c5e9b318d280b82aa3517395daf1a051c7938ca75f7cfb7eded147ba71ce4f675cc79204909d7c05cf1e8a242a47507fa48cb3eb3937df3d95c47f06689ad68497f6cec8f947ffcfd8a66e935a57710fc20c10d2f2a2a0cf903a1bbe78fe0dc9c66f925eaba7ff010183ec565c114d9a9da814b46fa7216845aba21878d6e4f683aec99ad885cfa6c71fa3c818bd22e994f9a4942c0fa8d7ead442107d4d828c33506d200ff472a1b3438549e69b7b2700649f1086f6245f0ec50de242aac0bc20236e2ebac9ad0bec29acc8203ec41469608588ada07f57de4d1f70d3751069152e3e69b9da31377b8ec8006a80be20ef2fd9556db7e91970a39bc272674ff84ee45106dc095840b52c994dd1cc3d50652cb28ab2f6a4f19f48c123285cd9248fdf7f70a0290adc9144487dd32753205c841641cce68a9f4fa95d284f2bfa310b5ff9908bbac6c0828e303d1462ef2425dd689682574ae2305c7af1e31446d4769be6e83cd47e641b4689ea1b3a6fa0c54713ea3d632f6f79ffd3bee0511b2e8e0147ddf94dd7fae03ced443233b5fbc712a2f77dfc9ef5f01347d0b9a983aa0d4ca3fe14941e7409340ffe56402a30763fa8693534ab5a0091631910e3896040d40301df4cf4b66062f3fccc312cb500ac4423b90a9cc62c5499b1eb6e812dab002a10dfec9c7641f4a3de9170264b0a3f7320b39577a3ba24841fdefba98787013e193a4f647020810e8d0af2edd2bbb87446c1f605c2954b648a43c8d8d6ea740ebebc34551fbf105e555ea91802177926a6253752524be1088e689e7c63282666e9a9719253901b408c50d02b489d640967d6473a87dd33ee7781981ab60e2b5abf19cc4dcad3bb760f5f77d061e5e7299c426129e0c7421f3a1276e5f3347913d50ce5e1bb930478f5abd742755c362a20764b863d7226b5bb054170cf3bf25ce85d4ea38be500427e61666d764cd3e47421f4f799dc35bf63c7d927c64378c059d34d85b68ca22117315f20d4b895493d38dae4e107c5955c666625716a58ea9c6db18781f5fc9d0e16ec3a99089822b569341162c41706c6c55f8222afb4f11774544fd1226485949e518caf3758b69151eef14745f5c6e1f43b72f24bb359c1bcd663b1154305ec742fc498819a4fb58b48c26b491f27901b961052e878436f55b97011adb2690114be58a25f255dc84e2bb5516c9d54396772011f84c3f367cad68390a02ea18ade179199bb8790fa738456165eea66893d048e9037e41e85fe56227df0d28919b7aaf01246d6bdd79b02630bf22474e3881dbceec285f52854b961fa4152134e80d5e63272da710c0769fa6905183c4022ea426b6d5cfa81d4688baf15737ddde04d256a6a0783b43c28130c10e56edcfaa06d108ffc96c0116f4a49a7669e4913460168f2d51b3e0f3382c4c15b055ff4f922fab504d4957c17b0ee6d29d83bc0b02c12bbc3f3a363d9dbf1ce83d887b48cc70f80369c232aeef259ea5864748982d4cb3cb586abf7e588e5c76b65b1c793150229c8c781ea98703b850a6dd2862c1a9fca9a47c043460c06b6cdaa41467683314430ac7a4f15b0e3f1f74da0082608d6fe9a2931d99fad791613962b13a1a99f261974adec42e9f48b7086715266f557286fa2069eef6c00bcd886b42a880af79f3ff90acbd8d9476b5d2d2e868ff222d3e1372b81f7b55c4d7615ad3e1521ff1f063f5a54cd17c1e4da3761f136c485bdae9285b0c90f9c29c8470b23ee6c8fb19dcd7c81b0a89fbd830bc9342dd5fa991562d73d03f09b65f662296bec5003cda6ac4be1a8ebd9b039220111cb1ddcce0c98767b8d33eabeced317a457028a18fc7e040441ad41481d31f2909b61a163a4e336d33f3a5f86f79bed7beca10eac085cb39cf75f9b8ac26220c4903c1a89570794968d453e46574ca0c51d95b81e25e0fec020fed73f4f9518e063825884942b7076648b8bc3feafd57c19091ebfba3b80fa1f68e757072150de12d407f4ac67676c36e07d91f865e51ffbef050ab81f59ba21ffeffe4d51ac6a9e4601221f466490844ff0cc661dc5472dd9f1bb91e411b8f4cc68a86f86607897461f72155e498cc28e7004229ec8ee52ee48fb64935ad39d62eb4cb0d537d595069d156181d1450005f805c5199f267d3a011d18742733e0da1fd274e5e289149b05e991b2f2e902fae150e8dcebc644bfba1612e64442f59260ce3b83cd4d8e6a45787cca4eb58768294eeafd43f1ddaf5abed5f2601908503a5b5e57754137fe01610805eb33b188c7dc58fe6d4c04a4517e9c48d734e5437079e1658e1007fe5c3072e0c57f30e3647c8d8c0dc9e6a7188d020aa95faa0cf18ee0e1bd6ad4ed92a5a76c9d80e143543d97c4f88be945ba00f1c6feb1332167dff61b55bd38aae5cef0e844aad26d366403ad1d2dd30a4f8bc1a2b623f0183d2a5f29e1039149ee13648a687c20003e4ccfebc33e5d6799167c5a2d9cc19c3ca251198213d1570153b21310349d0bac0d3024073be8033977fe8f136f7712a280c5122e7a096beac9cdf6b045a2ab5c4c831951992340b1be5a8422e5b4a2bdc7096ebff43be64e9c08dfc354bd790e629a638375241420f542bc1003dc0e431d6b739382d4b8fb9701e08aead0585af6bf93a56551455086c2d110cf101dcd89b09bbde5310ffc6169ef21465ee07a00552d4f003b47b9cacafb0ce79ffe916b71b9090af110a6fbd291dba10cf7fc774b25b03fbf0e8d756b9035468fc41207acf8c863fdd81155b69cebbb1d1630f124d420086437c300bd29f32f631dde0a5aee1ae8a1669ad5ebcb32cf40061f17e143358e6228c085711be7b3775da6dd213266747bcc5694d87062e8c0175dfb107659f3fc69bf854c16805629d9d56c0b5eebd3594129eaeb1075b47126231759460b97959acb6a73eac0990b2228913f41d24706eeb7ec37cadea0dbf7aed0214493c023018a740130663d31f6d71df5dba4fe977b111d50ceb04478d8473c531c1ad590c17012ddf94c15e082af8d6751774fd514169a57b6a5abde2c7c7bc6097aa24877f1f38ea4ae37dc00bd6667c4c31128434524a62dc954c54bc6bc918ee0c0960cb8645b14d91ee234fcf44d2ca3d31dd8d30415fdd68132f68e4f8900f9b9030870412102c2ac8a3eb46d8a8c6d988bec0f152e184425fbf7d19767889daf41c5e1fa429be6d44f756cdec18c55f5a2aa40c5d9efd53f063660a0fcc39e969457654f8f6cec9f38732004d9444d08434a2a295dfdca1d8f9d01418c7e4146b072fd2843fa744e88e38a5d3c311a63a000db5eafd078978b467f7a8f34ff723a863cc9ffb825fca07dbaa4079b91679bce7dad9548f87e5835cf6f3aad8baec56b7974d15a5f7192d9bb93f5f7d4ae9822fc64761bef00fb2e0f2e9d837fe4849cbf0c180795a51532d2779216f4f6a7b501ae07b3c5f914079e812136f9635c34cbe5f9386e0873525dcdad4c528f85f9acc185a7e06081d4d029e85fa1e66c47fa4c139350c205359177721ef5fdc0dabe10c2bd712d7600e1b3849f84cc321ce37c8d498ed045e98da6780dc1880c64241cba8e087b1ca0a8c42dc6f1981cd0fe90477a9cb83f31ba60e53bf5399977041c96097150865c3991e595203ed24a2d2e7e1ed95b37084a270ff1157fcfde106a257bcd470ddca5b9590317893f9ff62b71f036e8c525b03914605ad5da0d5276a372e6007a8787614bd842c3bd762a15436fae443a24dbb6a0284ac1ab2977e1f70b2531895edd580cfb94644b207f300a850133c55fc963d41bbbd9fabaaaa595e3902462964e13937224be943d14d1cfce930dad26a0e017bf0f4869e3ee151d060d68909b9b5b3c9a0a47d3be2ea9ffc0dcf65d17cfc0ee355bc8ad45f2438c3453c5942b1c2ce04a710906fefd797373b2e2e815fa151d85e9593182f95fc86d5570dc3e2ee83123ed4946c7531c6d4952f4e0b04a1a5459a3fce531ac49df512e5bbd3b81e01a64c18cb3e3c40737c0b463cd234bce6470e7546f34d4152b2ca5ffc9420f2bfa315d3c802b84babb753e6c7eb07ac34b278118667eea19675ac22086e6b97b0f245c824365ebc7e7225bf19691c44d4c9a86c28be7598e247bc721326fc8f174ec2fd019d2ef48fb00784670bcac835ee802a63e78647824d1b8f577f66f95af468da7c423ac1df942f92cde4c27f46e90040c05bf7c83605bebd2a0ee18f12fbf24b6c1d6f46797d4e96bd3a3d29b2227ee192cd135038bc8f3aa4025b5ebeefcb2e3ef50048e30aa023e1d0249553bfb35a68f93bd1cc0229078f09372e0e4a7248121f763bd2a3626e0c06d63f15636478b8186c081b7f3cb132b0b452f81e4cd8853a8d92701e46513213e7df4b398652dda27c5c52506119ef8fbe83d62cdd33b9713d754f89612b070b20e22505ec2301662403e006e26f36f8764532075cefcb28a8c873610500b33cf3646fe50e9344ffd72a2e6098ed8a302abd112a90cdacddfbcce5062f31d94aba6960bf3dffcb4715ce10b176e03a370691a3e0830b9d6a7aecc39013be23b5c540c1feae38bafd0af8517223c6eda845adb466fe4922269f2dbc6fa7aa832a8128827871b4d2e907f138dbb22a959f114cb4feea92ae118b127579bca820f6c516a8484c7d4fc3bf479cc967b045d231a36038b7159ce919cd1f0a1dc350815c17ba3df12ab78d5d732296253437650a64c33e3252ae1a94af23aefd10e8126e4e511abc7994bd12bf154141e3d16028a88449467da1c3dad7cacc2a2a718aefd920a21aa75b01528102b936edf9aa94e3580bb8083bd117002a404169ef47c01ce3ff13c84ffc9cbe0ca84f2cfee98479098fd02fbcf9d0235e2459e62242e3306921c323e6212aab0cbb25ba7882bc339d410314669dec0dfa99319e2b33868b25e03184692bb6ed0883b766dfa94a82ae97906533b43955084e162c711a96a34d6879fc0bbe69ec0186c47e1400301792383725c7ef2dba8245328cd78dacff9cfae49a6b7c41228fef691c74793520ac0e0de612019632f3ef64525ebb9263f7c7f1546a1d2a3a21b61efbca1d836a44ec07e76817e7c7e129f9ca7a41cd648ecdd41c2d54e3a2390b128834a9f23e3ddefd79b4099120c889f45af9dfdd1c768c14ce2635381d8596bb051d3eebfeb9fb81bf849f3e06e45ccab13e7aba6473f65d6c55babe2927543273b3e0dfce2aca4e880e016e72aac467942aa93fdd72bed9243ede98849a8cf8fb2e09bb892a44d8b08beabd507f7481e190ae1f11e14388da267cb0cc364229fa8b95b28325844aaecb08db1d8023557f2546cb540f0f4d7ef23442a25060d756c642756439ac0cbde02f6914d2026f58611aa3a56ec2918d6fe2528e396c3fd7e953f44901f133b56d7df443706c9bdf3dcc8cb387fa531104a6f305ce1de882ffdf9b313820adb8d9e01045d1c3c436a46447b7c5e26c84700ce01df2939430f7f6228a4540cd8e027c0cdf88ac0b2a3322928e55ee48ca72870683e0cc938e1c12a8eb5c21e70afccb5cf1d08f6d0f6dc4e4b6c0fa76f1d5c43aaab3d477b080649549f92154822983498241d8aa148b3da0821058d0abaef443941dd790011170b1124675b2f571997f8455d68cb620bb502291f7c9bfb96d54b227dede2fbf4d96be6213c9ba2b7269b1351d2242ff851bfe0e2ddfbde07f04f9dd40be779ce0d69f8e210c24cc3fa65c2410fc2442715e72568dc080d487e2a008d3b96263032397fdecafa5abd46045e36589c0c410a69bbfc82b403860a08b10b615aa7722d6d9d7bfc306c4048cb8737f980ad6deaf9c4a822b0fc1f8867f5dc1e02d1e343dbd8c569334ea89d1807e96a9722cd1ac0a41207db24d53a8c2ec6668e3358229b98601c100e4a40145120d179ce36db93f06ff37649b955e2687518cb26f55f76f05fe45430470a6db01e5a3628ac32bcfc6e481c924f04177c2c43a458cf9c1eaa10dbbc161868ce3e1bd391ea511fa7391f5e6bd75e64d1b719ba0678aa44a732db17e7bd3243c6b5850d823b34d9d616ba0c3b1755306228a70c7b8c3e42e768804485bb38686f5da29b551ae9894f74675fc08e828f01bc4a72b6bb5b428dd3857679ec39155230b3b00f459211110ef94d520c5fc8d82a7c7a1e28f182f1ffa5634d2c4b953190fdb9d954d5eb4865bc97db0962746a0af3407623e5c11b3e040b6d7cebba08e8715b1b798410b4cd644e5e2da88ed836007a37d235bf71195451e71066553232d654d6def6fd9ce11482ced2962829c20f4ba06423f266999001ac4846dc2cfdd09cdd7e0a5c905571086245eae666d85aa82eb551879d772588efa66ff56e6dced63c33525760343d091e9ee53be8447cfb9281a605bb592db5e6e2a323ddec62d06773de496305dad381df49390b2c4e75193bdc9c9ba11aa49485cdad3146889dc45efc0c8c7b2f1f2058aee15182b312e98390fcd23c35fb36d70246e3b6b9916ac4480816a312022ce87d3ee65c9d12ff5493954f6547a5715a1f7a2d8a260f8dbcbb4bcaa228c2d281476c1f32e4b659197299e31a553f2434c5df7ee1053e9dd486e2bdb5c778d113ccc9c0fb227ea8cba13ce24efc24d3d469834680a286e8f0a02e9c1591d243363dccad4fd7351d604b14d549c26de6bfcd6497c39fb11e7d2fc3502a1d05bed41c0231eda832611501db6676eb1c8d8012279e799cb94515ec337e275989c03cbf6307401622dc2a543ccc73a9f0daf7db9d578a90f0446c6f089a55db977642bd224fa529d021a59a9d76abd0fdf2cf59ae72ba3b6fc303b24f3fe16f986e39d64b2681929d771474c7301a54a0dcc43000dcb9d8b86a138e1383b0f7ad8eb8a7d25083d6c2b9eae52c40262c4656b0c3caed2be820d7e6c5a48fdf549685035759191985e6d3c9c316a2dba68faa5dbcf4d54fe416b02a44ff6fb27a2cdd86adc5fdcbc9f6ffa7200a122a12e3100487c3a64c7ccf6e9463a23009ad987f50054e71ed70d857a90e77a76129c3ce449e5aba92547005f62c794bc7458fb59f6bbb73013a2b24554f250e46763375be1c60d6fd9642183f015095819f6602f9d7945dd99452a0615c7ab0665fb4e3c8eb36991422da57e8a84646384ce59158840d91d93a567080bd8a4cbcf319687348826d4fa3c5e709fd511509a0678e038000571a3e478d50cfe2cd438ae4414d491a3a83cf4695bc70c3afedc6b6f507e79a2b52bd4d91d1cc495c10ba5e9fd603c76eccc0adec9471c723ef4145556a1f0c9f51dc423d55baba01cbef7a5f54c24b5107e1b50f640076c621c280d022da8d7cc6d36cd42ba798ef64905bd0ccc527b1aea02391cb4a6c0231773340130c3418b410dbc41b3740a2e879e1952c380132c68bea14757cb8687befe7eec1a65af6cda1f864cb7a9d606842366d7e112715854d5143b39f30b7faf89d0309730d276f78e317c405eb6eefbd300f5cf37ccb53a5cbdc10bab5fb1b9897f0fa9ef6732a9b9f2b952afeb2d9bf6fd9e4f01ab5fe487666efc31668bb40f3b02a6e8ad7511fb3e999cfb088bbb8c509758eced331dbb60eb2351b480664956862292dafe22de29e71df27cde8c0cc3a5580e8d0710d15f199e613b8e8dfcd21f9a7e230343a8101cc20aabe1a1c8a4cd4443683f4269955fffc1335f0171779dc262232d3a894ef8955c0b73947cce28acf2780ab6c54dd2b8a19d24a0f18a8a5e37df38b13679adbfe12702d2fd03fef867442579ff2f9be24279f611f9f178991b3c5eb91a3942848191d276b4953e95efe5a61a5ef0e04d4285b5f50a0dbefba30f797f7c73a48dd1bb7b46b2b208c75240132beb8fa63bf060d91a488bb48f493988db4f272f3a0b730707747569ee55f71342f6a7a3a556e0f86935d3647510499ff45f109fb512301c9bf20144d561f80a5ae918dcff72e6cdb11d3f285330163f7318d552d46a2be978ce45e9e8bc9d47c8a0e28175445ddd44b5cbf1f5608cd4c657e4d886a7221c3561357b22cde095eb4ac403ce26929be03d534e3f222ff4a83c5801c2851b5406465d7d709c1e90c7e7d16ff8437d70b860f18607b78d39152c63dad1366210416bf12b9a4c3b8a83a0aaa5628bf7aae0bdf6ed298c34bab2724c1582948fe0a1966e8dd3b09a24bdf3c383e013cce803a0c86c9555984720c733885ad87d23440df0fe1ca25ecc309bf447c0d93bb4b7e6302b61e57a157bd9a21e509cd56ede2eb89eef5f59dbce7b24958686420e3f235488537cefb0c23277b31529af3da1dc9e6710cf0c0f32888dc992c11ce3de35347eca852b52dfb3425496f5d53fe88324c9a454b5b71f2278ddb67bc8d5564fd585924dbb6f83a251f30db456a4676be10d876da587018eb658a1ac6160ef1ae330b6ebe454ec6db5622d56d693b50a034cfdc8f6a35f9280cefeb565dd952a146bfd96e8ce4b1cde227dbc2675eb3561217b049e08fe05078237b615381f2b17eae9a9ca83842d897276d4acbc8b5ef8964477e6b39d2ff36728f67278f90f60485bce715d3aad5edfabda474fae63674e5a4819bf9f80b41f735703476138f4966e2f8d6e42103b470bdc08abacf4494af18d14365a7b1cc7c28415d7838f5063130db95a6652e91445ecb0397f5e2a80049f6ec8141de28315fd153dd2210ee48f827e85bc90202238431fc391425d85bc2276d836665cce1a80dd30525cef93ce4ff4a17a059527fd961a094ea245c32e688408ffe9b5888a13a3a1f95c0747505eaf6ae353d21975c738a39245e445e388ac0a49469ad7871d86ef185eefa06242e2e610d992dcc34f6c99ca4acda0b874c530299757936fa8f411b462882a98f2ff2b26c6b8c5b38a2c778ba35e3995717800a76528ff87660f5b0466b51f57a4ee1d70a75105af9471d0de57ffa256d69cba76386cdaf89faff9068e19e1605422a1d0bd115540d9a8027d479fbba4e67873f8796e4ed3168ae70135374e38dc93341d3248818a5d44553d34dd5864619122e1c49c07ee76f048fa3da650ba1431f2b00a83104e9892c520559f8ea2a42b0a09f616feef941f1d28822f9a0f9dc34a9a4177f444964726759b322be2acdd309d0779a46bab561eb8efe8dff06d1a938c258339eec033258b49d29811c868311ece050eb538060866a20b60804fe9cd9c1af528e10cb46a00d87b53f3ea542d2a7be2c29fd32ab184541f459985e2eb80ccb9e8c339b7e02e4b75532d9a7be225431f60b9c2b6daf9c0f4b231d205c6a286597e0a892b042cf970537e81502d124617d3e558ca7bff11ed1aaba30d721ed4e86f9c20d308de3f88dec5a156208d80dfa5f2ccdf8f6cda512693922a0d9045219029204ecc7556bb5f0e020cbcc48ae6fb2b7c7c8149403befc0753e0a69e700b72d5c985e111f2c09d879e009bea2ddd012b8da2de14f6bb63a3b4023ea30602959c346ad67469a7ca438f925c809e8aa2a370e854f305f661b9f17fb282cbdbb317f58b39d4e5ed12bd03ad85d9bf45b63403b9578d7b2a5f5b20588c66a3ed06c28cf657ceb847d084a82c457ceb3e47c70fa3d60d2ed57016827a50b88afa178cf925ff766817b9e5d5da81ee6f712be797d8fcc58f8d633ca001846086fec75eaa083df9ff0446f9d7307e11f3d29f0343661f46e47f4167f2aad7f1ea3c88624a47f52960c891c39567c0dea4bfcb628ce2ab0019c1418b2a4c5b493f168f62c706440d6083b14e061e389d711e7248f7c7cfcdc7a5e134b7ae1579bbd1c0e42325b440bc5459f7cc5479c9f9100b2f9caa2ef913a25c63a0eec72321ae1c8f558528cd054230ad1bc2943bdc37c6fa1fa43c95fecd1c5f6dbf617833ac10c80adc8c10d0d39f1b2f9dfe23e0775e6e4562f6a8f93b8c8c8aad9085e712e3a0a45b3aae3fd58b67880b23798c75781d0241475fa9be6de2274f1b39d0153dc79d2ab622252b6e0bb1d03ca592558eee670f454a92cde2d823d80c04ffb78b36b338700f5ea60f73cecf3cd8982ccef5d9fc93695115c9c73f870c54fd52f107e5db6683063d4e5e92dafd05c6a90ed53fae91b3b787f379896cadfd9f4d3a8c375ec217bc590c28f2383b29a2a50e4eca46935651acb26ac50c9cc005455a8f3d5f85315f23a1488f4bf637d4996c18862862d8848aa686ced9f896375fea4ac224a3783f10a8e4b4c46480dc64cd948e7483d2b27579f23056353632214738233e8828155ec2124d2ccb88b3a13d4806a5c41328afc7810511e8209d5c6d9a36c5944d5b6c8157ac48a48deb83206691b1624489e275311e296216a6b347909c99bb24851900b135ac416017f7c7d2caf9f3c522fd03f68b4cc5effcf5ab4957f61487394c94553be81657594028e38453fe2a93ea71d2992ee8c23f9d25823dfdb5f77b2e539387acaa8b7bc3aa3144d3e05b6dd28ec615f3050826544be5941491ee7448a42c71de5435f3350e9efb24029e07801fbd01cf5a0cf5c6b20465231094f837f334984db3e46569b4765bf1748c0f9d244e47c68cdd97fb945c82ea77a087127eccd67a72155f8c6d127525992ad53950ba5af423c6fe4cc840b9b9342a090ecdf3c36f714d2f85be4bd026e6c8dccaae651f23b6084c38c11f871dad9c30c599a8df7bedd5f08f0629ef0278684140055d6e4435b428557e047f07e2929b4d2d84bbb404bc68868513994b275539e883b51cca1d77759f46a42cbbf227e5c95f32678f97b6dcd09ec0e041ae63e995199e448301fe5dcd2fa3b3838a1951e2f0f9e7b1dd6036481020257660a2e172cbf7e40008f6310a72ba3a8dfecaa53920cc3a8341d732b5c5872a78d4579d6d0079825a67e193711b029e6dab56a7816ab128219d47174d2c1540ec56e6749b15d34918b434c3152282120221e5c5404c6e53e177e67464e63872af7ae998216695c19214cbc13e88e7c2bff7d51aa4eb00c6ae9bb17637ae10940d9ac00801aa360054348445514fab90f7993df5a32cde82bd68ba29b15b59a235448e33b7d4ac497ad9cd7321453989c6445f690a18d560be0c9fc2f7aa06708727dc70e348a1ddddc0f909903d4863a0221753833bb2b411d3b4d23bc66105c1ee4927f10d5dcf94f57775107bee2923c7f7f6ec0272573b0bb692f41a229f748a615f6b44c83cc00cd20c0cdf6d3d547c2cb52f2a1a8e61d4de2f057dc05494e66cfbb0afeb2ecc87707b33a80020326828cba41c6589e6acb6fee1e673f802aa2e85337a81f3d806951ccb8fb3f23b5fca093bccc6aa490418991177843395f67a4f253e324f34d98b1f4759d81c4022e9444ed5a6aa04f1ce487e52b9edeb079337c4892a52dbdc19401b872d5c79ea659350f71be65f2d25cca7b219ed55f071dcdacc76ebd295e71e886196cb85ea569c47eca13c55d7c39d9a448150f25df5891688ea6064bd1878e242e06a4b682de01ff039f9e1ee7d1d419ad2a0d01a31cab8b2faac1ac861d340a28cecfd1bfcd8d4ab025ba46869dea924eab0e87ccb36a2bc13b00d0d2867ac7436b561418b6508d18c8038afa33ed35e463949c160088ddde91a6715c72b905b85a59bd0320d23b43592d410333f215e7223985ffd6b80e14ab1e91c71907f3eb9bc96f30b5310b337ce669e7a52e619d24ec2d7e2564a1e061e48387195296a4b97cca3bce0682d20e2ca8ffae72e7096d7b46197440070d940b710122ab85e396040dbec70a20048f004acf52876d080cd283c19e30e4facaa4593c84b42b88ece97a76384dfa505d2320a54c9efefd2bf586477edec14e4be1a67d4f170d7e093edd5a46afbba9d404bc769fdf55a9df6858ee9348a102f391c1fb1fcdda417ec08f3118421dbcd59f792cec37ed93e18e2b97e8c0ec1e468bf24df387ccafe8ef10fe8c61cf2769b49280c0b1822fd650f841403bd66c7f22a06804c0056e4a1710af95df386822eae403447ed9db439ca928ce1b5babc35f4a532f0212fbd37e940eca62f6d184f1d0f07eebe0c97ff569916ed10fa0ca11fc0a01307dfba1650d4423efb34a10928519373a83220f6cff61ee3082a6b64ca71a57c5bc6fdd8885de162dd5ec911f308939ab2f224d7a70a0eec40b3dd20d41a9342c5491475fc5da48d18a089f3b8c259a75544899d1b1929e0142f40584e17d7661bfd229a0ef45ea3f4a5c46bcc773044cb2cde192745d02a8073fed3c68472a03aa19d2ac3dcb77172a1237d2afb7f45e975cab43c3cad47c9df1fd2bb75466f0ea42e86e6c9578ac9fc9a911ee5f8a85a79412cb1631a7cd987256df0ae09490b5046cb930ad59593b1b1e6a9f0052fae59691c699d5975b14c63e6d2d4a222fe31d53fdf4a42c4c20343db547bd5fcd15fac46c401c02c47caef67aea5de58e02181a293f3362a4f06f737f8aae98ba6eff790b00899a66b06fbc52b849f54681fb15502634057c848817c8246b2fc00884b21657b9e3801b4a37774f59a8ca31fdac2e95cccea66b3a01cadae75a28980e1d23f69c0c00c74659305cc4c54bbef1f87c9688a029bbe0481c023e4718130313512e14887cef7a802f9204e96364b1468e981a0d5def9053d1a4e5439bef86c7d008e55e26b71f4407c49ec374e7390352e227aaf55b6c57c7221bac4e6bc641b27e2baa5567fb7b459aa788212cff697549ccafb9f0d4f2ab7239ab56e01080b8bf947d7973dc5ac5d601788c28d6b995962690621987097aa36a97400a64b900adbd9513ee9e15fc89eebfafdf54d189b40b21c3981ec3697be613bf8ef3f3d253b0befe0d8e357e5b981f40dfe79afd72312174acaf9f056c9f832d959d31b345afb5ef2f476816f5ee476659911354df30b99b19c2d98e2ce60eaaa60b21f0639d2958e067b03153e8bc6a7da83aa9d65da36df7f1b80aa31a346483b96fd7dd300fe00d7a5ab20608ccc1a4f17e180ac9a81b760079f22aa30690e6fd047a4fc543810cbc532796703c3091e05c46e572b3192f521b7dd5ffa065cab37d9e71e090e405131ca2f53179b088de180441edc4e23c92547142e58d24a8fbff9424d18de4ec50ca1ef2b57cf9f48489f4b7b94185583d49e6e7dbe3400f9739b7eb0c36a4f23a0868d2ee482f0fe9a5faa4f8e2ea6189f090dc15d7d3076ed7a144564464e17dcd07b6ac6b545929f90cca41c894fe160b633f4b52a729ef88ede4c6df464275f3b23daa3e5017075dea20ecb3391845b376310508f61b1ad92b03890f0497862d2810681de6783aafca608e4a8c0a09cb05429cc13e25a6a9e505ac221a0ff277c253c725de9b4d49c5097758d6abfdde6b7064ee8871c3901f927bc4f0d9b9a40d509e34aae2e5516354463ad03416d6712c5ff19ead29cc72388ab244d02558b65097fd9887ccd414b53c7711d9fe249a69c7de87a2190a106227b49dd600512c6e629e690d02d106fff4f68c58c8c2dc5e4be9184a522e88239d89a1cef41667f312ea0c9a38a4a4746c9412c424bf6867625f745fc363150133bbb3c65c812972a10a3078f9a30659081ca086523e076aef9d7bf83a2c534240fd812d69fbd6f0f07f447263b24455aecc634cb056640cedfbceaaf459a583a0e0d40cb28dd13911357b0067e4a177f44d8b8ab822470890429215462e74c498e978e3ceabc9245acff5ab9c8d29495a68394342c23ca30b7dbf95eaceb3ac119dfb70e466a2bad603f4cbc17b470fcf37650a083b5d10f627548ada4ef99bda01c1492183ae14da75f5638285926728d97c38f267a29f6756ebccf57046c39ba11ecd004166b484198ab90cd85b466195a10365c0d76494920c3d4406ac21a3b7c750dd31c0a9319a3086fa2f06c814a34562281662c07418051886ae0b037e84517e30f4483060098cde03866a7f010ebf68aa2fd4c51720d88bb6f5427179013b5e14e82e74b10bf8af8b7274e1b8b8f59ed95fe6762e832c973ec40581c165a6b7f48f5b10bb2d73634b1fd6828ed5324a5aba035a507896f198a58b97057571190c5cfaf82d08e29619dad29fd88298b5ccbd5afa961674988496b2ab42e1375c57e5bf0e5ea5ab7ecd899128ae9a06e6167c96497433e3dad8d0b256e85d86838212913d5bcf37a8052e9d71f22f690ddb9aece3c816a172de47c7faf1a850d37acec0e9916e19cf24ad33951c903cef82563a3db9f72942dee0e0263a91a142c2c2713f2f70fde755de341a64bac907a4f6861f43dc014230bb04b3da34a922063fc81aab6c3ad6265531c916292a81c44590cbabb36e2c926c29cba39c482cbba352e3ba3ac51625e3b8d6d78ecf89f14f29c1c8cdc5d62c4055c75bdfa8d2d6a615e02a382640ce9e3c88c8a72615a95004988ff16090e4ce4d5ecf402ef86a1976f3c8977ee46f1b5da60f6cb8fe9249fe59416b08007bf737d4d92f439c225144cfe4973ee5790b5250836bbbf8508cfe8f005775207b76af049987a3781d69b4cfe2852ef4c10a7c5a5671eeb5182827858c3fbe88edf5f12e3fb0e06f7b7d79cb3f6cf8d95e1f5ee40f3b7e6dd79f37f9c18e1f5beae75d7e61e3dfb6fa78971f58f0b7bdbebce51f36fc6caf0f2ff2871dbfb6ebcf9bfc60c78f4a65f9cad2e840addcddabe1b866b2ac4ba50b024b837879e0f4430f6acc31b9ce69a1d45772d7a9eb531592daa151d415c202d643d0a63a4c824de038c62339212f49d5ee19b3e42e2eac33545d6a5469c19c0bafb4cc58534ad0ca66ed27bb77d9d72cb8b98542fca97a641c8065a2086d175ddffc134d2b03e3b0dd329f8ee1d383f4a0108d9b4dc1d4f15b4df9cd732ad0fb65313067dc328ee82c8af1c0aa32ac4d231a9384cbb92c5a7888bcc3031f7311a0db5007339a29c43640ae3d9902386f06bac8e4924ba38c688cfaa02101410b2d8e2f57a507f7f5e6114f4845326bd742f92b0aa6f42804f44a1e44a163c5173b29ae9b57f7d6e3649dfe8c40d1d689bfe1512cd2c26b21a01b066d7d28adbd40111a05d658f06844fda1ac1ec54d37b11d6964cc67e9e1a05192b568f48f169a86c0dce43d34f92d212e0cb63916e5be33b1689af619509b939613c1827f18017a71921e9025fc947ae363726c9c268110e2df433daae20832dbfe9736ac7688ba6caef0d9c8542a453e7e0b7ca3c65a4cf9dab0f73904ec9b7799dceb2aa64335d72ee803b92a394569d96af3a8a284931223e25cd3e444e837759f8cf2ebe175855e781862a0ad7d59bd928a9029eefe293cd3d310bb671730d383b3269e21321282725e2632ba98d807279c62f457dcfc57ff6f6dda94fef8e69db77f17884a746dc758daaace3225f167072388c77b97eebeead129762fe51abd9924043bb2f70aed215c3621be04ff8fd45a79786918b95a0334398c30e6d33a643e2859121d2f31a6d05e4be585988629aa2a11a609c4a8ae598fb010179ccb308628b9fc93cb3383a7998a598ff0962fbbae0bffcb4e863b26805f32bfcc09fb4b1dbdd4eeb7f109d097258c974d5ecac52722a97c7981e5abbd504b5ca3805fffdd8eeab3bfc02abc228db37df796459f9472e18b93725b3b6e7e631146d9a6c906aedf46abe9980b74768e8f03c3baf39138221aef3c3d6c65572bd026b0a441035df823d47996f92a3415dffef7ad796764dfbc641e397346beb10b33afe534cd2a589beb10c0600b20d532f8cbef877eef14b191d1561d0058f5a02cbf6d07cca824677c7c039a1fa89439ecf829f7f88406a774129280599a28b4efb55da08305d727cfcca81d4bb7bb0b4c15ce78f59217054871cabc9b613297621a77f0621823dab6b38b69ab8cf6cb4947fd201058dd51cc98fd1fa7f5105cc813ed1b1d549595fd1181c8150ba7ca4a9514aaf35d954bfdc42170947d7a3353089919dcc48f6843bddb9b342a25e56200b4fcdf725d0d747fb2943b1750fe080be8ea9f1216d87e5c4ee7185ff3dbeb56d0645114b135c056e0756e94f5c100a0d215f86ef2de8f6b53144b19d78def65326034c4c37f827ecb41121538380c2729fc99a29df1a79cd0dcffae3ad569bceefbfc0a8b0534e537c14afdfc5d3b08a40b768f813fa97fdefa7cc714d121837dbb3720494b301b59e4e88342e2804588879bd7984c9ce3fd1388cf03f7d2c850826d296b996fbc47ec4bf9f4e1b127bca701ec079dd756f1ea515f96bc5ee65be069720bd0a4b53b52053bc5d5c5f64ff59ead4e71e30407a51823cd029820b6cbd3b63fbd6d6af240fab215a3741a4199be4fa6fd534bae75fa954e70feff36523a44d6e2338715e622354a881af49a1807a4e4c5223aa0b795d31c7cc4c1502e90728ae3a297775edc4a7262d9009d003e223ecced689771abffb807382a1ecdaf27341af426caa37899f8e00ea943da44222beb864fdcc7fa9cb19442cb607a084a1b85049d62ad4096be76b9539b073420c8ef677f42f33b238dbec63021ef22338c3a3b1b5bc93726078d54dab6e24216ee6b02adae2198551f4f9e69f112fc771d003438675a80338aa178240f1ccd806da29c0e9d9a86b4e4803e1dfe032064a3fe1e7a5704b5ba708dc14777da43763e5d6e3dce8f8c6b7b943e9981e20f1abc73be9f5f6c80498d2f51d90687840690e65b492bed09b5c88e40d44cffd22bd03a3de6cbb0dcfacc8f141550a0d2752cb5df9f1d7df126142dbda868a7b8f899c0e7c4dcad9c3e48ec32b186879ba60d61f8395bc8ffb54e6a7981225d37f1a479c1d37b052914a37703eb20babd40ee72494f5aaf4faefb253bf3e16c0f99f85b9a5fa5fe7396a23d71ba3901dd4c31797893ad9329cf962b87af8205558d7a78be2b6d5a8e6cf45ab30bd1d4298b52ca3419a99b4afba5cd7843ff1ef2ae1ef87833f6663ad81a25fe97a73990e21a05ff2f05defe2adba8489eadfa027f38fa5d2e548977fcff16592dd220b1b43d0c3f805f70a32052ab2700d332ee961ebf30b811c8f6bf22c898a4ff873d5d55fdfbb7457ccddd3b33ced77f23ca5705506e62cebcfeab65bd1b42ae55cb195842630f57cd20b623a159fbcf648de37f3ae4073608a4fb13f4e6132334eecea9ae33159a231ea0f1fe7939b6678eae3ff03580a0a46732db7ff1f8be43d57fc54a607b03d645023f82365f2b336e2976ce7b246ae1b234b7ddf1d80501575e7dbba193e27d5b6f3b7b3b9891061dea2e7e6c6367e37ddfd0961eefb4944d5452b0aa6ddad5e80dab0112ae5c4fa0f5876e25ad200c7220ce39f2ab23461e24f237f81214ec1f9340b7a0b700a0938866d9312e20d375c54800584d61ff70c8fa94356e915dfb1d6117596f6bbaa59f8455970ba18c0c12ed02da97f69677854d1de1d0d174a88946763aac65a85b5ce47fd0e9155bf07f10f5db50d87172ec24c1373cc0de4c0dc2401a84d8bd8714637f229a24215f233f099efe25e22f009e6e9f323ca7a0a3c4884c843644c6e73a86fd3a556a30086d22620acb58df8ebc62859c61e2d2ab2bc3393c50e783b38024cef0b864af9b84b092ba0c9231afcff42979d842070acb4d85285f4c95265353aa4c25e5ba9898bcb83a88d3bfc5d01ca5b4814719a0460e6d26811a68915e3d727e17563786ff8303ad7b57af9cedab2a93a5c79d731e69c587e4fa7c69a3a0116ddfc1af31af81a37af99e9bfa8bc69b40a5e84d2356c15db03065c6e3b97365e966b340d4b8ec758066a0c8183c8375ae7c860d58ce7143cc9e5b44ec3701bc28fb02c19ea1325030a76bd417333b81ecdd3f0a4fba40b66c9363c1548b8a3e9a55ba044311041e4293ba13b12447c2165e95bd8c84665549f4a9231abaf5f9e777e6534194821af62350d0d327f91e1317f901bd3fde2bde813466a38464f57688f457cfa9bcb81e0ab9bfc432020f66291d98dffc4d10e1654b3cd409265b37842260b16b06522403d8740152010cf5204c6798a8cb26f077ac4a71b4f8ba80f87f537ff471b814a327217684b70d6b51e7eafbe5131fac08c68f66d91824b8c7daf7410cb5222fdd3cf378ee53d11c11a81c5bd301aaa643789ab589b7ccfb971e3704a94930f0c6310f7ef97daad39a66deabcfac45fef298c5097251a8ee19350b103f06a085451e1ce2e7c18bc158ea894083a8a04dc6020755359a723d7c8fe665b959df6b2c6580a2dbc7a15f155a6892059ed00b3fb6de5be04020b7d343a2f530c24b3239d80fc1d3b2ada2df748455b038c3c16f9038bc17d918b3ff2b92b38cb28ed1374afaeb5687b8c796816c5dcf78c1d30b442f5c0eb30216884bbeb1825cf4cc5eb2e3989e496c771d0245f8ad53a0938fc05796d4422c72e31ad9f8341c84f2827c2b276c9ea3140a269b2e366a46876dde17725fd0da8eef07e28845be1b84182f3e559ca488ff11af8547e4825fb20c2b83f76a2abf911fcd3f5a1792f8765b41bcf0d26872a37495ba67e5c4614edc639580ccee5112fa5cfb8d2a8b07253f226cd5613fb56a8be4a7e50e6788c65e275cf463833fc0118d0ceadb0e6fa446ec08da5f0a4d4418d738e24256034ab0757cd8342200478cd72482adac14e409bdc51b9a2bf10b89e06e1e354de1c3898def7537e344cadc1ec688ff3f1808dbcd22678050b8ef737483e0256f7cd03cbf59551219116764de615e5bde35bc697785d0b6d1f09b4a96df2c9ff9017f513f594397e0ee767088eef0950c85b0b7413326e1cf3158fe49b38c801455466d7c509de34039c06ae2ddc3a62daee3bb105e98818965dcff786018fa534175c98b2e951bd2c5ca52b4caf6d791dee420d2941b0f09faf0c3b3bb8faa0051e4d25539a747ad4cc0d786a720728160fdaf0abb4264924a87ffa50279257b51a0d7e286eab0e4a9b4488241c2e85c3dc6017830f7e71b0fe89abd82cd90d5d5b594bf7ca083ddf0bec08e0fd4533a62850f8143948a61583dc359ba114ca22c202911e94cb531b7b128c8e08177a78a0f0022cf8568a93cd526bc18eae5092b51916e0d177b16c656c4c52f442257b6ac357f556ae1659b67d30056fb02ac912fc4e172a9a834188357752bf305d1c5eca259622eaeea5de86e3e1bba5dffda22fb6604c678f5e93d59fd5735650fa04bf191e28e3c76d55a3d199fde08a7bdf14fef39e98845ed2ecfdfe1abc6d7000c3745edd9a4b7f2bc5bef17ab34cc3de0bff3fa472e4d4ece76565449049c7132e4e813d64ea0aa416fd81aea50bda01221cf8001825f0096f603cef8867191d7f17d21c86b0e7a474fe476a22c92addbc8a41fa6f99b5be923e13d7912dcd1e345fe1f980fe836a5e7ba1ab05b81a4cd8015eca19b8b5abe238b0e1b8cd3c5241f488104dadaa2a0b45524a8a9f24201330666c68fc6695d47b50bb945e03d3f6f489cbddb92910d5ef3c244a74c3329fa77a094828e0e3df7ee4739d445e198efff98064b7fa8a7f30e58f988b24b95c15e6b6e55b510ef45024e889bf3bd0c9ae748411e54411e03e3a884d45803822734e42247163510a221bfb3350a33922309278aa13866ba985a9e64c991190309636b14caa95938d74df2fbaa284ce151870fe8b1c908eb6744712f430d9852c882f1ef68109115c9219ce2511c04eb06290dd74786b12b669fb41809cae5c06a04ae4e1f6e242b15599d545207587d7e4651200e5ab0f61ec4f560aaf27c4ac5903e2af8d177bcd61e2698df71d9a64f2c1b3fd27c5245d9aec5fec3ad944955a57cdedd52681a7e7c8336345ba0b65d605d3540cb5717b663b7514c8929fb5b75ec23c87a0beeebfcedc2f5a4b46be3066b9be8fb594fcf6ac84af711c13686539d111f035603ea74536a16c208c64ee3d91ccc6b35c2550027609198092ce919f00b901aed8446625434fa9a82304af5f2c1e36dd1a6fd7b2b6c2dac88cec8153312673a8f63e0a180a46de7326492298a02e379e4dffe2bc2d0300a30926552286b2700f7e503f2606551843960cfec9b20e1e7cdcbcfad95edbc41ffb66d4ece8fc39b0b0f2737572e673ee73d54f92479ef89a06ba232303dc676c9b48c17f17bdbd7bb27cc808ef79aa87f79a0222d03b461aa677c24ae97d7a9dc99bbf2e0d5457e79972c0d81309689aec23044ccc30cfc2e6158b4e98d87ce24c3365c4b0d715b14463695881724826780b7ae4cf6a12ca7d4550d161a02f3a629a45476590c3183b93909a51d2a3849e0953acf3f07e2bcc0fb614e4fc74c741fecd550145c912135a9d128f176c3a5fc3bcc52bc2c78d2c7c1ec2ad74a07834fe202e9198c1b0f2cc731eea9494279e9a61c911bc802247cf6aad07cf20584bde3981fc6f93fd37763fe1be4917c7cc4fb7267a6af2d2f691a9be82a7b6a596086fde2230f16efa810ffcbd20fee3f3240cb5326f8c6ed170d473ef37b54ed2e819966c3a7bfddcf9aa569dc609eb2ce76f00111c2124c1f9c99b64af88641572121c9ff9bb7e162fc20f13d65682d82ef5e7c65faf53a0647822abc7a7276f5c4aecea927c3776f748e0c987b10a02c4b8c21b605f40c29d0ef1a04fa136783f4ebb82da40710bc9e58e6c2babbd796b3cc1c1bc601697363f1bd30bb49333d989f265bdc707a9a79c5e366ea0180d6dce204b0476e72c43b3e5cec00cb422115c1e9bbfac39dca7c340b3394e856977c046dde3fe5b3826c34ccf0b8ed632f551eebf19699f5543aeb8d5b6ee9f7bfc597ad1fe50387bc8de42e84153b49debd7cd73be9d5015e266fb1bcd41c1e379b641be365e750133ab1aed1eec632bb074c4ea6df59646f4ebad46b48234fa504b2fa5d40e445c8104be7f422e48b1c3980c52a43e85631570086a02c1ae3361d5acd6034ccf8f9610c1f3c0d17f501ef7f3bf0adfd5cc17df877c8a635dd38714f580d38ffca063b662c52cca7f1d39a9665a662fb99d58fe68d076a2fc90d651e81494fb11d1a3a51476cf3353fe86e55031078f705f69fc20519cdb5a3dc2d28e9a9ffc9ec7d17243d994a1835bbcd60643218444e917cd89a0edbe477f0a84770c3983a86d0fbd5a22a5622e0df71d32411380955636f09d29d12c03e31467460f542699a43168518bbc23c51e70537c582db0da2d8d67305e82a60a3008d5ea5fc8058dbd64f5987e3ba802a22ffef9ce6eb62bad6f0be2bf39d07f993c73335b296f170289edbf816075c93769cb4ef18f145aba4fccb210fd14996c2ceace34d106139e75678d02b911282bb47187eaaf8e18957b50020c747257cd49464484395e6ccc8a91bc022b55c2bc40d5806047321e1c386063b1ccbf21d0b69f121bd346cbd4dc6b9d77245870f4962a32c1c4456cff38eab62f9fccad28ed6818b85430ab84cd40f2e2d537ad70f595e94a596c5266fa08217c5a413a2f616fb2c5bda4b88e6aece88917d9f7f5bf531dd970b648dd4b318540950cdaeeb3632e29e29a2943294be9587fe6337102705c0638ecd0322ed5580703d65b9e482ac492d8166789d0d3a8ca756438d21e19c54614ee598d22be372af20e2112a9ebbba68b86b7a6801c18461b3d718d26c4e2914077ff5be9d8a0fc40adb9952f12996a4e21415df7fb69355a4e76831d2e0760aa1bfa479259123b319d0c68374484adaea8520a1dacd92c8c8f099a97224eb2c7d4f7ae8bd579e2cfa0441b00ea513f0fe73cae51f78082843094790a84f5198145f1355c2d4a7b07e25187dd1d580cd6420fc403599a31ee9b5eb962817dc4b88e2eb1ea55ec651dd4436d2dc691522b87527f1a2a1d3d1993efeb9c2684a0164511d67e03e016a5334a52842b38a5451c942ff7336c0284958d400a0657f870dd71ec34a3a3b1c00a7a5ce58c818b80a72a5a02d9db0631e465dc1e36bfc4822dbbbb1416141a25754908fa1ce61d36793fa65462250c37ea16d194e73d377fc62c6479b579a1a0fdee88c86116137e0386745577cf0b9af1966fded3622ae9b634833075015ebdf319527b9b93250ac7168cd08ff090730cea8ed10dded17031a5b97efd7443ff07faa17803d5e943b1e9352501608117bd963eb9601ef421b7e02315b67a78b3a6a86477838d98aed5c990eb7dfae725a28a870aebcd491e437e0a9985ac5269018fb3505959264c364c6b8b762fd59e339809342be012dfe25042d7cd32a974d43bf0cb2fdb66e0434409f8bc29b11bdf98b9fd4703b9e545d2b0fcd101265545305386c9708a640f18f6fef671661548fb1f68a3e925ada5de42755f68fa97c127f8b8f70796a15817095454e284292b373caa69bb1535425f08bff87dbb87850891378ecb1b89be41944273105b09629a2452a84a712f8db164216bedd759eaf6a156353d6d3f7cf7a90bf58c301d1cf015d6b4d67fc7d0acb937ee2be9561a735ace34e7cb97d93fe7abd9cdf6e26e10f663cc4de18ec79e267629bfb8572131d25ab0380ab6a00080bcc5eacc6b13c7654c4fc469e3922d6037de71603c10dd5df36289de7e5c6ddbfcccda9b28bef2a984904c1861b38e9c255e363a7a1841f3358740c0bad5863a423d0c0854e4d86aa7c7944de3e7f8fce0cdba6165f17b478f5dc2648d16057b50008867cde55315530fa673c17e8f025a0b9e6e76235a8e554d736b6596f8f85b7e69bae389f5ff72e42ddaf6b870c0dab5a12c67ecc2502a8f7a5d5335679a36b1fa07c504251caf24dfef88aa26c777d35387f3e3fe3c35243f60a667b4e02f1e9c44ae71ee80920656cff9511a1c4d68184af67d93c60187ce4c250d2cbf2ed26d325c8753947528284d29a019efff874857e2948c7ff07463717604b7cc48a74c90d3fee7c0ea80d68e07b75d74d43fc0f5b6b6d896597d85f0ee2ebb04a1f372dc0eefe9d39a9a431bf880407462bd8032ab75102e1cb1c4a9ba3aef98ff2381b2a298548c733cec729ab902f7c2a6b895475f4759fba53198c09998a2bcf5a7c3b2a6c7ec5c22fb02f31d204c5a6240048e463bedcab050430da41ad9932f5d5ef25344a909b3713c4e0da46b132de71fc544371758403f15aafbe32de317145e1574becc2466faebe11a8b21d281d64fe90fb308ce6a0bc46594e4e2088a31c8357c16b87a4c6a34f60d61315e5c4d3a3baa329384616b3c7b4bf0e2e4341d61b06d282b9e32de6e6bbd79da23f06e5af0e6469406384e4f2319f7f840a1582b8a1ec81841c9ec20e29c28f43711094c5a6225d49519baa297f29da720e4d830a9187d4e03405766294da8f8ff71cda8099c32500ec857fe46ff9b748e938b75d1f34832825ebe5dde5359fc34d43e70feb4823eca7d9e1b8e970b35d8a93174652092799789ced5b116bf95a03e14a0f6556d49f4d06cef70f1cbdd2b9aa18deae35169a4ceb542fe34824a4579cbfb577eab169849355a487a5fe8f69121346c42a4451409320af2eb95c9f4697a51288f844b3f7fbf061fb250be4752a907086ed67043c19ad5251df42ff6711205f217958e54431a440f1f6b6bdfbb6a8a9742b745511ccac1b1653d203b15bdf798366d67ef1209e342599f0ffb999c07960692c2fd33344d18215a70b8b136cd1641d2d8e9b3fcc7f1c75b3003dde7fcd3bcc31761a8e5bcd27cb4c50810e5b998ea3410bb5be5ceecd27d847774501006d66bed4ba62b70f178ccc6906c75621b2eb133a288b96e51967a49db85a09cd6ec210e343553b91f015760550ddf99aa9c127dcaffdb8d9bc175b9110ac828cb3f3f51cbfd84b22fb4a2f6992f8da0d68be90b72a9fe58bbfc3ebd3695566e3ba584ef0e0f89a721b56bdc0d2cc5de196ae55dadc262eafe2bfe235b477ac682997ba0af718275fcc829c77537a031fd2386c447a92f6f418bdd662b8162ab812bfc44bbaee9636643b13c888e54ef1455737b59c0ee9464f4a4f0731b2c5c982072438295b07668b3f23c093e21e3519ca6225d006a14d85750491d73af890253065ce755a973fa25f76f14abe40e7e700a4c95b953ef0d923b10e6081ff2be886654cda3686032ca9dee7a6afcecf5efc8a3a716eacb7a4715013cd055719d0ad915f4a7acdf4ab60942712bafbe68f3e9266a1421d579fe071b1811fd0625d3341dfbd2eb99668301b1b85dde2ee42d719f5251cf26f52838f73ffa0900e5710cbd973cb9469d4bdfb4ded9d84bbd0788c27dc9ae0b8dae0512ab1af2aeae34b84477a74b1d52e0ceafa73dad36f0e546270541d08c52181137bf93060ed0487dfcc050c78890c3e217af668fb65b1c81a986b3611e1c7b3a61079bb8acf01eed068d8363fc0ba2ab66ecc4fa7009932a74ce220528a2ce1bd9921aa3ed95c9018afe1c7cf5bc03421182c98a1e8909b80b43223197b897c8def4b59b0600ab9fd067412882c6ac7d53615b9074dbe539097afa10d16c6a3eb9b3c73de4f60456658262e662dd3a6c916df26666c9b89ef821072c6a7bfc51b76cb09b2fa7619a16a48168a1f94c38cc30c76754b8e46d788b06ca1742e9eb818a904a8167f6490ecbb0245a5f1b291d6b00afccfabfaf2750791a04f71872457f7b7685ddb66a5fe6a3be634db41243a76aaabac583796ba9163b3989b814e805a1044d5211e2a751371a3d4180197c99a36573e8f7716bf975b3d445ff8f841c1917b8ecb58cbeca31f6b89c4fa63135b2dd6e77e934ac8901f9f69a32ebaa7af9a710359ef7df0926964af152a98a228d618245a2e89d3d1a8b56d6994a48b95a264b8432fd9c69b013a7767f28742d251af5eca77508da7c3171271d6e1054fde0986e6bfd133b47ab4bab40e5845f94dc1992026105b3cf5b6187b5b4dcb72634fe99c142571fc483d1a7c3e9ed28cfc49f25484ab63e90334c029bf45857e58f474b916d8fe4c922bad2806ea5b4b1cb6cc867d6a6dca268013fbd72234aaaca6c77129b29cefb8e9f290679910df47e00b2fb56be67b42fb1574e1a4d5f542638e4d72ec94f826e38c1c55087a3b2e2a9d34fc2977ed9212eb7203c83f3ae219989440634356caf8e3e473f7f58bcb3f23cc49db09dc9e5ed279c0ff68678fa23b20b4463304af875dc079dff2e708c7949363bb152db7cb4f7494529fcdffcdc225bad4f27134dec30b2c388a6285a99b879fcc6d1945da93851a3a4cd0ecb72a080115af4a237a59c3f20f494f640f2d4f667f7226e78a4955286d6efdbf34cf4671a8d8167d9a2fe73e03e6af33085615e4b1c5e6defb2cf57fa2fbbca1399d48657c3f86d4dc50e81e591ec77c2c2855d165f001918a16e719a8bcbdabb4f3c962e62079a7636e8314b629e8e2259e9708ffbac5a39f217dc626c413ba9a3c6b439bf5dfb4c0accb56000d578026eb55c52fa1fa62c84d821b6ffc3ea72c7aec97968a3842d2603a975a349538efe4fba44640462e3c625f3c2fc1333416b3bc5cee60d357dc55783785f7fe23759c2f0876fbdf8b2d5f0e1302cf8705a0b01fa8a8d3f33006002d15f8ddf5684f4247f0a90acbc6a033db066e1acd34e7dc8c22f68a584af3204941bfe39eab07edb09c26a46ce816a6fa13a0bf4a62b4e0397d7b3bc4dc9db65473abf8fd3872a39d40790f798e7a093175955c366b21b988f94aff86b7be87e68dc9e0e110fdc018c206c59698f811d52fb4e8b256f6408e7273d8b0708a63ddbe053a93ee5e224b7464a4e25eaa53b2ea60974cb9766c103ee42b7dc91cc8dd47f263b868c89f62235d826bd5b8e994e84ebd6b68fda7bdf052094d1c3ae7649b5dd1858b0874ebd4a34eb3ce2a51f03114b9dd5962166afc6d790ed4d5f37d0e9c1bc0a3c21ae7fb7b348f5e6c3770f76ec0fc11390a4ae0328ae13dd29161fcf902182dfd8fb71c17b04fc557a47179fcbcb038c8b9639bf7d49622c1675a05831baf45e51ec15360a3c052f3aee55a732ca6ffe4631cc2502a3c60694025981b87e926632c552928edb106467597e06f1fc75316e070da926086c6d57a8d97ae1a75f7b8202a6474dd6124cde06417547533703d9266e5a1dc0ada2947e48a8bb820e502640ed81f81a7a9148139c3619faf363602f5e7bf4a02636317e1672a4f1919c5ada4141748ece952bbd84c4b6ec39426cb3e0e4087f34340fa3847b204a26d0b3e09eae3101536825328ab69ffbfe4a41234d9b8b1ae5063b709694610b077d73cc5868878bd390abd80cd812ccb6af61255c71bcce3e0c810c96f4ad3ee71c8bf71d530058affd79bc7bb6b3a2fc40d99f850cc36e14e2efe8d800f5c1352c64d8046bb849661592a6027ee17066dd4fd970b374637e375c882c1b80a2cf79f1373a0e79d7e53eda9712673e124d560bf152f8f9f1663c3138e578e8af16b9ab6bf5baf540a0042c801adeea4db1098d66f87e7d32c0a2c88ba4b18f54918186174d419f6dab966044eb69181a0a753d694ccaf3198f73ee85338f6b4c438c18c2732b2217da136592d700718b758d255b16ea57ec9a3f24837de3488165af2c2cfa55d13bc07e60ae6b472a5fe4c2a6d01a32b2bc528dc6b6e78039c6e0df26cc54e639479f4c05fa2be158f2644cb09e16f8ae809525a3fffd9c87526496942a693102deabfdc9c42cb61161e8d6ad60e2d57168fa933198d5c5c7118b98fce138edb2cab8882affcc099906a681176f9d5c5e1e45f6b7478d01170c8bbca6384440e7b84c046ae5690a8ee32ffb6cfa98f7a1821556fa7dc5ca2baeae159a77a4ac59694b1c033c8184a06949cd34e4cde64721c6155bbba6aa773a30145caaf8b507dd174a223b4f44200d698e5d9216ece9cb3baccddc1c47567d010ec364efcf44dd9009753ca64af768dd9bd3b5d7b1e2655c1345dcbdeff3cad8b10be165e03c095c96b7cf228e77a38681af71151a0147e86e9433474aa5d0cfc07a0b6f6f7039c89e20484ecb14d870933a7e80b7683021cd5fabb6fa5680478898fd66e993522934c9f75ddf744edd125a14f78968777c566c56e3cae11cec4de9c6d16f1e6378d46e28efc4df1a25cdf4da84a247fea8b48604d2720f34be63a5ba11d4614786fa841d86cc5f9611b787ce718131e7029cf53063f0f74407bca5c873786c3a51a43bceb037d621fa676d34319a3f44e172a1a5b5aee462a3c85502966e439b3d9d0681e42e04643a9f7b1689b87795ce1977c346a08edcc3d69223603262e61f342f61a06d8d9512b205be8c386cc74b4441b248ca9ecaf65a246a97dab700834adc7b644aeec261bf787e4de40a7648c9fa68f021348174a09507b749978ee9e3ee3611855ed21f759b60b1bb64b3074e8bfc76cbf0f311c3bf88b41856929d73af1cf6182cdbec727502847be61992c83ec6ce65fec8f5ac95e8086179acecbf614b966a0128708784e00c419b3cb44d0730acbe94ac22af431f4547289af4c783c27fa118cacde69daa2dc189ffdc655fa5ad81591c614fd927a167695db8b9c34d87ea865f37d811c366f7fb4926e1decfd95fb22d01db0bd87a99ef53047e652f39f6eb0d199ed8a7576666b64bae90bca3de38d656d9874304fd3962fcdd5a446008f0e474046d0870458d221340238f3a6bae81bdf714614bd880896a43da144b9688fba25e7cc0285b07d4330a4658a2241fd83ac802377ddc6b8925a89293a3845753854a3aab8a67997757df7808b7ff4c901212b5a96122982deb9fc9295cab7cb4592c32ab53c759f7fa4724709192424290bb61facec4659599cd9370be5b020e327ac369908236fab046b5facf52a384e4d450a068bbbec1462c19a9fae393d78283a4fa8c75ad4c895593e64759beec46e9adb405b5dafeff0c8253beaf17e81faa0c894fbab9958052b9d831faef3637f88d0ed10828390edb6b00137d55b54dff3203c9091092b39f8b17c97b52538b12ae437f2c1a8615c28c2791087c96d996dec45df057a5ce291239294700764ead0572f055cb8852a1c9e470a58f79fa204e6d5bdd6a99d71042a0b989b8bc763bf6dd2d1fe1a58be456462af1ea56bc96dec5bb710c28e342c71c87f1fa965ef2b1e34d2545afb090f98e1f2f7c937465af8ff589fd9d95218b1d2c27024c216d5533110cd3c9c58da93aee21a137128a8883a8a974d6e928e7396279f051b542b3e09912bd5174812f2054344faee05eebf02986eefc6141e35b09000da6795749de0ebac1e82dd7550c2ae5f3e9d5d2e68acaaff7d6aa7ce550ad48bc765b7504515d09b2a0ef4151500a99a67ca262d72d8f578da1fcfc7fb6c3f9fecfbe97a9eeccf93f13fdbcfe7fb7eb67e79b2d6721861d86379ad3cd4983498658b55de75c95d5142318bc845db2e2918c2e48d1076bf9fd6ef697f3c1fefb3fd7cb2efa7eb79b23f4fc6ff6c3f9feffbd9fa3ded8fa7f17cdaaf4ffb4c9ff5ede5334f58b923a396ba044da6e31773e099355f01e37b6c1bc9acab5257bba929b2f81614f7957d0c69744dce91e0f1dadb61ea280f7b9790b456f7a9a8f41486d8ef7c64b035be9aa84af768d9805c95fc6a7a268a6da3579a4991de937c7fd56e2ed132ad697fcd6d4bf12bcb20ad954fd8ef5f455b89eec282cece649ec31d401f87bebf920c3b336ed0a204012c777274f8d2c44eb10fd92d10e1da9659733d2238d35b81cb833857965b0fac20d89ee8b7404a46a850bbd1a25360cf6cd17a4d305a98d22e68be22b540ff1a5ecb2f5f407924e22bedbf8af8298c6ae95a2f0332f335115d257b7ab53ca785a57a8288ac76ac8017f80590e66939b4fd4fe42b1d609e5922578589bbd803fca3033ad3aa935b3050424e07bef4f6e8176384a27beb6a2169f0de1ecf3326557a73adb2b63401a04f102fa0acdee7a653b3a8524922c8d4500786e11a968e35963426bdd45cdb5008b607ced70235a655534069a19f547edbbbdb96524a299394012a09aa09c2089b07f940efc0dfb6a5dffc4a9e214a9890a04249688b2948df86660b9292912b4a3cf93658f4c26f5c6ef8397dbb5a6ebcf4ab0495978eb734f10219db2053f56234a935d348e74078ead55565fd8ad5359b74c067a08e336bbe719a709abe1d47c907c78bcf3833f88c937170707032ceec1b27e3fc7ce3641ca16f9cda14b39a6256fe7995e6957acc4fa595996f5ffdacf2ea059f574a7c5ead56aba4555ecdbe5779f5f33d0489921dba20028505294d7c7925f4bd22ba215af337b3e866e96f6e6437603edfe49b2f9f6f6e6e6ef2cdecfb26dffc7cdfe41ba1ef9b2aaa2aaa0e3eab825441aaa0a66f57c9542a7c566595d167954aa5caaad9b72aab7ebe555925f4adaa4d17a4a60b52accfa9e9939a3ea9e9934a6949a552a9542a95a406abc178caf094e12993618c31c6380ba8238b35df3672c9462ed9649ba66fb791d984f96cb3c5679ba2cf36363636d966f66d6363b305ead8b2e61b75843a421d357d3b4a96fa8c32f31975c56754159f5128142aa366dfa88cfaf9466594d037aa1604d411c49af7843c21cf9379467c823ccff392640b50876c61cd376de9bbebbaae336a1e29454ae9ba7c7b27ebd67ceeb8f8dc3592cf5dee66df5dee7ebebbdc097d7767a08e336b9e6be29ab8cc3571587ce63277c4678ee3b8a431825841490a3bf0e0c5ca97b9d937c7654ee89bdb02756c59f3a7a3d3d1e9e8743a9d9494ba7cfb49964f91f6f964e5f3a987cfa77c9a7d9f4e40f9d465061a048dc1420dce10f1e10075340e6bf206b4016d40dbb66d4514b16d2fa83e6f46a4f8bc056d79fbf9de80d45c35f7b6ecb6ecb6ecde6bd43cede402dd88f4f942f1f922f1f95eda143ed05045133f56685fbe3fdf375fa1efeb05eaf0b2e62d9245b248d62a7dbb1d33c676f9761b64b31de3b305e3b3cd76f66db3fdf9b6d90a7d5b23a00e23d67cd75a5daad55aabb5cf35e973adf2b9d65a739d7dd79aabd0778542a1ac791a7f242c36cd7469cc472a549669a62f7ca6479f69a6b36f4a692d1e813ae29135df6992342c7a9e633e7a9eb23c8dbc139fa74face1f30ca3bbcc3053e9dbe19cb386027966cd779a3741c2a29471f92c7d82a4944bdf72ccb7c32c67df923601a8430ddcb206482f1dcd2f7798366a1e103454eaa280351f2840cdb747a61ea636f25a3eb74f5037cd6b01fcc08b307eb0c673bf7688c2e71894261a11829bb09400087a072a61f9e682c4852288f042cd169f774fb3be609b2ff00c22709e39e03c7d3e3a0e199ca7eca3e31a70964b1ffdce20fa3502774f48291fbd7302df10c1f68bd247b75144c75b8af8e8d808e796e13ca39fd6e0dc321ac67c741514cc4202ab5ac079ce2229e3cf47bf4983f32cfae833cd90184a04e0a5d322b80417376f80a7ee37a8e3d0b99426b144eda5845e74f819a326489ed9142f75a86587724f295d9a4d79367d54fad94465384d50e9a3e3808171aee02e089ce77740e08c3fca90bdc72853f2f3d2b925168e5714b1825ce855d3296aa427494b4fae644929684545336956ab51a51f249d1a52b5c262e1cd6aed7271372f3e47472730ddac46b92d8296ba2cbcabc54de296308d4389e96a4df3f37de904afa2c0b0a888a6dec9de93bfde93dec91ecda3f58e8f0ffd91db4f57f6c07b3f2b301c943c0c3052fb28f48bd5c870a26340c3b4f4f5111532f8892ed8ec834a4abeb8c3123e3d7cb37583cbe753c40b946fb664175a6c89a24b2fb1224612cf14546a1f477b86b0087d27cc263fab0a798e80d2f4cd6e069cef2a872b79263d8242a5e8e3a20a30e061f6715d840eb58f9361a4fc7c318b920fd01787983071f471958920264776ca91a02f1e699266f6715b1459661f77ca02c4c4ece3b8a12e9a3e21904b9127ca7c27ac8e3ed80ac8359268b48f4345814494341f6793850922401f87b9bc0004ede3524034f97c9c2a4b0f5e803eee26ca12dac7ad3ada82473850917d1c4e0a48d06026a3081867986674b4d5290c01257db3a553fb38d60a4f9ca17d1c8d8eb6a21119b6247ddc061d6dc1269c98d13e2ea7a3adb92468052a45df6cc51fa0321f57a3a32d0be64a184fd4bed98a518840e2e33888820aa08feba0a32d98e58525823ece86a3a20a57b0007db355638a8fb3393dc1f9a69aa04104e7a90a83860c1a210145d2c779f9a0e3f841430618a9d9250c77440ca37b3ee07cbb3723534a29e79c534a291b49f43886942d5b36a5494a2ba595d239e78c3146c9133749238ab3ae12ac567c29a5ecee3e224ed975c718631b91524a0bd4af3af50d36c030c78d9fc11355547db6a457ef02fda160f3599790139070d05a68e9ece1fd80e4a13e4058bb3b8b8507e04312e4a134176b009fa90f7052263b992284dcf4a64bbe32d9fe2693e4a1341a13130bc61821454dd932303fdf1ef671883ff291665bb09152ca8ba3dfa69dd2e7ee461cb14803a50e5cc76ec11f122303f07c0e72369436e71dc2c2e83bce18d750975456a72e647aa5ae13bec904a5942ea44a068a501772c2f459fca86b4e9f2e8a245bf448c222ad22ba99a587b5324e1e263dac9959e1250dee903598a36180f315923c27336ac030927d91c90454124f2c41937db16b329a74a2cb1343b22f7afc915f5453044dd6422deb194df2a88e6050927dd1db47f2f4d151d35227c5e8f1a899242c3ad3c7e81128064521098b2ec4f4c1961f6a5ff4201f68219a94b2e89016234d02c31df56858edb5165b87406fdf664982ca01defabcb5d6fb156fa553ee34086296b4fc7084c36987c7a1e3018f1e2d4f48708d1b420f87926a8fe3e1505293bf92870684499f02e7d7cb978ee4a99f9462901e0e89297a043c1cb242ccc3e08e76e9dd28c4afca84d32542ac5fe3e8977cf54bba3fac05f17a3944ed659c13ded070fdec0f6b3847875d55e87b42726760a115bafebab653732a59b3b4dd447551dcb0706bc0d157b8aa1ba21251c5e4b2ac449bee44030e161c3dcf0e0b8eb5090e760ac826350542568cb13b768c313505f7aac3917a41ea050e8308dd0c079b83b087742c8183dd50c678021ff26fd411dd47001ec21c71d52f202e3e9cb53a84fe32b6bf94b4d667b844fba61e308774a0a742dddd109502c1889f7e41ead073fcd8dd3184963d7581500543c7a18233aca5a2e0291d0220d85abd9e3657c1e9de7a5d404e22c0dab7b95cc220ab5fd05334e0e9da76608169b1606346960e6e906106a7fb826f8ed8dc1f1c1dba949c0a27950d965584a3cbaa7281b28298b071b274351c5d422f983e1c2a33061465d2d89e7e7debc8a00c53192edf212103da8465c49011138c3843fdd2b32368184d324906235498588a9081d09825b4a8a1628916a423680f918a18d4284de48859840a055326069229b3e215569c505229e90f358d276b52081451008cf0b028161e8ae60a4d2fbd7329a59452d2234c542fab90d2e10d2f7dce7678e9dda5b77b89e5738fd7b5cfb0291a59610890112b88d10209171b501042050a181468f84286098af96e29df44322545b2f8262ac2544606df7ef143a2224efcf690a84811a734eb9cb5ba50a6c6b2aea33244d48e88592f4bcd50992b2a94b1f247708e4214d84b8a89309c482a0b4b060c1d5abf2568e9bdb3ea126458ebd1897e1f7af14c15555026aa30312ad282175a10c12994881109ff88a3c3e8373aab7f287a818b18495ee08212615ac6000145c084e9a106198468224a22f425482b60f8e06b4e38e7f414084604f58b7bc9d9d375a6cecb68a6bbbb4dd0af086137f4d30e38df67bdfadee85c42e842825d470979d40596cfac237cfaa12c602e6889125d10d1c3679d241fee7a6124377d09ddde3fa55d424ef8629481bb48b88c23d65a3b67754de939a9601beb05479f104208a5f74f912e21277ced3aa15b32c1b1a468dd231cb76063c65007515297aeee7b06a703836f92d8dc1b3acc85e38e9c5438589696aa724259434c1c247074183b217074d8dd8d4f3eb0a6686f1fca18f8d86a61da0c220c9d1e20f59c4dde36d971dbe045b5a4c0d06dbf6b4c6d9ba72b0562e15888dd758ede63665f423f842e1c30c7f6b0e766d7adfb1caca82e8ebe848e00eadb630b72b10514f31c961de1fc7ee8ca24d07082a1e76e71b1eb6dce97b0a2f2904e0843e7702a859240fdc2c11b19267d74ae8b598c918b2e191a41ae6384b08849269311c1d10381246c34f38d8f5ed251dc8229a662431ca515391fba8ff9304218f48612d52ebfb138018fe6120c62781154abc05696049eb3990457dafc42cdcc195581a69954d0276e386249355ea01409b144171f204c03aa30e02dc80abe350906df22b905b64743cca30e06274716005dd03eebc83820f1880b6e029f7e7e301724b5602af80a5c9f602b2302cf997c02571a0df802d520f016c405df5a16452b64718402369305d391122d6447e07904244817449f7592aa0edee3b5cbea294afa7b6fd25f6731fdeda49f3f65c8620af083d90475449f683e428f33c903b7d01094e5cc1059f830c507656aa474e1244a12972ffe30e0c7ca0e5798d0cac8005b377819e2c705a42bbef872ac3ddc810b2557a891a10a2839c02c31a069c1880b6058b9e1cb110988cf31e9a1fc0132813e7c8ed02164411d0802fc00f46804ee980f4bd0f32354212698a0777ac9430fd23b4d7be83da00d0f1d43872f40333128c7a687283ca57e3bea2b96e7f0d45f389e7ad003ccd34b29f50f40794a977e0c8e676826ca80782a83ce92c8f01c9df83cf5f803e5698a025199e1395aa1d4e8298b528f495f6678aa44c3735c1ab381e768867e51f31487f62c8993274fbd7fae3c6d294f6953796a857ad76e78da432acf5d64f494223df5e2c5cea71c025e2c7565bc2ae85539ae52a55ce55dd08c81c4c41531a8f908504342658628a0b8c18a2faff2d4ea5304f85ce3535db47c2a95eac2f4292f553ee50ff06229cfc9c9c9c9f1cf8be5f87b3155cfd277de759ddfc0d13b35bc731d3052be93d1f1d075de818e83aeebba2ec7bbae83aeebbace86779d775dd7751d1834efeedec38bb90d1b366cd8700778311b1d80b9f21d7803bc580737272727c71990e33900e339701e5e8c83542a954aa552a954ca3ff062a91a482f7c0ddfe1c56adcc94485e4c2ab7c015e4cd5e3c5ba2f413f670f3fdd6fe0f872e5a7e4e183f48ecaa777002afd1cf3f38b133f534e9efc9c5fb8f87933639299e3d3a351ecf233cc4f18ed0c142e74d174c50f94a2881841cc8043112a489f05d06cc1325b12c350936f080a4259786862a4840b10df9c394a9f939393e33c5e2cc753a9d417263ee53b5e2ca552a9542a954aa552b902bc98aa260df0b9a7ebbaee4b95effc765f74f8ce3df0625d02bcd84cf2df200a317e03478017db80060d1a3468b80e0d1a3e83a77184ce777e002fd65d1b85103f5dc78b4dd7e1c568f4b01c6af179961bc08bb16e9247e13c0ae5de3b2a47f90d94eba0b4a4f028541554ca51a80e85427911a0147c6657401183722879720b434b66802405081e50ce032480a226bef31c5eac63a552ce4af94d15d5f029c7e1c5529ec5a6060ee801d14fbf4980f9e978869fcef2970ed2cf249cfcf40278b1d983022790207162850e3f3b4c2a19d83246a888259230197daa2468af7202783195c3bc186ac612467e86bfbcd88cbb72d66ab55ab9cecaef0a9ff9951624be43c0773e002fd609c08b4d0f80175bf5c8487a197ec38bc9b8abbfd9e16fdc7ba7f31bbf7173e33acd1369372cf46064a50635c06084d077e30231b31b9808f1c3164dbe8ca130fa1b304edcf81d1b0f878e9ee02318fc7496134b7eba3b91f4d35f40fc749d279ef8e93da0b8e1a703c08bcda2ce3ddf0ded7c8648df2df98161c913404cd01cc10e1e7dd7e9f09d3bed3befe1c2777e254f026a30040f2a44a1a2f4c5d71db1f09dbbbc5897d4f26237611e670b96c771f762389709205eca17bc74ef1d944bbf8143477a4f189404fa2092e7a6a434c2f2f246ca2952e552de480987b6fc90c3c7a2de31922b29b9a001220d0c7ae0e248149fe4820b982166e822c40bbe8ce50894662aac59f384084d0671448c285fcca00c0cdf0c5a10c21285a94a942fc7a0cf0093313f6c9112468614be1c859e8a5ff9ca6d78b1d574a8f3734e77303fe7f40ebcd8e4f23734f81be7c08bdd5ce932650b23245c64a1e1cbf8552a1c5ec5a509298af88c5141e85331c1c5abbc8617536df02926b27cca73bc582aafbeabf15dce779de327be63e2e7bb2584f8ce37f0629da350473c6a091e1ee5349ce5c56452edb115313cf6195e0cdf305bdef39ce5791eca3daf8a27efdd78528ae7413cef80273dcf8ad97b294f22f13cd224cffd3c8f3ed3f3a02c99011768b018cae1f3bc9b344133234dc080c98c67439799154c56c821c873e8793a9f5755f4f0735681f4d36578b1c9c2520316668c97cea2220661bcbcf4aeeb3aef7ce5c53a003c2a8c0e8ff21b2f86f262dedb4c51c5db78ca8bd95c29c0788e7316f771fec2d13b9d73aed303c3733c380fd23bd239ef80c7716e82269ec39c0c388fb4e8848b4f9efb79ce2f87398719363dc70d4d21e55128c75e0c35e48724239a248162831832f3869f699af072030dc8c4200923bea9c5081aef8df19ea3bc98a7012025535e80a1088c0b5fc636bc34a24c1a304a9cc4606487cfa8cb4befa480e23befbc58e7c53803fcc9a197ebfd56c36feeafcd7536efe1b2c46f3c7e8b21dd18c22288503d81db7bd5e150795179a13ebd10e808d467acd57dc0af2e57135c02fd7665ea2968a7f06538faeb033e768f839c679f5ecc0632bd09608eeb4631fc244961b310c2e6bf803c408e40227f6b189feb10ad85b5051603e65e8c8ba4f4eb5548f2d42489f4b48e4982af17f003f8b792f98b2363460b421884b50ba705218cca93c31d1e4fbd3449c32e1298e37a06c007f408d4713b1ae70d191c4f9dd7dadfea03b4aed318d8babcba84d02d7cf8818aecb3ae2b730db2a98126fbe087825cb3e6abd29e6fd7712a24de67f7f16297d51f4e2b47842a4401337cd595235d86cf219f6de5888093235dd665b8268e4b483c528319ac94b95638f155d93a4804e5091b3e2127704c7c55527e420d23fbaa6c0a98e1cbac87d6090ac2ae4ff15cb5542c7feb107fbd9ac13609ad5dfa86a94a6390c09567da24d319b8eb37359d139db2064d1a74b7c0379ea58f5ccd542ed6d71baf6e5d1349c2ae7736e05513dcc1f3d76be7d7ab0f70b6b5d7a1b6499a07481dd356ca5ffbe4af75f2d71af95bd35433d7a876f9ebb06b98d6648239eefc02c2ae5f2a83e16f187f6f5c16e8afbae691845dd4a7a8e05c83aea786c0791ecd23b8c389eb2a57bef308bb3216b3c55f2035b89724ec0eb95cd6ab909781ea35887664707ff6764e850447af029ce7a972b8e3e438fa75bd5b24f880ffead7f51f9c4bc5028e3e5d3f7f5dfaf40be5ba4a9e8fced5492dee39aee35aa72fbaf7e8c6071d2012765dd53a41340110c9238124ecfa45b9f2ed5c99956ac1974092274218f52d2825246b5f83608eeb12e8fabd18732917a5b9e8ac5fa754145aef9cbc18e79e048670291a700dc235e8b2a0c074769d26e91dcfaf5327f183f6ebe4afa3dcbb6ed3caf7a7e703f59e8bce608eebaa19ce3508e8eff51a2423e70a3ab982feba04923c570255002a6d24c8356bbe1de7c86b1b5038186184d57bbc08d410aacf12e857a74870fc39c9e0e83002d7957d6b9d9cab2dfbd0a340fc567da7a716f53a856bfc84833738281dca240c61b207d6747a5e3afe6239052261d4210926c040a853ea47ad2518d30160d3029eceee6a8663cba1289b88faea2bf51bb5560fa24eec915556596b8f8e073ad1753ce8a153c7839ee87aad54c0d17520ac5b4747870a09658f840d643a8e3cbdd69a7baa5357df7b338dad1e1e497abac71e1ebd23dd7fba94e0d8d373650f9a89848304813980c09ced6c64f160b77e214f0baa546f41e79c5b1b04ee4075a083f40e8f7e49570a0277a05efa8c17f0490db671ecd6a5911450ee790a9d730ee18e0b8421ca3bbf6efd74ba5dbf5e1226dda6956301947b2e02ca0525cc25827541172b868f608a7950165ee11e16125210165e61bc62e115ab058c916416326bc601984a9e0dc2a4e79e77c04b473da56e9dd2eadd85b5762ea4bbd4751a03b7a073f8b5e0e4f0eb5a42aa64c0b9e8b9e4c9e558e6501ff294e21cc1d6a3571132756b2d756bdd25a54eae1e6fe725c1fee3034fdde3ed70902538fa3d92c34f57c65924d921ce76dcec4eb645bd5b27b75dbbddbab79e9e0fe9d5b9d9b439d76d58376d59e75a5d6f77f353eedf36eaa7160927bcbc2d1222d7b538afeee2e95cd7e16c9874655ca3d7a83c70b079ae378f859ccd959b376d6aa9a49cec7aa3d15ee0e4d767f39c5cb0617273450ab3be7a395d4658bce173086dc903077ba73d9ebc5bd6391ba7534eb4fdd4dada7335c1d43d1f5366fe6d4e7dde8e80f45b6d8bf29c5cb361f6bae694cd696bca6cd874cddbaf8ec59633b8227485cac3a22b4f1ebaf7b0e88a922b173892375d90609294567f5cd0174bb346831950473488010d66375280826a462cf0613438d7a35ad42febaa465cac43377ec2b0d24d5444e8dba1fd718e6613be224958e79dab224998754f04ce558f24ccba09404c70d3eee3b402a19719cf7e340957265be14b088195f383be74fad2a816d9598cb76669f68905b2569a806c11f6c752b14156c8d6de7a6c59977a27d7a1b7b916d52659efe4aaf4b62ed53446de56efd6f53a146b5135ea9d7a84a4d43b9b5baf522a50ef5c2abd535d2348ef20a15aef6caee8a45f36d256944998f5d832e18774d51f97907e5997de05e8676712661d8b8173fdb1de637a475633fdb26ea38cb157493eb12534039ba293124c101265d36d0b50eea15c9549c2ac7bae2b61d7a12702e737a8559724ec744fa78dfe98493a6db71ed5a51a549d6b518fb27a54bb54a61a2442900e7c400426e02c4e83735d7aeb2dad93bad43b962561d667cb25cc7a6de1e857cdb0979e5b2f69bc4cbdb4deb522c4f110e688ae3ca4bb85fb65634e8c3941d65afa76a869e9ad6de17367a4633a63833d23fb1c8b781b6b6fadf5d876d63bb9a3f54ec63ebd93593fbd9371d824bdd367863e779fedec6d129fed93b7487cb652dee2e89dea9287bab5d6ed1107b29f2eb4232a433f4056846a454648992ed19c3ca134fa437fa814fa437fe80f6522a21f844c16a09f4b18f4a0bb01ef8ae52f1c3a3d13ce3b610c387823caa29596022350a412854e5b2cfa12844459341265b2284ba205c11d1d70b0539b674acd046d1cb719293531d122ba44c7f40e1c02a3893b6d75f66d05d6206edbb605c170080ca6a79d6f00247453aceb236c7ef2bcad600e99bafdba9b53bf29e9f9f2a8b556fdea241c457c8321c3463c5a0d9ef8f6978cef1a58f9be9ba4b5de9932cbb773524a29dbbb714ad7d5fa25dd7a072dd75dc7cda50be7eea3ec239068578a79b9d892d6ceab17bbb175e3509ddbe01b9d871e3c8439e41039532d085fdd2d39e85d60c80c4144cabc9044152f567cddf25ca7569eb9845416f2d8658b04ddaba6ac5cd5bad1b0e9a9567ceac5b05d0177d4bb9ed7b5e6f4e0cbfbceeb5c59c89f7c9e5c7345c3d1b66ef4ab8e816b4cd7a938d429a994b4cba90a949c128b2a162a4d540954b76e6f3342540964c688ef0d1e0e9981f2f4e190199f1f292584104238e59c514a29a58cd3dd8694346b47789c9f2350b7b4e576edbd6594581b633c6d96d22f6ac5190187b6b436461a7c1a9ff240ebe90fdc8e15095691b69474768d6f87e1460a63f4e72aad54f6bc22529bc59230cca800851914a408546c2076e5ee2afb057be058bd53ef76dae139c4b0033c741a9047b2248e3e5e7a64c11c94460ec1cb157cb144706ae115095e76f2c2cec22e4a260f0cf9408331948c0c11c69759478ed040030c3e5a2c6929ca611bb242184498a801228b0b8276a63c69326483132cfc148122ca8f1986f979ff05356004b12506273c7cb2e84a9717821083a5892febbc08cd037b2af13389234c70bc50c2850e64a29cf1c1c8b7910113450658f800217d73ce99c2f7f7135ce4dcd6bb71a70daff09cf045277dc241786f94b42b1553baa03ae99634840ec103b9e5f2391b481dc2d7e685d02efd6ed5dbbd1f350416d09773baacc2062b074e96aca141a28181ca8149129a18a8980396a6231b6d0c162cac502634cf0096ebee22591c49c23a11b1492a72c4c86716d14c09b60f896660cc1921d1ac06b32c66613eeb2439a94b30ce43a29912f407a2d9105c609b8744331dbec0a78744b31f22f83e249af9f88067347b6f3cd692c292102e7c2d04fdc0202333fb9200d13e24b37b5a4109130eb28809861aee1e0e31219982516a2a165cc1d8025f325fa43091701ced96144208218410c266b122ec8eedb49571c857bfa0ecbed1b1bbbb6b0a8be8cfc9d7907887bc168e6bbd70f40bba00de00bfa576e8eaa322178ea373cebbc29d9cee36e4cb031d1c524ad973ce9ea928dddd3da784ed754a17ee57c7861d843b13d61b5a6c39e995d543a138ae3b6df7b44d79eba4f6a6badbb6d38b4e2173ce39fd037e85c8a8da5c2f99e3de7bada42d085fd6a390d9f06665a4e5a4b49354de0d65533bafeb3ceeb4d960ee94ea60adb5d2a9a256deede457bee46b3b11c0001710c046800c6ca700086003ad1b000ed87baf07aaf7a3757b87c217a5abe87ac17b822feaa813bcf4530a5ed2ca029c8a919a5a9aa2566ed0c1ea02ea2e005487b55e2f6f1dc0868e0e006c78071c0080831a2df79c0d68b002309f35c30bc1032d1fc08e2b6d9d5e6bc8d3836483c46c0ad38983248384b8e669b05894faca0b810539003f1dc7a5f7d07aa3b203e8da7a75f9c3ba74d42bba8220d5d6666be840bf6052907eb5632b38e696d7080cc9d5bab4d6c2ec766f8a5eb7878b6f5843e2f5ea698da7379eaae0f35489a754052b9eaa90c5d3158678fa9ab29f73a68065899bf201c7b9c5e18c1c6ad4d080974446ac204a2188975ec38a0885265eba4caac10a9b191df668f7828337720eeda773375fe0e6b1d7bab826595db79b714f7e723f3ee273708799de69da4008ee58c04f972d950cb8a5997ecd261765ead7741952602639dd0bd74485ec2797c54fcfddeca711cc31a360e9dccf4f2e869f9c8f510d8a546792a7d61945923c94098922658e693a65923c5c53e698ec575d1c9384cd1ae05c679963fac9f9f4cecca175d3246eb49cbccec57beffd02471beff57b59725eb7d7e3bd7eefbdd7de2bef741ff0adfb80740c4d410da467fe522ffeda3b6ff5dcba735abff6da6bafbd1773277bb256b656f28670f2934b97ae217fefbdd7efbda77befe9de1e5d9df4eb3a4d817044914fa5f5ebba0c2f387aaeb42b061727a5948b5eac7aa49e874c6004e9d5ab73d3ef2a87ba20fcd519cc92a105869e31ed82de3a27dfd6270db33ee20a5acff259126653508775c8aae15c6992a7a34998755b65e7793e502f5d950673f8e0f84165027558b74d600eebd795556f8be897adf5cb7242b45675d2affa5520950fce2f12480821fe751f740cdcd102dc31dd5a5fa259bf930a496badf58e767194b5db85610eeb375f60f9198770bd737e5c6b3b9ae4a9f766dcd1de5edadbda05d9251b193fbfd13ba825b863012f9da37ef24a696d611952e0ecf74aa26f56bfa45fa3d3e9046fbfa0d19f68a64d9e3a65023f8050c7e6d4a913ead33bb6734a5db90b03d7ae45692dea84fa30f97ee2257dbed2b340fd3cdf5aa7bf9452eab240fda85f5ffa2afb4aa5bc9ff48b5767f0cb656821618eb6a9959156565a2b9d4038f5908848175ba66022c2444d82b98744446a448488d0946a3a515e1decc524ad945e69c14333b3d96149e78312c3a70987e489c18292d38bc1d4ad4132060d8c4f26233353530bd3640d90122e408314840b61204909e3a70993343f43688c2c511386195a9a2222b34b1f12c9926e6dc60d36979356565aab4ba75fd1e91464922a153247409029b2818c955a4c8664591ba48067fc7c48245372a5188e6ba94a432945492969ad70b6328f497b6c9d947a30299d73aee69c2da594dd4e6f4c29ef8c2e10c4eebe97c582581e524a6177f7cb9451ce8f13a00cf0d015e79c2e613f4e5005f0d175829c2e81fef4a6ae3b7f449735ea9fa004fa291a70d72f5802fdfbdce4d12f31669c71464a29a576b6f2eae19cd35a9fae39e79c137a1075cc39e79ca79f9f39e79c73f6903d3a20441db07f7ea270d42dac2e0b9dd218238ea803c654140ce79c734e4ae19c44bad40e38baf76ba3e14543dee6ebe96c659ae926652bdb9f9eef4f482767bb8bf262d35136735ecca35fd09b2a99b265b597f370c7c2916bc0cad94dde6dbb263c85700aa1b5abc162fd90362acf6edcadb32382bb95f3e77edbfedaaef3606c94e782977375dc6985f1942a24b8fa4d5737ee346d4f4fddbcd87d52ef8d93055f7f9c361784392eb4d53579d44a8b50c79c3f6eaaafe4ac54f2e8578f9ed54cf2d0707152cf06df5c193436e860ef50594f77ae200f0812468375c35d06ce8c0e38f07abad33d1d0f7aba97e401e1c222fb022c6346ad372a1c2f0255ae6aac3c160bdba46cc8d39db46e409040b8226dbc18773a024109be404ea89604ba15d4114368c1d31ffd23b4ba961793ae6e52594180220120205814accb56a61a6c6aec6cb2d2db43c2ba48b6ac763b759d17a338fe7af073c2d7b69970b7db636e35368fc5ba5ee72f1e3d200042fc403a64753a1ef4f40ee7d06d5a28202e61456057665dd769f37ef875c17edd7b7dbbdb896bf5e8975d615c6dbc185521c1271b0f48cf893b9d4e279fd6e1ebe4f1e4daac4fdb63763ae68ffe7e3d74c8a53a95ca8b55b7ae9e18706df1e8d153c5e849753c7aa7ce3963928d904e049a632cf9e8429e0cd537c63544ffc1db5b9d7ab13a29a57ea963324fc790e1593635d070f7b986d1e71b8f234d9697320d162fd5dcf0520d1931c6bc943a9007d7220ede803f1486d28d518b18a603a0b8a864ac17a5510c95b201000008129315002020140c07c542813090e6a1aa861f14001070943e7054341609c43488619031c618600001001002c01011a9215a810088518b86280413e6152687f86ed949d5eb6702ab52de98715a54a09442ad8ca8a6e122b1bb21130d9c9b4d1bbb57d5e2d080687bee546008e460ba8b767631831de061256975c78c70b99a2221ee9f39f823187c770188ea8388c98c4a18022f910459c748626706b89f8a4b652e6ad6734354b7f4ebac24e21f5c837affe0a1015fc615a643149a4409511c5ddcf228a1c8dab58fe4c7b6ab0e20b08f93b73ebf1d9c5e60c35c1f1a785844b420908f3f221c88687adb45a7a957772dadf70d488689aed844a718ad5423d35856fefe9cb23d8678642912bd666757f24a2e8057f63f225b83f97167f8d95275710641a1507bc35fbbd82a6a9bf4bf9e8c11a64a78ff5462b9f03e8a5476aa4b60feae308a0211a3f5bd0024596722f895ee3955a40b52d6921b2e21d84449fca95334d8677a3a7bcc1a880f5348a81de3a4beabdd88ad91b4748f80b97e1669fd9f32c3d66672d578803d6d0eff1f1b468dc8a6686f9f3b7489e1accd9226877e5c718b868cb0c33f1e40d96b0eee52145c1eb2804ffcd99de1202f97845ee6b19694479609ceb04f6d2a12338829f89375bc7083e0f749f450e14ddd8dfc1ac2df4ed9e0e80118995e8db648584a8647b16cbc50c2c323d94313ba5c91d47df74da81342a2544b5af1740459c154be2cf6011ab34187852da3df333fcb4ba69a989f5c80062d05634a61602ad60877303328cfabf5e6c943b119df89987ead4a13cb895fc4f021bb543af08eb77412058d92c0a2d73867ee7d5e4577df57c020904bb785f21a6850ae82cca93c5d0dcc821df34a59ebb58c3f2cfd7ccf0b6054d57ec93b4ed6837ec1545987d4be0eece5379b98c228b99b5432713a3f79a3bc5a3f4a228f507ed8a843832a9534d050079ef8179db7b68ac7f4538124557d26b91a2eb4456223b35b2ab32479ecdf17124af945e9a5313496a3f8c592ca0f9b628c86322482093d78a0e2545da8c2918105a565f233247c807565d22791a0f03cd9a35c17e1cc9f446ae745dccb54e201555f38996f23914f71ac781adcb50606d7e74d06eacfac5881d52187e1d5779c37a189b6266b36db90c434ae607fff373cc3f8c827a8785de8942ffb725b25f653e08a1d81bcf58768c766f629adc960edf163a4dc07028766651054a20fe1c07d961e765c9919c31feec7de0fbd388718f23ce5a7196a5cc626bdf4b1b63337a6fdf9cd0abb945d7575f45951d69247e5f7ce28cd34f3dabae1bc0c63e80ad3ad6649ad01ec510cee660eb692daafa562c5178bc687422ed6954d15767507e12eebfde8208b05400b0ce5223dbfdd94e7225afffb1584a64d332c5a95c07d1c79611756fa308f8871000dfe27b4073fe85ec4204616f4868d6f055c390a9a7257b8fa34e27e36b6cbebe1f4101767b22ed7e8106b59f2c6de9d9a4f4d5f26323b25969b34191703cbd63a93b9860729c7738eb2d9fb3a711228ad780e3cf0380f4989bba7657e7bb6f618baad64c0f05990f43eaf2c3130b21257377c359b58d39e4c64146e4a12071974f5cae3d195ab4cc6013601880533f29ee076056e8af69d21ac5fa28528f3b954b1e078201c0889e8155328b9b72dacc44f7a152866f502b0fa84d2a0ffcc1a292d102f5dbf9a72196c949c4aae8f0bde62e36fead03af6feb739f1f60b9a3186d04c564de7131a4eb05736f94865b70783f113d081e67a5ccfc9e01ca787681cc0ef68310074e53ab077bfdcb6eb469ef7533f8ecad442e4ea5833a72198b934906c0c776d8b7129f036b6fbb15df77c7fdf211257b115e2e210eb0311373ecd29c48b872e5e73369a42ff121209b681776d1d112571348212906a8d0ea661c443f118a1aa2249c82166dfc64757de4576c76274160a72bd48dd0b547a50d7f2fce2e396116cc366b0d6fe44d4ad53a6c1894edaffee524e017f8651f13a84a3a570c9c0bbe4e6bd964f2d2f65d2c9f0efa839a3fa747fff85c9a54f06a78886784f671cbbfd9cac4d040f918a20e34a525e4b4671d53941b28138d9d89ffe0307eea2c0895683dbc91e88455904d4030a3311140b329035e8338e114f658aa08d767e4d79a903ee9c58df0b3758e7343c00f6e91d9a1bbc07e561719088a4d13627105f28239f2b5e614469d292105df1d602566642008dac3e1a0170da40edfa99d6286ac8d87fd3a3a42791c7282cd513649b4b284969700910262722cb99029a400842eb24d8d84736e443b57af2f1e33e02618fda85923b8a069c2a546b1e30b62e8843e0660e67661b7646c768cb768cd1d9816102f60247380937ab088122f3825992a93a5844489c71292e079402cf973a3a4dc36856c744f552bc8e2c1572ea5821894c6ebf12e46fdd18f9230d114de24864120658fb4b239070df090af0af3a03a650582fee330e4a659203568f34c481ac857a59558f6cda1e4fc38ff166178e3106141f3d0342ac420d25ec327c6bd1c0dbe7fcb939970aeca4a8cfb54a98362a21041e8b38fbb0b65f38b70563c98562a2f1ace81d27c281be68b8c46361d1ac6e5b324a9d7d1aff2e8d5cce6a8aef61d878b2e316400d738453c61b7ef37e8c44581d08362b4c14660725350c09867bacc3f80a71a32b6011313d839c18d5ef42b7e16270446e84ee04089044801a33a09c03851f26d6499064bf4e50ac0f4fc53a7f1ce51752278d813617ddb9668a2a484ed32efe822bf9458aba6a2ca0146cbb425f88214cca43c011a5cf48d2e0c162019f6252066e8fe9ecdc6c2280e9fb1aa08e52da1a52ac666448251552c8230310c63106b003501ae87547a1f3a9408dfe3860d8eabfbad0b2094c492badc793f1f9ffcc1c901ea2364083157b3a8748fe4c2c99fbfc452a9c68de8af88b522e6e018da90c3bdf6a4332209004da2427bb090fffe918ff28f663f02b5a43d2899201dfaddad6f65326334c4062c565b9a3b90904d73022b297764b848c0b2b6a1b1c3ae860f74ad02113c0786735da7cd8fe92161562f46bb44d33bdfd40c14fb0ca690da93850da9e51e5d82fe8d283a1ff37298c18cf251d7752d7b1a4be6069cbb79b52a617914544d80531723ef0b4fa41af61e180c97e6e8f9886d1375cbc203a35f23d78becaa13c4d501fd7dabf8fe4807f7eff2adc3c80e258ca4f6bc1c8e0701e141435bcb9e9825e9f2f38f1071cefc2587056fc37304cae32260df01e7220f297bd6b7b896ea0b8da249d4cd4497f359ee2b7c4aac576f71bd0f06137dffffe57196148d3a2ca282b536cbe1905f829020e7232f1452b65ce47aeaba12ec4fc3ea6202ec071e761010a57aa1bd09d5839a5551df8520143f2783fafe0c378226b651d4ba4df48e3f91a02c5a6b98e5b491618c6e0e6c847d81f161c9b0f5381c106c03b861436fc131cffabe4bcb2536e8ed32f0735469ee04eae912dba86dc2048b1dbd03b03f6579af5ff45686f1caddd11b1891ed2ced87261de44dc2ec84676e4b86292563d3105d5cfb9cee1e1dd1229e560ce89e0e59622ab27523f95bc23892132e3c3688a3d51755508c47835273abd81462df34c9676acde030d4fd334b5441667be23fd104439d3c84c3287e847e45fd3f78081d6882be0d5820968315301eec3d881333d41cffd9a9de90bee38a996e18d7382f2841c26bcd512e607e6acce6801a519b92159fd8823d40a658452ca19ef9fa0f7e7ec170cf10e97c0006677b006a4a2d293bb908dddeec376eee7a7e91799c270a477563e9210eeb1445234d4a826df5d24dd7f20ad90258f0cb13558a5e0705eaa532001a264910fe79e333a9bf740f05f77f4d1ac978b262af7da496c5673aece424c006e2c1a2897700cd30b032255dd0a8d31e0debb4c7009851a60acf5ae941950b4a8039acf2d8d2a2f1e4606628e09526d571945fc9c07317f322671ff4068b79656414cb440abd029fb2162513f3333681ea77c02fcd44b58d3df3170a240bcf93d5fd0faecaaf80e32dd43ad7ba241149603713666501c8bef70eeb4d7b59c6dc1fa0e1f5ad79dc906b7ca75694f6545c76a8daa7b6ecf1d4bd6a6a621cddd83a03dd45de20595f26ab99c91159da7c1d68f113c264d922f043480f46c20ab241771bc49c02f5d8110f9f5a61a9033e6a40f318452a583319f0b9bac584c726ccd841607ef85b77e0b380d68b23ae4e7de20586db693409206486b5c9cdf9e18f8b4f890b3ea38b9f0c50fd6c81fbc69dba59c7fd80c5e09651b094db001c66b7b871769bce0f2ae3d2b245a09bc2638ed4082a032de2b1cfeccf4cb5b5f4d5165d7cdf388eeb862f425e270bfdd58cc8b02f52046e0ace92804b4be469a0a1de3d5cd7950b794c291eb0bfc462b43dae88dbe6fc0c07f8850b24e303171524dc20240f9d6236c3621cf5ac9952e825ca3d0a9c8da0b93473b9867991b4f52ae4606502712798ed74c6171628e980b616c2a24562c575df895156345bd49ca40dfe66a389ddffb1e48009d331b5bd9aabc654d5940bb346b5e3a9d0f6753bf4be2af403b07989c98c234d6490f8aa19921a0416a9f8c5fae1b3a532ab16227534678da649caa42b7290e2a2b99223da1e8be11d1d1d59f6c5a8e4e5fed29b96928f780562a1143a7b7f6e2254b1f9adfcf1db5402c1363b649061c54e8e91d96bd1695dc1170d8be459ef82ddbd238ee51e7d7192d01cb337b1b48c1623f038751ee95bbe0e2a056e76a745f5a6b880116411020e4fe42f8bdd0cb8dd534ea74d95126ffa74ddc1d68456887cf15f12ef0ae630aa8f9d2d388fb6d49b0d9a696a514028d059d310fa81d1f2d2d777699e7ae9d7edea1513028aec8016ea0ecb272f5b194cc2cb71b91b2e74b3525bf3b291e9c066e6523f958036169f58b181babd3088376e4e5d90cd5b24b783118215a46c7f947da260668cd24a420b89a0573acedb0ec25f60ef4db983d1beee09c24ac7b0e68f0984a3d0e69411c348b22b7592ce484c1f64e88e580a41e602ddce4b07f4a3a98bbd6ac357d80f65f03650baf351886760a6a4a527d99aecc1952b1409c2ef1bac84fd283246275aeef5ca1abf0d18ca24ba17fa85f9a1bd05d04906f699516b3a056596931f569e781bc72d73f50aad803afc720b807273c4ab7ad397c2b9cf368afceb93760e89719390871e1b6ed9c5a7a91908e8e2306956048531c0d60f274089eb5701e7c29c10bd415a6ade42b9b5993dd955167a04efe62976d32d163bd52b1c82e6445fe9b6e3083569ead32f48778a319daf0d356ac5227ea17d857d682856c517ae7debeac66d700f18e28da9a5ae894a0c7d781fb62f92fa334af4ca1aac58c480248c1f21491f3a66913f4f1d2d27fb2915add265bb79249a2be218f0bbf8e086782f4aa62d09de0243422e3fec183aa125a41ed0c234e7197fdef92ffb814eb3ec0f506aa75edb74585a1912eaa8c6d170917afe0032f5e8c1d4b3acd3f19c2deb9caa79440769c90e43631c4ab9dbca228fd30ddf0905910105b1522bd8fbb9b665aa2dc374da439f2382411aa893195bf9aacff7db3ae80195721dc7570655bf3ecd2224e594f4f6012964b317b34f82c1a6bf67ed8a620d2d69df0ec7ad14bcfc60176e8023596b110374a99d2d4d1b7cde329129ff3f970ae90889c39a46c65524d35b4cee2c364ee65c3210ff4831b9aa83d16125e823aa8cf3a511299807212d076387a2cadcfaea58804ca435c213dd1c0c34640c9966be1431a53c7c69d5886721a94d655a657495d046d3efcdf933a017a71fbc0f5f4d1d4cebfcddf6aa946ddf1de62c91fea027597a1a1e425237489335223b476e77aceccc99986025ea859810368fe11422aa4e853d395ab4169783985174b94d99751bd5d101a5e13a5f5b633080d023e2056a820146785d84a35abc30b3eb05ab1667118c047562bd5ac0e3bf855a69d5d460fe046adac52e8801b7d2b6bea871d7c765da105b9deaabce30d83cb9492ef441ebdc93222eb6a01ae56eebfa3e64d4f6fb9c4bfc677dbfab9a0b6f6fe2abb9533c6331e819c46faa71c9a15cc88ee44278bc3bd90825ec1c1201a51a4a416f0ee8c67895fc421177eb0b9db5c5d01c46df8cd101de4cee38922473cf02f29936670979bcbe93570a12dcfa621d5b68ca1f6122b0257e5fc918ab5c00e9bc17796738f6b19a6bf1caed71ac904a78e71b1df80d7cacbb9fd424fc3519e3c5962cb35eb7487d5f3f4c0dce1ba411654e24c749eb0203b1d854d76ff2d30a715a8954092355e7c22cce5eee0cb83e3ee3c9476684662102b2067365561ce0665256f7c8a278bd51b673471c9170be0e6226281cbcc450464922531846046a2565fc2628f3270da16dad58442f1a189fea5e83fb8781c63f0d77b85ea473d9761e1322150b3c8877cd9fd64fc9fe85635b851da03dadeaff07cc3b2b2d9ba427487c6c094044792ec73ee4092a9eb20056043342042ff4bce5e772ad4b0d8c8df98f53e4cb8a001397463a89a7932072a986f540edaf846f8eb054d77ba47233ecdb21ca9399671a3af431a8e186a1b0231921af9d7f17d270fb87765807bb881e187428c52a8823babb2e8b66d47c403afba127855b6ec9399328b5ad359eb3fd5b4347bc365e088a5b10e76bedaf660d7be64211dcd6bea5831e3d040c9f11197421a1619327ccc21189a067abeb75b08fb7ed07bd0f0c58066ac6510790fc0c7d9d9ccaf35ec9b0278efdae0fcbbf8c101b2cf13909e94b81c229b7a8086d53e64e59f7d39e52524e51c3ff2f45905b2b07bfc7bf4f3f1e5e5fdc4d690ac5e33db69480c8e33191c8d33bceeaeb4056f11bce5c272d028f6152e305659be0c0a8e882aa3df392765c3e220f81da12f205d8b3ba0de43d1089ce3988b7d0d15f3abd4d2a4449f49126f732eec20568388cb7c09bdd071bf0dd550f24ea7195fd9116047a1e0011c45044282f25a1b363db2f235deee3bbb780861816bfc9ab1782620245d5a61d75951348d2d1c320504059aa9370ed6de18d901f74a11d360724882e3f68a6902337b4a2ae97111ad66fa10aafe0e37f7440da894c05a47f363cbe3cdc9a6f18c3138ad77231d2a99fffc035ffd0907f70ef41eef5fc42e751a06ef85dac90c073894062b912f770d1612e448bc0cc835b4da39f29c291a6e76f2e2bb84a6292b471a29b3e348e9a9ff34981120b3e8748404c9e849a24fec44797b48b38713b1c44d0ae398fd7f4cd493083524b31b6e14e6004013a61a4ed2c09c277d358fb32b62871c74036c0f0579889a134184b519a21cfb2a808f5244f500f5580ef2f1300067d8dc00491124521704a40854d098a4d11f6ce52b042249a646fd9bf04a843477258b08da9068638f177264385cef7b2cd457314ba20ec8856467e118bca5018a638b0bf360bb0c965bbf571a1c0c548c1dd4f25fbbc4c3c5ea92c09409b5e544c56fb204174bff066bf15fbd0913d93ca4bc4f3ff1ee69741f1c45d24c0c5ab4799c13f6d524a6c5fc1b4a9841b66cd7ff62391440136db2232427558c87cd9c6ef0e37fda1b0fefc83363882065a85d24f025f2b73fcbbc63b96b3a28094ba3212f1fc3bf87b09e9d7b0439693dcb6e74a32919a677f5148d03c515268d71f7570fde96a6e1e374949221d213f5ddb79557b2f3c0756a3bca4e4555e0009b9d5414c024ca650195d0ee9a85c64447ca3d10eaae3fdb0b0a0d801f71ba17006b8e5ade305950e1fa1882bffd8b126900859e66e87f46b30a3375281c7e7f54f6b09cbf87ead73c56bac78125987c8017eed132b1fe5ef928848880e9cab255a0db08d52aa9c74a2c107d7b4e457008c451c380ed7e4f44bca2e3e37f0c24891abeb31835eb1ddeda0c3bbfec7bf63df89c9379f4337d24def5d0619d198ddfa634ba046e67d0253907b5083a2f2db03507bd9cc66f0ab91f1ceca9f093f4b793ecb1e960209671ad8a0c1b6ef9ce865fc1ac8ec7332d0ef79d7358c1f739ad8eda800d2b40cc03682935542575eeffc99ac8f9b13dc8c5608cce1be72cd5ca295da2e7c45ad4d2b04f0822263f7fb66e9c7af556d0c581e4c86324d95d9931a0cea198762516eb2ec5b0a12de75f3ad2c563a8cfac4f1d302f856e47211827a79e258e85b4450ea2e0317a7175fdbcd9d963ca95dd0cd867aa55b39d3e8dcc85b7c85160777175887f1cc65d8f59e9b440c2145cbf15769b30b73c037255e8f4afadc3e89df772338acadc1903e9cdab1985c8ded247c17db9763cb3a7ef294ebd47cdc1877cac3c48ac4b5d847d2f97dbb737e19e6521f8c44ba85945414395314f75a8c146fe2a66323523cb4dc0187326030037ef1f53e2622b90a574ae15122027a6d1b98804e7aea6f22b8018f6b205c59ff023f2a3aea0d4e703866ede51c15482146d8ad0659f0f4d1d24f4b1abb55deb4d33f45c3d9c354e5406df2134caf4e40a2ae75157a1eea02ad029d021a420473456239de087b45b3f15dabb9ac3840120dd9792c01d7117314ebd30d326a89cba35a653161b10044c251742603dd56a8332f3ffd5da8b4475f6cb803e93701303988b194845eb21222df65f7d761023e04d654086343c23fdc9dee67a3001896593bb5a7394b3e72241b17c0b755f7c8aafdc3191b4f1b641134b676ab29cc6db2400ef4ec1141decbb43ccd4ef412ffca9954fc4822efa8f8b5533ff9412367dafffcce2af5d9b402e98bf448282dfef15c1854a06227d4530709489f89b592533bad6e4e621cf26320f7c267b89908eaefd58b0f75dc913c582d3d61145615538107d68e3f4034d6a0a0071f89ced083b5409c64e8aa2fa17fed26a817d0eeb67c6a0c7730171f5aae01c0ae6aaa5a5311b5eeae0715e151836307bcdc3345908fb28ed395c9b05e5b5093408be79d37c8f211cda2ae4a96d7c2278ca9b817dccb54f7d25f32a00abad542b2b6977f78c66f7e37ad7925f06951b81ad1e4650ca7db73bfb919da544b20aecefed17085c598de543f9b30dd9f3f1390d3945fe1367881a72eb711a1e9d6560a7064090c478f5c6718ae71f82debf2099138dab8a07efe3f6b135a6ce84b1879191896cf381a4b134e0c64afb1a69947b62e353bec4d904e6a05f840cdb70cc6539f6aac3658e22030a6d188f2aad8be558ce5d715cc0e76ea72b39ac0135630f78b639b646c972931650b3aa3a482c0d012878e7fb6754b70a3f9215619f2944005114360a184804a0e4d8d6525fc7d462d280c4c24d570bc71f12bc38b0697f580b93c7d1b1bc9313186246d38a4101068d52c71c079979d9de399f6e1d72c7d319c97187236589102dccd6b91f8789e1fdd9bc5a0996ada0a764918cc4c6bf8b06c7fab7c1445ce528150e5284afae3931c1bf60cce7dbbeb8f0a617c549c78be7020588d637474b859486d7d18ccd56dc0b47a0dff24520b9983a338c3557379f63cfac2b6e28593b8e2851e9002563adf2df6f2d4bdd7480ac1020b2c6f949c81d40a2da9bd869988717527b5fb1a4f12ed8fc57f20c7523f3e2d4e37bf52e099b7c1222864bb644d0124320ed6b139aed1cd7e369e86983d642ac94fe5898c4366e5b0f20d6792cba1275e30dd88e94ca0a54e6a42673c3069b4b55cd6b07a35c7aeb8fa650d735df9c4cb827d8a44da802ef4f114950700e988f72622a18f54980762ac81655d27af7117228bbb141f304b3530193e421b1fa73cc507b9122f0194f4805b3e1f8f4993a1f14732fafdc08bed2c18d12f40c73e200d78fc5a2b2ac2b275e188d5208a97ad6a0ed152cd6f2f1b80caa36163dbb63c65da7b1afcc1179f410108a7e64e2671b53ca7b98335b8a5a34d7997539a157bd1fd09f34836c0140e6f7a2bb21acb0ce841510d14d4d431b3554e5d0d8ca2fb15fad007f15c01d2990785509a13509074b47f86c4c62da8291911ace9e887819275559339ee4ddf6b7861280590bbd4cdd3d04c271b9e6db26fea5e3e04f61c6f6390711cc6f381b9e0cbf41c443fd32e23e70d5813a7eda5e22947c426645f6591de5de8424ff1113767920c8c89b7aa6e3b80501c55966770c85b11ae87a3ce30560f522494e444ece29b48e582a94a67323bc49d7d2329a0d650cf7b52de3c71150c22d834193755ec5944f73654660bdc0642945c60c2bc395facd59400ae7971e341beb4fbc83f75ec579e6da99ff8a39880c4ebfd0c415247aa1d73089b2329dacb22c273eb3672242906b86335c956cf5bb32bc551986af07137265b360c3c3d778bb8eb7a77c9d9335a019948953a39c5b0c36270b879037c773e04ca3d341c23ccbe97b3151d0eff53d1d70ed50639a4bd7c5202e6eefa7fefbbe6162ddd4c4dfaa718eee01ddb2920abf2cb26c6b939aa5b1eaf460a7d2440576337eed5da47d371804983d13fcf603c29a49d760b4837fcabf5997ff8cd83664c516371923b4d76d48f22a107b9cbfe622a16835967951bc9447a2d836984a0c894bdd2e4e27ee93315e8865100f0ee13718a78f4576d839ca999d74c72ac82c26885fcd828bafec28d9444e2ed3e5b38ed15337b9d8417654c9a248bbacc81187f4e9b606e054685c641ecc1a937ce4c67b82fa59e82b11eae68b62f6398c9d2a29fbb45b422c10557e583a45d75ab596b7807062119edd44ef76c114100e1f22612db0b9a00452a79c8ffac0d21cd9337e090abef1e0d8b40227519120e67e583b2b53c8fd72232e9610e00005436b5df7c8ff582384c21b9a1a91244f652728a06a368c8d02e48dc79f71c070f9b3430183b261e8ffb27cc472bd233c505465d9758ac08c51989625230da039a0cb602d34a6beb822093bdac5fbe3d6525719710294d8cbe44f48124c1f253bfd317cb62f4b9fa001c02aeec82e0ac1929a620de4e992797ce7cd1919504a972c2a7782b177d53e8c3fcd6493db74da44b342c1a7a3c83dd190c96af21f26087069f5a784a3d5616ca35f96aef4926dc00cd2bd6e8e9bccb0fc8a89d1a75967602b186f496b133cb8c261c53a244410c9af4346886f6cb00057c136df1e56935964696278c1b72ef4a564dbee6a7309b21c0292e4a9f9e98de4b0c26edadd745cb98606ca44d58ef16dd83a8a24e291afddc7dcba9b49ae118cbeb2023f09a54f638b895c764b2e208c5f816c533fe192b1bdcc0810379f94aa843a9225836bba3183b967503226436b632a2a5f4f7ceab24d41402a08a326b0ed2b413b9ce31cdb0be39cb3fd1e5289638a8681c1afef31ab70287b1ead92c3d874c4fa1c21da341b9bef6a4af0de4c425d59e1389354d7964dd931ee1b90f41105486dc8c24b289de907f464360c6390077107bd2fbd0c1f291cdfd727acc0e3219003b0b694f120eb3e3fe09aacd391d018ddd402271ed843eadcd9e40b956762d8a1d708af516921595f76d2bbd1d771f44bfd5f3625f809a8cb551443ff5356e10088af193eb50a8db7c73547edef33bc164c663d5cf4502505134b47f396b7e48811e56d215caf9cf01145ac29d721472ef406724c1297c3404eb5271ac37bd2a3afd6355285b34d3c1d31e94c93c6633845bb62ddf1d5b74406e471eb583d852a697a7a853374372fa278836a01991844355899988459f788a49495338549edee808e36a341c14aff80dfb6ec4367faa074fbaaad27a7b17e0ad2c766b497d26c30a9969da55e58064b574849daa72453e25aeb0b56cb9e9f67a964b250d6543a468a420f99e8da9ea6958c0e9acf7a70c57826e5c1d170c21e57df3f038d754f0bca2a8e8596faa8e770ac91f5a206394f6977bd462d83c90ad9dce28b337e09e98ad43e11c39557da5b597fbd980ea23725c0aad7144ee542455dabe22093ac8151f0b5216224c639c5011d37b50d7656865914c5456ffe3745dc6d023f552499dadbecda8219264100b8a88b9f89c333ccc77c2d964d39fabd1dcf3f54e6c00ebd67173b2b3d1dcecef5d9e4f9eb4d1565db9e9cd59fa2b0e42b7a85f5c990d4b5e78eb83dea970ebd9499c43176304768361188a3935e568311d724212731da5d393219d0749fdbaa8dcc504672b0c491568a63ab45189bff2eb71a0bcc37b9fe4a22b26f04cdc1ed2b7b2d660aec55286e6f7a1dde17c3267b854fab00a067e6a4b7e4b290a9586dc3701c53dd1fcbf07fff0e345370babd57404068642b2be8a8c5774b9f0e30c31eff3a10fa77f07058ef302b32108962a0d8784bbec3a3f7471011e0b5ef0fed6e1047e3f05d0b4349ac6a84d5dee55bd5c9a95959cac12a1abee47921314a314467663d7947a6e18479e5cd9f77fb1df3de00e4ebb213502ad7e6d1edd69b2e07c2a6da5d2477094cb4a30a05a15a1b71a45bde2b40536d69b13ec34af526e813f5ca31a28c1f83b35821305a91216b9d1106567043e80dc7839455b69b1c2f04ef8e9daefe492b0a6b49d487f465d8f4ffe542a63965ce3e34cf736188b81216ef21fa786fcc278cd603ec78010904c6a85186865a60fdf393b87443678a9e9d656a9cb67b55ff9056f909fba0e567bab27b60d38e601e3b8c8dc072d6c110902fa4043cacc5eb223904c8bc90f2a1ac03e78c7ca901eb9b94b665e20ae10c8731a2881e5641ced97725bf5600c2816a15c4d88c12362fb21aae3bedc084c6d64143161076a55c77e56544086ae0b66e8b77c779c57c9495194f87ffa10b7da07c1939161e92ca2f1552396f23f49b708f90f23d17bd1eae64f28f5deb9cf01fc44362d7577babab2d3f81d61898ce741bd578f0a97c65b3b82c342a87ffc508b970a21ecc24253335fda8133224a49e203adb57f48bf2e66292c25254c2dd15a9c01d0e05986f91766178175737b2a484c01170cd978fa9bdaeb1de03b58304bd7499a3ae47d0dfc61ce2c10174a706946ecc06a134a4e481af3aec7748517f6526d510dd183ac787b612a617ccc59ad60b28e23444ea4da4b3aaa4d12370319b4490a8430a935cd9af44651d8bec0707366cffaf0dc5d419fc779cda2c94d47275bf905ee031d8be3e418abc43a54f6ae44fea79e986355b04455dab4ee3c57e8d4670bd5aba60d3f4f465fb209cc0b6495516d1937a0f489621441df3589d63805e66b231a32bb3b3fa4a35234f51dbedd86575c6d81c1e27e8aef891ba9d969fb9d92ced9cc1452caefef8d58f13e991d15a08dafaa99947b3955e1bd370343b83176c7db7dd58ddd74abb6e29f63aa6351d5651cda59a9228fcd255a9a22303371b3efe1e1f458e09378908c82a7d346e696f3327f11f953421fcbc8cbdfff0f0fe005ead8d85d5365db3848d4082396dea2a5cffcfc27555c1324c41e090ba9e86c911f28c154ef6705dd3dbf448778ea28dff472e1411e7ebe71b0961dbe39ceb775f96dfad881f8a9f0ef9788d9e78e9927050b55efb5c8b66df23de5b70ae203ed04782ef5b96ae77372940759195c41cf635e7d016e9b60391b79f0fab9914e04e72c1041c7bbe5f584f982736a5c5e999894cb61a3480c9aae90efea7ea935d3d8bfc1971a2609d50fa654eb5b5702d860bd067422893567839423d8e046878d13ad19f33fde14fd3e957676b314085686677f818a21038eba7b78cd0958faa174a8d333352da0fdc24b0402c11711ed45470a8a16be1a9b2d17690ef2e4b298edef7fa563c9c4890172621633eb1762a2e4d859bb523b94bdf0cb6ccf977461a6e2e5994e4e18588aadd0c48727b7d6735ac69982039b7c6a4559427119fdbf7314684c474c6ca10cb4e65ae5492c84b0ed2238269781c24b5f5be487b3ba30e95a547be5382f29158479c603d7d79fbd4e46fc7f6ac76a811761255999ddb75da4afc975237aa23fa4082eb1fe40b04be0d90a7c1f4b612bf62b7f33b0e1d409b0a8b0d9cb12387c9a5c5455696913aa09d8d4856f60cdd842d384f82b2f056ffadbedfa552e8f7b6e87536a103112bf6df22ad891bb52f19bad17f9d62a05f374f1802437848f3ce2a759012b75da066b4002e48e8f2568ca6136946222ede13c9237978561fb7ff6e2166bf459b64176682098baed83a4f3433d93cacf20d1a2f41752e98a636458fef345c9ed6538196375c8b76c80ee14eb469d21f95dbc70ed59caca0d7ac4dcfe1c51803c9fcf021fee207d457cc91024c2330eff344b1da17c2d6e54d0d91384a6ddf6e48b8c3ab6da2ccd2ac92772d43488b017b846401834248537c9635bdc12d70c1ea924ce6209280e77631b33ff5e304cbaffc9f41bae569f8b57ced3a6ecd3a02d90fb3d444f8d72d704cc9efea2eed17d8067e55bcc0bf37765431860669780fa12ec0eb789df5f7f65024fad3cbef361ab4a615a1b90073fe6a4d6b52bfb68343ae4f7b42d025be0a90cdf3b4828d8d3bad70104ec03fcb56b9d01e722c4daa42155f0b30f785a5d27d6f9fef354bf482835c566c8bb51361399cbcc2e62ed14a68f71a1db86bf1c7fb938afd28c151dae06d8c0ab7ccc11110c375ceda80b911749c915ec296260fb540eb1c648b2eb0fa3b1b0e6cf0f1d582b47daab14e6710c09296efb928239819b3844531d397110f81199522894aa2b72cc7d33aa02e27c9a36009ccdcbc64a00ad7c903d6e20d37432c08036bd3edd9135943ea1015ef9b9b961f745587849d120d767ba1219f07742991feb47a33a289ed505fe29d0d9a7b172226c3c754fb0445b9a340c316fec8808d688c99fbef0ad2eb03726ff224bb715abbbc146877e8d39a78a2aef899eb304c293ef4304b855f2702f894d2a67a6ae723fd7d3f917c594a50b5f426419dde106c91b916055315c409c9f0bd92ed01382d02def024048e22189ee7724ee1c10de84f94e99143ffbb6338218869f7745b5f44c4f0d5def8cff014d844fe087973b8022f3b165e5759501ea2fc342b6a418590f3cb75050f89a94452e60e4432e64226173975225f20b613bb131fdac5c649a82ff0de9421098b0a45f7bdcec48c667419844022cc108da94282f047f4316cb3c04c93999193cc6523ec9eae032ca93d856b442e9f196e4672709ec8c8648e4fca1c1aecd33057ad06c82033b23e30721d85c4e72ba69ad2350c7a3469adea3498af95b3cda253d7d9d8539c1a1c27af1de8437c315930b54a58d4f42f798ce07915f0724b102ba4fa4f569994287f98e2e161a7b6f36d656525ac1ccbfa58191bac608d004ce5403787f417682c8fdfe1b91f59bc41677312da6d69752f7237ad81945b4251fe42856d0c54daf4203a9ba2cba558a99e836a5415ef30cf0a8b0ac741641d5e9f58ae67ca676ff0d8272984cb4ff39b44898bfb915020cc1261eb286f91ac3b1732a11643f73739438bce84e2f1f1efb0494d86fe71e6952f83b0d0844bccc1959096b81911d5ddd4fdd66e45c784c93cff6d583b880b987373adc41bcf36a62ca6a531c9939ba61b600e5c9a17a0135077ddec32934fb2a09492ecbaaabda466c00f24f4e3014857a5aae5b9302d0b9540359d6d1f1ae6a98610962d6307058ffdee168ff6250eba0c82516cfc56166030f76721a1b64158f5eefc17284adb06a17a15ab8f951568685232c0695cc84483c00221e1aea11a7ba84fcf107f6aa9c7bf3add875d17ef4f5511fc65415fc24d16d04d876f14afee931ac3a52f817e4231a63a7e1522e3df0d0b2aa7964de0ce822859ae7bae1a7176fe30d0593d005d357cf7b9e5ae0d2ffa86e76a4ea9c379a574144f242016a751fd287c5020edb413a0dcfe8566a1c3a6e22b3d55e9039ac13147f75bb66a14ed4dea620485fe601a9b83765e24e2bc7bc38f284b136d1470586a8a3b8dfd134f30aef4cb6a328590716bf8b9cec9c12fe3e9e6f4f2d053ee2e476da59e76cceaa64c27149029356a0623e0ec4fac4a51a2d3db259b88323d76a9e7a2f19852a637c73a6813fdbf0244136005501452f5d05c3c0cda548b12d45ac537e48ec2a62bc0ccd18fd495d1c44a005a71eb6bfa14673be1baf62573e8f1f3794b12488f03c28d65d0aeaf384993dbb0a1c41d7372fd865f5fe0a2cc744410f0bf413f40f99ec219c3db95b67bf699bea0b5227aaed690c01d1d5259154913ae7d9fc2b1a0a90c8ea421c1ef9551d54d281d6d964354423d0776daa8313f59779ba92b54f5cead79fa51f25dec2878b2bb9ffb1a956ec583c2ebb33c574c25595c212e61375741596385f5cc7c0508d0aafe91b0e24d12727cb6a02c80b3866f3260ee50cc9eca5e9ec7c57c789902f75f66f3a96441c3f98eb82985356ff2714c93e13fbe43e73f13ea3f0b003e7673a1828f3ffc3af7d5a5c6d22ead634523724faa9d9702d1730cae3011a08c148e944c9571043540fa50eba35579da01d2a64f95efa93dc009eedf66e08cfd54d06f5a6a04b7056db9a18c71c1de1bd808d300c24a1ac1d279baca3a76e83f5c68ba56710f09b0e9cf5bb5e742ef9b0798fcdf86a33ffd1d2f59524817e4b009b9894c245fd025102a7a090e35e0cfb8239e99b73bcd6eda6715ddfe2110aced645e18413258171a9f449ad87d32bd34daaa31989e166e33476357633b3989e826f646a05393161e5141fc427fd154d7ee56e88c556f6229bfb2d4312febdd1019547bbc07602818e092d705d56c427d42b8ed53485d68d2941e092051db9dce01d63a153c3a585248e5ca94ccbf30fe834a43558b6efe16db37043890b4af1f2a0804c0570b94c482c2269b11df817f9167bfeefa1fd8de626db611f6324125d59b5f7dd6e69c3279d4179103024f182ebedcf4bc2c48168350147dabba6a597a4de06b751a429b508f9ad04c0257b7d39b7286146799a5390e8414366469f65497f1925671706c0c77aa665f635c702ee3274d822165277ce710ce88b11317e15569d34d2b7ee2ba07336a70ea1e252917f8d3650db30088ee10222c1200ed112edd86decc21a2ecd88edf44eeda42dc4135471617156f73f8d47d81494aa494ab42c4c84e268357b6403f1de23dc33a330619aa1d64a4005d6dfa96822c65b77c0a11a7856be50456ac4d979432a7d8cf708e867016f433f6844bacdd332df9691c7670a01a9519c3cb20a4526bf54c6daaf238698ac871304867248ac8457885daa5870e29ca0f9053abd983a6ddf033da102c4d0c61f576d01f5370da84051549306cd710635e6931527056be2cf0a2aeaa2a3b344087566092dbddaec463851693a36f6bd8fb8d06a972774894c74d8912141885c76b014a6699c8954aac604326f7cc629ad6344d2643c7668cd66fc84a7a0e320c95a0e61ab2697e58978cfdd60aad9658e7309fb0b31529fc1fa7285a50b0028d1f271b82e0319ec76c3f6774a6c3ba755b70a207ac5240053627115897f25b9eedeb0f0294346f276e7ecda1635649989500fff1b858b487dd1061d633c15508ebd6c01a3a1b68dee4f74c68a15189f50d5995b4da43d98c4eb7bed97f773361dfe35c150b553b311433d30ad075b97eb55c03efecf965d1eb0a8f49b61a8a08e93d2899b0eed3e27add47407a6dc9b0004b995126b5c237d4407bc8778602f977f6903e30fcbf4caf4a37820a8c2e711a0796a13a569106ad2e924cdbca22ca6cd36a134c8e479703121e87d2fe609cab1a70c8a395c6db90850e3e61781ea4ad33f071e85b19f38bbcb257ea67c5a49fbac78128beb4a94b764d8b3d48dc4d9857a8ffe82c4c4851d5a5f5031034cb74de000cd9a118d2f56f4699b1cc9113d42d663726188de61fc8f702ba9f178d308b8a48cb0f739e4c45f76a4ecf994e587ea46fb4bcb414cf108c7d58c64d192e00e2cb8a3155a8e1efef53a16e904f2db60e5baa5b45078c2fa23da0b041f441dde64f57143c09766d8349b238a549730d89e5a526699711c4c55c9e134bd84ec9648be523d13772b6ffc092896359e66fc1a81dd912aba460a2291528f22136942d795668a514c3945203ff2aa37a6931b3dea24021544b6b4c19d66caae46163df7703e08988c4a78853b1a3e1e73f6b527e43b90d53be280efc86306da9b8b3ac889d68eaebbe53deea88fe0b51b18448558a02231402446044e5ca63a110b194792932d750508b6671475ed45d31b18c45df4663af4440226d9cbcd73da1d6cd50abb72b33ac7b4d3692e7d20e8f4f007ae253eaa262ec877281b826bfa4f3ced3ac012adc8e9087c3084fbead29f0ff62751f4940b45cdb0498379ec0939651600ed39a713a81862f3915ad2f8d3e4ef08052baac02240a9533e3e36aaa5babaa8e52483ea9d87353e30d1522172e28b4bc0bd057cdc99e05af22656bc30ea390b1dccacacd30aa2c71161dac166aafe3447e0d8243f99ca1a5b4e330308c5078c45f379af85113bf1e7c775b481517bc04b74fcb597b707710832f295f05aaba7468c3f0c7fd26b935d6c08ec2a861b6add2d413d552660be62ca9818e350bf4de3fc522629252439aee89d4eb7d80f8b4c1faf24e8e86d9a233b480da77fa5c6c621a99e001681cd9ba5b11f4528d4043b1c34255bafd806a00364e9fd1b0dafd1175d162fe5e8d85899ffac274d315885dc26f115853c8111432a828463e912aec8b18bf15a020052177d569e832c189ab002238cbe03cf05272a4eac3eab34339357cd7f1e503e49eb7a1007dddbacd2b5a5c656c6865bdbfb0dcd253b1a7da3466ba5ced8b64860e3ac29b64ce32300fb9970bcf906638cfb8971b8f2166705eb9dc7284c591a4f6880619e343f7ba8f1bfd68b0461aca515fdce17c7a5589b455ee3abda66e534de5d082cac468759270f2375d3ae382c3c63a7d870c2bac2b037263995bb1342e6da3a4eb05d5f311c26a59b75ed6fe0732d3585da5f3da08a832da6982c6c51f6a8c0c08e12ff085ac8353f54b07747e3507ad058c31afe66b0c6de4ff0c7a882e62ce81d4e486baaf94b4ee9d37936219b2b01f5bce678d44c477d61ccf7239db2b22a20b53d75a9bd0358e6cae8fcdbdf5b752f9b1ce92acb19a7a9e36266d01d0f86c3553d8769ec2f40ea46180db943ad64c13cbf1800cb8d3471be3f8470237d80b55f9cbf6a7a1e70ee449bc38f183029e88bc7ff5961847e494fe4a4a9db94bb77dd599250b650606a06605af00ed4008ca61daf5a2551e53e24ee452507f7920c8226069d361290e6d73374329a419a143f5297bff18a04a2236ef5e8bbbe565d342ab8af3d52cbe7e21ddf68a131e2b185a5da39e2b1544c6858a5532f01324f9451d1f151044a15940ee11a98774710be8e216f04558608bb4ee8d8c34ec09d9240b64b9034ea1644504f80a65e5b84a976c6d4b6e7b252b276ff41972be9bd8f30c39c4f1d3efb680ee7c9c147eb108caf148c692c4b1104539b15f6cbcde10ef437842abaf40d08e40c72e0c366dd004a812ade8945ac7eeefdd6a7c7c5164df6acfb749f15f25377377821bfdfee9a8edaa076bee6fac5d60ba47b4950a5b80fe0cc2d748cd90344df4eb0b8ccd2f245b7141d7dcba2acf893f7fd8903b8c6ed7674c968b89c62788b48622583b406b0ded9ce25c175077d8a9bee0b6d3becdf5e7c57603cf14475a5b4b1d044add8d74089688772c06a37e17832a94ebfcacb14caed5508e71a7d6a028da8a4896dc379fa315f06642c056bed88e9861978b2e500702f6d0b69ec67479ffadfe35b1b11bf123d9bf39360849cb070a4f05ea84e45a329382aa00d89eab581c2f03d33e5713bcf1eff81a55044269933fae28d2e903fed9b1bc5a238051217ec43a26caafb1471cc66b394cc08629f9fe5126187700e71f8f5cbf3e216334689620c5560d6fabc3671e097bdb711cde3e8ca3f3da505c01f17602451ce0e8779ba3126f9763b50b55897fb7e96b8aa009ecc53fcd2cb90bf00936158828cc0f7932a4099009eb1e2526792317b7f2d424e739e64262572cd28824baed9d1f07d6891c3ffe3fcac828f8d49eaedaf8fc2aa7211983f24c3855c1dcf8c701ad23cef10c9b1e554d19904d0c167f35232a5395206de62b098a7d77bb5bb0d37ca4e2a9282cd7c7970d5bef726423554723b96614d924c4043ab349756d67008280a8da183e1bf02e1e8ba8b2fc87468fece1b7ade87f5997689741e85e2dfe10fa26553dc043b682db99db33c634585d8894ebdae44a63a67000a4acb02bd21b67b27d24800b76d42b64a04b8d3299f51828acd4fa77e674d75fa64dcd4e2f8c304549e6ba425a31d598552acfe87b4f60d9e4fad827cc0ae9087b4e5defdc902962d3e853e87f856e713df520db5d66cd7f091051185f20cea9439dd30a684f58acb4c347ce2bd806275b8b8e210987723aca31714ec89a00358db4c838b378827913f912f5bbebefeb70df2456fe971025107cfd34b200da1b24391c4d6bc1c50c860e157a3058f9d718daa2f36800bf7dc183b58d069095642b7290b0099a6b60e40363dbff9f05c8b049a836fc1ba1418e276730f19df5198132d468baadb721f953652cfe54a0207aebb8486909c689ff3e6007a4af781c6444a1e031e808581c8c20df5257ce68116010f7644408bda2c61f0ece7db05631b3869e5bd4c1e0dccc23bb085b5edf19233f8997c6016890f8b4c0896dfd8c7289b93a90bba42d3e46325b2c8715938f4e7bb1ba20838e8ffbecfeaa789eeeb1b96c26fe9dbb945ec501d7793bdc5bd0b78e99ddbaea6f719b4e5f57693065e16b2cd9ac251d4d382af6935f3961dae077c08830048c96d146055ceee4b2989e93a9af91735d219e7169c38f02d67ecfd03c4d2a12331e9518430b38c225684e71ebc5638b1031386fe24362421c660c16f34c42f5783442daaf061e4cbd038b3c8f25a06456d48b79e7420bb1f1c2d7b271bc906c8097fe0a374cc2e559d91c7ae34e82962ebe06a697791193e35c98a257b80f3fa7cde8499f92e73e45e4a181bc0f3b1ab54ce265105721b1ca7673a8c8f3103dacbe8f0c4434508785898ab0c4aef965feec8425635b6111415b896a49034c6a6313f60fab51de34cc6d7f0cdf3afa05bc88badc0ff23c195914f095221822f875ff7c48b6aed3b5e989b62e4317ae5ac2b1a7c2e01ed1d080f0d2cb753fd36a87949138d6644d369ef7a3150091189e79a7e5d713c37eceab5b885af655b67f4b5a9c301a381a65dc3546febfa1f28b087516f166e2f07cb63e214a1ad3c32c82e9b04202b62fd6bc90be9c0ccd9ca256d809d8c3277faec23b164d025fe363393d3c06e710359d8c5408d31569901858a40e2b640976324ee310c3d5e8607148c614ada21f575a16b46390fd7eaab41611341ef9b0240365b8ca4c5e08ebba72e02cd392a2774418840b54590b903299e812222bfc27a0410860a7b45d349b983857f32677f6ac35d3b3cb749574f550796e4b779d80281ca30a832682e4efdfef029b01f8c10d9a946662ab59feafd08a5ef93367200648a3dfe28936b24b85ab9db3f7020a1b7095a23f06cae04c8b7219a614b38e82675516b15232f51ddf563c630c4d87f50ccd7b0cc7c34c6b1db57d167d5b9524638af65ee0f9592cbb9662cd1c3c2bb1267d27af4c505f268a472320aa8f6581fbfb13b2920e1f4a0b46a6769bb50edf26673f812416eec6cfdf18c84c0751ada72ced636017afb728f0a5fda203b405ffb05f90e583c8c60d29f2222967e545d51bfc75bf8346ea5261b1ac1dc4d29458e67ed1d723534b2d40d8d3b99bf017b697a8c828336a48fa289784150a0028d055c22a0ec3715658243c38d48671772e9036e5bcba3c99b9ccd348c36a53120e50428ea3e4ee4a90eac6d873750dc20b6cb53b7312bf49ddf9ed78be4dfa76e2f670772a58d3a2b70f432c6c981cdf24bfd2ba86236bed3d17ca018ab82109bc46a6f1a19422a4c7253cd1aca2b46aea63dec36c0562f64b85b6346e4df5526e35649ee450c01f4409c4d871abf2407e6c98da4a9661aa309489580f8583da4389cd5efeaa3fac484f8d878414edd0417f39e3f5ccd486a37c04b004499ed3aca2029284c8468f6fe7423004254cb4d5800b5a2fe91f515bd69859056b032e9d1bdd7343bb21ee055ce5971cfbb58aac3d073d26ad69ad0cfc154ac3d106e3f0ba9586e171482bf705445649c69005370c67fe43d7b55bf27fc8d56eeed0392b863f42fff987a36cc09320600c66bbdf09447d825974a37839b92379518eda842afb90a59622fddcbc84d7afac24428ccabae77dd29076e56605c869f5a049017570fd24fc8cb5a6e826895af95a0873c29c74ef53d2f230448124f8b82c0ced43c29d564e3348724e4a7656a0dfe010154035bfbb76d5405c4730e421b205d0b33dcd970e8f1d84d6b845306e732ddb114108db713666f6fa9b1d774e333b5c6338e04361c7359d821dec2e23cbd54e2b181c2a00dd7749989f5828dff02e37ce54250e28573c4cbfb4362ef5cf536bad7948a93b1cf4a56d38c49fb1aa61fc1abd997d4d846364d11d560d4c01bf9ba41115305dd8e894d521d001ebdf9686708a29dfd487a1c93c9acbef03489c93aef11515a2a8eefe3ac71ab02db2de8a2da251e724e4da2b2bf0b0573473ce6c587964910e79c49935ec3e035abfdb7e7344d4b9b05f39074ced30e70e220bc9682a179daa7f8b2edf7877ae0674771cb7b8ef9a8ecc6d038e8c1b5b9c8e0a7272d796c789889bee748c84d81cbada911adc83c0e347ed5c2b2eba37136bb4be1bcfcc6760f0b1c2914f14e5d44679320a73103b4f392cc3fb19fa72bfa448a37316cbde4b5f42b21e6819f521ed2192e6aa0a3b988500d70feb51d9259decd8cc84749e0d13429b9347a2f1e8aeccc4fc311e7a758eec1251f66d14451c1ca2d0694ef8bb724e5a7652b451507e36eb864f4e4ddb1ae5938325bc9edcf65a987cd2f96de682885fe3ae3f5fc30b810babb27e5c27a97eb87dc06984a620578b9082384c617ddf0afd45f66c181dde12cab517caef4ed73767cda21f871149d444f94e18332eeea43668c28fad460755465980a4754076861ada44227ff32b8122248dc41ac92aa3bf6b0f3c21942a0c7e2b4d44632ba42e91c072e94ff4f4ef27a8ddc98e96baa3cf9a7407354f064df72c7493ed2c50c79dec47764e4ef6ff413a333bb0557358acf51bd6994c525571a802851c7c5bed2de5b83079636646947c913680d3c047b754c04e2747ab3ccc87dc9a1ca752333078cd724da49ac5eda424ba96ca7df262eea259dd78fd05a3cc3c1deb21a58affea9d9a7040e9886df7a35ab967e1a0944133a3e3761946a7b3f3228547c6b9f694d4947364dceabfd49ce922a011bea41d9d4e76decf0a304f2a7ec62401d58864a2c4ac23a510da8a1b602e9a7c90c61ed13d647f2290af1f1b211d31638460dc8070b27b102636af2aca2b6c550b521adfdec8713c5df03a85afc277cee15a71a6ecd8c2eb49e5c4b4445a489ea9577f25d2423ac14e0ecc7ce42e6ad65e8f552e3515abb84a284cff50392cefb6dc086af1edd6803aa5035f086b3c729910fd0cd8719407fc4508566b2883acca0fdd1c42ac73134268ce399398fd893568fc09dd9cd30557be58ce44bed093834852eb106652b3a51da474a0a164dc153db30e55f42381bb81ff1d35bf21c58d16855bb5fd98327f889a288d20827179b742c753b7b2da04fbe5f7410234af2ffebd8f6ba679f86e9eb9895b9ee1acd83229da6d7b6fb782ac3a653ea017aee5019e77b121779f9d1c183a4f7a6d4bab3f812672bf060263ee77e629ba026e28281487a5cc96269c15f200f1da5fe42069b2d67d34d1d9720281c9598dee94826ec939b5cc8026283921232b19275042a5163ce48ce59ccbb6be51632ebdcab6f8120dd55c74ca4829db36dc1c0d87ae1ce7f88eab6dd00a19b799859f03d9366087a0ba691327d10ac7727880935ce5ccddccdcdcfcc06ae630371493898f8e2d3a91a33c6b74628bf16e9aed7b8a2db3643458db9c75f86654abb6d0ca35443dab96aec7e83c9e19c64b4860fbb191b059bde2e91287197a96db6f76801fefd671c92643257d41062aa1849992881391179510c3cd5ef745797102e34483ec0464c5aa35eb71ef32b0a046aa5a0d6aef64cb416e00a59a36d8157d5b6899d305682b19f11c6abe77c578624c9badfee25cd7b027fb963dc2ff605115814e5d5d0af381d15269e26fe576e09636e94c1d53181eb44943ce36da90785a5c4495f54f7088f7def509488a8823199c002485e94855b9efe3c337bb4046d0c787abb2b13e77650a3d3a6fea5c9912a90e88e7975372782ee49d600178595941650a651247fcce5e81efec1e2b78d1ee4f6d5dc152fdf41a90b26f9fe7ade35bcb0ca77757505cba96ab9cc9b4665094d1b7627d7fea351167f3e7eb694148b24366820dc728f1fc658fa1cd0bf2aa633933b1d23acd7e07a9f6294b4f4a5380b2575902d1abe84425f96ef0372e0bec375cfcf4b22f0081d1ade0a660339a8dd70b38f74810c615f1f84896e1f2ce5331e226b4b327dc28a150e2fc693696ac1b3afca96ad702b0f18a808d923448884db10aa49c852eae8f932a07ae621816d7266633fc6ce427793d67d3cc823470fc31bf0e6fc07e7d62869277a5bdf5e1d1a165bfe80ba3203f854734af5113b77e3226198559fa0d000525b56fbb4e977f1ad44b9cdc554c4f6939b44fd5e79b717e6ac2b4f8c925585fcd5a7624f2d71d834cee5fda1efb89d92483bba2cfe4ef349ab2105f4d044cada0bd4d70e069987f6ef36e5516856d6ada9ee86240b7590438b4a6d64121a7e35ac90354a403770c722648620d023927fb54c541ffc538eaa427a771af9ce3e6a097d48d48752f59bd885a66d777db1adfcb9763b9fd5f2d5792fd233deb6432bb5b1938e561062966a5d64d76db416e47b2a25f488d9101e5e35b0e3000e8c22bd8c0bc51bb5cc9b6910450b1c08064f59ca5492675f437915194257fdb4bee4e95c12c72fbc0db6039577898126612829ee29ee2bcb2a07e130ea3bdd5fe540991cb72ea4d57248011c58450f40758fc09fc400bca8ab0ae32c0f6a3218d236baa71b9000f9f7bc12fb3b53dabab17be47223d3b5aa540299e188db89195673601667daeff576cfd4d157c80821fc5d87d63ca6542d429d858072bcd5af55a54ff5e3c2889ac5398d85da0592cde6c0a4554f735804477e70ea1aae64ff63ceba6200b3a6a4880db8cc3d6c85642e1ca0418e84dcf9a5d92b8d7969f00628c4270d648c405b1495e5dee97cab98cc869d347d0e1afaf820b3de88a43250e61a6d3689abe5cbf79044bdb2de29c316d4ae4d7e4ff0658914e74a24c45263ffa78d23422ea16bcd2d26828096bb42ace8aed575a4d88c86db5f00f2585300f3ec43dc7a32ab02c504d9507548cf841e96733ccbd4f2d8bc409cdc8515fa0545c0753927d08126baee21aa794be9ad85c8791c0f1f429f50f62d7676c4be0bd0a676c08360c8f47fb76264225cedd3ecb217464693e2324df570f9b2b59eddf6c40acbd307c328480e3d473ef90ba9d212615b3cca22d586b72123d8756d556e7117fad62986350f0b2ae2ec56f764fd8e8f61a8da0fbe910002ae77509004e413f48a009675174cd323bd90939f7694f7800b287d454b3de0748f200eac38110fcb64cdf4588ca75a4a22c4e58f511b793da23c3f6ca8bf4a9c107c6330e4e025d56709d13a7f253b7cb9ad7ede7c02d2f67ad547e6e18837b2e883f18be149784b1727522d714994730fb84a8c016132eb076b93c2a03ba365619c4896c1728399ff0f74cc4dc28a420dc12c500a08627ab4392cbc5dea15921d8cd1bccbd4dd33a43ba37c5eee73586a4e68b0054749874639ce72c3c2800b287c9a57a42ee2f91f32e64cf0c2090514d7a64bc876c76b75102be706e150350ae5aac68eb8af0929d73c790cbe6b38bc28cda96ca000c17a2fc6c20b6ad9004342bed837c69a927f6d93f15bc4236a4b4b96cd5ccb48583bc94845bda5203075f9b015a2f26218825fd7cb9af0ae545073b1770181ae184ee2feaf47d4dcff16ebd87c916fae7ad71beb6ce3c18880acba332993cf0d0042e6f70f3958255a196be92fedf16b9aa18451282ebe59d2e1829037e965c8b51f86ec3bb1dbd54810df28941f840b8176fa5691836e9ee4b5b082e6b0a2e8adc91e34d97eddebd470df8eb40be5aaf7d6cdf2ae861c42a67e33a409dc912231700bbd4bdb821869f04f53c6196faf32c724b0a8e53c1af76806a884a18504fba7d321212f9aa7066b135baf963e4376ee4f85d806b013f9b2b0d9a7b2233ae9a09f47c4306c32694f3f245cbdb1d9e55b3d46617317e30087b1b72c6821cea1bb206905b89de06e5f3007262430c3bb1ec1eace8ddbeeb2394dd83de7cbd38ce37576c21e569042491d909c68e9ccd6b53da323339f729ab9f8226c76662e01c05e8f517efa88e0c94c4f9a3f85d67f942c590da6e9d2387b262dae13692a94ef74f8ec72385dd074cd106cd630d1ef230a8a1dcf5ed9164bcf667ba7fdf541d175d0d85221db3000ffec57815bb1509e30180ae33e94faa619d94835cafb206f376fb87ea5ec148f4c6b49cb97fd5ce9b76c8f8a994a2b2ae21d55fd420f2fbe4b82c2f80dbd096e632dfe0ccd548d76d2f4eb1925c5d19fb3f65f640c20728ff0e73cb9d1861f9afe1566acda108c569e8dc28d67260c5bf2e343a750f0b6a207586c3892979987356c3d18ac5516fa0271280380c6676f8c29a1b56e55bf8bb101cd45d18ee06c615a97f23ea82715e9ee2889d69cb2ce6676230b0a924865d40eeb1e7280798780572ba8d8e4ad92973743acf581c2d6b574aece746c96681a2d83f5ea0275c52bb47c0132910d79360f2e84b60a0d9a70cc60217da3a9c78b1b00fbff3581636f951ef8cbcd940b49c205afbdc40b29b3adb20ebbe77ff6d7aa2e7df596a63f71969043c5cabc14d520f485c1d6a19804b6bfa885f3227b8494f0f1df84454b850ea03359856f7c524cf2e04c390d92ebc0c337e6241c299e7d3777e3e40e34f578663aba03c254711a2a8219484041a7e01864487eab5e3eb2f08f42b4dd813c56e51985674a9a5febf8e68dde0d30103ffab40d27910e5b78dfc0b2552f4e7f82b77e0def88e9ed4459004cb131006a2c2ab1d622d3f7e85077dc801e731068af5ff5a261fd13249b0aa96788dabae9c03e9afe2ded7d8f1a55acf145490ad9c37e92fd853182fe0361c0c7a3ecd5f18cb670399f3516434284c65cfe74bd7102e750bd20df0327bc081878bbd48ef0b17605f3fac3501fd2e26b8e0a4f8148471467ec8ddb0f7472c418f9b019745d674e88eaacded7f216147f8c5b0df58a51e2bf766cbc217ca43b88ce8a9eb7328d08d8aab0144ecfb806642d75fcd5aeaa238ca506b51dc76922130e5f493e44a1523412ccbdfebc00f9baa1dee7b2acf251f231a0e51ea44710511aa0b3cd3c2a46cb2e0e6b6ea4c047bbdbcf4a58a7d1eb9ca70715bf0340768d9c951420f4b44640af5b4e47a3dfaf703c63d19cb9b28baa794e63373d98ba3768dedb40be4041994e49000f8d142602f0031aaafc73f5b270ad9d5e64b13c47fd263959c7b6390f2d6b3320d746ffc78a200ea1825cca5c01fc69c7d58484e30d1f763348cf3db573770d3f43c06f2dd0ef9969afc2208e0bc6759f0bc440247164e389b36296aa2b37c0f447aecf5fceb146dbf7425c2d25c9a716497b2308e980c5908955fd44b96b907df6b7a05ae6188f9fa5e47d72716299398bd98020e6781740a861eca59266956f9857c7b8f1a87985ca4b0ac69f1d0be638899e8fa2d6d363d6a1c328cb754ec0902e4ddecf6b03835ee168ccd5a54933198e1651123a97541c52e3d855bf88c6ae170270b5da39898c972b395c0c9ff118062e8169ec0f53f0300cf8ba39c4f763de704e254960b2bedec324044fe521e08971e1f4a1773a33361df8a36d711d3b1d6982214b0676a191bb42d17c51549c4650f52c80a59f2608ac3e58b2a6bbdf9081d9e9dd8a079c1521c0a6b2f898ddda46611087c8467a562693851faf1cb678ab9c92b37826fe9e0a2043d4233ea86fbb43c112ab3feed6fb920831ca55dad26a3bfd897d83d487b1f9eb1eb8c661ab4e4402c04ed465a435f126c81827fb6dfd3a17fb267741cab15c31a067890c530a5d59d06fe921bdb183e743c351eb354abb5a2865f000f1a4d1d819ccb4b1fcf96059f7b3912ff7c977b37d1d07b1da75a34772ae241cd06ab6aca9b6427baf3a838da37e176517086b9b819c3eb3fa7f21eda82230b39c25a5b22c80b417c57a3cf2ec1b76b0cf36845c932c4b8009bf33c892ec04f6e9cca32bd40a7fe08fb532c016fdd9effc6782f7e25840d5af347423eb74f161162226bcd8f81c2110f5cc06f49a9d8d22d703693886a0f84a5225c09d35e35a598cf68d1f3b56354ed3345556ab51db02087a0f2017b8d187a75ccfa6912a93d83ce5dddc79164699b557a108ad49d3561d814c1dc868c52e8ced490e406f8a932146e7f542005b3f2be61f4b303ab7ff8666f8997dd0a8574069049d9a867376e74f4ff84523b6ac6f22a121ba36f85036a11f20a81636a961f61aafc4897dd8887b52ee88541048d7edc58cb4d6ab66be580cc8d73681d170e0936398a2a9416e05a670a7199e2628dac5f1a79f080f376acb5034aa106843521bcdaae7be77425a11d296f0cb3ef0e51acb0033aa9da875a209c19a7034df189abb43891ac0138845830d3be06eff97c3cb82c2892abd5c7785dd16381c940dc688ce0a25b098822588059d12aa914e496064fc65fcd33689583583233a027978c4d3642d20ca190b6575adb7b4b99929401570845088f081ce3dbd75a61c33833721344026164d32ef98ade64178cb77838e3e221cd0c2f1ece78ea4d61b81757ddd894b6706c88630cd20e58ea5cd7b18c0a88807a46e2bccab9c0b210111b552c435470abf38e455670abab9edf70168eb190388e2b954aa552a9058c658841e96d97854a23c0c260773b0574d8a1671f01a0a44a920a6aa4099902dcd2815b2552969293481bac44a2544a8ee3388ee37a4aa3236c87520b1816f2884169148f8cbe7d8724443ba82d3db0d29bcefa4a6130ba8c32150b98106b58a5e23849ab7064a62299358a653a739cb52a95a6e4a3e71cc9c3eebc96ba1b4a250f3a57d2be50fac81e1993b0232d8c8a34a188458bb31cafd9c819af5db72a8ed3b81c923cd7a42f877e8e3d9cb943c833ee310a923e475128045f73eadb97c30e346c1ff690c3f65ba44c3fcda3a74da9c9e9cd617121820f7cc0e32282c8dddddddd936ada46a9a67173db6060ac8aa8fbfecccca8bcc8458a2885ed38cb433f5da47091c24504b6bbbbdd450a0fc8ccdb96169749a9a6699a36e9f4231ad0cf74949c37013eb2645a48b23bce9ae4cd6a97d1c55d8f9bf3e58fac76120de3bdf141c2640a09b6bd3b365f20a453058899133f5f2ea0469a90157bf61e1ebdca7c537a355f7da1925fad5cd33e9fbea24173ef7c9e50ead3fd74773edd136eb9330c8fe1d2c3711830bcbbbb6378f47060f80d77cbf0e87dd7a3871300efc50b1edbf572ea341f0e2f3c7e7f4d665419325e9ff69af942f9335ea597802a1ee079184ee3b53bae353c7a383534baef0be57f4508d85eaf96bf3e0dd62c270c561f1aaf345fa5b9955295ad3d34be1697de8c0a161325460644fe74711c355cbcc6c55bd5ab2a094bc3439922cf6ba9eb900b6da8fa3abdcab2b94d3140dd8b872e3e08d05e9d4bcf8a06e9349cc60d6d841a8c86d72090067ef0d6201b5fa5c2a02653e462898b18b7689cdd4513174380405107019e55debaa17f5579cd0d555f555ee386f6abca71dc90fbd8ac1a38545e3d4a5735aaa9b9391499c15f358ee340bc87bff37010bc3914b9f11ede23fecb79f80dffb7aab94af8f002f87b35aa518d1e4705f2fd701a9f8c8d4f268a580313da08f3df0ff7f1bd03f964824cefe3ca00fd2723336b16cb14753e2edefd700b090dd7817b1c1d146ed970f60e885b393cecb81f33fcb84970ae8c118f212ff7e13e6e92025c99d75d21805fbffa219f060d973123c85e32081ef0bc94bc78e0f876f87f6deb0e661a9d8d4f06cff1e9701c1f01fc3f7e75b06e8f860c9fa6e3d37a3ef90488b1c6856b4c620d769922924c910d1cf455b9ee3f2612105fef38be0b704fa3e4343ecdc6a735f9b41eee60dcc1388dbf4d1a8d2ffecbf99578dd243dbcfe6a3cbe150de7e12feff1ad68dc1c8acce02f2f72e3ef3dfc69787c259991f27a7fdd24ab7a25d6b0bf5e7745c3ffae9a300e761eb0671a7715f3b129a741e3ca1409c1c6380e0ebfe11b1e7203f0d07e8c003c547d8c8c87313ec6eb95a8c386b3d719b76c9cbd526157019c6b387bf5e1560d0d8fc143150c1eda3fb13ce4fe047ac8dfe231ca9044d6606ff1d6877a458fc88dfbf0e80de9e13e6e9255cb93cc4879f9f0f8eae1d15be1f0f724364ff420f67ae7d1fae4ffc7521021e8e5e363c2e55576ae0f87b7bef8ff25913c59c866af1e482578f9b84ce0f08ae3abe155d2701c1f0f1f669fa35db44a6451ffc153bf71434e084f7d00971ee1a90b20cb5397711bd40bf05129cca26ef3511983d46b7cb40983d4697c34166ba8d77c91c119d7092791325026b10675ea31dc5005e5a9c370434b9d1589c01bf287518b176ec83dad5bf7e286f25ff84b7b517f7d341ec3a57700184e73a3f70300de2f3e1c685cfe4df7775dc6173f00dfcca7e401f0853af4b75fe7f1ada8bff3f01edf8a5e243d985c91c52b090fef019504132f26da5fdec363a460dbafcb14712b64c1eea7ea60363c428b1e86c788d18af1fd5bb55bc1e0b76ae7fec9aa6fe7f373052bf3e2ca1431c89e6a82d53c94292272e32f678fc80cfecede901efeba49b42a8a78f570f686f0f0bf496493205090c58b87dff48c9277f1859a1031787c3dbe1ac54ba5c1ea0f9e3df5853486fa42ee430d262305a5f2a18b0f656235587de2820897d045a668c6871a0c0666fbc219dedae743ef949d8f4fbb648a6294e97c648a5050854cd17314af9b6be3abcaae870e8f2b4218bd66b81c8f2fbe5a6260438e5595c8c00118426c575f4b820e9cac20b7fee84d1969e0537aa524edd22bdd65f9db2d273b0af5c8cc2c6de80dbba7cc94e3ed48b79a91cea064cacc3394d39c6ace7948a9e6d4351ca8654107c3b9c6f9e6a1163df20b16581c58edd24929bd21eae73dd27dcf380237b1ec1cae7230285742a8bb7e7b93129af7d77aed26e9e145afb5428c5306969d9bdd37a47fa4fb2ababb29a51aed8dd2d994523ab3a9b68da31cdd569b46e716c4e90a272c5889044b669652d33ccbcd0fb424116b8ce0126d8d7909dc15dc0ba89472b6e46c06b58d6e74a31aede6139509921d396440bbbb72a781226b038b33b596f708edf99902a662d95b9d6ae9ef24a32784a1981cd7f9749653fa948e83a59ce53a3ae9cbcb5bb48d71725cb0ecd225a54d67df233b64dd4c6043ae279548e8eb307fe2f00f3d6b1a25bb64c92d23ce744f81a593b3dd26b7edb26b9ad6cddd2d9963907348f2dd7ced55ec3528b92b1a6638ff22e95e07fa4c6340c3cb758c1e633fbd1a758d527a9588cd12057668573d99c21814809ef18c44727646c7f37a7b581191afeaf2552fac7b790e9b2f1f64b441f2ee932ff686cc97777ff0c0e9559d5f9a566f8c36482459a73cc99fd0c11392b90b9223878d0d08ba074d71a23d1ae294dfbc4e26d1801e6b5ab0a04a48bc21a1469a50ca8ea537f9e5d448bb78248c66a6bbe18de7db146897ecb1f2089a1f297fa6b0d285c41a172ecc6010cc62d64098014ca39088a28e144c175d5d6449879979f261f7e18c37c61ae9753a89a824035f4e0a549249a258d35e9295a4708ba65691c1eeba92ac934d184d58633fbdca976c8a0c2e892d69f2d207291d0f83b2161123ad4e62ecd18e6a939744f0d49815f42ea1ceb5abaa566bc9a608295aac96b41066369620906ecb6ee0e3685efb5b0d993ea44bc2356b7ae74a5ea72a2cf7e3c56f523ac74dd2e6348ab0d0786295216cb4590d3eec88786212e1e443cd879fd3e67b7e3a89db72702bb4f956a8f150ae22c5875d47f1482a6c458479a84ca46b50bf4a4796a85df5e7a557d94b4a14850d29114c07f95d4feca54b3a6d7aace79daf869cbabb2262f2cebbcbc3e934d4aed5902e897757443cb76e2f0f5de74a5e453a22a75b856e9d799f1c7a5939f6b6b844305cdb2df5708ff73d812a8d91bc528f0c49533e2cf5fc4b90a9cab7cf2fe608ca23991f9e9cbc0461c1f2d7173cb1a6ddb3b02f41173663105ff0381296fdc5d00b2ab25c18550909b5ebc5d08ba117432a21f962e8c5d0f74bd0f78bbf4450348dfd07ac6ac679c59d630790f852deee93c2c60fad7498b6edb3698cc668acedb70e86f8b181910c168b18427e5c808d5584187ad6c72a4240f97ad25452db628b2dbaf024f9a10e4ffd8635d29540f7f4e2b0b9a6dd19b99962935c23b587241209a77b729ce972d2ab572f699ce3c03969ce49da36ef6e55f32ddc4a9a478e5b5ae9931b6fadb1a62d61431b9b1d54bb54b28a081a2e71a9a8563e31c7185b09359434dde49e1d7fdf57da2ce98a06a652ca6f39c1165c502553efeeee9a279d94b925edecb4d92c552eb073b66d287477778c2ad9dd3d83d09c4eada9d6b39d6894fe15b48ddbb68d2391b8ed0a1c69e3b8126c255091da67a99d74e90afb705be71b8d468f34187ed0cf822395b66de348246ecba23467dd384e884d8859bbd9cd1d3aa969f1b2448caa97252cc3f8cb0fb69b01d303d3f384130d77acc1006e47549b92270983ec42da257d60166720d6605fb2811d98ebad08bf604b29410b0a39186b5ab078f9c1f6544557cd2ab7f97da4ed60c4114efff4210d818a2d3ee474c0e40a2eb04c6654488d85086e0803201c263292cd8d1c3baa3029828e000ab12decf6b10a13203ee4908861718435c2891555893d79f95865042c88f9bcd0112ceca34f4b291d5281133aca2f882d6c1059640a15755098a84373e91bc79d4aa420b0e0a9b553196b78fe166e379cb702fdf2e3b7fccdbd03f0c541fe7c1ce4cb196bb42dd6b07cc2df9082944a9c932e0f24e748ce55e781f3d25d6df135e32cc7ddccdc673ee33a0495e3d6149638449fcc91ce193b469fcd7ac4484fc04f5d53a283277e4e919b36b3b191a3c489a73ee36c1ed51875783176b5c4cccca4679e40e40ff6c97dd8cedd2e372d463a3b06a3b3d4f1cdccd2641a82ac4282a38f5582c0f2563e560902f6312954d4b139b3cf1a087d151bf85840f5e10e3c3c3caf83eae5c7b71f3b0f09477d8bb126d6f4a45aac6119e6e55e417beaa384426e1c0e245e9d245ee101101d78f5b091a08917c7389ca332051ab8e0d5835605cb6bb3720508aabc7ad88010c46bcbf1dc713890d8ee8ac8e624dfb815116e73d2e522c73edbc3d1a646ef0c83927174df7793c4277260f483cd95bc669c71b0b72461ab94de7202dbde5378f2ecdc15583ae994a8091c441c961e6f60a5e7c81bcabf0085f9479f4032f5011b5df66c79058d63cf492947224929954ab5769de77938a6d3c9450496baa554542d2edbb6692f9d06a3a150303028afa7d26d06869b94eb346e2b41f949813c20f3e94fac295553d759cfe3b639ad9daea29fcbb6cdd8e2bd78db46a5e0c8a4cc981819335f521d4c4c87f25428954a05f3e2a252b558954a7552993c954a658ab1a6342b31a1324fd66ecf8d2f73113c31c6187d40a572dcd2b46d6a946a342aa172077872cfc9cc97b99999397212e40faa0dc24a2945f439e78c31462d5424d375909d0edc73ac699fed51ca5813f6f01ca3f4a91cb756ed8a504091e5a3db3a3f19d5c7d0c03d4d3deab74f6b24cfce69ddd6cdcfe55bde7e2d755db775ddfcbcaf5e37bfeeaba99b5ffd7aea5abaada59b1ff7d5a59bdff615a683a9a82ed5cdafbfc674aa6ee5c285695e1a6bda35f0ec12476fe0d9a98b55334f9e43501995426794095107a54d684f1428d4c90c3b648d2a910ae108af7909d05edebd69167bcb111d8934492e491bf8494b24a9a4861d52868f596c0a30c3f3cd0a6e38aebbc3db007f4d7b0955de56303b9ea86410f0f0441d337e80ce1730605096a201e1a594524a2965648e0351300c8ed1cca6186b4000b664b0ad1c0cb2aa89903e8e2c7fce4baf5de067e92729b23497a125b234e7ef35d7e6fd49afd4b4da5bb012a4941186e455b68c6d8a51e534f186301cd31bee0719ecefc60d27c42f4d0c0d2c477eda955c7a5b90d21396ab81411f0cb68f20343e835d9c9dd996df4051c78cde8a86d7267d198536285494aa60360f655a4877c6448199b504df1ffd19113cf09565479e261bb1866743d0c2f7477ae9e1d83461348ba8d4552d1a05e5901c2a4264d15aaf10f635e7b89632f9b208b1359d722f1e72cfcdd0e2a1ca057323b3483c6312e5d8c74d7eb0a1f4f1914f7eb8a54509654aa02ba13c6190ca68c8ce4864490e21a15f3f1b06a99fbe1b0c4a287c83bd8dabaee44995d981c4fe42dff8bb42949af3fa29f9f9e940bf7427115fc8543c275d8860e79c734ede6a8eca053bb9a6240a74c85d150541fa928841cab1c842989c7aa8e2de44499dc352d7d86dbe1ceca10d901b3707c7fa962ee9e33e2306a9cb22c6915630488918a4313f3d7a34c4bcccc22075490592e97da1954354b09b8772e8e765eebeba35b2311fab84c087af75c78d4a33539d5d72a859d4abcfba752a02581b2c1ba9fd6c2dd1201b1bee8660cc032fc0a6bfb0845b2b6e7a0cb2a823f573fae569d70bb0c89ace7197e7e70b30227c3f51c7e673e6e8e7765ffc8cd849561190006e6f0f48f79473ce19674c21061e0bcc113047c01cf162c48b112f46bc18f16244164eb2b5757e4f2cd396d364e97c49c2ce1391a5d21fe5d3b9fe91b448bb80501fd73b41b31d99d659ebb50866ea39cfd33cc91df9f14dd2e3ce156ec91d290c9ab49dd90e959d2006bbf3ea76c55d696a46db56a5acb5488d55aed62a7b7e8c28bc1b6a40e83d8de44ce99c73ce49dfc77b18156cc9fd080592d17365f8d859f214cc92ac88c4f0b0e2188f2f546a4504c5c38aaf122e1ce52a47797ca554dff7b8f81ec638ba5abb971f8818ec2b59be7fb0618d85f3555ab061cc328b9463535cd120793e47f23ccbe74f7d2f28b0cc71d6ba833cab0e10e36897917dbb6a8ad9b7ebfc340b4aca51f7a54704e52d4ed8186fdf39fa10c65d4566340fe3d0c718d45e3137e6084b3558d4d103fbd30d61624033304e5ebbdfc798c4d60311c18ead5f12c18eaa2cb33935894ab59ba427589ef9e2b3132547a69db80a416becc5c77215a2b35e2909d69443458e2c476645d691ac50f1ed549523e3164b995109ba922394832567885bab994305b74cb22c262b565831b282859523cf8a16df3ea96d691932695a49e398604f3ee352aa25cd4b925aab5271a793533799e6694e3ae7a4a9a26f2f552d55f44561a90f0d398a3ad8db15c013f64bed6f2875f54fa9ef474fb3da6b93e5fb23166b92604f4060fc03884a44a52fa4b1f76e18a16032c595d07e482496a36f287e5e4e394f1e6b1e6b2bbef2db89327f00a1a872312014bd8b159af0adb11f2c7596474ab3a726af4d64c48ff103799227eb39908c22f3a4d489a223e5f4e940b1df278565a7718e3bc9bb3a9a26ba3afa7620db723a75435818ef88b0395298d5ce374796c56a329090d10313ab08e24fe7c70956f3a1ff180e22d8eeb572bcca4ffbbe37543b4027b0327a58464fe90956464f8b7327e79c94665147e939886f7e587c1144d70e9010ccc48671c8e6e0204706823636714a4f9c42c86588288b1512c8f6527e14f6a19088ad18198867ef1f20dbe95cd111c2c24c72197a4225241289747586186c1d1d210675acd0b182c1ab7385efcd0c66ecde17f6db8b44c27c617562a7f8e85cd1f9e116cb825eeeaae4f161acf87699a2e8c1c7b2953c8c53503105d1f7ad4e18ccf2b547070a50141d293a336e556fd7a1c22dbeb55e2550b12ef6c1668fe5968b1f294709a1ee8a888a871857797cc5a052774524e5322e73794079cae30b85f2548c2a85aa2d2d2e4445ed030f0f8ca8c8a52be2e13080c196b208836d434bc6c79872e9f5a85da887754b5ece398bf4ac1a354b7accad333924c655aeba498e5e7acc8d7cc31ab423ab62266407a859252570a54ce99c46954ed6f9e15618adc874a0708b77f03d7364b308110ccac3b1d2e42a0fc73ad566f44c93d3193ddfb023b43d1cbe3bb26f278a132cf5e94cb97671a8982e724b7b82d5627c4e0f351ece366b525f512d46d5f1a9c852f650e3a13cb1862bcff4d5bcf406d5008b8f4134d062001f836810f43245304b3f394f6d4a297f4c7efaaa94f2cae8c7b36f377d61ac82cab79fbe305611f4bd0334991575ccef64643c9c9d280ca61efce85f10ec0e50acc2858bd54a4609834d522299d37f09834aa07cde87b50b7527b37866a6be24618b0cd93014a39311c3c391e184c1f62227b0614ba825d4c2c22e4b7f38206ba307df935d003edf1c83726601f850207a108764096a76a230abbd0a29df9c7254eadb9935ab5177270a5b997def003168021bc6a19c386300bb54de433a409fce4fb31ae5298f3a5018ec2fea0031806ff88ce8fc30d845b03b54b815c6a119b742193d52b805eec8768076a25401649be52a193ded9a3edf5e67663c1ceba7964c4bf57938d6493939c82d9ecba1b7f092939caf10b673cfa94b8ef938ad9cecdac718347dbfe4614ab0de67bf99fa711d975e5418608b88464ead4db0d2a58cdd26be2da2e718947ad4bf2fc789688507315a014217bb3b47d6ae98fbb04edd0a808e463ab13b78f86508bb13d4ae1a6b56c7960c24221883d892d1b3236b57ca85be6d153262327af88694c9b377efe091f7877643fad373bbce09bb2425a1e509940a2f8b40233d0001f070368fa00e0ca22be6eec89ad59eb23698c2891da04e5604ec4010643180c17616cb0332bf488c329288ae989b93b24afcb52203069f237b41c2c2f0edd509bb1ed6ac3e79589fc0ba0f589efcc4e4ed0f0516c5c65e20f1e7142a5382e6cda1f2395718bc92139433cb917d3952186c55901a821ef60dc18671c88aec9bfef85401c482a1eb220ccc7d21c2cee099c1f3ed319c0173c5788cbe13855d31f763ae54878a537cea10368ca1e8db519ef2b0fac450d4ae5f128311df10e663287af9f8b00f8b8d31a4b0a10cd9776a06244306430c39c82d7064b1a63d86195de456eaa3d79723ac07e4610c365502858a5362b667d47495069017237e09b75642863c0c47a6f3d3ae22768a1fbe51a8a6abe1d6694eea62031bc6297e7680b8b5faf1e22751ac914e61dfbb0986706451c7c9db5db4607f09b7934f429526be63d094cf86c1d3e54f7baacd8f87460dae867ff468d3bdf4d8304e8101f9018b35ed31d684d4c391b9b0d1d9f070361703e8a407a4e47cc32f0aeb8441e9b588f93f9e4fcda43dac875bd44fbf24d6845bd47db865bdfd9f708bde8f9dbe6fc260ff92d337bf87c176d3f74ebef789fe3ea9ef7b9ad58efa3ed6ac87a19a60497168074800de8f0d061f4ae6bcfbaa002a7de1110a6433c5cf37fd56f3fe78f1a41a257ba693ed1697495f6050a9186d53c9b858cdbc8011c33f8e740140130019a51740160c35861935346ad8441bd3f495a6517f58bb64e0f99893fff9284455004d91f21da734f92efa304e81f2fd619c02f43d45f63d65f6ed1a9d3b403b51b8d542f8ce42e4c2920559a891c6c5d722542d3ff9305305c2704bd3b8e6387e4236e4604dc369c34695e3d6ccc7d80af465091be6784ad9690ff5b911046db3e80c0639122d810dc118593b705f442965d2c453ef25ecda66b286714b6e455188a00c3d792ae464d64da8f0c4536f8ac6c49b7d5e1194a1209351aca19e02c1f6e2b759bbbc26cca2ee24e8891094a1a75e14a2a79e94a2a7a5cde8a9b317eb810d4bb3166e51093c3bd56cac913e8167ced12e6b7453c353bf61f614280a413e3c3c3c3c2f2684a21044e30c0a32ea3d59ca9cd383a7593387054a4484ade9b66d371864dfb66df3d06673ba69dbb66d576bdab4a94673f8cfa1212c43989b39d250f3f67bf305f1d1eddc97658cd13b6e31c6786f7c30c8ed3e38e779e32348a8dd1cce6ce4c8acbb67374443ce71d636733373b315a018702f4cd848c306a89c479a2d057673a97d309a73248f574572c7213a4ccc890c4e275d4ecbe1275dfb598f72bb2f2fd0381b29345d08b7d8c3cda98f2142f1c618a394524a29659432ba8c325a23c824d40677c824acbfc4c0012e009adc320213716e9c4f0fd22ef6f69725ac9c11721ee98e798308e11a62f4edc618638c314619ad09e81591a5cac2a8a4949203c252aaf372cd6acb011fe1e64ce7b5c1c80d44f2de60c4880d4446dcdd8dd87003d10d3618b1e10623416e382614236ad2e344c2240fd10c918cc58e481e19b381c89dc8ad098866a44f08381ab948a9436a1ad5348e7235364c9f25902497aeead3a374953c74f1d0859441f2c81af5ca0e482943df286b842ea664852e5288f41bc9877024926f242e0af5b7bdf4706e6c167787dc49990842e529bc0d4241f24ad09110bd4235a909d520ed5af5ecbb4280e69b0fd17cf3ee3b6473ee2689496e54f2a2378c427d6d98a7f7d84f39bd48d441f269db555187e48935d367136605b58b7425076edc983183a6254812e1a773778766b5c0fea6d966bd00597629352b72ce962d939f8cc2e0741590954591dd7d95f0d8f31bb6a15d9e4f37227fdad5f9f4084497caa900c62cd870e0670e20622863d2e73379fdac07893a4c4162cd74efa3af9719589ef415e439a0ed4aa09416ece6b55359b09b6fab9c2ba330a879942d235393129edf7077b721d2a759da9df756e721b69ffc7479307908a02fefda20e567e4933dcd9a5ef2f90844d68cf598733a4c172c9d72a65d614491ccc7a863192467920a900de56cc62d2af4ae7ecc9fbe52e2c55dfe7e7ce2c5dba52cea68a25f5c7c8776a9e846f2ea9d5abc48d4617a9981e597eb724329e5db6513116cdfe1861228470ed5f70d6d6e08926ee8dc0d551f46230ad3052bef0b13965d0a5116cc39e794524a39e7a473ce39791a39329b31732f41e423480d73929a08c5d9f6021905dff0218485f057847d48119f72ceaf48116e4d3bedb4d3ce22428608b19022cc2df91c24870dd5a197b03321e98384c925dc0aa5f3dd81020ccaacc0869d1023232142d60a59181e211a34218c4d80809401268a0f26cd109b69c360dbdc60b0a50c6da44f29a58c3287cd0d9b6993634e9b59842fd83bb208d9c4a2210c30626363f31214da5481e6c6cd4d90998f20416e664162901b1f331f374166dff80892c397b09192c808b78e702b9cd9cc7a0926e24ce301c771dce69b6b1ece39e724cd394b5e49a55289c46d303c53b41dae20527a904f080ed26b60b065330709e1165f6e9257ee1312a4869c182fbd862042481ca40621f2de1bd0eac0720c0aa31535706b08b7c21e0aa3154722ab9de39630c1cf8e4146544a29052d444e86a65012385c17b32bfa7c61a8f49754bc7455bb72444e2525c30851aa042688419e40f7850acf1e4aa3e7d927407b9d6435b061c9e724f361125da4c892fe7d321436850f592f9ec29ac527d9a98978929da278ee41e44e53ea9c546888d99f3c7add2e58d8d0bfd96b95f2096ec260ed89dd3c0c6a41a9a66d1bc7914852ba2738f6a7e4536bd7795e5d526315166bdae4e1549e92163e30d8c360db58ace9253836e601996f61b1e6e5075b8ac59a9631d8525a60ad691556630c46174d33d928a6cf42b1400c9a3e0b14c54261b0ed0f830d8342a5b460b03de5e1541e06bbf4ad869c5efce44a5ef65b0db1dee22d37498bdb212ede7293cce80d69f1979b047594e26916caa859ed252558ff2a8fcb57612c658b29d4004a885b4abc4f3ba184186c12d795977ab2f2ee0f7e0f06212d604db4e8e15687c5b7a77c523f1e475145282bb8d5414009b50b854209a1642819830fe3041ba28c9c887d88927d3b4aa848c6ad1025e440dc923354518ed251d4a1e5f861f3f4c65833ef6577ee03bf2b1d958e4828a16f07b71b32f589326a978c18ea28e5432a967222e54b47df1ea69e7ca38c523d547c986a92eaf946197da77ebe5da3b374d42b1e6e8575f612c6adb00abdf4b012bdf4f69216dcea21948e967cd726b38e5320a8f5e507fb8363a3ba6861d9a514a1d7815f72a0d65a840d6968188c44d8c862428d34b563666666963e7c7312069b79e348a51ab3f8d641d6e81d624dc370918f1b066b4456bbeb9bebf11d437c21022082ed13587d3b0cb33a4a29a55332ed39631f096957648d8716414a294fb31a69c21744df3e3b4b39da5397c8a28e949dd25365ca3be979521597a358d3a62027269529e805ac553caa211515dc9af7052cea489982be9dbe08bd08b54ba57a11520dbd08a986befd050a6aa4096774db769d3cec5ca6d335ddb975bfd0e4e70b4b628be4e12c79d8751efa0f61e6a859530615165963be00bb3cb709bb5441cd9a3e55414e7efae5b93e5cd85d72a76bdfa5c2e08cc1e93347edba30b836f8799df8e9ddccd1754104a797beab44045510c1e92a205c245441edba4d9835ef9208e3bbf7def47d7aeede188393e7fac0e074fe2e8cc1e972460b66f98267e668e668e668460bfa43ca4114dfceb5cbfac9e4dc0ddbcf46ae59cd35f9267e7a48cac14faf9acb15b309d3ec67ac5d2f5478522d860a57fc0c5fa8fcdc3c8ca1c2f7136be6cc51d04fe7be99232c58ea59d899a318643280620df5a12fa8d48df545450b158d8800000004003314002028140e07c462c168309a89c2a63b14000c7f9c447a5c99cbc324c8711432c61862082100000046004446664620005fd6f81003c0970c6bfa546402c8e180d3e237f765d58d2191475c9cde65e31e3b3c38b3a9ef33753d83317fbe1b97a04d2e0b232a8623f5ed7975c68633bd80af49ddcfc468d60c3fa37c23a2a3a091e8ede50f7b1ee6be4bd0e785074d44a2dfab5ffb4cad0ba456b8636db9f5c2bea272dd214b1e1302992edc4b48856d8b8db34beef221325e60a0c09e7798c75211c3561cda59ffaeeb7c5f187c3d80987eab933542b7336c349043e5bd5609f84cc3f4e164898f3a59661ee2ad926fe1ebfc8bb1b2e1ededd1d2c790ee095390afaa6cd976e9984d9ccb0794e9d1281ab754bb4c5633307d566287716f3f9f7a73617f891fa2a888ae10f4a30381decfebcacafc56592026eab6f2ed56c7d8f7ea6fa8d71ccf46aecc8ab11dbcf790f10c83e3b75903c09988bc0cd7b11114df6d37638c13c819a5f09f0f0b929dda6b2e2a4f156a088103a4d259bf8e48913a611beff949bf2af63a6140cc285fc1d6a77b716ec2c0efa8216eb0ba4bd803a52bc333a22b31230c0c700b6df9a782b69dfe643e6183897d40904ec7847a352ed3a676b4a060fdfbe96cec4524ecfa5ccc43c475e9f13587dd7066d159811061da11b0501e60ee3b9c4b8547aaa28b9c194c6a5b0b66e9b603fa8d8337b6ff17d131db897b2c8232dfa1933c6309d8d4699dfee376f9159d485d2468dcd83ef6913e3063903923b91c8ade61127279de3d0d282826e882aa4aaaf3ef42ffd9416e7f09064fff797c908a81014456c5ebfde50310dbec7d951d9126575a5e7ebf2716184758a44a1ce8955d4e7626f023b13462f2fe5a421d4ce3b38f8565eb03bbec68a74741ea3b767651432722a7e64d1eb6ecaa353fd105172c489dec022dad1d57cc37a0fbbb465d09753ac7794d5f3f3b48b5acbf1d1586dd8969bf2fe5628aca3a85cda045fb809ee459069631ec84534c6ca446ff3f02f42f9e416ab326f793a51db502f763aefd31280dced9f6ebf4227dd117b93ea5b04f10fece2a638f6fc3aa19f64173da05ea393c9eb8249ab7c02e1749a5c9288d7f2042127f6602486d6bac10ce76823212e312a7fc481fd7ac5777ee72bf7c59ee45cc061c5b516923782484cd2a9166a093db1c8ee0247fcfe9b222e60131c9204fd1ea878099a3aba1ae68a025c52efda03fd0a99537c56bc28c5114a57cbd33002211a8d573876666b8cf72e3c1b6b96fb36d58da3c94685829411d8433491a12ee152a2e5556e39c5c141084e176022a724f9014941e448f600ce9d39d61f879d1f01d728affcb776c108b9c3ec13bf43ab9c4f21ceae08de1b9098cbdb4ce1043bd758a21b278fd095671d2a20427c891d4b6d7835e9eccb2a75e133577b4b3bd6f7c03391caac624b396e94f304d05caa140cb8799fa98c7431d994c43247f7d6ef0be37f8214f04ec141f24a58633ee46f4f365483e5f3072876b75774b7035d40509f895b15d37b078fbbfc13a524669be9c4aa3505edacfcdc62f5a57eaf92605b56a3da97ce4e99eaa16b74bc8d7d4f6334a1c54266500b4d3115540c96a6d885b4d5fc81f35444c167cd9d534a8be53075926674bca25ac9bb8f36267a9779eeb8e20ddd04606f91e46482efd75036e9bf579ae6d81ecffae7e7fcbab22bcb77bfb3e23036baab59bcb3a0568f9fe0953bb5439b8fa812168e9fb38717c1da6413cd2bd1edd3fc518ab9ee6fbb1f26ce31adfc0929c597c673e7607a7a7b148332e6f7578868d2f9a8c14d90ed86745bd8e9bdb61124a876fa16673335ee5bd07c6b35b30a68f63e77420f9eef5b529dd773e64aae47ca49fb213418f3591a68863f39fdbd0665aa04adc8d69a20ea0099d6aeee212d2acfefed99871d282d330c8329a9c6236a9a687cd1f6d2fe7bea3c7e252c63cda9f770049a84149f441eb51ad61b81feb54888c9b0192867e4f40ddfb9569f32de01f7a7d8f43698802b12e8d70d3e8088ec6b3aac00f8f04c5ab17f329cc8ebe7fd38a7090e9cc625a9fce6f3dca3b391bae28d5e8370ee417186afd25932056f76d087b586dd4721eada982f0633909d8639e30cc8dad841cc4ed33f79dd4e46d757037581b073ed295d12df717925663eeafd6fba327e2f03543d862f9d923c40cd5c5620206f252742608a11e07c484f99f13a6924aab907484dc3fc46a149b0d06a1662d844b13c3b72f4ec0894c76a0028fd07395122e43df59a6c972099a642bcc114780c2e505d65162c7744304fc84fd7aa1a749c18559ff21265adeaff2b1f8cfaa20ce8978281ab6b682a33890795ed452f3adfac3520c6bbd84b0e580bd8d854951dcfadf8311d882bccbad4288ef55e21310e8e90ecaa2a24e59822a68c542dbbc2eed8e154d65ed1aafa28ed5439409d6157ec4c62cb95cf5fe1a3c39c3fd88b8e8ec99abeed69eecd980b7776db3888907e6cf8c20d64735a30f8d6b651c564f07fd84ea7862e68ed07b6c8ea49fd65e21a39f4dc9c8e99d2fe463a15a0ca776f77acdbe812bf653f1d45e5af61b7016e26d7daf29353073f9c8ea9171fc9fa563c70d6407c4f9a41c08bbb3801f77bdc986aa59ea869c4c28439108a11cdcac9c1ca107b3af1614bfba9093447c02e84848a1e83d8160b2e005fdf96979614d968f37e1c9afdf3400fb1e163846adf81da53323549446f82fb50b47c39a84231060b0bbdaac88dc2b3c4f1f85362c443538f1d11822d108945f73d187719bc15bea9993a5120c38eebb4591bd4e35b1806d7b952bb9f99f12865196ddffd56d8734bc8786f6159285b4ab48679d8f4fe299574b09c6a0af709db980a9708e306a747cbe0aafafce39dd497e30cf4125d24f0e689d5486a6d88e721adfdd35e6966ade148e2ee2a4b019e32f30e641b3abec4640e167f4b6229bc23ab76159138a500adfd62a7fea5484977c4eab508b28f542eff98f347b3ffab7d887427c1c7495a20cabebbb7f7a13c7e1ae7bc7961d616ab05f4d6b9be496d6170f43a03adf55b073462367138c7acbf2888a24635270dab6cf3d23f4c43f5130e17b5af40e6e32dc98747129dc99448db8dda13d9aaff55be8ffbc161d4499b047da68d1cbde885ea9d5049e65e51f7d04c14c5e987113d62d7ad50c20d8179d64526cf043c91a404de9bdd50963a759a8bf0202de187893f51db991b4818bc80463d4dfa0830b0bf3dcbb8869d71f1bebd158d6fbf0265a929b6054518b468ce5d571c847b3934b15d34f01f13b961ccea535109d68962fbdb59271269a86c23c7a195477fedf2faf46693987127c2d580571ac8f414942337b76f5528780be022f63d03e14be5d3fa50ecdc3275ae67b3fcb8b10594e3808f0aaeddd9e1754dc4ddb6ccb02a689d916142f44c350e9a50a824f439d04a0c65bfe16e3ab834f2a74cb4a039ad5a4754bd5f54f3c1cf70049a0536f23dab1e1abb9a511d9df0f59c707cb084ae284371b42247bc9d7d3d8fe41b15b0c52dc2cc3c11f158f7d8bc873acbd25a962b5327aa354e236a6221dd04d224cb157add7476a2c5d1f321438cae8ef11f4bb71244da2cf2815c12f858477cee42db9ab85306ed2fd3d1ca73f632f8444a78d3c9ec7f0bb21d150a7331800f26ee1de976fd99e3ca0458ecb4f7121ebffefa106e0170c5f5597dd52116220f3812a6af8782dd3f3b4ad027ca3f46c26389407149027c727d423047307d72e012b570848351ccc884542695e761895172f2a148249fde569516049f37eeac1b33cca600336c7e9b3b8a80aaca516622c6e04cd7c0daba4474924103635e9101d300dbb0b63489134e734e5d1ed994dea5dea47361045b94345a479faa4f475c9a614c04bcf67ab8e5e1802f0373803986457124f3ce11ff012cbb76aed3d6155765f47c1076c45c1bbb1830d108822ea940a9e4f8c5dda21440b8a19356cecac76c951ec0a7cec7a1da3a49d09a75886d1ae16d94b7a7fb0e97f3adad3e58b014b889eaecb22f9843024830ad78fac5467cc0f9217960011ae42999eac93d72593896985128dbdf57660e58944a48b6e8f6712782287385f751db9e13bb9788d1f1211f7abc6a5c90383086435d2e7b5307784953dbdc63ead34df5222ecf7aafb05ebe3a07352003f7d05fa9484c3c4b40ef50774567062c6b6f87a5a861539f518860f665814e48916b9f8ce0e738183b2baeacb6589f19948de8d208ba763b3aec6ab1fc982600fdde6a266dd2c2927d38a83834202226f4e74fa3d675292ff5b7006ae543b0f4d496eb62de26f71b6b44d85a1fa0bd555764297d9159d65a745696a0bae87f7b12d1f035d0799b9d11808bb89a6a2e112b8fd3a8b3e42d8cec170e4f15d0e86e63012b8c83bcf330a83ca6ba87c14925e9b266a0e4489066537bc193856c46598037c43533bc6aa5a36b6b362f3c0ec2747c5c18413734d3084cc353e8fc4da341ef36914869ac75e558890cc33b50aa2d92a2b2a70eb24578bca1adf7adbf326e7e4e65747be0bc22124bd603d0c18556ff6162461e99a035a8f46a3c07c62b96a21b767262163ca9cdfd4d426483aa99d05f1f58146c3cd79bbd0b02490f4334c4ef4645c854e79f9444a714538ab70625c8b130b53e3f3a85a67ac5b5e3a988f2f6c5d336d8a9e71f0d2dd527aea9c7088bc3366c1096b19ef642ed06cb8ada81b63c9e50a409e8b7966399531f528ebacf8f6a92adf0a1e4b331b5a54873e9d712ac3a1c9b0e72f478f6b4757ee92d88826c130dd02658264828cdeacb41a79b4c836235d7790890135205730f35b73dd7b1f2a28d938db9c8bac9204b1d34a6ae6a03e6530ff693b6b4bb174e7f8ada6dc6025a582bc508fe926fd4df7dcf94438d0c842988e245a80387ba6c6b5b766b69318640bc6bd1a06f65c43e8f2e3879e7787caa313f21eba4518ab770c2eb32ae3cc7f1a3644d63487f80cf736382d4831c1988d0f1f7984dec65f6740fa91c12f9c0f3d7c8b669bf8740fb297cfa434b372c6059339ccdb1d5827d8e7f5c3391e11399b7843ef68c19b9a9b21484144a0d5fcf02bc14cc0e00387b1ec328c52ce38b279e9544d2727455d95c33001e2a5f2ee4029ca38dc865c010e32b2aca66b621dcf441a64489fd3e477e511cce966bbdb3945b1374f6d3c64d11c78f7202ad9d485bfa03fd33fe56a077a1d41fba3fca1caa7bc9d98d0f2aa09ebbb01bb4d6157706fb1f4a7e500868b0517f0da6a98ed6255232af18354cc6c7b71878ef30277d741086813fd3b04d0d88baa32efd134962b6560e67c8295c3bddd993516bde30d421cda677b2514ac4a5604fdfab809f0625a96b7ec7d39f47ab1d096585dbb6da9162c93dac8895f15668bfe0592b79fc25f979abb05a1de252a5b754cb893e9b1b1bea492c132bebfb004fddae78bf7c9b58a234c3c142e88422e1dbcc86c4a3b9da88ff9de918634c4056ee6108a7cb58b4402018374d2481acfac95f91802525c41c645860d3ab241f28f22164ee6a4dc9450b0db5e89877e33c9728780f8140695fec0c11e3ddfcc871ac66e4fe5b66639dcc10f2a45b7defd85f2a981ad0a6e7987c912550a4f949d00f31de2ba4fe4d8eb9b8dfd4bddae7e7b6ec6df06d84dbde04e608cf0f3b8304d0e2becc3dfd17a15fc05e2d15154c38c6e6755d56ae7676cbdfeb8f47d20c4ee088dd4562b8ef1885f6f43cbf3be6db5b44685afc16ee4d567fdceb6eaa97cabe486939d9cabcf929dba9c17670550d2514664b0396a1cfdf145484c46e845ec11afa5bfcf599335de9d699781893cf566be075c3724b5f03ca10119b300084f8dc149a9ec9860ff49f7e5e3fbf7992f74625110458f8b68584e71188300d8aeb2e05f21da7d31662846c8a0f6259d65779f7a8c4977c430cbfc0eefca570a68b6daae07c784f413482766343ac7eabc74aa2aaf0dc8524eada467c7dff2f092fbe6402f27014edd641e5a94ee6502ee7584082f64ab69cb3035f34437b0db93be30ca2435517104e5f3e86dc84e2ca61bf6d9beb9d0eb52c887b74477dc635f1fab7790d6001c712f05fbc75786710288ab9ab34bccddeca2c84d518f67c84c86a7d135076197e5731b6d31e9012fb86189d72a113ddc455a873a8f28a25914d19341acba2914909d5aee38c2acc0024b9056769813be4b04bf1cb0f5df33c26ce6fae4f94c55802909a218cb32ecc67058959375c8735a973031a0c91d48c43f109d36e0b1c2210fed05d399a9ba466dfcbd25f0d9167e39709865244aa384d34af98d07f128987c9d0e9f3f73aa1c87bfefca2b48926f7b0b4f1e5f1956b1317971e0fb359517944249ec3de00e583a33ea83f0b9d2b763a13168bf6e6ddc17d0f186f6cba94a75f9d68515205d77c68470a59fcf97a7098ffe4670acdf32bfc9547822126e49fdfe8a672d5ff775c91937959660b135be0164c22fe152556c6c1206373993a4be8c5713dc851b35209abfb1ab41a92a9a385f4dfc6e153919936e9621538bb292f2331dba4a30ae33348e6db254a7b8d67240032d4e3020cd5d20e75e87be86cd4c2e23029cbdfc96bf50d13278742944a5c3562ed189b04d4ebaf75480e90275a1448706efc442992e719a02be2d43c33d840ac26b3b041ef677856b258151b1f07017e9105582428a83ee1fcafdd5ba7cf1ed902437a504d7a95636dfe451ce521af1338a916c27ce3273d1b5b55a34f163c359ff8538869c4283fc2c538459d059efa780c96a8055a2c3b63f2f5e747e8d54bf455773296b153b0e595684180749e1411292e851d909c26db4528fa0081840c35f26041c6dac1f9160aabd72fcaa6a41b8eb6f33c248a0f4d9cb56dc2f6baf58b4eded0bdb2f159fb7d93bee18ec1023d119227142b2fb5c3ca84dd0930e32f9f60424946d47a201dda31046c0499e835b4ee7e1421825ba01990cedfa05194dd2299dd0a5ca18aba2cbea5a4091514cf73b4aaed871eacfb04a6c160f437adea59b2bc32d95451b2fb96d021f6311c34380b0dbed6fa0c8585324ae2cc897ed46be680789b31ca3ea59d1c78ea72e99ce04b508f2b0831a21df1f26c94f5518a49a43cee3c0956bff749dbca3aa4bfff2691dc870ef6972e637c1f560283f910b169b3014f82a4d10e8b3d01566fc745075bed5bc2d24ef6a66a1427f3bd2923c7c80ac44cae127f7d14cc39a96c04228f7f9f5b49685fec9097da942b51b3e42dbf315b72a94a822cc9368ba5909c11c449a5c6598d3ed4afba81cf1f836aad0522a83e2480552ef640833da83ba55b685d7459e36959833a84b6bf3a1156109c4903098333b22bc5138899d4e60254d13935df1e39b9afda6ecaa045ba74a99c0f6409f12ae2a39baf48860c4f449c252d79a4caeeec141f50f91b0e2a934546e7404bac586e4c53417797f9f8e6d59f9235a9325bf1af4aabab3a31f194ef5bef6690f238f7a369df7faf18cf1ad9c912ab7521a965cd2202fc841dfafab6b2fd7f88b0b8cdf3bfbba809bad4cd89cc644952ce7ce1cd56c4f4dcbb31f2f2bbc9fb4f04df9d83ffe9d80858e2222535e8899f686690101905d6d9b8dff71f9c3e0c83fcca2d61979c8c3fc6c5b0f9bbc8d0fda651b57c20269c19b50d85c08e6aa45820eec460d8b4dac957c26624fd8cabb68080089e685e6e64944675de92b6d920648d9be6e004e8ef51de62a63264b27dcb2ecbfac63544121048e35238e1493dce8ab045bd8cd7dad492d90633678ab79449d7e84a45412a136694a440bd56713b37f248cdc31c0dc05b3073e478e96e9bf38cae9c8045ad4fb1d3e09bafb3d47de8120eaea90b1124b70021fa6d335ce860de5760ecd1fd03bc3101e8cfd224a2fe5bc048a016f8e9a4214931d4236afe31a43de133d9eb85457425c6560f4dfc1134cf4365f526f01d091062040e3d372dfcc3727ca4b7af3b04276a95874d04852bdcc0f91783091d57e0c8c06c3f3447376493e8499bd7fbb4818572252d8c00ef48cc80de46d89de82df3036a65f0a39cb29826913d8e95fbfdffe46cc1078b079e2f5fca4ca28a6028499f12b0056576f3102e2bf0b69e56758c7d0c4eece4eb8104863977e9bcebc5978f6f5b8220b77fccf060308eaec9e5a9dc6d7994a5b000940ad3a4f4b7b787ce511887fe7b539bd675b1b79241c77b6a3efbfdddbe71019ec6684c6ecdee5278daf324832c906b68e1a1dcd785aa5c8ae993953f06ec416c9c88d4f3498eba6ced25c22b44288ff1336009c3b65986a972084ce4c73d893bb7937b8cb70b9e1cecb4c7c761612a60df3f573ecd7418cfc866660bbdf14a55a8e33b117dc5c6e9abb997dce9cab2ca60c346984eeaa36c39c05676e78de29c2d742b7a100d8063673d8180856750e81b408c301c248723730722a7e893a4a9e85457792985d1a9ed606be14380eaf10bfb9ea6c8a4048a916821aaab54baaf6aaabffbeba54d89612312b182ce15d913d2b985d19795aacbbe500c0f73129b71b34e6071c941a2f1004c55cb72a697b19d25e631885c19791ba68066d568740b06e0ca604b777a33fc04953dbfb53452f6d5011840afbb7a6db2426c131f6a41f1013fe9135bb72bf64ed00007cf48d19cbb06e6c12e009737c5f2dff2807ce913a1fcfd5c14d46000e2ea4dfe4e9844a3dcd23d9d4d99c132b431d3e769d1b06558dc42ae80d13c41d520adc3c3de816c734d67117267f2110e1419bd5ffc0fcd386bf6da000586f2f96c75d373c98b85938cf18ccf1c30239ce40665995a0d5a1c71b961e26665f972e4db70496f7a91d755fc8599722c9ee98bde506ba54c137aa49853669c1a5225fc820692ccf026f29cf80e00b88b414511fbf3cf61454b24ec5aa383782945596d0b420bc9fe0abc25a1217bfd33e5cd5d1636d5488dbb74d1fb11edbf44e2fe7c0a6a697f9569667091715393640f6288ea0cc3912818a97f99ca4cf049a094806835ecbf2003c5afee1d0000f8f289731c28f74313b4931cca36e71e9722c3642a2f76c228db4cf38531fb9e2d6a849aae2a3a54b14dbe80b66852c1136e16f1e2c93a2fd88324b1f0a941b2dd0d6b37183bb4e9640450ca933b7c48fef45e9fd6631427b97acc3bed250195ccc84c58391070c8899316d1435b959eb1b92e7edd97a40d6f63e9fcfe874442fd97c4eeca8a29584edecd67ce446335b2ff63811623bffe73a7aefedee8dffbb55331190045f1791ffc078908f272766f27153611dd5c9bca24091411870061458603b8ab7d1f44e0381bd438bf1f4dc001e4fa3a2600cbb5b1e079769a759b7dae1db3b620cf70b1d7d90bca60d6d22273182d9a77ebf7e99de248a4bf89cb3cae940f088e544b3937274dd00c2e34505df97097dd7fd8aa5b0c2e71e61b3e38b4198caa1e4d190fbcb403ba2c4554b6daa7427a2d5cb0b904e6967b5d424e570efe3a793a2a33d149756ab64aaae4efe142a953a3cdc9bf9fc33360503acf1d7ceaf0d1ef9162ffff70f15098bdbe94d803d3869d5cd0aea62aa23e16e5f4b2b2ae22b416e288e1da5558b63ddb908ac8885a93990d9ac64760ec2151c19ec1300f1e847fb6bfe474b4dd9bcb5e085c159c3a843cf7f80178571c7e636af9d21577cc15a5c7bdfc0442a23dd79a0c6b5b8e466f9ee3c976cefdf2f861f0418262f04c57423210b0b0f3c8d921c95d01f333b468a46ea6e7b10467e387f35c37f32cee480aab6606b2521884b5ad6ce8b8942cd53e96a3793d8f7fc0678a6e88ea656cb9d4765826bc4546d9a0ae8e6b8445511ead2f6d4fa88230812368440149a56cf8d2bc07fc4e5455c39350d165b55720b20e689229722ebee026dad729e4bfd27bfb3a0260fe2a922666206a26fb10bf20c770bd109aaa07e50b45d70f593b1f08461e221d44e77e20a79d7e9741483578c6aba491e54f07319fd80b21faa39c206752d974b0b9ec3fb21aeaad50e21f5f2036b8549f0e2073a9eaf8d5103455c90c54a23b46b647e6ef838c79904b738fe54d14e90cbe5118602080570c036b342d7148bf1cbdde21c6739e5e0bdb8445ae66033abf8b6f5b1dc4ac4fd59378b2fd9f13fc72ea284f16ac480e280848f56a1699fdcfb9532601ffb5df790002e1a32a0b2d9af2007b5fddf85bc0c5ee6436fb2ef85011388e333c28adc8611697a00e94ab18262f8e558971939153c6e15faa50194895001a8c6f6404b31d4311d45c9a4a70863b90da6ae5ae47d3bdf15b3e182ad8cf61a92dd1b1d9ee4577295659afbb93efa59d2d1aa0be65bca67099616b13e840bc02efd4c5937e82e53c5a618346f429e8e443fe6051a47c2263cd99823650e163c1bd51b0680c2b35a87dff05e7c9c50f00960110a9cd182d087b28a4d93269ecf1d585fb0c741287daf0f49a4c04323c9425a930dab98dfcd5d219141313dede3d2434de6d6d771ff5a92c2c24ebdc7582b5dc86d9c0c3e795bb1bdacc135b6482b530a2799192e5fd68da7995331fc1ae4c410fc1d7f6b85b3acaa76ae1a7b216774ca155afbb12be4d3d2aee020b8b151e6b2b81fa38fb458f96c19b90b6ca51f8c5db6946e726203611cc3cd619950332913970534593e66481cde28770a11e4c036c49d8b0790527169e1bad9d5638374a48d6e020da85bae0a943fa7ce10f55cecfdb00c9e2be13f8bec850b4ce4657fbb8cd21812382e05d1f91ca0fcac181413ab5debc65d424295feab5bd499a0bc171e4c537a8e1636aed6aa35818fcfae5dc6d6e79e9236e3a90be2337bfcc5b67d03d91cdc78ae57d25c03c482dce6d86c882a81cbc609c93801f3082f6b034003eb0b96e852fa6ee379c524a2b0b1125bc8224e25a9f41bd692aff19c1bdecf96d0c6c5ae27d1772959a76a5ce6ff5006fa2a2449d0acf74569247f64fca5580f9987105df8f37921ab3df6a33c41ad4a370ab0d26b3d1b3d9fdb8e30eac51d123993c8505612e0254859673729e3fed1713765259296061a9b6502ef51b1d8da0560194116d97c70832ba7c083cb69ae7bc81b176aca1c24bf7d34ace5e5b8252011ba729cbc86d6aa1c475a0b71db63773490a127d74207a4ba1311359d8a3e0e46c81c91903afc0903d6d4dfda64c546e7e02b00f4210852dc3fbf9655a56760cfd421097283a137fd79609382f69f47fff9fd956c0d74a0dfb398f98391da2b96ea9a30977e8e9d8269a32fb0dbbc53262dec9363a7e8f90512d0374fe4c95ce70b76819e170a8bbb913734d817ed43fa6a07c564495787722793beca5e878483a087fc813024671aa18a48b00746b320d5b0f08ead32e38181ed161e2207b44ac6ba76b5ca5ab5cfad5664ebce7119ca93c6871537e5d691ae61696bd095872e847043911adb26259556db0f5036371afdbd05ce2083bd253c9882ec234d83366fa205a1599d582ad3d9233b8962e316fba2998d968aec312a83d275a8ba257b65308d9848768f4203baf7ed58101c583d5161509208b234029704616c5cdc6580a3803e6849736287c1ec291b2161c7054096dece3a22a548305f45e17f25dbbdec93ee1b9cdaa13054da8c2c2f88a7fc0d30affb2e5446a17e89207635628b25a5b732f49b040ef0936956c281776891b4bdcfb538526f830ca01ba2b7f0090ec459bf429a17f4f767d0766dd0b38a06048c4b4ef494d01f2ab44505a96d379a08e2bec023cdd221c59f5a50cc20e820da99b140a207e410f1cdc5bb94ee0de66ec68498426e363d6bd40b4438e717bc8bde03196ff60df13ead1688b5348dac7439cd1d44ec2a92fdb32a562317a670147d297fc7d1ce79113b5d2f0b735dbcbbc800b41fa3bc7d24b469638a6e3631cf26a865ff2d3e635e783db8c5a8e20e47ce90cebf40e21ed7ef8c77bada32cb605f9f37fdd35ab7157eb37ec5b746a00b101edb5d60ebc794df0a5a93e5f702dc885d039770cbef8613be39e394690810e7d54b948e8f64704e185dbfe2592121c79ac2848644d9a5808e06b755737ab212fd2204283f5b6a021a444e74bb8d7892f68d6e83e8a741deceb9a254de4a1a19edb99eeade7dcbf531cd5b7dde807fc90cfa40e7b37804cbfb75ef573b7ee6fbd1fc8ca1ba6433fe14e5dcfb0957cf2951c8e22c6da465221a7d19593f45f291e1ec9b2886af57d3339a7c95fe0622d4997209251cf62a72379a71aee20ae7cc6785fde94bc25d21ae60cc474dcf1aa53bcd4cade0fc6b732410d2a2332ce0ad9e4c01acc2531108d45eab9b544d02a565a46a851f5e759cbb47b7f2c7db891e906f34bd3b91732f8fc25c19538d854c2fa592cacb80be8392bad36cfd981e84005cbec81e08b4cb9172c87dc664f17957a12ca12c13c7ee01278e0d2e318b179027c1c379788287c6c5d483cd0c789fe502ba463300635c02e2d5de3677a40f2de8f2e340686cb226760a7d7424bbfc5eb6b39fb9bcdbed2d9951d16e2d5598071b79b891fe9dc3022c207e94edc5b2c4133b49192c15d303bdab9cbf4a9264a58a980d4cf957e45b208a19db34d9083d29fc3122a9749249fb25dafc2d89a5cda4d0d73890e75535f008d3757a4bf8611ab0ff50387326b84afbde811ca1b0028576839412aca1ce8c6dbce2e8e8244689eabddbc6e8ac6fbb32ed3f1df97e16e5e308c3fe2d154d47ae5564214cc4b1e417f7faf86773c9c742a087888eadf5feffd1e04085050c9ff667cfbbdb5eb94f59d5b6b82a3ed8e30e86a9930513a0f251d2584d0d9824b05f7a008a22e6603a3b864084c36cd10c402593b3049892dfafb202cc53c6944c2b2a4b74d9aeb28add4463e648f1ffad8a85d1107c91be5a50cc7e47254971381e323a148b42c6b07ef318676ce8c665cfadfcf3b79991efda0de1d50b4906d7c6713e50805371ddde6d6dc6a72cf75266b72f38ece8647ab64c8e74f79d79f260f5a0c0c18757f0d1f81dbd6f567fef128c9256c06cb9a56d984bb52f5598a03159a38ce496a8f6dbfdad954db1a6a9a4554165dba155c2e6b93921f8d1c054406dc0bf5095e828a17b50e1450ae28d0b094316d4702241ad89bcc6e2747bfe54bdcf19cfaf1edfc909adabcaf396930bef677a1c245eddb6c0161538e8ebbaecae6cea7dd3670aca64b17c0458fa2cc007dcc22cfb9356567762df7e258550e3ef32b5c14421c8a3333c41e9c50982ae54bf44e154f00c0d212e26c0296cb7cf99c3f2ec73dc2633f2e2eb7cebb786e135a34830f9164ae32899854d6d5a9e07b6157917f07cdddf422cd36e4b415d18f818fcf62041ffcede3fa17ea88ee71d4c5286ef8cf86ff71d7a2b8bc6e6d90fc3438a0c50e4222ee99de1155397f24aae289dfafcb11d73a0e98b76bcf68a5272a55218fc0fab409c021818934b1378551bb621aa2cc401047050731ba358e512c060122b6376cf52fa5c2cb8157f890fcf9f631c62ce8b7c20438f946cd902d73bfc5c5c410e495d8403e898362461408f519ecc00fa7698ad1b5b2c18e42cab476c50dea342865b9fb6c78032240911cf7fcdad31cd42c794a352686fb98f7cda10fa4cb9b971f6cee6b94a7ae38e98efe1fbe3ce990c45fc1103e03b5118798a2163bc24c1da8b27e980a9c18dfcbceae4e6403fda24c1f6b6f219af14665bb488e4771f4e6c4a17607ce81e703c788fc28f243dcbed06064a4ae2572df56fcc8a644fd17b21c75a79ce2eee7c5a7655a40b6c77a97f1f4f7696019cebd4237babdd28f3202ce6d3a24b710629944bd157550f2ef94096d7a967ae3dc70f5e2c9ddaac7ec043227c43f5a2c019d37ac2da05cb35c60038aa289c34508bbceb320cc60f87c307bae54cf5a153ba6e51b63b4d5d56d13c1557833896a10e134bce42daeea47891724e825d9e25334bd517a6cd1ce05917fe35383be72c746189a1ebac864597691d18e97e5e64858afc274fb31b278937b1fff33147bfc37854d062d5bf767b95fb66536cd1727c8050c778cee052c1061992061f1f48c75878cdec7ce7a8a070d12237089feaf0e6f0364d73f349a024b6929d95a2c93b66296706fdf4cbd9136743731c054c741cca1429a0d28ca4e1db0a21f66db76f0f79c578d369a141ec242b09b0dafd4a9f6006487a65eaa90ed1cd5c6a2c0e08392b87486890085d7f8f9642b781e9b6121b04f06738b5053b4e141d51438a14f68d8f4ea8b855fb45b178ffa19e945ca9f4ed1a2238de68aee24af65013f1f5f5310336974e791783f66756c42d0c94b20459472c452ed71442595323f665c9ab74bceaf7048349fbe4db2022232a8414c770d8333280cd5334ab7b73c92c40e92bb567baa9326173bff46201fa2b7438348a02f46f0c4af4b921e1a2f5a05350ef58164841dd232a64ca0584e13b04049b8ef8db9687333efe67ba46ece5a53e4f9c048c8817698193b899b0941ed851d84fc94eaa471f6132f837b1e2173ea4f6a883807beedc3948140a419f7658d9b72beb3afa04d58459d929c557e4af5cb06eadec8e8ba133a9f543bbb3a1538ff968e2bb08325fa9084bb026a439a280ad1018fd42e73033a486c0c8a6e7b89c8c1b1b883b7b69bac91b9d15959707c1cf668f35d6b0b86b05b26eb5c33189afbed54b250406ddc0eb9bdfadb053b4e89c220328769ac80850657470d96074ec808fdde6652db88988c6e3cf87c4578173c61203df63857e365ac81998a3dbb988971f19509b810c0106a35b02a9a912de1c9424be7cb0836b12ed329c5696ab7acec054f1cb3278176dd6d9e0736b1588b851449c8ef550d2010abe10110ac418bcd3f33e93edd2ed2304948977b0618a89380c589f219e8cef170cad4cc97acf3782c829ba8a08bd30c07ca5db59ab46955d5543f164fb5d12444ec635081839b7dc61d4982c3839fb8e3bc0f768f90e82ad97dabeeb242a330926f0ac1aced08231bde1ecf58f75f09c340ec804fb36781e75b615c4833af159451cb4677f1f8bcef552a55d2cb5e40ed571335e8518f5c7a9edad63cf02b01b25c7d56d5b0e3e5c803016a62967b6f49b4193c13f82365c384d6843ed6c0ea044f588f67cdde1c5e3517984fc78287c023681cf91dd3259c654ef99a7efc35da4406121595172d614ab7ea69714acf7c98ae30eef429c03048fd86a71b417efff30370d7426ddb5cfd6611ea348aa06b1dedf2a82225546f1e1b5269860c6e0b9e166317445196bbc1036eb080b86df8d7eed97f92d5f7641939f2e06e4d1c73b4dfa3e1bbb587e9af1eb2dedeb1a31acd08df0b5b3d3eb39d859b1f9f569986fc6e94f4d25eed24de1ecb906790861f0f09041d68cd23b83bcd3116c45a1bdf9735d6a5725a6c3eee203a844079027aa463571fb9035d0d23f35121c0fca1486c36d0374832ee73890e8a940893051b962e1518e057806720b1c2e83e6f4225b73f0b1db34b8b852a543ef08860183060471724f2c2a46e0b1ae7b7a441237955875337334a1cf05410b4bbee078b1d0aa29e051786c1b39937b215a77b734bdf85fca5a0491f5ff1fe6ce3c1f9e1eee5416bce0001f395a97c6d0d7f2215237d61add41ba1e93026ecc6131fd3cf11b5bdc9d0f711c2f8a2536839acddf2ac0ebf44612cefca91f6b91fa20b06aa758f596093b1f32be11d8d54802e6d51c58c5e977226038cf85adc503d7cdc9927abfd1bda3d7299700d906af46b207974e39ab3841d5086de9a9d34beab0dd072742c61883ff5c875388c016c21890292b42c5e6d45d9eb7b8aa15cef6a63fc36384dba8353792a119fad0936a046f38c88c9c500be08e042a7d428dc3e5e443c81ce7578e8db08b7f738929b321b1f8f790e0e369e541002a0bdce2c9744c397591c94c0096e9be9faaaf59549fb6dafc3727818901f6992f1c9e6fa44eee6f4b2e4dc65ca75ac357eb37d7554dd613f953fa32629da68326aecbdad7335a5b9dd656fc28a14351b943cba3dc47c3c18fb738d763b75cb7355bd32da5d02691ea214aed7ef22e614f81732581cddaa832a260d8ceb6fa7c82f45858cd6880fe000b548b53063f12a3390789a7a14a32c9c771e0339fc3d2192330f455b382a9a235da7cd0f9a52262b7d2e30807e5cee3c567e8ab61aec4c2ef2f71d9d22f8217344d14fffde60abc143ce62ef3b8c5985b68117f1b28c2992e6ef8cb28d264b9b756d2ac7e55fad859a2e048c9aa30bc59424abf5028b8cf39df52871f0667875de5b4fe44648fc99746af30c07a30bde08134bf8f92b6b508dac88163c96a947bb0e07d819043bb7bcb0ca8d2a9eb55db639afebf2d677ebc4caa406f3a831e454e1b36dd4a0905d9d75149f20ecad9eb9f61eb33e8b86c0b025f671daaf1a6096dc8a93261f1efde8de74271ef8d3c78a43a082fd556b33a56d544bc190d3e70285bfd0ad92096b62cf15a07326dc5eda63b3a578989ebb1555b9465fb17fabd4ae9ef8c3c63612b1d38aee97f5108d7d413b25eeb0b17764ded86838c955d257b995f56e3a026caeca48bd7c1e25fabc48a445d4380acec44621951028748a716b65d5a5dfde32185616f49525a839a504ed0f0de7479b96d19c95e07f10d8fc7c56ddf43a8a9237d0d10adc6917a3f49c5c83bfb3e9fcf9d1ff9516e27e93d655be0aebd6107d6defe709011c97bf088211d52d780f4b646a33bd35c23f88ae03118c9acc9c30ab9b9648dbd4253340fb77a4c91eaf3c5c66eb13547ff3d53237ea32d67f2a66a05f90cb16733848432088d8f00713f7b35b332d4ca321ce4f881f2a80465137f2c3c49c3cd4677c4e1cafc54a8a317f82e1f3816f8323ff6a185e98bae6fb4e89e7fb409080f3cda9f13b06d3de9eee4c85d49f6b31f8953d528fcff01be682c85f68a19ce00bfd6fcef0c9ced2e65af746d573680074eedf18260c83606de37fc43d080e4335e5faf404b843ab7ff3eec03c5bc8830e5780123a25436d4071ba5cc6ef84859f0986213f2c2571bea5d4cd448b37a9c8767463dd87fad0dddba7e4856a409ca4dbc8c819ca5e1995b9622962b9ceaea88976ed489adf4bb5ae0e9104b08ffefcc93390c6bd9bbce68de33bd3d9034ef96e69694f3a83cfcc04c725c4958bac99f9401258660380dac4573a031ee10d65fa38065043db7fb3eec03454e86cfe127165093c3abf07be8c41e81a6e5bf20ec8951386139a44df3dc7b504cc8b92d181e7764514be7e738b47ede6226a4e8fe98a8fc9225456efa6495f0ef5d246ea49954b5d8320ddc5fc7a8e464dfd4eed7a17309a49667525c1a9f566a280830e7689cc00cba1bc6a4f05c752908af2b15b65f68839949a34754929a4a718a82cfc8f15844d1a0de5a4bead00c5b236dfa0473fd0ef49c91aca4b1b3721c298e9b5525b6fd7131bd48ceba7f8c2b256b5ec0270e432abc0440d3409be7a72a96bca1e7cc47bae82d5f09e1f65d5976f4e5ecb0606eae5b17a4f8434066abf846ec466548d4adfa7d65b6c07caad715367c9d35bb6db5bebabe8a1df18183ea642cdfee1fd7fa85d367d4d64f3d574f8ca3f1408722da0e3c7945549ff3f07f0a668e121bb2af2e26a5e7de9ece1e0cb9edee0413741e336bae92de24e32217d83ce1d9448ee6ce70183929811f075fc5c80d51ea6bb526ba77c6e29bbd37325b180a484fe976ebffcf3549c553ed253d72da02fb4f351cb7bc0c2b1f38f45c573ecd4c188445bbd29374524caa28e062e1585baff34cae711a7e0c3da295d002f8243de94e99116fa52c841404509ba9f3c974522709001c57734a95b838fa2bc94868225d472bdc46c3faab266fd6c4660cf91f929e7167e722d62cc729949ec5c25cfd60117e910ac45486f0eb9b02222e413ae185da11478931ec62ccba04b00a614f8f573d125ecbeb9330cbc1cb5b76fd3275e325b18fe3019fd779b22b7a8da521b60f4bcf76ccdb92873c454fa86a73d6b0bbac327db43ad903a4f85584a30119c97826eb2c97acf1ddb2118ab1880ad08ab840db3e6005d983896c36cb71c287a7b9a3a6b4f9cc4f971fbac11f875ae8256bf9a0a9d4768c40a2d39ad4c2f4aa36e9b4790e7b0f08ba71a83b9e729ba35a404ce6da3b025e208f4169edeb3b680e0adbbb0745abff11190983db6ce5d73ccd21e4f475eb53902c36f0e72e3093ffddbb808446755ebdb48f38de4cf06c01b6a237a0fd209bc1dccf14e494a725a9ad55642162032d601f02bc87e5df964d6416c463862b8c63ec5872c2296893857e68c46a0ce064acbc32f16f860d1629fe4d3c70068bdf476ec6698987faa36606438f607eff61d15181748f9dd37b5810eaa21425a23b7cdcad6532e5ec67773605e9bb82a714b7c01c6862a74b1a534eba8758cf0a0ea573701e02d7584231057cbee04a291330294de27e10b688a307741bad9699fa07e7d1463928fa4529a0ac17b82a36333f4c9ad80e44c385bdf692318e218ad2e86f9067fe5c4bd8484b0da8dd977cdf0b89090560dd347ac58c9e630d4053a4771d28c6898d02e881ed01cadfd4e97344ec83ee6234b232f96b011de05b220c398a021c5b61e979c07ad1a6a39f117a9c6c3204fdcf3236d43aad5b204ffca794bf524a16e2aa382a44705a6ae981ce57322873e64241129981b41e9a552711a45c2ac1bdedba50af4dc5b9e9b101126a73c5601246d65c1308bf380135f976d30e219d778ba956d3e2db67cb67d3824f6c3afefd3c4ad244f4f245b2d92388f2dcbd7d24942e5fb6f6c91da7391efb93eab13086e750a2bc78810a44a8845fd8de6e960cb83b8761b04abf0c9afb8b0f4edccd9c5e321186a3353d58532720b334923a8b569f9dd999435d97629978d09429641cbc7c4898dbbe672f64b94ff256f1742b9f4d59e55b49c7156d4d5adb8de96923d309290a403811c419ecb52bdcda9725bcf8157ec214281cfa30b8178fab31b37e607ed5073f0cca97bc58a34f04996acab3a7d5988cb9889b24fa58272f06738eb3c98283f95190a90b419d85995fd3e87b72bdd840a5a0a17cafa2f5cd838d84c784464e9c4e062664479034605042823c013e282d9302ce39065783fd673ea2fbf918ba389cdea95ef31819f0ea7066173d5d66078a07156c020dffd05a9c79625bb1b1c532cc68227e8b0f6cc97d481c615d267a802521c28d75c0888272da582f1420606e2e0f9e6e93b52f0097ac85188e9589566951452fffbc71004636a1312b5878a6ef38d0780bd8fdeab02f869c99299bfa059fa542d2fb8d6eb0efafdaa397661ee56df3e8430094678cca22ccbc4c661ebd8b95fe2ec2679ac73aa779a78fa5cb64e9cc2e113ead916fba8f916122ad7323b3aa3280cd843e3e9b0c0cd7e5101312454e5bb6898f0fac32bd4e40d0ded90a86e044a198180e6a0c27f999541038c1243276c18303cf4b64b6844f41dc83c9a7265bfc97e614102e3141a48f54e511691f9de7d7b0cc4fdf147b3c15d5f2750e89eb1e69d99f36037bb089a3bf1292e1c0bbfbb7ed58e0fbbd63a851200cb5ea2c8f84ddd2f2aa7b8248fd38d09572f32a92d646ce7d9ae53ac011f1393b9c5a96950814d06b4d6b567174c3d036a82e58d1de92d99bcc7a1ed79fa09bad25271b9ed83a40419bdd2835fc6bcdd0768341f45520a305d8009c6e48a4a051895da249a76afe8844aad72612a5ade0156a8ce28db0258b72861e0a502937e4f38c1c60b598e9ac8022adb3e3b0fe328efab05e6f44fccd1ae4c3b2b8d585fe49029f5f6e44699843e6d059bcefdcac723ad1b51f50212dcc5e86b94db7048a2a718e86b85ca7ea0b8d9503ea9238c944fe05928edeed943334858ddc77d1a85ca885f580185e9fe399607cc34f9fec1ba9a94c0d78b507c8fe5c6782e3996a8e98d1ffb8cd804b22c25cebc09e4823a911826716e8d1d22e4a6a35da3e9639a123c8f16f1fed9125aacc96418bfc00c2d6802059cdac13b4201d140821d9786120d00f1d2ad6c7afc7ab9705e9c92efb1a6d1bba6278053fa1cbf4732e8cec0078fd2082b002b9500720628403a8a746be6862159b683b8a6e908fb82d68cff13f31d3344917dd6ab3511f45ab95aad17e00abeab6835bcd4baf2db6f405fac480c95cad48d36a5ce8ea04762c3ab96e4e0f8acb01c7af07c76660f73400841882163ee3d608cd2712d9732a574bd8d4b1be8a77116bd91860078129377e054b4c160312de2e35579b96e692e2d14e274e4d2e81bc0d0eb1de16e5814b3877fa70e3bbb62547926f18c6023c85a0c947b650e302a24a76cb283cf9403058219583466448b8c5363c9c4810ef6fccde319d2d0c8edfd6c90a40992b42cd908d54a4c0246b8992b8fa48d2b9685c87ba6729c7e8b1ac631190401ed4a215f3d605b4cacc7ff8eed7e5fb3021a45d8d6303f987f906193cc20d803073360d209b904242bf443c511e42a402521c3150175a32098a02fdfbf2e619d0f144f2f02c599d9c9da07a4d83896fbf7bc58d7ef9256dafbeb56daa665bb50e97bf99c30ee96972b6558bb2075d3a766459e788d748ac0e6bd5f33310eb3f1c76dca60f9cf4be5ead7d26a9522ae0413e9d208b2b444feca682ae5990cbb8f1ac9b19356acc2db364346f3799a22403c1def5ab5847258f82d8aad6a8ac4a00854e7b5ee35e28b4aa3a1d30344a0b93fa09fea4d22c1430b4d8abb0232659d8a70649004a4fa39957a152f811d07be8a23799879478af6d6568fa7d0c484f2d558584b4e8286f3ce3ff080a5c371c49d54ecb2222de486b3682ec2fee96635ed2b3702a670176dc895674803111f4707d39df0b94924a31c8176e9dde993555f4da22ef482db44504f6151a66171f49fbd18eb39e9cc15bcb9eaddc2a4b21e869adf78ce381ecf3e908ae23d1cb9a979bcffc1af3e5b6914cace52d1c4baed9419935ce3488502ff9e7f55587ba093e4c4fe662b6cf9ca5ab6fd8d50a593ef8058a2b4d856a32629f87d8bfa0d1efcc430fc37ce1c3c0d37145cd912bf8284023c410f90014460c3a24310c59f7027690250646343134353f685161c293a0c0ef7b9cde9bde88c8aed9acba41820df85a5d7850cad424f3b56ff474947029ffdca5b35b0079d310d63373fbfc643d4910f5e90d2be83443eb68c64c02c27871bc1d0cd79b00ccba2fddedf9fc3dcdead94727f88de7760dcdce99f7dab7e73c5bc01e8134e919d35ff7b642cd8820a9f7a486343e622851cf4f0a2a0c84af12a79ff32b82dcebef1c3c7b4e0c004eb7ad96ebc673fbba3fad0d25409ad160cebb781eeb9cf5d29826172d96cbfdc8b89d6fde65657653da7e3b06fa6570cd318b7dc9aea189529f52ec150e8ff2d7da7b729f03c68fd89cc21e77f8212cdbfeb69c2a0cdb596486d903dc0ed748a86557fb8465a851d09db42f8a8962c02858e11063984d380a9d79ab7c80db6544d832c70c5a7519211fce7e4b7b0855286bc7e8a197248875fec64bbc8257851999c81daa3d07b517a0144335dfd57b75b1c1242a5d46bec82242e1eff44cdfddd2521db7963d3caa4de6194780970d216043a9405a45f5cd6c1ec214aec46641e0236151467088f9297fbb06cf0fd1466b8d4a47faf32672d47d7fd1e6ef1d3d5d59318675e593ca7cdd6bc5aada1269ff9bd897e73f32fbbe5c0994e089c182d557af40300f010b89529db23e82de675fd94c73fe4666fc04bd0ffc018b542103333e78df76d7f741178413402fd94171d4410987b06528096d44d126faa85d505a0a1eaee8bfda1a58aaf397ac46f5dd08317e28fe5403dd5fef334e2c98fa1541e5c7e92dba96f1b65caa2e0be5b20ae6313448e9e6ad742db076fc167b842c252a3fd56fa814c29276564f8a86d2d3d56d2cf093922219ec2abc4a0202d967ac1a87cdb071af0f62a831f4307cb6d521ed91c8d9e80bdb82a499fc6f40fad5c44d412c8de0b67b9715621b3d86614aaccaedacd22f7abc2896ac111ab43bc0af2a5b5271a72f7416efc0a330186a97d83cc302715889af5f92ebe3fa0ba661e1117f95073eee5863fa9b1e0c98bb196b8eaaf559ed1b198dbee317cea0774cccdb471df32cdf3f02ca3bfddae00e2461f717dda28caed85eb274ce5090498d754fcba016c8d8c082a69af5c2e10fb0a8cbb5ed52bf7e4dafd3ff3db9479e9dbcc7b4c04170398c117f30851dbbcae3a8bed8825a1b18e50a8a0b41eec4920b2d6c4d1cdb2d11e695f288b097cbd82d9a7557e7f50f561cd5cc9abd97489caa30bff18ef3a8d2084bfca4e56c5f88bc2acb5eb4c68e6d0f11826e262a6e79dd72b4de468b313e816cf4290fe93a17e9b528fe8af38a5ea26c43f4c2464d6d697de356c8d0e53c8762b3854e3aff6b0b0f9f41e7b9f6db1a15d211d980acf3e30b629eadba8c9cc67990a211e7caf15a7a7f39f5e0756ec46cd6a024b7362875d769044c60fa22d1e17d69922f158b84553aae0b1b7ca7a064b454db90fcf4fe816f943b691727b3c27806ba4b687789b68650a9188853b7f10024b331a691a3da6668531c6ed6af22c4324b74d8c8d48d763af89da98bba38772747853ce7a433fc991815509f49edd789869a4e6a6e046123a641058aea5759dbddef6b12046383872f0c33dfbb62d9970c713e9ea4e1699322d600ff03a1c649901063b36299e9c5b06be8aa435b34a1fded76594dad7eeb56cbb598a8009d44fa01deccd92df289089f39e10597eb6860b2d38f456fd8e317cfa2f07a13c2a3665e44b14a9e09d478483267f9bd346842c20aada83f21c44eb9a26be2bf5d8777333a4859c7ea57764a4f785c670cbee7cd272d1a5b9e46fe0bcd67acd15da0419f405fd4cc32086ea7127ea9e1f94483764d9701f6b6349baae5509c9a1886df8cc72814bdae27b401e9295185cb12a04392408ffb899f20918f90233e0c44e76ac07ae8452627277c74fa8669442e06d032c1f72ffc2cb7f59fe9d46806868677359ff685607ffa23a729e012371f654ad32c81b7299d405f7709e264ecd99165d39f76726f8c46a5682944bb2d5672786e95a832a07b02c9ffbe8729f4d35df3f3b378bb4a77e4192b2b13f2375fd075251094703e914576c3649a16f2a546bc425f7ab905e9b4d5e5cf656862af9de163cc427002e0ea4397c45687fb7ba8a62c938cca1c6222e782472221ca04b7cc4047e065752c21c620c14d8f8107c4e60d746f1e342fd4a08286f0804a32a6e702b4515624ba3f92659fbefb9f200b675446bbbf7aa2161f91db204b4291ed441a75ebe08ca224adbefa9717b079490f48cc35188752fc21275ad862fba6a7a5fa13422d065209a62973d798850cb632e58f25106e27b40daeb375a8cf08b723ee33cf22655d3e98e6fbc8a2699bd63146600e5c0823b113294d2715e47f2aae58b479ddc23e760a26d5e880923edeae728b76bd8f19196323615050613595834bf49a7584c238edfb400a36e3c36b65e9acc2dd38c75c60eb88023c93936dd6683e8d0caa2d84a11a6b3dd9fb92e5ac9c9d443634a0a809c62b652bc91cd8673f385027a62fcce20189496b851e4c66d4da54c13c64a0151c59cdec0f316f04232d3b4d580b3de8c58cb90058f6bf4153c8c63ad10b3062fd407885e712a80ec032e11fe2a9709001f3ab2707c7bd7219f7d01270ff2c86c4f420455ad3360afa2a2fc982d21cab84766d0518890342b9e42304099b53d331bacb941976d007d57aa0c063934bcd02af17e29b0b21cf88aa163695709ec870d69a3888ac1087ed8051dfcc9296e91a3a5d073f69991e833cd13d930ab1421584010ef464757602cf649b55f24d7defaeb81cd8803a07cc312d5d4d6074ddeeccf1b063ea33632c6cb6668972e07643e40d968a8f72036d4f151fb3183fc6f44210a06a422494bc5f5e5d227e8748f27007d8f6401d24e259ce4e9b5d2afb03fb0a9f6dd10fcd15097813ba3c267a520930dcb68f6518f0b17e478c2faf5bd270fe89193a1fa3af811b9fe4cc4de657dc5cdf0ad2728c955e7fd241dd7cd84ef41c95785071cd3126c508e93cc97aa3ece19c12cddc399babe9fc30c20effe798e4af7d070f4aec8d20a1629a729bcaae6e09d68d907bd64433ab5a98db07e6d08043f46debf94c7456df9e2cfadf6f20671542f41842ff1771239904edaa625d97298cceb93374995aa503507278e57f056dd31374c8f2b86c20bc912f0d711732a93be4e8990088ebf4cda2665b9831328a141351c197a53b2bd3e057af55bb181d5d1ca625a40a728af558a44bcb0b4fd23eed071da65e696839f016f1ce1cbee0d9aaa92bd8b6e9c239fac950e6571a13b74ee3f8a5da06d8897ac2fc7fd9a00cf43a6d39c8a019e72e1aafe11d171085f50d56c9d4d1979c2597135db448712216b68241d6ba5fd421b22b40b2187672a4f37afc86dc0093ff3e5b2fa62e4e07339c5dcd0a4fe079cdf224c7ba27870cee841410606d207cb1fcc5d327f9129f86ec325943b20049058016cf0d0fe0ded8a1cb1547af477942414c7dca87418a4dbc9566defa2c972950cf50b88ac0409da877380384bca2991f5875d6b967fc13fbb508b65210c7f4469bbd93f9b834bb2a2c572d70dde8453eec1be8b4ae5aa643d44d367d7e4ecc1e7b53f1f0d9505f7853dda14ed67075daf77d0d884c0696f797b1300d6bbb56da6eab78116c9cfeee01bb437ab8bb7ccbb55518aaa228c50beb2ab89cead785b9427e6ebcc5105e9b3ea2e98fc714ec39573cef7720190cc5aa4bfeb57970b9391a9e103cd7c79c9872d88dc050dae4f1a881bad9e9a394f3c852413ccd2e8421bb48391115712f8c3ac6398d625445e058c78bd8cacbaf54839e49f6e0443c360e89032013ee93f10018f34ec32bcd63c67580e14d3459403ce7ccf58a258b35b6d416c788577900107d891ecc37fe50b224e291596e3c9d8ad966a72c7c74b8c15a61b8a790195af73454d5fc5f45a71df6ab59f7caafdded6e55feec2c89fa35fce0cbd6a96bd91fbfde91fb6e6ae7bbba7b7e64734cf9f0910a5197c9476a8c54a4e6ab1f6789c758981896e0c0b869c72360e257461753d5eba505a785703dd55f5d1208214379e85f089d273613d70ab9ddacb69fedb6dcec3a28ada9037827c0423c3f42ae551635597b7835c45fdd37fb0e842280631a0466526841a895110e970df0d684e293552e1163061fc566076fd711f89e6beb70b965be27e823ee21667078eb1e163d54df17ff276a40e3a58f29d1d52a18788ca22d0e6539e436761cf49e84edcfa2a69e2b858680fdddd25b7ea36c22e86b8cd614cefe3b3855dc2ef210034519ea4f1e210d5c30e1465daf68074755a4d6557e09a341e01a7ae354ac79b702d2b2391b3c1448c885142de45872a2959c3240c4d154982369ee414d3a94af3e84c180b4f872ffe6e2bc5c2bb5b7cbc26ebca03adb6d6f12aa9910aae915ae4163f02a8a397a914362bf1f486559c2bf35b11a1ad26bad371642d83c086409b642de82d3c01e2ea097b0de31a69c4736c821f4de8220d412b01389986adffeafa7825c20a5d54879718b931715bbd1f7b3a160bdc0990b38e09a00e4e0d8af1bcda7f9316671496a45e88b161e5dee70ce831565e801a6e06779aa4df6dfbaa6563a15e3fed17db0f75fd8ab4f52cb1a5b837d8d4ff3980408731d871aaa3bc198dd8cf68282a586c9d834a40929dac6467394ed4e5ab30406c72705313bf19b8c7f987e83313ccf3a6edddfd4520c5dee01186a84b2fddabe7192baf56e96fbe689ee18957c5d0768a394037cd75eaf0cd0c7341169c57d00d61dd08cd914a964fcdf140b9561f6a33450578849573a4102962de27ce36bc495f3d590ea465acb8cca3749cf77a86790d4b7e9e064df8984477e9f65c8c1f69d477f8e3cba54949d17c982fdb30f22277c0cb1087a418657a18f0be07b0f86b37ac494040329eb099503cd34c3042676c1d309a27890d0bd0e358d9938627493e68c2b5c88d31855271dae3b18a6dbf301a9b3c10710310a023ccd1a2892415d12119a56c35bb350f82f4956b13e9c1dc2c2612e101a7054d861040db80c54d410a8ef06ceac03eec5c46c60dd72550520bb571236ef517a15c1cd30219aab83709ab0fdf4f9f6c2fb2e592f6526a6b3ff7f64864ae5882cacc0f4b2e3a16d61d835f74d34e1d922400c80dcbc25a4a86118307f263860bbff571e1a55415b91216005e0d48941f128c30333f8f0254d546e61b1cf1a130f3c52a07a122391410655789aa114914f02a7e123c7e08fb0dfb6e692867dc4f384e934d8019048809864cd3e61e7290ee251a254f664016ed88aa544f75ece224324c2e8d7172237809c139b3e70cc994fe2ff61afd5ce764a2e3642d3340e7c31ca975c4f360c7eeb1ca14f765596dd196509bcbe43469dd25c522f098729b728c38492e65a04e9c44cc240c3ce691d2807235db4729f9298bfbaebe0d66a90cc1b39703446b6dbced334b91896a353a11ee767982e562ce527185538f2a12829cbee33a4a882b1f3ce0e5c4b3f992184c68ddce178fee8b197a8bbf1c2589dda183ff65076a4b81ea3a564470d405902d8403f83fa5cd6ed1f07ceb04813340c81ee66de164c828888a383d2e4a1058229495609f6174006f481c3310858b74b9c398da941a68aa0e9a0378a19971d738809047f57306ed1e8f0cb3f8aa449295c874542c988c51182817b309f33fe4f878d46424911a72ec8821b11066546b0937a6ab9de927e799c68e22dddb30821e772c7a49dc582e5a714325fdb1e60122082be0c90778ed27530fab28a78166bbcd8a5f168968e03740c7a98b3a9d0ea4681a54dfc73f9a9a4d50d8504e1bb30f53cc03db5e9bce12bea596f40aea7d8c95b989f02a746a3727a477af462e6e458ce02ebd175bca49e0c7abc71b6d42bf0d978f5ab4842082e247bfc6aa7e9934de5ded8da6b22d02b44bb950e1db6214a136697c1ecdebc2af271f7bec6437efb2b548c1adbbb84b5d48d4b3a7ae6c2684c31b5f88af2c4c87bc16702004196c200f6290eec1b721bc13f7567b85bb270d4cdbe29e3dae50a290f48b969c53de79eba614b71b091d8a8e1a87990d540585de2e8694e454183abdea210a78b90cc0941cae88779ca801f056d30bb9ad78bd05658a6a2a615ecaed46fc56e3ea6e3bdb07159aa65f249e2a59fd8e845408b0dd3d2cccb2f5fb85be88a14812978b222546943648a96f5809f2596487cdc51ba7a4aa564cd4b89fa1a71fcad7d1428a0c9ff7d76df06f07073cfab5ef77a78b9a49f867e8a6864dbccb9a43d5bfe9aa957305291f8b08859d615b74002dc1d000123d47b73649eba33dd7205994aca985ad94e8fe4438c7346eef3c30caace8448b7c803920a7552de1590e9a6b60d91f65ea6bb3c9e7a4c24dbe9175f41a0a4b29bba1237db3b3615102055cecb81e3d316746e6a684d70febf32f77ada68da34086dea6f88462b5d5dbb009432a0c1dd9de1abef750584290d9f696e113580aadbe7275240a88d2695f8236c4b2743127248f856d904503ddf86bf36041f15d8047d4276b0cb877bcaa487735fa48f187c26d1116e6d0cf371c8041fada9fce923fc283098b913084aea6d36825630ce58987a525370419400a4eb894eedc68bb8edd72585704534dd5af3d8fdb844b2433043c3611355385bc1d588ba58cb092fa87958aad013dc2ef9f7b2bd772bfd3855c97ba344546fc2c39f91a7b9ac9de5e72cedbd91ac58fb46998408ea170c12bb39bc1dc8a1544c14af5a9d12b93a4aa2ab00db48a3c3260784c508c9751e7d6c6ef374a9df0d713ca93ccb620f2b3003fd238ff4cad6eca04bd2e9484650b5eebafafef9ff4f8a1621e6d36e827e5c27ddb2aeb25fdde8f87af4e143f3804ee9ff1e74ce73be2bd0b87c673074f94b859d7d762e745108a5e64f771cdaeb4f43741a1f47296f388f7f869fe74630275a9791803c791c31d61d57d4ef7557859bd909fdbe6f92846c0c9981508cfc09b2ab9a422a68b7b8df233b02d6acdad804a01045b11034c3b24db9f0039aa709dd902bfb67764e5f3f69c1837538bbd677281d7680bd5295f3ce4bafcf409b748d561964000aee06f82e4bd11985dc434da139f71836ec61970930ff0ccfa01a99a087e82d09a5ef58d88a045260ea0909cdb823033e00e0bf282e44c6c811f46d3a7649433ff3d4453c95f2861da09f9778768d3bccf93c548fd42d88a67becf361fcd2582954b60ced3d9d8c194962d6148858160e1a48a49c5151ba2033e8718850e5925e6d08d89270267e83a34d314655f3aa161448c99c84c4e2c3a7f4e7f79fd91fa86f998b67e9eed86dbb5c8178c1858c5085a3177593027a9ddbdcfac20ee9a70eec306c036e540220aee6c68efafdb256fd75266c8ed826725202a5ef73dcc29fc041922abac2f70e952adf66bf7ae116560de481a2cdd0724b448a291923a333e7415c86820932c9005417b96b3310278115864636c8678545bc9c26811accd649d17c9556e5c8cab7db9d0294cbdeb5ca4791c0e49ccb13e0a3fe74ec46af340519427c9d0d1e9ea54c3754a273002a126ee5028f5cc08ac0983b7f6ec59239b090711b222e097961941582ed0ce333be84987e98ea3ecac4020cca6b65aaba948149fa745a7d7959a8a5aab36556070fa315621e0d4b1225bec21832d5aba9e5b1e202d04c80ef4adb0fda7f58110b804e513d2e15dc99a776532036e01edc4ca032027806e6e20e7216e181705a34e6741bde582390c71fb32de337e9ac3309db75faef67569d0337492816159d0002d6d55adeb080293f109fce05bdd0c6cef91bb1d96d6d95d4c71690b48f4cb7d1a5caefc41fb5a7e0d854f8dafefe3ba188d92468b4e36b148d29953627cbff58823fc319072225640011ece307a083e5bb4fc714ab42a6bdc0acef2d314b69b1001a48e60e15c57e3dae39b26820f70de0da7dc3c09e30760ee1c2c88bcf9dbd693e3d52dc04104a20336234adc1e9a5c171f8b9081d7de208fb67929894a5d224bedcc07b1a2d806af8d1b9f101a314804a3f2750649e42ed9915e0c66a8ab23d27bf1af1108ba0c28152b2cf5e5faa412cd1e9b4aeda8c8961e7a4ccb5fed0345ecb013305c1de89a716af62871ed57472cee02566c7a1ca568e2e9383c25ac9bf0e2c94ea13d6eff4d47b42c08b9394fb65aa5c269d105212a0c0aab052e0ebad09733449c5a8a5c016578bfbf0edd163744ae6f974e80d1311d8931718dfb56fe9317c77f666ca843d9dc39c7c255c62aa61ad5d9375b400ac228cb5076548538c454377aaf4e3d0e0617d46b1dfd71a361cb77224360a9110aa452d5f323adabb5f89d7ffb9412a283e84060f3e590db7b0a40a01143614cf1d3adf6037de40c9d79e0a55957282e60015c37fb44a2c8fc3d560dfc2d5a383610dc46ef1ffeb58e42ddcfcefc7c3003d04434b800bbb831616d574ffb1a75870ed92da4248328ef543cbb72b6d745db77fc0d46f7bf33f83f971b43f76ef3aeff40b70c247bcf0190d42cbbd034efaddb42921fc4757836eded3f6b5e65c3be08b9010c6279e6ff2f25ac4f76624aececddb852f92c9a5f6eed0d507c9e9b443f97985bc69b26fee70108c371aeba3d6bd044057e76e29d62f7e5b4470d7c1f4205397e58783cd1b8a9f9ac48e02962bbe20c23863dd5b8b2a09e15d382d3bcdd0d2457fa0c280f07ea78c082a57a29bc71203e658b1fa76f10de83200a1291936ceccf4f0d629d8e7cf8c9a53ce2285f8a1187923857427079c53d026c95de3bdf0c7a5f49350d791ee27f41d2d3a258041cf92fea4e52860c9c334a65af3bc28a446f34f271b4cf0ec9b1d42529e468dee9ac14e5c425df88bb26026798125371eca439eefc68094e09e7ad97e07fd573b450f5c6dcc5393ec7c746d5f885cbe734b1935897a1e327de47ccf0ce6f815f7c632157a11a46f8a91c7a329cfaf2bfc543f99902c283db6c8ffd3581d0bc77795da7e95e7a3c0c0ebe0fde1ef3acf93277aa31f37c8539eabd8bacef1a3c802c87634051af746173e90d0e51a49eaf9152ee29dbedf0da85c09baca31dcc4558086d521f36eebd2b2931d208b624725aa577018682a18c67166754e0da7c38517250300ad0a49b2649c290e2f063bb87cd09818155c771065d3f1eb0b63730957741d08b7db39b123acac5bf914cd6162e962d2c07db8c17726e58785ccc343f7d1a6006011ad7d70ec2b69f8ad1780c110b8c4d5b6dc6b22310c25568391c479e728ae2f6cd547345341a05bbdc489c74575a06f3e5326bb33a05602d3f1e41e52f6f3c2a69c909d01a872b4f164dea51a4bbf04570472474b48720c38f003b9c3014b722a62bd4825037c5f03da82f27f5c4014564d079af2d0560e38c0ae4ed6ee4068acc3c6fb1cdc3e0c747a4807fd4814ea7ee0d3da21f4c794f693bf23ebbdc6183b06fe62865c28a43b8a39b8cb40e900e134d2cb0baeb1cac5bca8d4a959ebc6b6b7dc5b4a29654a52063108a6079607405af625a0525049a844547af2a500c9b5b424d7d250ae2527b9968a724d61e5faa5d8e4fa5a664fadfa264faedf55c49f3cad7a2162f922c2d5f6596dc9d0430d40065f6dd8230b423cb10c1ce2764058cee186b8239573c021b7cb20810af8d7b8fb93ec32b6bae90d5c705324839ce83ad9cb304990207296594e158db97b95cf5f62d9a8f852ea889b2a75a40890233647745e52adb2dd89060e64996a426a3567eca2152b985c20b5b46b3712b2052a24e8668082196442471a5e41e488dc2f9310f9a10922fad304509226869061922662193a8e21d6ec2921002e3e5083aea14511273420c214343002a19084216c8184224e28f1a187f045915a45086c9004184620a14209f8091fb87909e1a9c1087c40691b2c40a2ebce22d622a48a268af032c28818c0a2212e768a602c1b26b81084588033811034f1e10908a07004d74a07457839e10126768e90f04813f50dd266e9851472700225a420c9102af811440b7c58020a5960e1e407e95e30c952c2264d38810d5a2044cf0e8a401bc4c0055f1415410210d18c9452ca9214dd679af1d6e2079024dc38a1061f286aa207411852f29e70b282205530f9c1814cc92440bc8a7470e409cc65633b4162a81004c44d1158e420968514fdc410218c76b414dcc113307ea0440922aef00104c21338140f0cc1d3240a9d28c020b6a0f399d66ab85cf0c39a69166b268b26a470c20609419e84408a2e52d003fa82218420899c21ac134441d47da67c8a893901402ae10742a85011820f8e8081c4cf174a30a12ad165997f6c94000b2b9c80822e8e486189102622404491cb091d2abc80e23f832a26c278db65b89eba9bf8eb2486d0e443dc2d00051e5ce1e304055e0061e6ebb2c7ec327071039203825a491c01822d865032e33dd2a421d10120f703e0d4b2a370050535a949189162470a1845e2278a17d1d45102c550142d4d07edef0f8b792872b10df62be6c1dff2603fcbfe47f5aca3b4ce317eba185f7d4a065fc519ff1eeadbbff65da08b0df33517886da0dadfbf6f1fce6817bb30a0beff03b277dc43111bec67d865eb617b38531fce7cf7dce699faa4bd7bef28edaba7f2a4fb1b7c958228ed49f8b31dfe2c8a36d296e8c9ced5501f7a47e7de86fad98f3e66ebb9c0efa1c8f63d645fbf8722236c837cfb3dd4cfde3d17885d38ec021ffacc866db02fbf07895d204ef549fb1847691a143a97fbf5e18ccbad557ef6fef653597ba8599d2380e4a45e7d9347c466954fbd7dd22825fe62fc8e3e18b1040a18144a56e26d1a57702607ccdfcbca28b7cc8d751cd1049e608e58c71144d04606833f3ac410b33f0d59f60c64ffe67668d9f114228428ea45105a2c41eeb831c71cb9985d66c8f2e5900b615c76334c7d72d308ba761964620cd17dfe646011a60210e4089bd266001d8e6e3e4cd28227b9c24927bd4045e4b4fdd6fb2084f6bd7388197a37f03dfa9a0764ce9e4e03efb4f021075b3e8554e2e766803fffe2a099b02237f5ea478e86fad9b74733bf67f01cdcc7e632038655b6cc1afd411215402161a2e6e4caa2ee1dc8e841f03345364ca37df6f147e6eeb66d17d3d4ccacfdc67934f761be107f31dfdfbceff3f62fe332bdd1641fb9ecc6c8e2ce57a92ea63ac5b5d462ca969443d96eb519677a94f6a2b6190c3243eccb7467c471545b9369e0fbd8727d186d7c34d79fdfff0e7d582c23845f3ca007f8801e608d510adbe546a66f97426732914e9ff576921ba1d8ac6fb7792647c5e7bc3fa51c1503c34ce6cd6cbdce2823ae676ea553ba64754211482ae0bd8b48b2f550bc93a3e2775eca8b814166e6ea75ee503c88050c082dd60c15816b06723a6a803184e83e4318999062bbb1e553b8387dea1c1c5b5774add8228244b145145bb6eb4ca63f0d55cc437d8badfd0cff303d7d3fb5cd903e84a91847f515dde7cfd2981f64f8458d3c130ab233d27d9694c61c3143fcc9ed089d4f1ef285deb77d10fad8f27c38c4fef4709459c6948a125270674886b1815ee0ad8216dd97bad12a09fb469f5af5c19063e3e82db83bee524a893327a5d57619fc8cd3b184ae1f72569b779b1bc78d4671b46d99ad74725ce4e0cae8fb91374e87e4e69cfe9736a591d2dfe9134c9972ba4fb5cc5fcd4421d1a0738c5d72cc3ff28f9c4af520f302be6bc619bd4d89eeb359cea7226f10c208218cd089dbf13bf8d0089e0b61e0c71863c7183bc6232b2032c232b2d3b1ba37f722774a77d0cd70b793862c3bfde90da1bff58a7ea3a2e987229369cbe60e38f4a98976a8e919d327528c14cbb07c99033499208e517f0d239bfc8d6c7286c30e2928251151db54275de2cfc7f6c469a843c82eb530f08d875c2663f091cafeb6ddc3bde1d0a77e9b89885a4fa4ec4c9bcf964f811d741f8c35d641661fa97ca357dafba7fc53803a996734021cc8f657ca10bbc1daaef31f36ed352974f7b7af21d3c8cf7ef3b2fba564f691caf4eb438ece68944f6c62b96767d52f20cc675100c04a7b1e70b0df7c0cfcc874d33144b3d6464b3d1affeadc0e8a4bd07dcdcc1a8899bef489b7466936957220209e16b08ef01c5112e3a6a200836655fd26f9f4ada52fa195fefeb43335e568805ecc7c2147837cfbd5a3916f77c42954fcc9d740ccf5e7ffc892ba3744fbada38d4182eefb258cd9245ace39e79c73d62eb6e0e27d35674c70558193afeef780310bf319e372e67a0480287f0d47f6b774429acadf05f2ccedeb6917c8f24ed257ca5e3d526eff707077e9722e71221fb8478f1ea57bf51857555a2b7599180383cca9633eb884024b604b3c8648062d6b1fbe6c8240318310449e13e2707593560bc12c1541483083d0da627d9a3fe79c73ce39e79c744e28733627aeedc90e109e9b570bb6c55a504a2b657cdbcd38dd507900c4c010515a5e04754874148849dd48a5baaeeb2c0ba65d00ba10e6abb12cff561575eebb391df86f3ce5c8fac8e9f095c34edd5b8a3ffba3017950960eeb8cc361284c599f7de1bfee05cc62519684b05531be7aa1860b30ff820b1e8a064c3012231f86561da03acc57312657963f643ac625a4466cb934def16742510cf311dfe624c5d286f4d1a324fa94e3b8977169d32a2ec678a30720fd0054690ff31f0d82c67f54042bff5112a85afea326c8b4882c1fe50129421f043f8322fdcb734f92a4ae4fdb4369b74ec534e3612685a1b1d242adec13acdc7703a085447a21fd4b0bfee8735c7c1a528cb2498c5383a1b1d2424fb4762aa6190f5375c4ec0326bb684066ee7340c91c7e27e29e84351033ad8999c3eea44f52b23e2ffaeb5ec37bf94bf2488a2f1e841a0c8d95168af22034c010171ee5d9fc8c0b7fb330ba18b997975fc383f07482f1203cd1f0203cb578109e3e173c25393ef72f5ebc213f274a0203203fb9459065929e2792dee448e3e474606f02e394de50668abf0ee415ef8b798513d2aa48e321a441b137e993ec542c89e5611218e0d834b969d517f3790ca7559f64e59c567d124896313560fe330169d5cacb150f66164fa54fdbd3f07488ac981a18a69db4ca8b9ab44aa8559e23df648ac9a11856d2d6a7edfdbb92ba3e8ddebf5ffb695516f2a512b923e54b295d3c3c1926710191dc6598c4053a39c73f5ebbc1fe4e993a50961de59eda0d8c0ebaf02f0f7b857a69e32b17f0a5be79ef9c0efc0e8b39482fdf670071540155345eda2ca3c32103a2e8cb781a9e43086dd0bf2b64fa2e78f4511eed4c9fc402a591c4a7257449a5165a68a105ca020bdfc2e944491e0de9758899c6a7444aa9e478f853ac819823feb88f34dcc778992661d827d2d3c037d1a6f6b4aac6cbaf2f5fa15efe8cfbf46d488ff29ae528f927af6dfa24bf05af6f58f0ba55922912053172889c22cb18c01fe9822c5d9209e992a4ffac24915c3b3ed3701a4ffa4fba6ad48d7ad2932ee99242b44b39ac811803f7315c9ede501c92d734bc06d2271f6a15873fd2732faf8a06fb44e36b629642a42be6f2951339ccd3c09f8d399a955d78d47fa4fc828afe004f52ba7cf502a64050255e2e10c193258a0e91e57f7287b2a20d497d8001904fad95be5d2d06ee5f6cd07d1ec334dcd390be2666189cc8493152d2f8f8a44f5285ff3aa706057832f449be13bdbc7c7918278a61661a38a64ff25fb6e8e253e992368e92bf425a313dcb4b9b96972d4ff2febd2fe6bf98b2620475f1bd1ffd4759944581782f9fdeacd0adf0b057c09e14d2a79d3ec98d8b2c5f39aceb28f6b044f9a42b888e3cdc3fb228106a0371401a7cdb5ec657f0beeec5d3416615bc19deb7b9789f4986a7436df1749026ef5361f13e95154f07993fe9caf263783531fbbb90c760ae82531c56c2b0fb1092200769e77d9fe2a368dec8937d9adcd4b22cab353a4fe1e3858d69e06b9ff67534d23c1f5b86b079f4434cd36f5f6adfc4359de5d7cdf3b1e5d15fe96d5bdeec73f7c239e3a3f090511ee6ea7d16fba8c99d836714ecc3b347d30f2fc55f173d9719e2cf8f976e19fe62ceea6bb279c039bffe4cc39fed3cd8a89abd7d19e766e81cedc356759307fc499f93df71f8b3174b4feb8f5ebfe67d3e6a32f4612ba6810f5ffad83294816ffa219634f0218f9b5d249ec194db757d6edf8b9285a182e34386138c0a4e17f194810a131dbee9e2924eede4e4ac894dce7ef24c1e9fb093cd627dea7fd9c21d49afa6cb1dd6aaec7bcb9fc37e26cfe730b7b746a15ecd9ec9d339c39327a88bd87ffa34791c499f7af2386cfee7b0d7ec993cb2b6aa17572548122794c42c2d4c368bc0830f4c8ad68f143619fe445194e16719fe44d124c39f2896e4ef047fa2d841e632fc8942c86a59b499cddaa69563adb5d65a6badcdac754e07976559fb25fd50d89c98047394b599b596da6a4b40b2cc6636f34a37a5124e5beeb3b6d696684bd3ecb5b7efb51f6dccbcd20fec0523fdd4120c937eaccdac6799b5d65a6badb5d633fbd65a6b3bdad7acb5d65a6badb5d65a6badb5d65a6badb5d66a36b36dadb556ebdad63e298c0e65f2ccd784411cd4ab5ef75a6b5a66adb5d65a6badb5595b6badb57625db9f3ba61936caa9dde73c6931a436f4a64fb6db66d6fecdeccdecbbdcab596badb5d65a6badfdab65d6fee47921627921ca55cb86a0b010638d2b23a68491294bae560e1839a03845c81fd529b97c35adada6ef53093a94efe0e6ca406f515c80c9f14df5ff927e2426fd8f198f34e4a8ba518f1493e96ba4b35ee9c62bb5fa54bf84d3a7edad372ad9b40a96587daacf7925205ec9a69565401a90a3ea6b2e47d5b7b6e4ba6fbdd20fec0523fdf8cac506ca4309e6a8fa14937e1c55ffc74c2db9fa54b9142076c6925e0189309f212745ad92a144935c3f85d5aa98eba7d8f82aced4e75a559d082928e84a2eaf92e264522cd7dfbc8f44946b9fea93886ebaa4438a9558beb233f549305fc199229ca1924d5006fac9f506e5faf5292ba755a41d9e174b10c98625c632942b0b51aead5c7572ad35eb383d082376c921e609830198543460cecc2147d52785d1a17c3787727df98ac23a47d5fad6fb2c66996d61254962885502ca5586a7d8c86ad577a236b4d5aacf026995e7608885936bccf56510c41123d7b775fbfadd43ee01f2b5df3c69a94d9fea6b1ebda9d2b36d00cab2f54b40ad824293a74fa5def6d82bbde791febdee57f056fec5437915bc183fc35379172fe57de4dd97e1c11e5d0b36e1cfb244cc1259627faccf1299d8eded8669faeb5b2e5aae6d63fb2d7c64c99e2532a9dbafc45049a9b16100e2a3e0afc629b7a33e8dc55cfdc71f5c9229fe30f023328936e86fdf233211ba0f636764e2a5709bb68e46e28d44d12ea594361d515ae71d411a6ffeabb9f88b37797e4de7286f1cdd5b3d3afafbd126e6a07f6bfa46e6a6418b3fe276741d2914e2a6559452af7b38aab5c61c9a8d34fa68331a3dad244c33faad14858839ea53924a097f9db757893799e218711dfd36ea8d7e8f287629fdfc9bf25cb4a1f126dfefba4f899d72b91dadbdec58710ae6324ec72d793037baf8b17bfad38b4ff2eeb737bb6dde8be3fd51fd649e1eb428f8d2d8a7fff9d86840911905bb4421620efa937bbb7dfdd1cb11fe7c6c5208fadbdffb5108cae9b837d47b0f86e22844b43153a512dce848e2e364a9fdf61cf7d3b1478edbc1f2f5e5757fc769d595b73d96873152487f6f8c5fe3d7fb5defcbf8a5197d077284364697f15e69ec7d99f62031477d6fb9f69ada641d27fb43980249b8fee76eaa98c67a9723fdc183ff8df7baebc6ef40f6fbc94cbfefb7e778fc4bfbe9dfff468e93e9dbafdc75c1359d394ce33fe2669db046ceffcac0359dad63171932ef324385f88ebf19e2fbbbd7bfefad98c3ffe2f6efe5697d16ef8b3bee3ba6f11ffd88e35155f8d28c5771f995f720f5bee05ab98bbfb84dffaa029e812fbe48469ecbf0122043c41ec459be5b3cee4d94856505abe0afc324dcd9ffba2e5a4c93fd7d0f422d84a3ff6a26f7234c7347f15a6cfb765fa39775d8457bfa71c260b08b6fba9ac9bd0ccbe1af8532ad77560f727f843d48b4419ffb8e79909883731c4f2601b04f1e444664f9620a24f9850c93c8e05594b73cfafe56967906b06c800c93ccc0262809153c49a818bab15beb77633d3f991dc7114783963b3ec7edd854f1767163add27444cde6bab7fde5dcdd6b388f66d428dfcdf5739aa3a8c4183c54f0d779f431f0d7d1fb6e2c6b25ed477ffdbfa8451aee471ffff3a63f78e8c00eb9e9779be48fbe47d3df811c3dc9cde099fbb4f72b1473f0fc45cd9f725f1f7f3796e9d75a2b8769bef4b57e911b45d7b04bca8df89ba13ff2e82531477ccd632c7f35fddd98471f310dc7638b95e42e95d82b31386e473f8d8647bff58a4beba8e12f868aeb723a6acb8b295eebf48daee35d92fb2bb763fb47a1f7b72d93bc2dc6ae8b5d8c234c635ffb5117318746b7d1777dee3f1f5be416507f84bf98b5e8c96d015af79ccc1d76c99e7eb5b18e9ab70bee51fe8b36b946ee37caed884fc3e1d14f8ec796e31314fc459b4cff7631faaafd863fd945cc01737dc9e9a837a6d3a779a3b37d8a37577cbb883628769e951a5c08f33d9d9e69044f5a3053742677b1819686786268865e23cc4cfc6386344527a594918a2940f19a99de35c24ce75c08f34d9bac9569e7481d90937108462213a4302e11923e24db8787ce8d547fbe0f799137a92f6d32c52ef5612bd3cf9d641abb1f7295d35171d7a7f992ab4af2d72c0f7214edcf9f646f12443b28d3bfd54d2b68b7c9b90f518b5deacbefac499fe837cbe96fd887fa14d4d9cf3ec2950f51d9929d942975ebab66398abec9d475144a52f6b4294ccc913dfdf601e2f801aab4a7df40c015ca531416fbdf0af96b568528fb9ae710421bf647f639fb6ebf39cf6696bdcbc8b29ab9d709c4597121cc076df632dd0d69a587ca1206195b728c3e2ef813f3a79223ee6077fe5242202d52d27fa0832d966022094f4ca504283e5029010a172a4ab41461e57e9d2cb394423a19277ff6a34f72bfbbba6f8bb1252d1a933e632c45d4a7cf706b659c5e71445bab553eb7568c6d44ee93234a713aa2fc2c7f158562cc718c49fcc5d888556b90e40927499eb049e284932c0c6a854a1234a76f728ca1bfc5dcb8b5c658a6f4e38b7e349279323ec5cdf372856579aee674d0f8eb22b95c3c2797eb65753a9d4e5e9197a7ae3ec997774e477c79f91bb7170fe6f8f2eee5dc8842b2c81f75e5441d97102259fe1d6db2552e1975aa8bfe0f6d712fd31ca62d8a23656de1d025e0aa8b5ae4bf7851a7487e0bfe4c312789ed6f2a7523661521eae5614684d4f3f21f35429758a1485a05d4aa7ebb82ce892c57fea35060fa9325cd222bd161062fbf7ccb8b77ead3cb7324ee394a575ee8cbcb47ef65c74585a820d16d7fe54b8b0773ccbd030fadf2a02531a197af3a9e1e201e1e980bc8054f12ae76409d5027e774d0f81d628efbf237c001a88239a1483097843a91ee8f50ba16502df8f568eeeb1033cce3d0f1f0f4bc48aee6e1e9795d0c836b62a63891b6aa921ae42e213badfb2d783dd427f928af9b344afe45e1e1e979755187145d3127e6b0f0abd3cb973f1248064923320ba924c3b24492e5b32071889987a7e74572751111cad32adae3c2a1551cbe24974bc80e4ccfe519e2f19574d5e891af2c250f8fca10dde8b547f98e44775e30fad3aa7fd96f244b8a24cb1e974bc80e1cba5f1373d48939be922e974bc80ecccb742fe953cc51453c91489f76a4ab0686c131479268eb5e8cdff34898baf07fd4e57209d9691526022184ab1d6878b2e7e5f2d50e452e970b63c9e3e2598110d78e4bc88ee7c1ccadf092137b5c2e58e472f1f0f8a8000e3d247043a86fba727c2d09c7e2807036adfa9abb69d5e77407e2984f5f942747da139f8810213a3a1487e2dce42f95efc8872d26951292ba69498863fe34825bc20809dbcd75d22bd8f749de5844becd068563c2120ae44b7da92f95a94d374a82c415a1e4811421a8703d88c139e16524169fce1fa1254b9428c9227fa9545ee192c092631a09d1c2fd2047064785cba804413a33828282280d4a05f508f2556753412947e94005990cab8849a582ba8f061105bd10e13a38a4ce0a34886e01a4fb68d09693caf3c7573bae9dfca5f2977aae05012d52bce8e033803640be7f0ff4e7f7401d65837f8c134bcfb18d40508e06dc109a9ba2882556e08477a41408837473a8c90771c0a3080658162623727c2658909fc8f1293dd5807a418b5742ba28ad01f502d4c26432b9ba0f020df5f707030c108784130a21425176941089e694720ecd2234e9be392453c412b0150039011b1a1a9a73680ecda139344727e8be39b4338774640606a573d2160d424740741f6d0d19f9f18fb666057c0561cf90912c2287e4c708cc8aae4031c41cb305b3d6ba0c3d638d031c6ad9b45a380cb56c2a60d37db4755fadfa6010ecee10e915ec58274f4fee9c497bf80a36126fb55ab4d56ab55aad164d41f7d1560f1c6a0d51160d90f48549ac08cafd1487eae4fef99ea7926fe65c201423464b78643283dc5a7441fcccf4989c42f741586cc6628e25ad92d30899cead949c0dba6fc672d368233e9137290ab1dc7f595ce8088936b19f10e1e0dae91bfa44813ec94965f41be28889d80d43ee6eaaa14f5c1435c02009c57cbd5ef525d359d391eea3af8ead576c51fa7abdea6b04dd05eafaf5f57ad5576cc5d7cb579d6df1d057c5b1b5f9749f7db5b21562632e44e09b1a15d17d9465a455fe46bc19e473c83f2776a9ce82d17d34ce1ea26ca488c72565c12a405912cb00751f65e5cea12c77d8f6848c745201a2b3f9932a4074357f523a2b078872e762186589b726a20e31fb0faae3ca8588f2161857a55376579942f7ee2e8fb0c50be12773c34c476f2a31e82cec8e72f4fdc8d0032c1091ef1212208302926071c4f4271b1926c1420649c230e50096adcc1730659a7ef92f9e1d574e6c79b4e953efe028295fae4005122d90fc60240a18cc50fc0168831444618b17ec841113c2ccc43738aabd0fc63214f2777a42fe20ac287f30c809f983444dc85fb46142fea22bb793fcc5578e1f8edc000b9f1e78e0c94ce9064d70c2849c218e1861860248a650b244064c2882c88cc41f041a81096ae0831854d1c40e82cc38fee0100d183c39c1118240810e0b66bec88a8188142c51041f5c710416333b1cb14204347029a1048b25e43ec10f10245078c2073836332b3882e30417226005cdd420480b224f240106172f98f90185911c744104174fe4e860a65f065fc12e90d0c49223e42819628419161680d1832b927841134298e9dfc1573fa678c2172f1108f9a1278b99fee1f3011630e1f141092e3062a67f4cd1b20110880401055a1861a6615d115695fba1f5e24a01e228227ad1a616176ba3d0a9be19b959beb2f91939a67fe5f83e42426ea1338b862827832652d6cdda0ee8c609e4ab93f5f98ee29c349974a8554e2df745363ac249ab5a236a95dcd13638133df8df000a90e14b2f051473381e4001b4c8fd9d56b067e2283f7745f74da0dc5aff378150176ad9e8fb91670e0cc06dad14a1404b5f4a29698e399fbef472e06499a3c523c7096a6c9f59249d38513789990e658aa3509faa10cdb6273dfdeb41a14cef97688d8f46da68f49fddf0085b0ecf971ba681b85a2be3cbbeb5e2c864c63869d641d30c95930f1c66e4a8923f1f2a424c84980831116222c4a4474ce8664ce443a11a67d223d68389500f26423d623d9808694c7a30b9a794074e424c84980831116222c4046528d69345cf4f0f921e588f919e17f7a18cbefec77dc59e42ef6bf569e9e9a778b05114c3af6f7d556a6bbf7ec9838dda364cba24fca5f2fcadc3358d6bb48b6932fcc911aee98fc31afee4cc7d27c6359da1cfcbc7bf5371ebdac7593febef54b2af1da8199d5ed480cc34f7e58d3ef9bf7c5e3e2f9f97cfcba7e78bc9dbe6e333f41a5275f4e9f1790df9bc7a7c5e433e3ed1864c653a947ce8dabe7c5e3e2f9f97cfcb2786d2a430eedc9142dcd53ad97332769c3e59eee9b7bd7de762882d5f594c5a09e53e84abda8221eae22e57d3ca774f4295489814a3f4284f3fa566e68cfe4dd7b886eb345bfaec65e925aee96fc3359d4bafe1af8550304de9b3a7187f3f4a98c65aec411c2708572a954a25e9381f432525ae646cb452daef98b782384ea996ac07b1b5e47d31973ec64a16af5656f00d8ef25ff912fe4c117fdd576c62c129d8dba0af22ab51feaef259ca6b97e20f26cbf80d7607ca93bef362861a0a8c2cc75f85a1eff4292579908b617bfadd933c948f2cd7bcf3a0e43c00f469bb9e498fd6ea41a20df992524f6995197c516e01a80a2155d8e4ebdb74491dcfe95c314e9632570c1bc79b9e5f3f996bfa6b5cd3f1268698a37d0861a334fcc9bc79dbe3fb9bfdc8eda0a12f7386692ece2cfee4ccd9cfa965df9886fecccef19899e2f959ad9376926ef6654c723c8cdc18c9f0279ff35e885aa310f106cbaff1260a01e5db6775fedfc77653bc894278d601e1680914f9e35588e56ef5b7afa685525462f47f5e22bd7f431c9d472632bcdbdbdb479e8c87a6bfd7fa57ffda23c66a24b2eee21eed50ac2ef6230d779777ebe2a6e7461eddddddddabdfb9753bed48d4dedd3decc758ccd16fe390ff17856c6f95c3345d6bad1ca6b5d6ea9e8bcf7015fce57d05ff77ef1dbf3b07f3f46b0df7fe186b6b856c14caf5658ce237a6e997515b9c85ea2b1cb7c3abff7b65a1c6e5746c38d983f1606e388e4c7c44239f76a8346d176541eb142202000040003315002028100a064543c160304a3355730f14800c8298506e549b89c324c76114a58c310610408001048008800ccd8c6a00204ee9878d8cbbe41df63eab895713f8874b99b064e1635a58d061eae492c5863dabf454a1e9d6aae63e9b9ddd93528c330859b77c33e6004b32c022cbfdd363a56bee4847abf568cac63b5777fdaa1b9053a283a2ccfe87a81ef216dafb03152819e9192b1cbef14539721b299c42e0731c0bf088bc836b1c3749039863bef82b25696a270a3009d6a0454eb2b5d08e29787afa78f9240e67fe7b53e05ce797eb8da6a8e9b0ebda190fd6f76ad7f7ae04a8d131b0e6dc14c1c3cd41a8f4833746ecbbf0f7c18ad11a455f56866fc026b91594dcb62bd76c1ace37de4337f5405e64bb7a8d741380a8abeb9df6c15bc290c5fafe540d36f3a1624829fb7b21b793e346f8ffe3e294ef90643ff33d0ac7c21f9d9a31596337c4c88aa1c6c59abfd10763ab713198f3d1a40a52e2113a13510e5975a64aeaafbabdad0849b3ef2887ccb2fbb139c2150dd8e5bf6410e03be1151513494bc7778450c90a34ae31f900e5604668017c03d592b60b1fdef94d4b8ee1ec8ae76044b2239da4385f621d8728551c4e018a85813bb5a8888f5984c50c6873e9e5accf0b4626788c450154f4be58f0f0f41759fbf762bdb36d33e236ff664f9bd876cfe09118981c4aff23199f21ddc69862227505a4b3e7b0aa36c86e40faaea569bac81fa66d2be38880fac12adc18d59428b2a7088b135006fc9201c6703328a8962fa81d32a487905aba48456516b5d49ca58634aebe03270c54c4f04b7293931dc3246c083c02a1b82e5ffe55366a85f4d7bc3547473bfacb5eb0eb022ea886d1b46873ef2687ca32d011fd813f2e700d08b875bd13cc623ed67bdc2217aeb5e5e40d5f17bacac8cdcc0cde1a24bc2b38d90a17f32c07b070642a26d45e549a473200920d0c1037487a392378a042dac4ea1f8ca464a2998a0e7fdb699f42c654cd9722a6963983aa10e4a5ff0d39a293583ea3a982a8dc27575151faca19c16a0d19bcaedbe7d5d0e52105f61131fe543da2e32e81e12059cfcaf6f25d7857e1a98cc1870d1ef83e77ce30d2652c670ba9191647f09b2982d1af16297959c662de1c460f63b1f6fcd65abeb6dffb2403e04e368e400fd589a520c6105ac9ce3ed29692d4e1c677a507d2b330d8501ae70e4c3616518bf16bec94c34b341ce16774b84b78e240893b6fd85947dfde5a80616be7d35d0b23446108871da6774be9fe4a9a49d386fe284e4fa321847339e013e6a2e1cb61370a67766509700bd5ecf53cb415c938810d090d993750360bd4faf85b8fcb5d63d77492df54b85a5bec819c05cde0437044606e2da472709c17e8393e96bb127289b02893e807266243eef63c788a8b97a3313d3b493dedfe638835e84cae44032b6671b49d074d826b59c45bc023b12b05d6d07afc46e1d840d4bd0ed2fd319cb70c7d0739ef10a1ea6e013e1a867807f31b640a9a265e1ac2ee45e7b693208486fd019c6343e5375dacb9e990cc4a87ac7ba8c0001df3b9f75f50f0fe7d04269b5b9be1e4c2436d183af4b8ff324296ac6f493fa5f609ea8cd91e42b3cfc0a811f933f34b0c856bcf3e45936ac83496d88a5a252a4fb078bca9135bc7b6a21a1147bb872c6f6dd93a027fd96177d92ac51751f2860495af12f8e864685f1d44bb328ec5160c6ea2a8c888044d382f755bb038f2e20ed1f017689505f022a671a8891be68297acea6e44698f20fbbc1a78b2fedda5705bb0de443a5b8e89c0189532326cc94a4ca90465549f7ae76a031a2b5c9012eb75148618729eab366a5ddc795a7848240f19c7571ce859cb8f7d73ca04009510bba86c3ca3bcdee9957ca891577b607220f564cc4d8a2c18a9837c33aba1c7fead985f1f48c1ef5e99b2e9f20f2993f151391ff8380b0a5a1364ccda374add1bfe3bc6bcf75d8882d9a6db0f865391f1307ae58567dd2248558f050e625189216c6a41712d674436dafed0590c9406acb38dfeff386a70235365dcaf445855e9f298dcae6547b8e26f7889594331848e5c93ff9c9576550e533df20d42377f6e8b268df8a7179847223903cff39ae51916ee8d4986e15cfd9180ee8a78f67b6669c2c8271ad6e6d46a2b8c94a6b76df09b02609e24557071a6864f8dc4e2fca2ff68734f51509579628e3fa2690344c9030ad4a80bd825c328f8b872ef751c4f3edcb558b847da8d973098a6d06d95753d4634d54efbb6d02edaa830493526be77fbfd94daf28529285c0ccb1d375a1f63e414e64e8141f25a07139677ae027a0e00020dab774a7c74ded33661ab4d0e31eced72a7d98917b668a37e149706367003887b5925ef133b10213d43527fd4c5890babf36fc553db35153392b7d49681e9617e62be0b415a9d1ca2c3545ebcd40eeb2c3ef6ddc4d0dd63371220c6f143152558ac8279a649048bab3431cf8352eabf92d2cbf88bc00a886853807b18cc2f526bc72b21b6484a7fbf65a19d48ffb8252b36ad0bfd69757378fdef7efa00afe6f9325a13f6f9b49a3b6cd086c4783f07af0557a9714831dde6676f72f93a43a46ac8777178a7149ad93e37bd114c5a047f00144fbd29e1a9d631736e1e8caaf04393346a7aee5b40f288b4564145b738f74efd96f424a969247672896a63d6c8831678b6116cc3d3e4395a13a1276caeedf8ffcdc22597a908218bc83993a1120c6b2d44026a9ea20c1f7ceebd92a7bcc1999d2b335d77a5b592d167709c53f6d8901a2aa732d4b922a998ad38aa79b1c174693872a8d9f895d0e7f0b3dfe61582008a2445788eca209c3e28cd39621d0e49260f097a631a9bc8431a602539602625b11e24b065344bafe628526c6857093232b6d26c7fbc275b4edd956ae22dad001c4236f6dc0634693f4d98e40f1b51ee23f76baef349352390612105938832cffd74928a19e4b93b5b41b731968d126451a3ec3314d358665318f87ca3f3a06cacbe14864dbeb91f10c7112c39aca5fbcd6b6223623ef21c14765ba032c8cffe11a8c69f43571eb00d1ab498cd66b10a0a5b8f504670baa89172b2f11676ba779c3115576874fc12bb826c82f45b3ed303717cae323e6b2ef64eb4f1afa172fd47a43f0ae9582b226d1f65ebbbb8a2c3412e8ee33cb95592741fc28faff0e8ec348c4dd87b42a81787cdd274d302351974120786e2ba0288bf4765b3955e41fb57e4825ae8b2ce67d63b1777fde4db1ffc7f381d54a74c7304c25daa5e48f249eb94c583d7b7d07b3490d227e52454a643707da7ea8bd7b4936aa06e6587f7469117446bcb1d749b0de832b083838ee3d11a82fb89d98b819d3f5c0ec7068dc53ea40fc99e73898d658cdde4d77dc2ab28180c4e5f42696792170d12cd88738948be0a8f83f69b5e36a230c20920bb9203798e80331e7cff7e522c0fc79d524bc32955be14fdff45ab05047038b4a29a670dcf0280dedfc2ad59cfebf5ee8d45d3ebfec393fbb518fb2dbf7fa27ba24f850bacb521be23c51558b033746f9c8df3d27f6826bdd710d2f6a7df1bb4cffb91ee9f041af533ed56dfd6ff1a13d4c7c433c38f0e2fdd5bf9835ca10dc9fbd1a203fc0a7f3419e4c647ed3c796931c3cb7afffd58d2d08d31d45964134b062cb9ad47b8ff30b9b507387a9b89b074e521a3ff9cf71cd922dc1cf832c47adf5d866d111e74df4f981ab2ea2e835bde7e84ad9b95d221c9b536ee80a7fa5c67f178dd7c1216527245a99ff1f0686424d54963cad6748323166312c99ddebef9cae1ff6823c15449a2aa21a4dd1473842f52de16832e1278f22ab5e67096719bfb393da13f3913b67921d988fc8008291549e06af4877f7804928629bc1a44378bb63c73732e8f01bbc0948be696dd8aad96b76fb3fef66bf3b730fef61533e3354f180b936d7e896fbc3256928acdb21c00a7f6b3984d8921e01866aab427161e8dd82c7a3531160269f72e55abf1870cd73ee8feb30871deb8e7a1b0c893685119ee693b1208e8ee6191f20015c052ccd519e3233414997370d26203f4c49abcd6282df9acbec1f7a1eaef70a302c126364e692dcc37c4a09a7b19b49b1cac7724af8003aaa9707f1440a5537dfc76d505274b6c51ae9612e9023928afdc42a452306f6b9de938add68a99084c354c50651de03fb40c432e4ed4029609a2f16858ec9b347f7600cb444f2577ea76d0d044eba3b85d474bd07b94ccfafbb2375357544e172ab851c8976760edebc3395513dc31a4ff1fd1412bcc85024c5f6df0197afb67109fc79d64ede0044a01d8eabb476305976b32b6e3535a7c7e504f08b566717f18b37d2a43ebbdf54007e10a4c10b572d129651e42295fed28a1c69d3cc6da650eabc8d978e975ac23a02c1fced5890038cc4ab5bd59bee2c174876f75a4660748677cac66af82619d202fabf0b0909921451bb233f826bc0d06304cbd478449fa0d7fcca1c5b255067532ec8f3b67af626e5444d81a6455fdc43f646eb7ded4c859d73d674998a3ab18b2326ff6bcbb4a2420eef80d9b303dc030fbbb016cf9ab54ea78a3c46315612d57bf33a9efb92135995d0b5357f2f6891e3273a0ec6474bd6c234b9832ac9e04e9a570f182632e6faf91a91ef3d2e3099bf6b0aa972ccd31983d3ad40aa947c8e0624c80953ba0a527f8be3b0d63966a3fdbb141d9738181e1184733151641fc6c5e3851e7fb400c5945caea76447c0ea0a73d3290ef6a3110ebc3f3fa211148ed0348b948208468b714bfd0c62e319011e7a2d003eb6f2e3bb44c658abb53ac18ed689adf597726586934195f04c316a949075d2249a29983480355e81ed0ff78909c2eac186f48325c5e7fe3d7d81a4434e81a437900783f31a4459c63e98cb5302606eb1067e4acbd08efb591c212f3caec4161a1c042b9ecf0d3b92c892362f8e4cdbe789341c1deb0b15692d232a5f97d653de47a29ebe5d524776ce1271b40a626189867d4e014f30be227926230c760e62b5fc802cd2f11cc14a99e9be0dac9013222ff9288c81400a54cff68e05d31073a6b30e373e3c48829ae6d290fc198f40412395d457dd0081ca6046cab9c5e1731b8e808b117a0d00d8b5a201fb4b562050ea92a317d80dbc83d2b84a6ae4eaddb80761c39ef8e0e92012a5e69f7052509ed5adbba8ad8ce71f65366f9d08943a76d5c3d2417461bf0eac3407d43b04943b06c877c3a37636c4b992ce8d636f271b55cb61a157810c74182aebf4183bbaea4e356f31fb23179a1dcf06e64fa51abc7591ecac4fb7cdaf0c4d00a7b0655679558dd2a7af3ac6c370c32190c50006391dabcd521151508bc8d9a61230eb46041525a4f2f68a44b508ba3e30a7a434a8fa9cb91fe8b442569bd5b8d083f640eba5848e9d66a1185aa07567ebc1891580ad61c3007b934dd6ee4fc45d8bf53a811cca5313c548d2374f95e22402ef80521098425f0dc826b3444efb113f554645a19d5fed082f6b4d82b2fd88550af02a1c8e76f3b1a894f4611745fe8304cd3a3b999b294646a80d1b53a78cd05d3324fe90a88baf96f2388bed88b5e1af6c1489e77e5d265b4287fc515d8ff21ef65426d475c1fb7b29cd72cc709f74a34ace70d0b7b5d143f68d5344c76719da14c92e6584f1b6089c2ef1d12ce6f4f966f75813acfa74d598392014285e8868fdee136c60b2865c6476ffec6fa415580632e6e6df7f7a4a033a8dce3a1e8b782ae82b14d8a10b8a7cc2b5b44249d0f9e1bdbebab9e6d6e7c124820ba61476c3caac41ca152674595391510429bbab800cc43fd85813348a040a1300e548fdef36c1fbfc70e0a1a369fdbce031402f44a00942f43dcc775f30164fa10992d7ad9bda2eca31b2ef914911d61ec78a81b8eee9f39e8869161350ccbc69ee96b6c400cffac5e441f27f705243a5e0241b2bc876ad0b0139c8f83577f6c8bf65ce7b228d89f3f83ee2db8bbac36c80e785badf384a4f3574a54dcc36676a5b856d67d394d9ab3c6b898c61c8ddc0c25eb82e65be9ecdfcebf82f4bedda063ad1d0a3512d84642c14cfcac57ff0403e7f9f811fb84027ce00aa651520447c6b4572ab3ca1e10ab83eda142fe2bc0aba5ea4d22346772b174ce6a0c9a3d70296b548c3c5508301fa4b08294f52d23865c10394a0ea4f3a643e38136cdab7a1cd0104da3e5d4323f76d5ad0754e80b8607ee700f2aa7e12166d552e78ab39af836135f1bf2c9b84c2c88aa1094ea8c7d5a99841045ddc68bb92da26e03ab5c66c046185a559ff0fc9e86bebed83415a3050c2b5e8c115a7b7b28df2cec5f31ed430fa0d1d2c024e804b1048a0bb48e9089caf1ea541b9c59960b623e0d7a10376121c19c6d23ae670d0f1a9f10f37faffc5cb8559dcd528a8b232625c1e4841a8aed042de675a18a6119ad0a334cf30cf45d05823239b7355d8d18c4158072271412e323382657459368bc6932e709c2caf9c30ed6548f8bb6a189ebb8bf36cb9787d15f2347c11a2b804958e81c9c6b49a09b794f1dcc2e556343dfcedb49a6e653c96729c7ead9eb28c86503650dec1a9b135d7a0c168848cdb3e0bb3b0c8a916350a69874cd831ebf23bfabaa967600b5d3131b93a24b0e44d2374f25e512c130919257843035f8b3960ded7f940352682dfd796fbc8f76242ded346faa51b496f75b87cb856ccd7857368d3b7aa14b5cbcac0c369bd239d13c824e662bc40b231a6ef05a13baa3344f2c474f6175cd5514b09407252d4dbe8befd86c2d7d33252a2063a31623d678945fa3eaa2f7ad65ccf066ce58e6b764ea447a0cc0f95b4b8ae5b8f505cc380847afd3fb49c95e044c8981260e5432a3d2d3dc96f99c6e68cd75c0d7ed4ae953d42909ae25e1d3d872265c2935b8966e9f3a54cc7d0e9397e83adc6c7a82846006daa2c28e64927f33b2f271e1d3d665da71ad0c2ac15ab2675b3e54a00bbe968d30bd84ae83091a1e731b51ce0e877cff74a7a8eb21783be6722a7d2e10741462512ffe4f727716757da831ba5c15e1ff01c98a57c5b984419682183c0518e35231b059dec3da1c615260096c3d65cd7c81f84638488a20628a35e8de7a2ba09b04082c854456b8357b1a4767280768e455ce9c5146f75c522b076ec1b4a956a2c288e20d10de2803ababd56d16868d11db824d1a67cdb23d5b588af754dc0d115d806607e056b55d657c1e188151a816c74706ce4d90da6fe741d939550f4a0fcf2569b3661ae65a709cd2b6794d457c5e464d3668e11f5b2e98daa201a6910000ea745d743b2ce5d03cd1158567c1b70090b971d488cde9c046bc14d7032eaa945a7c727775bf5663e46118f8ff27a1582311893ca087305e0e3ac73020359fec39223ea743b229547e201e580f0a5f458710f7b3dcb2f3aca2a34380fa5a2ff49a760b54a81797892915489bdb240566269fc1a1d6e6e206b055bb451d1a85cd7dbb38cc40c2bf50a8f19e83ef7fc69824dfc501f3b617eaced2686c408ec21e4819e8f05c126035df5fda111c1057bca1ebd0c56c0818a175c0b826212837242999527b3332e04fc9efb63ae6859195a7bea3234fb5fd8a637a11f34cf6861422f0bddf60fae037ce94ccd4ae886a4a5bdf478dc4f579a3bdb4a36c7d0574febc643faecd84720b7062fc0c7d1cf6a926465b40576f00c8840f335d04b8fb2189a9bd871f1800bda4c2ca2465a0eff893aeb20b00b29a2a82746c062b9dd8ce5126ce306c232430805fe684756a81c180e693852ac8295c91762ec431febe31c2f302707ffe5255f1050133463b767d597b3401833060003271386a8a40a301725827e880c1722279c125f77552783a6853da8e09f345a9a5de5ef582ea06c306012cf83106871566a856e55c1eed12e4e036e5503e60773b2cb94c3b8191c632f0d6322d03686c802684204e6af0f3849f559177eeb5e5a1514ec16406b0fca9187be7d553b3368d0c0a98c0b923aac6ae023dfcfa192784e06e44314ea0dd0a9cd5530666172ad51aeb278c9831dd3fe7e1155052d9549c45b2206475641bdfb64de412acb88e3af302e64543721fc6bc786d52e1ebbe265fabd5fd3d0046493a8289b1ee933a0a15f25d00654c665700cef2741dbec2554e84a94d4a91089f245fdbca0493dcf0fe2f7b5603447c2c72414135ac7b3f7af99d43b38ce138af007f852e4ae59224b976fc9c3d0642932a6f63d1937fcca49cc1a169a8d5fe9179b0e8cbc4173165356766e9589c96db1cb388f0ba6f035f3039c40bd82f2cff3e913c279a2357d21bf5263d7b45df1ba70484040ee6b85e7a44ec794fd14f13c4999a317351f74e33d8e8a6ca60fd376256477f92dcdf217911fb834c82c4c8e93becfdc2497cc488132260222b30a323a5605bf87ad02acbccf56b2b7d93598203b2aa6bd0f30d7cd3c49c1f9b7a0122737194b203d99a681cee0b5bd6bf3d4c14c361f145d4e8947cab27a1538fa2e393cc9d9c161b09a0f8af8714be454a70ed8d91e89a463b086a515c306dc2d2411452c4d8d0b930b83cfbac8dcfd093c6c663ff45a024ed91aa7a35b551d0096700c40b9854190606b2632c5a3daa8caf1737818741cfa8f824e4390e2046c1312bd457b6f23dd4220260a669e66b5676d915f3b7e66166893bf905422009b210c8403bdd23b9b1a69b16fcc2611c1147f84504f510243f5351492f8eaa0b41d04959cbc8930fb5d77a71303e738c98fd9c6863bca48ac0ddeb7b3f2b3ded03f5d2c1dedd5da47c65ad644d42d65da2432eb5e9ef6f721d3574b4efcb1e664139772e73e45e6b945402561de8b470ec72508ae6d6d617100fed269cede431ce05edac0fcdafe1c4de7f1a3803c86d0fcd77514501d36207c0f2057b5833819b3fb666ffcb7ee3e9f821b169d97d09f51a4813e5d11050d91bfb28656f59c9e8fd3e88794810d7a72d936937d9ea50adef282a8ec4b231e3399e9b84097bc1e4c13e41aef9a1878e538e1a0a66600448a8219ef08437c5a9ae479b5c1ea3d32fa87323a986f8ec38b1304d03b74a8b7fa9521574b1a6fab89434f269e9f8668b2fe8fbdb4f1e09eb01067a244de0bde688642dc10ca4e972f7d38ccc59eb18bf464d3bcad212eb216dad45c7b2fa3fe69166df5abcc4628071a0eb40fc74dc7d9307468b3b7aae1f19538301156c0a64e4050ea274b53325366f7784c34b986f1dda05e3c7fbedc1a25ef8b90e84a45b3e9c4ea279a3bab4ede9e84f35787eac1c8a42e66a67b9e0d6937944f6b528e353bff1e91a1239dc980eea11e0593d201ec8d58e557ebb188f3664cb18f31e6a003983ab65e622dab7406eb02f5ac1aadcedb751b7f5bbd4d611d8fbbbad8778b638cb5724d83115baa47facddef82f41564d6fa4147a167c102c2e582f648c5a4a0f37cefeb79107166b680d5a6762926efd4826498c336899e3bffa463ac2c5e9ad5c512dc70f3afa89b2d726cafcd82a2dd085f8abdadc27286bf78a7a95e0c77bfbf0e3c0270fc41b32f52a191e3d9b482b1715920b0445197728ae11c3742061ea80d3a9a46b5dbf3f4c318b9e24b8b8c2c36d455442701a35d98bd02699a941af443e1a112bb1ba7f23de3360ba6bb3db5dd026402174997046f4ee32fc920d37e97e0176aa5027307c9d8573f64de10830451cb3e1d92500aa063a21373f99ed4bb511905fa32111a94dddca5364a2813a2a0b1140fb28d9002ab7854f33e68cfeff1ad6fbf2ec72a4247b31374d70c7f0ab33f10b73b15aeedf00b7e3a6b27dfd9f6342295e40306a0866b0ff9b4220253ea71500433dd78cff083af98d33b990451231178d9aeb89013db5243b3073bb477f5ccd0dad6a883c75f56f13fd901af4bd1daf69d26e610b3218f014ccf597f7d8201000b178d796546a646697353d1dfab1ebcd1b9daa1860f39395cca6830375f83268c6194ffd658c3342c8e3c8fe56e180e7564e8162e3668bba5e4c30f5f80c062d94227543ccf6dfa59f5dde9c7992711106ffaf9ec67cfd392190b7f9411f6a490ed2cc3b31d3c21d6c9f6e5b6e60e955e3a5dec1093fedf9372871644b74c5309aa4404e181d4fd22477fbf3deb6674206ba4f0fc3db5fac8b3c5383524df75639c3183932cc6916074b497b11ebb25e70fdd1ec43d5c27904a3f988dd1341477da6a9dc4e9f4ba5bc0ac8dab678c7f7ebf79378df8f76cf99b15148b3e4e2eeb2a90993d198a1fd0a2ea4bca41d3f074fe2a67381e855d12760353e980cc353c19710fa8d1cabad5a04c6e73371cfc00502d8df037467f621c8dd2be192d444f54b6c3ee565ceecbf249a2d268b04dfc06a6b29b728ac47b925ba95f2b7613c1a7fb4aacb5893fdbd6e71095a70894b42942f5507e501de3fd26b456e965bbf0dd00f2964f52f987ff614dbd0c1d55fc60590b98303f6e970ecea26d44140097e879810eb1f52c87b8c532c2849ba92196db4e10102c091490430983f73890a77ba88b5cea3e30c89b2326406152368de7f9befec27308b8b667b648d171b9a64ec1f72c646f7144cb32dd18049b08b34864b9d231faab984625d2e191e7a5f0492da8a8c702ce66c4bbab13c87fd9c1a50e57ad85e9081faf3a54bc7a16c145c592a9562f05088fb934259abf604f786a9b66f6ce2012306c80a965d45a06ac4fbb50b36ad1d67cf10458b76ad461a289c06a3c12a0eafab7aa97ffc9cc2e55eed7f8f526fcca44485b4d9f6315ade1d1b713b6942e7391de436090bd09196fff6a1bd18d00b719c6d22bb3431b581c23fc2dbd13a65e983afe0ada182b8bbff6461e340366693501aec22094a5c3fceb1304ebf7d3ade562c3cde2c8aefae8c067edad9c77a24f95a6c602cdb3635b48bd05d16a4b71cbc5a87c882f4e5ea46f2112c61fd8fd7c3e3b52ff338e88c6a5ff89da3d5cbe4c21e5cf99304c5fdf85eba591e33c35c3b78c827a07537961c79ad49816da5509e3adcea9e90133f8268e7db4a8c14cd1350bf5d2eed880a88745b6b975595a60d620b955562a98ef0702f647b16d8f5749352d5376bcdd408056bc3df7759c9b91838dfaaab495f2a81f211101e095c795ee69c5ad9a736d9a95a482116b75d532f60b32d95167b1f3c2314855736ec3f3df2291944a3a3a79b726d7a6629071f2781cff9f1e2456b7864bbff043c332f2cb26b647bc9f801c98fc693ffc05106c92f380508b11094a443e5ebd58d7eca9780070cdfa65513aa4102d2bd98816e56cad64fe650b41b9660b228e165558a9109f5882d36a9bcc469f50e54980002668b21e6da90aaec1fb4ff090c13cd99264760f285e39b1dc59f27e8f8de476f83f36e6f283075266f20ce09f4214fbe7902c53582a726365c529d290cb425adf8180cc20043301527d0cb30eac90c8a84fa1a4cdbdc829618d7ed38bbe405868817b65fb57f6dd70d16a186a12791bd26754ea2537731375b28f807482ef10c167953df3c9a78da8d3dc876296181e0db5f840a957a168ce38f9a50f544c656572b1d235744823f4001db646901bbb5e5b701249f12caa1250f07de114a9d644c17038a821959f920da4831e6c48850b98c0e1e5dc8db28a8d12c42a176777a400fef545e029f4665ad2083b1e4e210b274e606a4108938b57d09775373eb123edae18114e3f770e392c85cac42414cafe386cc8036ebcb5f2b1bf1492bd878100528c65beb2c147fb40f9e578239f5b767cbb991597dfa9093318fbacb087dfc6259ce55d0e2237b764ebba5cde1a459577a3d79950fd41b0d98a47bc5152117be72bc5010e6ff49eea06589984997981069f8d796bbf8f43f8dceca35f6d81d6f5c0f4c4c9c3238596cc1ea2fc0464da730978f8834c1b23725954e72fe999d2ea9d3ec6d65add4241f2c1ba7d840aaaa1ea0609fa94570b26ae6ee2c23a280404a9f72702e53efb7f395735970b34004d89b71ae7e66fad469bdd590a1e5af8d3cd0ba8e2750533ba51fc3f03dc327ca5205d17cf3c1b55d98b7efec386e6d46c88a1df67e29fa492b12cfb78524c271802fb2fcb70046f2c790ef6344dc57368662f8cb175895a2e62c0942084abbff2e66c76181607dde0c96d5afb98c66e9bff276d9050530f60abb153ed11c8ee6eae3b02706ddf90511d471a0e6b3943eb8b861b297b98c880547c29e5ccc6ed278dcb2183602c9d008d62593704f5a6e0a29fb66e101d37cd7fb483d41a5e0c3c17fbfa7d76757f1ebdee03f645fc03afd350b7066877793400ebd4657db825ef4bfdc9577a95c0b4325db43d01e67fd35ebeda535f18d4c59c00549a4bc1228eb54b777b2f119799c965f7243cebe4edc5e5836d1d99714d751f2ca1323a74f77d7be4f16da0f5603f025f779dec1ada510fd3501349970d031719b5765e3d8bcf6cc47b7a76f5fdb5917f76a06ffed4569b2e013cd48768b5c7d0279dfe7e514dc7bcf68b495316c72aa7bec6be755c12644ae55e18b5381d8a77ea64990f1e47e97374a4baba07014a43241def9f0bcf539708d8962ad33963ba0a094a72cf1bf9c89f380682f17f5b607e802c61ccade22024f7ad34bd035ca7e4e8b2978162ba6eea739d4e03bf7a121fd0f925628deab3e4432c4414c9d907d4b28b959e34c83de6069fbfa4e7aa5bcc3407a43a76a1374d4b9bbe3394f51679399a58df67fbb7332637dcf75edad4e55347fd84299fd1992668bba6ce0b469d700ed478fd0651d6edbcaeb6f94bf44a76b8a480d75b53a733c0c4ecac42ae62271529e3ac04b21e24534a99e0c72f0048ec53b19e52b15286af1e204ec6e5fae0dfce6e0b41177591b5225f6cb81ea350992a134b9dc44d3ad7f70102e871580ba1eace55459e760b4f78d293755e1ecdce5795ebd10ba5f4703c43f1194c5551dd5a950244f2183f8e07ede6aa476a92d86c0b0561698105c789d03cffce5eace0b17a42d022a488747746fe2906c14ed85e97c2cf5de36a5bd08c33bf7721aedaa1564e35a76241a6c527c3803dc4f45be3f83521a28b2c046cc360497bbbac9dffe9512319660e63da8461ddb0decef7e5a309ab0a4490c5a9b3ceea84ce1d5a7ea9d0da1a84b289bff04d70fd57d7ee37ee18aefbb5834bf3b2a6e5818350f5dbec2d20e5dcade4f372418daf7465e9704bbffbbfe740885e868e4d50b7323a774794238af49f6eaaaa8ba161cdc18b4576aa352d8e9aa235d6fd1e843449457c526387ab44c20ba4617633f4159205b50be748c86f2051b2863440fc1bc08dd8c05176c0572488f2d21e2394924ef05121d8d3c8f05e97404ec43758ff73f14d269a1883f41917e31ae311670b1cc42886089149cd90fc3116fa235f4aab61049fdbd4f40380a846e58a045c7e8c7211c5336142df1423be5f59bc4ed17fe38f1c8ba4fb73ecf12f32fbabe1d1973903fc0a7fff0744d65b4ebacec0d6ba7e91ba7d9fda6a74632c6548b13498a1e9376b529447f4300273f9b97920903e9c317d257e97084c63ec4137202e966cb0a8660716a72fb08b0e1085e2c1b815e8173a40e8d00cf6ba2572c55af5490bf721c1f8d198b9a14c8a570445cce7283adc0a3805f6d40d42514a53f4e38bed32655c5b5c8108915700d1b69c690a959834697e07267d5740c90f27409c013e6e3a3fff033bcec0e745482e699803f18a2a7f8b00844bc2ca7f2c023fbbfe25574bfbbdea53a9264d72ee9974708dc7b59abf8c93e2924a1f5fb78bb53a985e785878aba484e6c1040d1b0d3470b312d318da52aa1a8a7a73f471ca0faa541dc215349f7efb38e0a0dc3abd528a4b3f73d9c332447d5c6d4a76695012ef554e0d222cf121db23fb74f1a06d00c6a3f9ad36ecea4bb1869bf9446f3a290dd73219c9b99d926218e044e067ee1c028f73a2ed13a3f3a5b8594ed8052a8ba8bbea42a4982e746abda7770de7992ebc410712cef1d495059657e1a6395c2eb84085109efefe2a0b5c3004727638dec272df3c5d1986b64067cc76b62dac832d78347a297a9cf068203fc9f3782db8d9ea9acf0d0b74661981ca325a6a52c024b25586e05c0636c85ac0c7c7abb285520efd98c63aba1a0e73816e87e403bb0e64690b25480d5da98dae68e7cf19aab66d614c59a8e736240a2309d8efab2c462e4a43319e1b3c59709af5a6063a12604b0120dcd1be2f9cf9e1504b4918edc8b1656c3a8ecbcb4cde94e9e558b7eea1db0bf35e4e47313513a25e9ab11771f10bd653ca12a5a31d25084e7cff521a190e22ca8a3f79623ca9e28532598fb6b0a4a8c94d0b9573a080f959a34d48ab88e98b4e8a16fb7c0fa00c88dcedc90f32afe2472368cd2246c25e434744c130c216113fc473fed1a5ef17c2066a5ffb924a37c2f12c55e81e66e6f9575383d6c76e41bca687d25cb2144a9b4d5085a2192c77171ee5bf692e028691ce9e5322924f49197e5297c7fb2784d5f6bc3005cbce61ca4bb31e9bb30da50282945262736e8250ddcb24f29955bd26365d2a764b08594d1967b00b9ac50889a33f6d259640e7b7ef5592f24d805046140f3e96af561b9a1d81e1701d2e80741dd66b148fa2d10532912f3e39a43b5d5be7c98bdb93b09a3b6f79122777485e84e6a0b50c9ac7595ca8a9cea5ad5d5b16bd5a0349489f4e650406980249110d579ff9c725c1ee4db984f202049e858bf12319f10c15899fa64a38751a151a819986956443be395499022ccd97729d5f84589fccc855618a88079136897fa7fdb46995f5017b4986950fb2c383ba8eda05341d23790c5762e5e5dab753a384ac18f1dcc291f0536836bb5dfc49a660c887e23f9995177589584c9cd66b7175308832af581bbef638fa4b1548abe142d58547ed16070771813d967ec6593d2f76c570d4c84cc613158e6dfd795f69646022d1c7d47f7126fb7877e93d114c94b64e82e4324074cf34372db9c0909c74c32d2038f1fe644f51118c090b7a04563e546277b41b30b9180f6dd614bfeda4bb09323cdd426aaf5ab314217858910051bb591aa2cea1c92232cac2a91550974c1665d69769c4ec5a334e6769a60ae3cacfece604b07019a25d62fc854b2608365a200214eaf075ab48c5bfe838c884a03f21531b0bf5388a3190eec91aff5f35429f4dc880ebb6985f45f7ade077a651f4bf7e7d26bbb82c7bb802ca7f44d24dc8a9f8b4a9ebdaf3fc89c367633f6037beb0b6323dc621e4b0c8cbd2312c583beddea0b8a382cef69d67db705d3b18e349e813e3c48c667672ccc8416d7b4eaecfe34544c4e18673a84ae2c8a1d04cac1e41b8ef26e4494cb83299bc915ae1c8543500d7da74058434b00864cd20959afc6a15de4a95a718e3fba295140d0032c17b51d84e8ff08547f1c74386944dff3c9e52ec5104790ca30f5264a02117d548ff322ba83ccc3c19f4a218de903a7f4f786b769cdd864392692cfca63f7b1742ea0b9d925f13ea55e91af10e16a65cad81fef7797479544896f1ee1f84948ad50fdef9ec2af05631dc84b049f59a3ec7060d7e8113923177909b4b29406fb2fe050b26625e1d7c662d070500dd40a6b441e74b4f87278f3071746d791f8b3b1fba1de33e0ac61c377e21488fcdb5f17ebd9fc5d272ec391a324abf6c10f8e84afcb3a62e35d597d8d3028dde22a6057dd0a5836a1ed3dc93792d1d680edb5d072c79479e8d798c2c95a34ebdb0bff863dbb0806e6d02c4cde024a3065bc7cafb694c4838e79416e459f164c902e6be7fe89240a62de02703c063fc2e6c9282c3c89ba3786781adf3e972092d6459c318c105ddda8ee4990733bf10f808649c21930360691a7e275ff56ff8d49992982d2b25c40c8159284548fa344e68efb0c028ecf3e85cc4288c02cd03307504519147a69b37f4216fa78c617c39c168aa2b75c8e617b9c87a1422ca507226b1326c43e881bc7f0014a7cc6e96343a09552d71712eb5cc94f167dfafb903f96a51f302772a37bc97b0f28519e7429f26c974bc3191cff6c36c2bccdfa248feb9a8d7cb584bec04ab41afbd143247fdeaee8a36931d8b0744f82925efbb3af9018a6f0f48220a549539bef2960ae43f6a66874318bedde10c6a0920994cbb910040dd21426abbd3a963d7c7aff7a8123235736f07f46e08d93df68c044024215e667b3be10751ac02243511290bcb9d4b61dd38bf7b469d253f84b8b7bf5a0a58daeed82f0fe7c3547a99fd8c4aab8571cc897560e63c0d0e4b57d06b22f7988fc1539bee03e745b4b9aaebcc215ed68d95b90bd97c366d4597a0e941a994a9983d015cdc62ab184cf905c7e464d21c871f8942dda0b03db921045f02c6256b0d32940d89aa41a21ac15a5c5d06d95cbd221832ae7707a744916029fb63075f396ce6d66ba1cfc070a93cade74e7a71de1492f711d61984dae7b81f31de8b05a32dcd3a233ccb45281475ab7c937c156c87c39eb86c05844bd5aa743ad74a15362105b4ff1634da3e3401ce90c03d696e364ed5fe908eec226ed1985838b77a145706fe066d62e63844d8ef1c74dab1b4c8b6541e26b6a7bc6f073b66b2ce42d4ce39f747b01ef86c83df3f447e03afe3c87c64c6098fbc969376e732242daedb33cb2666945cd938b31834050d9866361137a7b28a76c3f6943914307180615b30dc65ea34681cb0a8fdcfb465e8a15da03779204fdfdfa0f55d6ede563befcece551b862ff90fcc4529e90672f30a9ac5a1bf004eadb0c9188d18c4d0ad65469762a96465468679588cb31cc30b7e3e21771eda7494468c84b741c58bb54c3dc4e68f4d260ad16413771140883ede6e7b47b5a4d88e9e9f3a7bd3dd76bd064616edc2367ec3a77fcb209a46ab17979e772f7184ef07eb171fe9b3fac142d25bd9495549b2111156db2fa0218512f065da4a9be03a3b84b33c8e59a3c149e3b0c5d25cafe9177a578697e1c0b2f49c1cb0e0a2aecee64deefe8d79ae4668589617c4327edf2fe17c65e9225bc88f06d115b4b052ef915c54ab163d345bc091c67bb415edab56167aee1e37c6797202af4497a309c48c973fc47f18e0257b3b25b012c83d7a8b1b2a7cf315cb8e95b8318d3ceb28e0f31923c4f08d3cf81b442f8803111cbe4ee16231921549bda64ea06232828e3bb8d136a76051ec347a6ec90ee9b4994bdd4a7319d24946e7522997c2aa05faebb345c0e9040e596ae993241469cb7e3aff966bf64167c9538487e76fa2069777d712538cb6570f6b9dd5a2659e0716d2adb9e5a7c1c7630a32383ae1bef8cb7b3a7cb3439e5dbdc8758f1039e4ae09834f2bbf583e3c10d7aadcb3b94990611cf0e72d2dddd6d69114155d233d4a33e00f69a2d1ef29fd29ec75ed4ffced79657c5b3a7a2250f18ffa20af7a55d8ef2f5c27593fb8cc0ce599979291136e5e66c2d5248076b0288766f9b43f863c0c231a142dbf087f0cbf4081bc00af836b778c61dc491dce26b2d133c83d46e2fcc54d34eed8a2e09c4bacef87430e53a00fdb9409d425adf32db5c278ce31ddc3311bdbd429c6d0268919fb0881511a780ae1befdc37b9b21be31c7f1a932a7f8e7cd60092ac7d01ea707931b6591bee56cebebd489095e69087449f640bf733821dcae87e3b5715c178eebe2f81a9caec3e9f5715d0f876be27c2d9caec1f5fa715d8be056d72305161cfc4195e7d7668fe0f6fa38ae87cb3571bf1e6ed7e178fdb8ae85eb3a71be0e77d7e17a6ddcae87e3ba1557759ddcdf59ddc11f9ec6fd24f3b7b13c4fcf792a44e8d3701a1a958646d35883346994a61a4f4b6369d0609a3594260dd25a357ed24a1a062637166596d833e612bea4ac8a87692b7304cea75ed0b33df751dfa74ddf6180613c6f732973082e448dcadf593439ef661a1eeee03caffb5aaee14769045f43c5147acd38334613a2a0335391da07792d1b6cafe8525e9306b719f443db65036648e17471a46c1ff97686ae2fb4821bbc7244273669fa78e5ea961ea98e7a9ec019164ee277460f92b1c06666f69b30a063dd1307408964b7b15f5881ba2c14093a71999b022b8dc3170ff31a050b9f748621b2a03e1665e6457940fe843b5cde664f5e1b9fd8d77e4736ca90df9d06131924dd4c1fd65d1c1725337c1ab02e8323a358688327332f572a431214ec1a6cd8696ed2ddcd04f06466c0e0de118b04f32d5de4bc78d92b269dcca42765d8e99840fa1da8cd1c1664986094ab8cfd3beccf8aa1104ed55704a4e5aa321e014664f92a206bef034dfe16ef9b468b01c523a0408fa0f459575729f6f9d5a59ebf3024dfa1e2e324ba0d3f86de81af6d1c86898f87d0b54145e3d4e82958dd4e9c3f6fb390bc037cdb540b48685866454d3d331e9e026cdc5d0ce5cf0bc7acca87b7633d7fbe353a1a907a562c44815c01e627cb9a05297ff8d897ee12f725309e1258c685a6c1fa7b725c4c1dec9421ab52138928185a38a7e0ce9c6d77d7ce5f956d58ab5dbb61895713058e44f337c368d94ec09e93e45d70fdc30208a3041742d74af36780316b7400c650cd13082a6c441704b2d47575050d2c83e68f6766d77e2e90b6953b7b5c62107edfe35db9a170a90ca5ce6f4c73c3b119a3aced3182c6e1b211222f3eb6e7d828cd40d80d5f4215e62c041323f971a95330af32678de89a53618c8b2978ae90cab3df482ce12ac6484df6301341ee3e4a3a52e2571191bf19f41fb574d5be09128c90c479574808c428a86e2c156401ff42aaaa2b3966fe84feac2b342d28d6515ceb56232dc7d1365b507c7b44a74015a94b3f88882eb29fb0ace3d4e225b44bfaf37f40299cf360672a91a89a703c9ff8198002cf330597e44fde76cfde246970abf915d4a573efe954f47275f00db25f860e31e17455865f1ad767669fbcd6ec15b9019b80a0f7d442bb0b2afd391875105fdb370854183acc0d23b38b1c633c9c217ce24baa7683064ee11df7c042e4b26fce607d8f9520919f21114478459dde2e8c7383cd5f988db9501d18b632434f778cdc0c51f048d92c6b20c175c4ff22ce2bd713a460320a7629ea8027819cdc271c98760d78504c07744f0632513f8cf372e97af98b6dff9b529c84e66a1c6db8201d99b15922a33799a52c144567ee50d72dc550fc5cf867988778bb447a52bf068ad45ccc4e6c6471df3b1e0c7bf68f9f318ea12d3e90a22b39011917d9d6f72fee234ce61ffbbdc082912db7e53eb1170db33fbdcd350ffcb1c497742ddb64d7bea91c8842202acc26f933087f8d027749bd930e9a70705d300c6c0b7ebce9c737a4814a5af2b7fc08bd24305274a8d7a214405696361ba030a442b540b06f102abaa7ac1b798234a9764f645d1f648228382191c018301388d071a0593cc08e645bdb84e082b193fe2e10269863d13996a66fadc808c44d751a6b8e57552fac70b8786947c82d7ff4aea79c59cf7fa94d7221fcba4ae5145f7c92ba41c16aaca98bbe6f24e3032458c8bedaa488fa861123e8609b90d7a20f64933075120b57737359b3e5fd2c0ec87acbd0142426c662ad2fd0d7b492016dc7fd4e506287f7f2401caf9cc9f03fbdbcf237e8cb2eefe9518341654db55278dc672a83d7e4e3851f6a5d88168a979071c5f508e6d8b6bb9b8ede639c8c359255cc525180cf136e0986ee18277c2b2617410b6222e87591aa4a831b7060338b3fe129064c8b72bcb4e38696c26f8291a614d1ef6643e999e6913419500baa5832904d28a47d4c5b2d564f9dec93a1a924e148a862c6cba5fcec47e7377187ce0c29a1e2c3816c9ebb053828ab3d8680b9fab81a7b2b97ff6f0f9057574e03afba12454865b5b36cad38ee4d9112235acc3aca11fe0b89598cb0fcd562dcc2925c69d13e9066107c76a15d5cf043fa0f952d8f53ba6722d8608b6aafdaf01a7f542ca4349cdec66958886a35f6004b7c3388d4aebae302034697ccadaa25e92dace4505688d0f62e0cf02677045d70dfee1918d56fe8b9bfdaed35c10804bcc108853b1865f983d1387e43b0e13f2f12e20a842d42883e31cdd6b2da960cf6d47809841ae6c6486a837f68b688208c9e6f7d86e3f9c4d96d9326d71923af2dd5eb7099fd8f73496afe3e549165241a3a8fb2a34cdb32d27c11a49328728a348da3173a5907b04dab94d1dd4f63d3bb710572af8426fde0b8d23a9316592c5aa00033da96fb21c716d3bf65120d324cf74835c15320c0ade70ea9fd4c600302d0331064aca1c1d83c1c6f329cbf2bac6cc511754c8fd1e64c3eada60bab985dd4e7931badff0cc45ca920bfccaaf1bacfd06c3726a057776960d1af38152361cd9261aa3c8686ab737776b24e65eb3e8d3ff1c23f8bc4f1b8ad2a1e1c36fa2a25db5779aeb6bb6a1f65da1a121cb20719c8ae9dccf49a228cb471fec3b86afe5455d4703d8ab363697f3f04f84c4c92f5c955fa0889d8bea64fd302b63892182c5cc08461f409f46d068283c4af2f25dccc2af1ea954f15e7777d2e2677d34a0444bd76503e42b9005082e46b4ba0dbd036d8ff8fd3de764810403cd0a90e76666a0c562569c315390fb8e3810b720c856c1a468e2dfb59c24188b9450059c2514a060a21133c2ca486d046f8aa45444b2bf86aa3274e7d9375437f627029834a06e306be09373ad6931be82fe1a6f65558a7c9c783d03e5482476c93f48ebef2bb075ecc713c21d88c99798ba64d329f41cbe9db095f68b07d4b2bed47f067074346548a540a4c08a55715b2f434e4c65674b1770416906612528824dc329eaf0099c4e74a600f7438d9315f987422547d1a8dedef14836d49794185b7dda66e2532d8633e889eeba516b678d122eae6fdf141f6d4a52243358b060f7db2264c1ba46d70e88f22a81dc0b1d0f37cdb797ef76b941ae5ca3a8470eb42087dddc0d013b5897fc06c9a6133a00c8cbdd53e6a544bafa5e5b8e8d9e7cd94c81812b1b45535145dcc625978713c300ccf33a843b2e3415453b68335bee653bd5d4bb54e71b7693b4d42f23c53983ba38740f799ce7062c4339d1ba1d0ed3b6a46f1a95dbedc6a95d67f275703f9e2cf5ac54b16bc8df2c20c864eb52aec128bd2ba49f85132c59ad281ebd852dc413509911a708222ee4c5f30e3ef06688fa397b88e1a0585e4ec362d8c6aad30fcaaca9d462d6eeb0b1a7bbbd7d5328f6384e09c537754024816a92d64a266fc453b0489fecde8b5da91cb1ae92ab0bf97597c66d6fb85c3bc6a1346055a49859d0140b95a23d908b5c3a8aaa7b0bac530deceb56eee1fa1e668b328864331ad4140dd281d10c6560bb81e5e76539086efea511a5a2ce031276dfdba48340de60bcea526a16c05faaf847bf5b2c4ee962c808104e9595b5d802abe5cc20a8c8f529eb40c7ca1b28b0c010c77d93f7a1ae78dd6a7d190842306c4f934c568fc98baa71c6a01dd79cc2afa0b2149e706f11e3e4bf9eddcea9ca32f0b1fff2e423731d6849dacdee1c6fd5d5266b5ca0ca33fa4a2817b72788716fbab9bc8981a3986002e06e065e15ed55ddc97a8367a0ffa61da962b728e120c070126ec2686301dbd6de0654ac151d00dc0c566a50343dd67a777ffc57e5cbcd148a9b5b2ab266a4419fe51049ecdad66dd05fcd0f4e16b630d83656aa51645a7a657d28e4328f9b8b509dfb35f784dbbe2efdbd10d06e8fb655b1a9f7446b06808065097b38b4cf454178ebb176f9afa2104b84b50fdae35dab784a34410ea8d17dd9d523a087ac08acf44d65840f5fed01dff3c1ac94607be8e3743a293015a8f12c3f3cf6ad46b81c9432caf5d1c3dc91c6bae98ccb10a4f4b9648764039b8137d358b7f0068c71398a55fe05b5ab2dd56600747b8e31926d1063877b540274919359e67cd192dc55863b404abd782315e0fb6bb3432d71a86de1f4d3c179b306a2488b7d8b085765ebe087fa740c03fa321a97a81d964101145dc19e16a38202b96dde2c2d615d75219ed78aa0b0918b87fbc787af1e315346a82c8494ed7798d2e860f50f8b441c4d7957c2e0dcd68f7a56dc6d303ef069f30f3274d9e84e5e7b578e7b82e8deb9409945623eb5b9a2c16b12d9cea158ab176cf4680a9b5608ad88ac2a0484aec7d97d13328a49fed474e3cc1206d092ed8997242344ed954daf29cc3267e3294ff55a3d25a72dfd2986b24d0e5b62f3a61796d07a66a1840c312e8ab547184ad38a588333d5c4cf30ca7e45dbd9c6f28da992629d64ed42a26da069d3c71f1116f09e46a765fb2f478286ac858f15f7e499802f8d9f081b4f0656502b936c3b7050edd00e722ac0d216c3c45c63c85a4ec611c35a76b35279662fced221357e88104dfd07ca093e5358fa74e10268a9baf42c49156237c2a8629706c15c5965a90abdbd523253788ea4ab4b2e8120a5db04a4da79b4b8c264319f8f9ed21337559ae905e364e0b936a0181b93e27fc3bb9691956f772d6cf6f372ebc512ecc35831a756dd3206a47da452edcec5b012f26735f63c023c6836a2c93fc3c95d51b441b2dd2662f427657e7f786d05cc3a8eeeab0d1f86b123021c8f0b9f483114ca76c94421cca2c5f343f08bccd095e6a132e662bfcbb12350bc409ad697237a4a9be17d4711258fc0250b48269ab8526808ec21aa58c08f289a73508a1a24c42ee3902331f5535611b86a952b6d395bc13ba1b404927e951ae168fb8aea08f9e41aec7c633b1a12ca1128f7768cf2bcf5d673c98878e09740d08f6b104a0134ac2e4ac65fec149553f399fd0a3de108bcb3b753ca76ab00aa0ca6b286a5c8798c8b5dc4a5a01ccdd751ef87c22ec36c084fb42ec78d3ecd4ca9a38dbf7814e403b5020b39dcf0ecbe4196b4b66e33329693746ae0898796121ba5b4155fc82e8c411ace99348a286751cd0b097ee79e86c74f797629e6c9cc9696568cd074b5946e5fec25a302946ea5167a15010992bcd91a9a2ac6d3476a103359a4cd7d3b2a7cc77d573a367983a41f3b851d5be0ea6484a7d6e7049596c65c02a3b9589b475ad300a04a640d288fb9e020d62c3ebb7b9d2af4aadad6cf451dec9c7f5af30f52345e5c39538aca2ac65bad538a7ec7170d15493e5b41fba1861ce392924350bd2b278daf82cebd9cbba7fb5e2fa9a456ff7a90e1bc5c7108f1a505373d4bb28dcde0d6a6f8c001b852f1bf9b49b8a28d906ab323e11139977712789dcb8d15148bab7013a269a9c2cdd0cd76a960b36897c13e019454ee1cc4d789530c627fc13e51eee5b975cce639761aa27c1a720bfac7bd4982116a82937de20855e5444e7c93f77e389e0b9c9df2d5a138760113a791552f8dd8015fee95facc26a2ee03dedc2bfe4c4739e8f7aae9a6ee39840eee536bd17bce9f0e6becf3a72cd692121fa4f4ad355464e612cb6ab1ef5a7caa07e79cbec218d4199b9c396a030a924267d661bb430a0d366aa047653f07a97c01c8f4c4b11b35b40ca31c85a7a6252214881115448f281425c065c8bd9738b37dc329d0397681316d12ac801a0d612a8a3399a39112ce4c0f54a315fadb4ae3dff2d4ce165dde053eaf76985f54a6530ab24835328fb007060923f9aa2e5347947e90d446219042333985f4f3109c8993f70307f57aa77f97f1f2d60ae3b38c21832b64e0a8c07873fe1cc11b82445c1a3eeefd87ac36a618912bf94a7d24ffb98116c89113702436cbb7a8dc96eac73882af7de0e2a9da847a390897f4c5a230cc13665c6b77b7cdc401b2cdf400bc1ac985b47fc3a0423f0ca34c90784b424b97529268bb9f56e8924f603aa6c46743f438ff3cd45115a16c9042d2d6dc8deae1709ca533be7334f9c22a4854913fe23fb2fc991b9ed933362d5c79eecdc4bca3f5f2d079ccc76eabe05109482b2ee732c0fa24bedb302b01e243f3700b8edff954463d98413aaa78c230c00b292058c42e47927ad726761f222ba94a023c4040ae73776e842fde244657e14f18055cc8f1e0cd8ac102d847ff2f3b21a66e59111da59b2ef292e4875cdb3414020a91c37ffe0155b4af3c082fe4cf3992db814c96f5202062b76e01a6f94d698f23b67923812a101238f3f7a12f82a94957966ecf101e1618038c3fdef0a6de744ea239cdbc63ab66ea086e42acbc1ba33629f077ab419e12724753090f435a292ab8c34dc3daa5c301be8696d7e178e8a391cd5718890a09b2885c2f5545398e792132e39beba6171628108159787116b340aff9a9b672b7f875238e87111b2b0aeffc6ab3dc1c65a2c856bd0b1baffddf189746f07a0908f461da86ead58f32a69a80bddfc8f873b354aadac9839092f74feb88768905b4fa84e1d00c7dc498219312f2ec29a6ebf471065ef462ab3ec7a82a2b068d1bb8f1b9e9ee994baeb88fc4d869fdb1ce2de7a52e799b0e50c5431257bf60d1389a5ea1668d609a2fac902deab34a7c2d0290b4a5fe270d1fe8f3ec49cd0b7c4eb684b5d1f167a4dd3737e2e90588532fedee56003b2900c2efd235527ff29ec74764b3838a98e620e46e74f1a213a8a1fa1a1682430c7017f038c2f1d0e44a4c8b9c5722607228cd7492890adcf40331120cbc5901d5c72174e5628a06a08c58b238aafe487b06a1f4b74bd9f49e086365e7ac8d2e4d6a9b73e3bf3cb628c0742a61086cca05494c3b8c43c550388d2be308e8f570081ae33bf98656123de5d527c6ee60926ae91ac1088a883ce3e553b6596deae3bf270b625332e0ee0cdcc62f8daabb5423012e2176d486ccb8802a833451b74449c1c3c4de9c24885092dbd4ce81225cd449a4298cfca8ddd161e064a88245994cae265f68b9e118b1e62b7b0aabf0a32f2cd9f7dcd3b48df99ffd28602c6a519a3236c2813e150fe4f725518b774266875279ffc04ed9f66bae12392f96fa65f29da664e41d4a36e23b9b471204d6a3e1dbb654990ef27aad45e5b7bdd4da925b678973f7d5e56c30d23b23206415c997e6d268c37d82489a1e69867fea29ec1f15bec83876e9c7de55db46ad3aae1c70ed559d6a4db4466d01c0bf2b2d3f8760a9f78b52a5b21b9365a1dcf2fab300229da8ba43647e8a44c88f749a65a33a49c672a24bad7475c9444bf7ad57e49411d0ca5cc562587aaead192e0ed1ea4df7f98f8616cdf44359496b551e898c534e21f4173ba91006fece4f48415cd32fc1333e9d96bda31df27d423b9202b297074889808e81678b1244dc03fba65d278112962bde89210ea9e44ecb182d77d5b7b48669e3f7b21d2e59cfd588c7d2a690e170706aafb03e0610b84604f3a26b1792c331888c5ab38da8f5ba2ebe74133a2b89830235c02839b07e42468880ed32357e19c945363e4492c27816f859f1876b1ce027483c4ace563c58988b7459a07481e4db2bd527a765484c8900d50eb678b68b8ff1f6f32436138e10a3a7a60cc3e93370f703df9e8c5a6aaa782b2fd12aea6a68667e62a4e17201ae42b10f4f300129c1b70d928e693c79bcca2bbe5e8ebac21f58a40a3ed486e52adbcaf641740c10be961a70ba3ba4875673fdaf0590fa314e611543b83b290b73e23f3dd2434b028264ee20b8988d697e07821b5a7efb2fc132a1eb68fafd6df9b487c8aba7a51baa0f0eec47994afaef24c381f245cec4f7bc435abd6725ade3b39845d61436c60d40f7f52ce6347b18cbe60275a6fc57ac9d154692b81cdc46b4ca329cffc7bd84b87a196a5c4f9398da90aade04c524a08b4174530d422da7770a6fe3a2b0eb34d111f7f53c6687221cde4370c88091b7c8003d44c840211a4cb0397644ca868c00eebc5c2f448a6f7ef3d9e791993d1e05f8c60a3102fd3c4d0e481cde3865ab85f12a22066abf470328b9c3db79c068cfea73e2cb9bd7b372aca44a9c46cf98e94cddc53453ca868642b1a5ef3535ca3c4e3e53585fbdc829a476ea0c6f0d3960eaf1719b8cf190d4fea2fa300a2e749f0cfeb4e2865de6004b8071a412d1b5ff555e7259319d9070c2cd01af16240a9c0e43570ede884b2b3453a57bbcdff9f53731d71dd58ae40825e046140a3020674df7d3c8961bbdb21c8130678ddc1b2c41347228be939fd3da055c3d90158b13f1558065a4f98e019c4baa90f57b2c730e95f725a290e1f4c23f48b83eae30131eed58ff89062bc3a040fe1a18de5b67f210b381a306600bd32a66a01471e7f8e5fb29e2bf74be23743d396e52423209410f38a3da7b888b01bb895bbbf78c33dd831351410ab445b01060f1f53955a6e889e8594e35100becfe4fb7fe6d9d5c65cc407e658276051df06d4e9d992518734e340431dce0252b7d542d7b5e570740529dd29e4f603f0e3822dec67c19e3b41f1bde26779847befb6d5aa84db7ffd456c165860381d3e510fb1f700e4cd1d19177cdfc4045f8a9ab33f94a920e23b5de2be43a3dde8c072c1c58486eac44c514ee4939b0421a9870dc1a07d92ef974588d9e20c10d370c93bcf8be92acae5e971749f4c70ed799f513d06f40f120277b0ec67bd7393b0b5c09149d85b8e2987948181582239e86a1c8d03115bbf8e5636b68a1ecd40dc1e2c124e0e272c05a3c96e1da8e604341359e185f6e0ba0ac79100cf6c32f66fac64e2a081ae03563df0773562a70665fa60790e86d824ece02d8c15db3aaa15705d7e4d6c904ed171ec4786e340d027af2f851aa871403bbfa2ee21266bf0a289aaa2d6706614385c4c43cbab6f2afa5961b02dc4b170eb6a98f62556f2bdf278ceddf1519cc53be65cfd25a172c6ddd8627bfe0ee4862c91bc9e86b7b1a88c7ebf3b13ca6a1ca41d2290741875686828e20e71533b9ba35591966e79ee86735f83b4aafe5ce03e7318cacd16b9d5ec75683e44612c535df003457958fd658d04c6b48509c62003e3833e20350cac4b753ac11322619de13efcd624aa79b7f0f87d08ac056cb8a2ee007593482eeeea7fe5519865dd42c00e49f673afd6be90443c3f0ddceaed13c1840fcf7b3f0f5f61e87ee2232dca82391cc6e28533eeb01b46d3db272e1d20f8a8a81d880bb544636ac89eac25ea4cf1ea4ccd161a26b9d0628ea6102c7742f5dee1ee4a4315b84db50855cc8a0b92d1a4daec3962a8fbc84a36de990225de633e02f1054549a9225f823caf1899ef5bfb21d4350098466ca774ca0c2404567bf19f2bed6a1ca0838b6eb953170f62a7a07046918444042abb98c2f522d7cd2b185ca49007dc255db1a42a94286401062ec7c2a4515f73f1d6db29846928865fc9906ba7d61114a5623bc8dca878206cd3f8b5aac56a39606482def69e93568cb502337d3ad637cf0be29f58c8488e118c0433e68250df4fcf07bdb8ec19eb1068541a2abeea9ddacb28b3df5431d45d8d8bce051092669f07b37937f365218a0a6164eef65b67698f0e6364a4057ec08977a5a7812e5bb237befe718cb48e63edb1c6290593d682dc8a2fb722bf8416727016dd84d20dcce8d5df95373ebd9e9d142803aaf915655d4052b2510756d3d1bc9ac6f189f0fb2649e6d19824fedaa6b06e4890f8040723dde0c67f12cf26488971dbcec99955610eef31130c980bec4f64c243aa93af01f3a9d8fbfd7d758290c77e6fdb6bcc68321a6284ec1222b794322599023e0624060c06cf1754123ddf504cbb1a6cd2a797cf4bf28bae064957e8922ebadad14d49dbaf24b158728425d91c64b872b51a7da57e56c526a652745d1125e98a7d8faefa79bee31ae2d660c3e8f2aebbf43eee59cfe22bbaa2abeb510f9cab8b1de322cd95322854480b1b4e9aa472d2a20eeaefd2fdabd870d2b89cf6b9a44f2d53f5bdbdbfbf9a264e9f6e6288877cce25e38c9cabc6bd443db1980c0a2c0605068bc5623297eb2525c7252527c7e572bdac3cb9bc6365c90deb0e1533dceaa94e8243baf23ed1c44a921b766bd638d255e3d26049caaa611dd3a9235b8d8a1f9ed0e0e1eba94fec9807f08e15314f45d55c754c286947fa25cd5352266534f9311db1b0596bd6201636942e57c7b84eac6398af6cf27a020526a5748c4fdb2dfe6e75928ee11d2a7eb80fb893ddddbd7dfa0c51b91dbbdc9eb367f793dbafc8ea176ebffb6b9adc25c8073b735e390d7627b9c1699c06e58d5ce2c486359437ddba6243e9e2ba0f586effe9ea9897e5933f78bdd296d79b6dd003c3ce9f295b492e96cce2dba96ef5a9bb75bb35430b1d1dd8102f9d215e2f1d1d1d18103753ba3837e58af5628c7446c8ba2e24d22018b687477948db758c11e98a1fdd58c619dd563979a80f9c98c1498f2425ca72b1fe524a69c3687700c730168c19a78a6329ad121bfe952f7360a78c32faa233aa435fa11ed8d9aa91075c6c4ac7840fb83de36d5f54882cacebe5afd7ebe5a9da2f4ec2d65e9722a9cde88d638122bb9c6e09ce56b1508ae8983d1a552c124dd0a86249dd0d1a53d098620038a31e6cb92e76f7957ef8cf9f1f5f37d2750d72d731fcd11549333689630c408c04c7ed51ce49e9b6d50ae5e30281382ece1863173d2e2443558a4853acffc89f93e2cdc9712f2f32beb0fe85f3c90c528c71c60c128946880700484e588e4569dd1927b02058833551e613486a78356ad40801041a356a9066d4a85143468d175ba3468d0801d0956fc4c804ef3485f18a706ba2e0d444c19926be4fe0700ccd5076ccfc6aa2e034c83749c78451e7f28e13b4db4eccae2b8620f0355192c47b6ba22c9935516aa2b8a0885dde99a2e5f67b97779c805dcebb9a284b1aa76f4d949b5b1325c9ed504d9424fc5213a5d520d744b909fdd8fcab8992a441be2f627821cc7539a794524a6b3def1f9c810dc1cfc68d8ee98fc9f6ce556ac1b1d0ad2eedeb5de4ca7b620ed7bca76322ad1f730a7fa5f7747dea0fab0d9f7eca63f40b6fc0f8676d54928dee633f853029eee31b32284415875608e25f087ab22094560212fad18fbe22a1cf63465429a4c036a1ce54fdd495808cbe33a29aa3af434046a38ffd349d763bf4d96d19fa11d187f2137fe8f3fce4aaf5f400f97cf7dd572476fb3f6f44c2fcd40f7a23aa8fa9fa8963cc5372e5a77eeb328f79cc63d2e5b1db314fb14a36e3a179cd7b42a7f467cc59218e51f2513f7efd8cdcf69edae33dcc37286cc4028e61c26e1dddeaeaa0971fe4d0bb6c44c50ff24cb49e92a114ac9fe2c7500a358c3a2f40581e68b9251fb3e4af5a5f777ea1bd11dad681a3254adddd77a0a85d77bff19d28747c270a963b6df777f7c1f5eeee1b996c0f639d8b3959229822185691c5624d168be6592c0f8aa77369ab0e71e131b09c9894c562b164ac16fa29cb068b1c169d53059604686063c3d16cc5a11b4c464f684b64d2496cc8329abf207b9836d890653497a219b6392b4fd6b121cb6432990d6823db4166fe56edbc69d0360145ce92a7ff72e9c062b23885ab5dad56ab500c27642a1708cfb86dddc83997e4c8d96a55573d415636a42b0e474a9c491fac2bfa31cc8674c52d99d140c9e1c5e9c0ee1c22a4ab1853190d241cc3849d1231582c2206eb582c36242644061bd258686f7b8e440c26698c366185677c6289c1a808c7c553a34b3ac5bde291d2144af7f34685c57526abb1588cc6688cc6682c54840d69ac3b32e9af288bded09c4ff7f2fe246826740a94919f17e227af413adf92e69cf5f34cd39f0fa8071b59ab88a49524a7480b201ebadb99ba06eb56b7589215d23db41d1b72cf061847fff6b2616485bc83db1f37f08161b0b27ef8dd3eb2425f64751ff745e04e9e11496475f1d33353a0b74edc90af00d2576e3381e4b2129777624a5c9b236c185dae8e69525bb8b1abb73eefc46270633411f14b5dbe1a4b483482189aa245485c04022eefa9cddd9523a39072ea808a6ed8c4d0e1a932f884ae0433b6100b3201d56c8a9cf9365d6b90dc0982e0114c5419542b11c6385648cca898cf3cc3237e6c4abf146f87cd71e3f2c344979fe6f3e7c5f4d5603fc6fc34dfa3eeeeee5f3cd2e08c799eb5b1186434cc78aa4c61e7f39d31facdd57a31e6a9202e3ba9a94890ba99588837c61ee6c69c944a13a616ccc59d3e6a4838ac62adc65564212902c90de3924b8429483717260d777e9d28b8f3f98b2bc631fbd2c0c1c6557cc1b8d9fd5c8cddee3738042b96ef7cbeb53638bfce9ff469dac653273ecd97d10fa48103c8b5d1b784d56a6d6cf9c96f9bd0a08cad966c79ca079fe44bf95ab86a18877c2a214861e5df30b662ab566b3d0f1c5263123a26ac261ac973d61e68e070748f4ca874b9f2ff328e8d31c658637e5366e61e7fe597034553e33b533cb9fe36ce585e003fd8fef06798414f2755a8c9eb91a9382a076c47642e21f2bcdeddf1e75772e9df8f795b6830c66f285c3b52dcecc87a94b0b2ba2f97959869b921911b32cc092c83432c8cde7ee546a67843d0732fa65a5f002dfbf2f5699a033d91be2fcf211ea00a32d5594736b4b7aaead7ee0b5f4cb2c14ffdad84fa556f0c1befe74ba30795463f6ffd17eeb9f27e64988ec878185e25e373521f00a31789a448241a7d5d83a22f1472c31227e2c195cb3b3d3c3b3d32bed6d17ffe02de7de1f1f29546df8fd9a197af2253a97e2cd52f4783f4e9d3b4c5b195befcc8c4b7c4b5d0e0e765839fa7e9907beee72df762c240bc1c15362472c3527dfba34739b5dfcb8be82bd5efc7bcf5ebf711bde8b311670dd2ff98a28c890d51b04b415262f1459f25ead2ff7cb27258549267e361c0d173cf8d4cfc9ca97e0c81fee3e5ba0371466e679fb35fa986affd1e7ced577a790bf8b05fdf7efd978f29ecee874818efe85f4cd614d6fb31859e43a21f998c5c91e902dd0d71ff3185b2e3ea6fb1d25a79ba0e0561954856626dcb78040c15ee9821ab51ba4de98dca21b30384cb3b527020635261547032c775d9524619bbbb7b5bd1e9811e11758a515b90959423bd38f14c9f0e7000771838428c0923e815601c9e0f279e69d99a2e7081838d8c94c343bc31768c3146cf42ce297d8516ecbbb09900c4e3a018280692754c089a81a68062a0138cb8d8100403c140522488870452522925a59452207df2a626bedd774767449272a60d352a430e5b2688c8385fe0b65deb043d20e5fccb70225bf13bbc11638c31c61b3f26f45bae4566dbb64da65a9eb18c690cfa1f363235b7dff36add7e8710dbc2edf73aa5fc6a95a15ad44010b5a306c8ec0a089b229bf1ccc248bb3293e00da32cca22155943c2035a32b7a7f1d4f6d9c824d7ca45968dc63cf4dfd85d2bf6106b64603118b8c5d9db36676faa690a65c496d176b2291352a7ac8d4e797c8acf20eda8a93218234bfb5dab0ac73075db4cacaa26567d4cac8aaa8f2976d77217c4e8d58a8904d2e08e9652788663cf74ad1a684040d81bc6e10ffac1862c8b40109ee14bca9135f81b724e29bba3fdaee55b681740facb819592074a832d09928e32faed18bbbbbb1994935dd41f330e296f0cc14b86a5f0384c081124b29884797adc26880b88ac9aaa176242d321c77634088232e0c3b85ad71b859221c12602110b2a4665c633654fc78475d53161b36e179752ca1883a823761111e0cfdf87c446236e88ba718be7c486b1166b1d133f9806b9442378a66fd7ad1bfe869c53a2bcf33cf57c6a1aae31c1a6632a83fd0cf67338e4c62be5b742911bdb76ad79d3f2604010b5a30608089b22e3199d72c52ad2e3eeee20ac6e1fc8d56043ae0d21e2aa1078add67ade7f8360a3502dc35cbbc0f85c21e0e39cddddddddddddd3bbdddd7fc4cb1f13fa341de3164820b1a2d168b52268b42268341a8d56f35aa57310f759fd6aa80b1bf2ac36b9b88da73eef1fd91384798274568062205913b609500c1403812a832a83689e03d60847b0b58a68b02108eb98f0fda6c1fe580c05c650e0670b1144c82466b32466b3d96c46298d4269144a29a55406118b05118bc56231f984ed79c2caef436267cfed993d3c7b98ae683b3b3a3a54cb56821c30874d90090c29028b4764342e3d71155953c684b6e68604596d1b316c27e3a18ccc8d1da0a73c8f94d34357d17379a70ada149777aaa0615a717379c70ad6139777ac48b9d1159b746af4fe247983f3f1b83288f0dcc6f52c8c48c223c4752d4670fdbb7a8c343091b9bb070129897f019a10ff40961bdab89dc5edaf57c82eef6031832b5ff00254e05187748126ea68186eff88c5330cb8fdaac84dd4dbef0c5b62fd69576ffba6cfd00f6e90e6fb118f0d9ccb8eb1c0f63fe4f66d31a408ed765c55a9756cc51b1cb971dc7908029bdca49452be4b926743082de6315acc69538a15ff46a7ac737e3de2cf6fc7adf39dc4242df6a3128e618a7840c71342c0544efcb9afa81288f403fb5e1722254c32cb1755ac549bf415e20f2e8d967d2837dcac54284fd5ea55567150e5468677aab462e28e1bbba7e9cfc3bfcdbebd2c619b61c5ca4f03b27fe348a17f48c45e9194524e12fd3420afe80b875c0bf8cb70c895a3e7449d6c29fa88c81bfa4d66fb4278812df9e87fd4943be45c3a83667374ca7efcb726219e03a5657e3b2a2a4e41917e106b6210abfdb5d6c8030cb751af5187b898bf6dcccc1c236f9b6f31c618a3a4758ba9f629b160e953dc5eb09223165a83bd85ed4c114b83349e11d896c928b8181dc07dc906889df6dd47c9c79df40bf5900dd2a621145c3657510df5a05b09b54a6e0bf560066b1743257083cdb1433d2ce3985f3fbb7532c4630bf530996a374336475e7881fb74345442641cf323a8db4897e3ba5088e3ba1a3a41c64ff3b92ef4a927d4e7445da350bb508fcfe7b9500f50651c33c423449db0ddedb951d7211ea3100ad54ff33bd4c3a357d1f634dda3fef6a15009a05b3f5117432580eef61b0581449f077dcc38e67f4a3e40370397ba0ee3e8bfc1cacfb161055d378270fb6bd4e1cd709b5788637039a84a6cd71863fcd85d4cff99434a195cd8b06e2aa0dd67dbb66d037db659e206eb8d4f7eb541231f4556690af190efb57657293f95a59452aafa3ef1b17a95deed8f9f33fb0de617b6d36fce974c29a55bcf39e79c93e59452d234c80fcae195e8901fba47ff5820222f93552985a89a1f55f36375aaf93e46d77f749970607ed54feeee6ebbc02e7d2eceaa882e9e6601cfc4cfb708c0131bca167dd99243b8644bb6644bb6648b67c4f371cbbbdce52b5fc1770f6ad21276beece91c9ee9f1ce8163640c0cd2a7a3cf793ef43eaca22fbc716fd0afbe7c16f4859667f6f9e847c9621cf4b7244a298cec8f9e5574c643abf1ccc8d4810f8cfee58bbc7ca5143af0f2f6595564f42fa3affac94989facb5fec7a514a29a594524a29a532343536415408c0131b56eb3d7d101575905697bf699e32a2a23f3219514916cff0d0f71a751e09d391e13e9fcfe7f3f9701cc729010210785c360e0c2e0c6a5100721d7cffdc41b40399c40bbce850f5dd08110f9a738e7393c94a298113fda88e39c0edaf1ffd4371e1739ccc057df5e3968db77ea1b77d218a7ef3935ff8fe85e08e0c3b230bee615c4a29a35cc17a0f9c7c8ec7799ce635ef912bc9f215cfac3cb5028e712b0cce3c353f7ff94986efdd087d556bddaca59e37fdb5027bf97b1675f4e7afae8267fc7321fcf3d912d65f3d3dbd6a56b7faa6736231d98c87568b3739d1f5d281314dc89016e22ab2624b4686a6c626880a017862e557cb30501a51c96f59bba44a7ebb646bcbe122eb101275f817636004f44cfce20818477f8780a662ca5c5932bb74f0f6f685a8dbf4fbf9850ceb3eff5ad2ba49b135f50b3defa3c527423c1563e01af74496ce1741b062f986f13573381688d41bbf79f6f747438b953f690c6c03c1310c17598706eaddfefbbb3f998800faf4413c13bf19c641519efa30071afdc834c44fa24fc64ff443b576d6729e07fa073f9f103fd1a7691a594ef19b14b37d3724ec7cf9e0096cf3a11bada056795d6c7f5c4d1c3886692219e0191133f3148e995d47460fc3ab469f13fab169a4d4df8629fe0c00e36813bad31293851c8bb39a06dd66b1d60bfbd563c750fdf826d6624fc774e955b7a2f3ce1439fe9127462cfe914623cb53b5bad70cc03c05be67c34a7301227f03f477a75f0d0e56f2c8e94ac03133337300d63476b0fd5c53bad16e6635c82374c4493f0cafe2664018a7c46617a544180e36d45f9402b335bb7d2bb2c2eec6960bb61f4983b3d531fdcddf5a48ac7c8e97591d83840bf1a8df05854c3042390aa21f5ae94623ed28cb4f510a6b3ef7852814e80b41f0df8305e174dd7e18180210a0000510019420e81d418baa321696537310acb5d26ccdfb95ec736adfaccdda2793b2e6b20603d3c599130bb0a4c16812c12542174d2c4830d403eca2e9c4f108728411bce3085554f2f1b9f1e337ba1f12dbb28b6a59adffb2290b270144979999ad155b80d0e5e744e85ad63134401f110570f0c392cb529a7439c065294e90dc11a80b5bff13bd0008615fe6d6de3eee2e0d586c49710d5c30fb6107071960215331779d57dae2d778aab4d1c866aea42e9ee71da9fff9123fe88da8aaa9c4fc9faf8813fe807c9841a08fbd8a4254d5f73a7442a3c02a18a2ca894d7dae1f7d810e5697a95cde09a349082084b6faa1cf6fdb56b72177ab1ef06ea8eb2c08089b02fb3a6fff65145d3a12b0bc1306ce3d5ddee152bba11efdf10b77dc2823fe28fe8c29e379348319c70b8dcfebb131524a298944636c5378811040308500035bda9efd34da3e1beba7f99e9fa6e8433f9f54b31f8d6f8605c01dcd786a9af100e82a56c67b3d967e186f46a6d2cb8ffee5e5dbe76cc76cf449de73a4fadc9348df211e24908f06c3c672419b293485f16ecfd1787f237723d297c6e7258808e09ec64db109c9653d6ebe8c17130b3eac7c1ea3a7716a0a89ba0f7d74f58d25f5d8b7f3b72fb42174b1a10dbd9d32269a96ad0922e40299800936115061dbbe0dc481bed20fd07fbe0788fbc2ed35f07923b7f66703bdc0ce476deebdec809b83c2f20e179e7847b5ce7d549bde0cbd0bf1ffe69c9fe76a65b025eebb67d96aa52a719f8de843ef1191573ec73df7b1c81432752652edb3393496c93bbae11906789ee7e1f051cd53367cf2f75c5ad007c24fcd78fe97b7fbd2f377f2725fe29e55f6431b337a06677c34bd89c0d25c9131bac2528997ee0ab726124c3458d8ef68248fa83713c86e9342603f2feae119067c361d3e8fb2cf1b0fa0bad159bb1f391aec8fc9efbccd448682c1fe0d6d5feb2994db8b1ad517b684d1d929758feeceeeeeee3ee9e69b539fee2e9b594a777767ae4bbc94eeee6e621cfc3e67759752b694d2a50405b1e5d807299142d42d524a497938d0cb72f5e7e7561ad2df7cfbe66dd3bc345e4d211129c3ed43d3e756ba0273738e3e9c73fa9bb84f37b9c12d081bc3b07fbe8d09336fccef96db6a52e99304f5037a5abf395ddb06e2281824e0a4cf39e7a49f26749b010812b8d4d26561c329304402a7649863900d96e198edf977300dc74ce6c813aa894dfe7b7a9ec07c37ace37b8c2e17cb1981e0930f9c127d7f0b9e127d352db8b11a1b31af7e6294db8c211ed1c5a4ba74606bac459e1d1bc6daf58271fc60a317b7ffe505a553f66b06821f5d2e57164b7f15458ebc3da4034d3c13bfe367621c52baf53c0ee1b6e5199cdabeb76f48e976ac597143cb71c610d21136f28c49b982e28695065c5c7043867dc14589c4e182048c2f70e86a6b678f78f9a907b6c6e51d3066170cd80dac4767db40744aa721a1c604305ab24d8a5a611b055592f3a05dbbc11a6cb40f151a68adc6904c5511afcd07255205054669b8c15544c066455d19010c5d6dedec1058fac4b70ea1a54f7cc36a7790c40a2c3518510383b56d203aa5cfcb3b39e019edc826332deccbe51d2696a02c604216c1048e08977798a85551adf4fe51514682578edc9774e11141fa6206b77380d39e112455f440cbcac90f4e6809a10656d840450e56605101bbd0c3152f4cf04cdff8c592db2f4b39b41a3528aab4751c3b8c010019b0d879c10415b51c1e6d4dd7dddd3dc6933bbc90a18b27b73f04eb3d0c41630b6dcaed1aa30a7450c2dd9d4a6f31c20034bc305c87ef6c4972dddd9fe459ab8392d00c508b96db2f23c4a3bd1c64903a6e4852809620b28c71fbad37750004155d488184085c244811861449f80088124c51f9b3bbcbd5f525585cb7d7dddd4140d81cde8a97c5c9ed19dceeee1f8578f4f774241b6334e0fa578b0328d7dfcb62c3f5177d961b7cc06a010c8b0e50bc30b0f0408b0b30207c508dc103ed852373e182ebdfa158a832e503567001c6162bdcc41359962c31250610cc542e460f338000d3e010324836606ee4a03571dd0a173b5c7feb3d8892e120ac45072aa31dcb821206b8e10d1bc01270dd065fdc600a4d05d7512c642962861a7870c40d82a8628b274b725a4988c08aca7fb04314deedafe918f991878cb3d2152b6e98e30a1a8881a50a962fae3f588327aedbc0757d8706395cff1ae2e132ae266ac46c9297a8a2f2000349660b1d6e579f79971e7c7077778fe2c40d3b921626b839b468620b1bbc8e2ab88678e99e7aa8c40ef714b163343300001000f314000028100a07452281502c1a48c2323e14000b708c40845e34968892200872180421638801041042000180106494a1192d0074d204513867725298f54611005dc75b6a54dfd65327491e107b2025771c51cdb447d94efc9cf02cc20e0edaf262013f9f6c7daaf98a3e61e4f63aec5d91817ddb0741f8a2123947e3c19d0bdbcdae36afa992577200a35ef3a59c5ca0ca6d50dd929f0219b31c99ad7a9e5412ae5ded09de1c16f73cc64f9ac1d090e77ae81370930d790d7d772224b4b8b63f8a9f810590ed0d68e189716b87be0015d52510d76b368210a88fa31711972237386b5628ed27dc0a1f8e129eac27ede5b826692a870c16a28cf6e4a7b04856238a3a29a896426e137cd2353fff79ee8a5b1625e1d360b111689c96c584e9db17cf672e4875f8738f140e77f1bbbef4041e0cdc36fbc6ca85e2f4a2693b570554e2b69b9b5bac414a7ad1feea56b3e5fa266a862de45ec9df1b266143f6657cd342cc38fe8563aad0b8d2d211b9d3765243d7e234843134230e5a923d4f9803714c7b1d3754f47651b02ae86ef62a7162786dde1fb95ed3b6300dbcbe5ee99ef94a38d221d2a9dca141df4868c74b005c080702492fadab98c0f45cf9bce762e82e8cb5d3caff23fe76fb7fff9811c5f98eb97b1725914e92a7b93654b17b4f1fca994bd02ba15dd1e8fceff811d5238503d87cd0a644ccadb40a21d56c8cef3c7b65083aa9ee1e50a7922be5f602df6d9c27138bb249eb6251ad6d1b94749ca76f2effe607013c20680c4ad35392469d94ee14bb2294d0f3877cff661ad88a6e220ef630db8375180e4c7e4d65fffc9370d04221cc469186ca81d1b08d0786116940a6f3dcdc9be29deda2f956e067016cf3bb79f691e3c17a8644c615caafde7e92fe8405b1402c7ec8c0588281d4611fa8d4c026da384bbce87da42f522fc4d06d183ea7bfaf9ce7ba646ca6e8d80084df868938cb99633c39098e4cf6f7aedf82b9dfa22537b02cb9ff630a4715eb00b7f80a8a13e10116ad77f33c950200d7f42dee1451325c6fddcf94054efdd229f158226181e142b010dfa86b7be5a7274c31d11e2cffbf392790ffdbfd0b0aaae0042c78bd34e2540615ab7664ae151f73dd3eca76ef34765f7fdc9a641502425e19fbf447b8c2b718bb00cf314f65f2cdabb3f0e5150614b8c1af0f60376560868e5fe66d49050e25a50b89775445bf51a2fcf375f9539ebd06cff5ef3b3f652708bed564d0f12ce78ac94f8a80b30912c4a548b5e762b301ee2bebd99c3643dbee067c6749291d474cfdc39b89b8cced83a8acf91717fc0e23e4a05c38615d9651311caf16be64e5ad79cba50d5223185b7e403f4efa247a471c1a75b2abd6600ff5f7ae64f3b2aac79d44aecebd72c0a800ef46474855032071f6c3d2f8b1d5408e693f5e81af4e927b784d82874063ec2bba053cd7ebbca8645816914819a1916461d7b434c9544311e0b1ac5ae9f4a39595da3d81a905aa75f490b3929e8d02ad8efa53eb35a3963f240d5135bda143e4cfe421aab91d7e2793926a54143bfe419c60750955451e9e7bdac27c3ca6893bc9820b23f747cb52b0290db547fd2374e2173f007d396ad572db10789b8bbcd44e11de29a0db3750872d1026dce8ece168be6820caa004773e0c05b26031c85a59c09d5464ada81ead55ff67056f5c384c6d97397831bd419c32badb1d4df9588cd42eacddc719f2fb2ca10ae726059d9908718b8f5be5910f5081f33080166761c73b0caaa18c7a02f8d487be627da862764c2ece2ccb860d158afc27e73ab384686df9890947531b9c26c6d067257df1b5ae3c76fd24dba18d5de15177e58999e5355246397f75d7287478fa43f19085498fdf57e8344311efbca6939757897b0ad942122af3d7a82073020681a166a7a7b0721b1fbf33b931f080c5b8830a35a86fa19026a72f12475cc29c84f87e03f994017d214406b2066fd885676f36fe323d823209af9f3dfd637c163206f88ca69b2873300201fba0524d58386aee2f737ee8cd685bcc040174f4213b6d3464b42b39d0c2b756f086c6dfe97285cce4f23e50aeeb2b0527f8a1ea20b907265615bffac44609718f32c9a49e7addc211f79bcdc01976f54c4b35479699bd2c5d9d701a26538acba44b14478a512cf829e140e1568f421aaf250e3d883f1614860b7f0d888c3530711b87f2a00168709fb8a445606ba6439bcbe1c8003f927a02a62df271bce7b0f9d6196f11a94225cb280808a3bf02f1687d674c2b9faea1892e4adddfe94096b4af834f055043d2ce2c59d47bf83a1f9da98addbd00145194e1115d8a28ad848258a347d4d9a0fa42ec8a29913285c3a710514f5da5a1bcaa9e313b64cf68f05028e450f1c0915cca926b481789c5c8fb5529ac7eb793dbd128eff937a556a6b7e78a1009c12c32d23e10ff707abee061f0534af994a98d2cccdfef7d05f196203ef92db0f927acb0f8afa332d3485038f249a2e20db6421d176a09ea1d36c4f794962dfad498a785af9dbdba626dcbb1645ff211aa4bd2b70e85a3e62ade9270201264de23ae0c4bfbba1410a43bf941924b63f50722b3abc6e08951a9654a4c93e26016ca2ef753654d756496a1b0ead0d62f76f5c7a89ee6524a7719d11c445cf5cac81cbfe9b96cbb4332e82247d613aacb2ba205250877a33d69806741fc9a492037549ca69dea3b251dcc7b64e713bd7d9961c3a2aecddaca3560e4537b6a0ba0cd6ec7c576b257b3bbfc806c6f6cbccb4dba1722142863c31cf24819b2e85e02e562f9c1569409a4f3e7143f09d76221ad43cc0724e353dea61bf9b90bb4120bce6cb8885b3f3f4f6397fd3a6a117b4f29d46d24c080ef1ec840708867d33ce9b73d2075305ab7af4001e69197bf61040292217d97a570da8c3f729d8ac1415833b3e83a473b6e4a74142470c55e5f56a14976487d43c64d073dee6e2d808d609d21a8d56a9271774a2244ba03bc925584e25d6341256429d4897b2496f1855cb767182ce04ef82be6966654aa355de407c7b382ab584dd33d3a73cbd8954085d8cd560152ff566973e464d749234d709251592bfd1771fd1507629ac533ef27463c78f37b9287a2874158699caa98c50e3ddca05684f182a8068b52c7a8012326e493f8f110f8297dd2a87bbc6e5529ad9702961bf59dcc61d2ef0bdfc3c7fa7fc489a703457102cefc6c4adfe99c0925e7d35048236321bf448f2216d03fb5c2b67f6fa2430bcc4dcf080e2f4348a1a03391bb2f396ff1084049411d980429135c5ce7948d110c18229ca2323c9a4ff0edfa6e6782700cf10162fd1b47983462398e3911d03a6c28a02b3213cdae8baa7882e57e46e5e4df80c689973b6c11a49e65a7d402d80fe23e3c28125a3577348ec94d33fd45db5f73e7d6c5e04706f8645b53908e51c1b25143302e81c762f171ebe9fb81f3bf7b35a86ed1e30771af846026c005a0ced600c34f9958628327f532ad773351ff6f67f2026765050eceffdaa5ec2ee2d3b31bdf3ab828cee8305bc3d360757969f9393b6543fe515d3aab0366c58eb25af97b21d77a0d6b0cc6006414b6c02c645fea0ef0e610c6bb02eda728f8f8523f4a77bc706e1b786d7d45a59550fba7bc1f52e6890d622ab98f1e17863dfdd8b0c1c787f7edb9b01543d5098d076f2a2ee1a8415ab2e8564f4065c421477fe37ba7a3dc89705f3b2cb18a7678c70436b972975220637c432db402c83874761477a28d9e9926302c4afcd1eeeb8033e98c2804ae33569e0634b35b44715c33bb0b216ef85e31ae8336f0161975704c2e3613005769ed67d824f0acd69df69085a9a9a8cc4a77ecdf6aaa390b1644ad409b863081c9346a87f3b62b6926b04816b92dc9f0101b502dacb2f1b37f64217f02db706756abf0ee7edb36d5a67f3e9890b39133711a017ecb4739f4ee2ce15e0e47bf5c40974c1620af54ecdf465cff420aab35743b24b31f95cf4aed540a81e55de3603e85ff4a492cc44ffd090e02241dcfeed9e28173ab366d70e6b50b54cd0271a331c5e6c169847db240a5e52fe3b89a2641e40a95cd7c5765417281d49125b0dd46317b5885140c2c164828ddad536cda5a20e0606913fffea60b58da05c467ae8e55d4e6b8fa2bd87c7a479be07aba8eab7fab2151d7db80df420548b18e3c80d79c9a7fd650ef04696f2a42f2aa18466fe356ab16e163217a4dc4b49b53b2c6c9eeed0ab4aed0c0908b722e6e1d04e23119bdc51391890b8f4995f6bc43433c66aff537412882eeb874fb375ec82b04df4c82a40c14d24d7d1a387df22f8e53332d34257919c96de7648391ce179fb8a918e6c27631354446af375e7a6de03efff7cf3fde1b72cf675d0ccb7180dbf5b1cd5da5ce25b8106cb9a8c0eea87d5b82003002c18b7d20778fc928f3d65a625c1679a290f9e61fdc14b7d39cee9ba8621f0cf6fb8a3cecf572bf3fc3508e5a41ce58c6f0c3bb4c29cc0dc1e74aeb79b87fab033e6265ddc382e5d94934d3d3e862127c1b3e6acc07fbc5d7f5ef9f40a9761cfc17329c12e8b62d60dc67d2d22889dcb054eac85783d95aed01d63e46dd5bd23cff8904f564b603f55b1aaa97f4bc2d94e3a430c8d19ddfe20350b874e79e369f553c1baf63d20c249c1d73a2418bff0604d08de18934f29268aef7132c257542c549ed7c62fba3fefb14cbd3b50c59dc2cf484f17ff2299a66f24265d5d49f3554720c7ad668331e75f0765436653a4c4fa2b5e805957a43cb5c431f12a5bdd99dd2058847b58626e70d48853d00fc072f2a760770e00299203f0bb076e1890fef314bc013275c2e720a0ed5db7619cddbf9e288d5086315e58b7d8c0fa76cd78a11cd5db5900406b70dd9353a9d290c4187500c9dc13832937f03e0b3e488f6fbe46892c1fbb473aea0bbb62910214cbeb33ff2006eca47d193288adadecc6d3099efcf3c528060959d5fa64bce286a8fc0e296c72cb8f591f18fc2a8ca0976ad70f81e4b5418b8f747018d3aec4cfb45ab0fb5bb18a6505e19329b9b8959a3df788a07fab1841835fa0da672a07df40b4800fa8ce1b1447cc6fa69c7d51a87134721f8bd9079465c1ff557338eef546094967b152cfc44544aa7a91be231645a5ffb0dd091d0e2ff8a0227df76d5b28c7aea4fcdf9b3c7ba3407e9cd08068f9b3d81d5f0b0ff6d479adc0a2ac5e0d875099c01a79df439577d59bf1003cf7727c41df0040e551a454db49f94034af6a94e0426a4fd52a86a61ce328ee709fe8cb96b00be79a232e480a3e55ec0a464dd0611844e0fd65d4949ebda14510f20eeed82e201814da56fe4e082534927f5936facfbc444767bbf33e450f0f4b40d1195b5a97f36da667df6134a9a7df20bdb20adee941da73a3e0dbb6aba147fec043cf23445821c1a08a2c2b8e9fe2d47ee50feda2f5ac5681316b29e467feae01888fcf011d64b136b2706e0285dc6752bbdd1143e8083df8045da18e3340532f40d9f53a5db737a3783f95f63781b4bdcf06438600e6c81a600fb2fa5478d2c50cbc9cb258e44e7b5103cfb858c8c01bb8876da07d1160e16d756074830f11b45d9e57eb386591b1f2259383b99eba7c64ee1407edc5940f29fd581b91b33273e2e85a08f39ff624741796a61670e437f0cbcda0927985d7815528ccbe52d71d6111fa18dac8bf175282fe02c0f462efd9dca096121e3023f3ab05f119729d9264f1537fd52062bb20d615412fa6af5075c7da22c2dd29a7e5a788c5df2d1752284ab64caefa05bb0c355764069811d1402fae808b9cb4bae0cd3a2510a33cc4130ded1a34c0f3868b19c75b191463a6b335301e1a2768f101a70a41063450577449c5301c0355894bdd24158c20ddd7f8d356bb4c2355a322d1efc5647552c0dff83d1a55c0dafdcc5baf9c83e9059f100bd179516a0cf72e8cbfe1ed4e0f1f1f8363216d6934524a3233e99e0cb0e39a9c9745cfb129b5eead043fcca3bdf98357392c710b7d81005aafedbf59d1e18b6d53d06be5300ee7c3e3ad0ad9e00a65489cefe979e2f46f9ba7eb7b342b88a33ad4b14502779195e678bfc0913359a0d04d18a81d3f52d2624b84e06c30a9b5444571fb0c2dd625417cc97b8d014e279982393e996319ab6cb99bdef3a0c816b6d17103acb344c50e537d1ad6c8095b898c638b541e3a0e207b8a47ac33961db6b40b66667e0e311a8522e90556152c19f237b34fc0a0f60388fe6136cce40df60b381ba2110334609cc8503360c85d3363fa232be2686eb6c254321943d792ae5fe37fb97a262759709df187070f72f59e10497681e5a957a182a0e3db4a5d72b15e9136fc5b269afe44e26d621f489fced148f6ab8aa7e3c7e84b395c112cc2a491480443c47c7b8f9743edcebf9dd5e040e172dc96f09c5fb6d271bdac341d1e7613d47fd0028be7eae05a785d77c5a9e9b15d43f9579f22037baf8a39aa83dda2b17d740eb8a140f98dc0d261908d17570a569ffc8897b58af493adbeb3e161a9886bfc786808086732f2dd38c8d0673a1ca1a2c4ba91d8d2fa9ec489e85198baf21af022c890ba256eeca976dcb7b34ba7af77febc53759190e817bc7931bc4c3094d22d34773096ca098916af0bf5ba227401c554867cfacb9b78149e0e88b55b608968ab43f0ecb55e68d89141462abb4d9f3ab52962ca1c24479c1a61894935266db35b5a112298c4209e8511d694ff980de316641b09f5c22fc674dc8fc40dc094c850a2470a19bf8efed728fefd3002bf846a612ae526287396a5bb61d99570743738c9e0546701a8b3c5af3e29d54c233b41ffc8909d25c95912450f728f2c8cc82743a9ae102495fdde1efa332a588211f688b1460434c1e92ac211295441363db41627197f1709c3bd66854e35a06990a5f1990955d56f7359c7ed7727a0e1baad087e71f7c27450e8c61d59307e00c40b417eb8c6412b6b6172c192a524887568c0562d37764c4c8705f9aca5ba5e30ac74df2b5240f19bf4884cad766a72cba5a2039779e808c8cb6296f504635d7ce389310a6d5183f10237ea97166d620aec421355d6ebfdb862555c023158248fdfac4f82a58af2d99bc8ea36d5901dd2a8895c90e46e84fd7cc4145df037e57dff94e8c5e881e65ae824750d0f73500a81e15338742d7c027b3905f3f0b6995d7c75b133d25b8295f1b61ed81587ae2820be03645c3fa4316653766224ef3d00bf8d92f42602ac898757a3ee9f54701f64f9b6139bba7e17742184db4da70fabd9ed698e6372003f1db7cc2d63850d392bf5628fb8eb07aa81adea748c735bca99d8870ee691cb00266c67cbc648803791a0d218249b6ae3d0fa61dc1177ab57d74f038a1fa23d0c1042f8b9564a818a5d6258e8e32fb0db17841e97929b5f61775158671f5fecaae536a1bb84a593dfc422f310dd932c7bd99e23fde111ab89fa5a1ecd0e907981b70855ec1bc61e100aae4e75df440be497c689017b917f37f490f5d9d23a0ea7540c0ed9c69b1b88decaf1b0923bb40bb2a6ebaa08b5e7d86d5b98dd21e1708cb832fe06eb6bac56114072d3f695aa2fb3a04a20891fd0884c15890fff84c7c04c060c7681f447a2ff6a958e495a5592b1b910de0ba0fb9a14e68e155b1c8ecc8b4e37722696d6f280888b94b63af052dbea54a93731d88f98f13383190e5cfef57ce8fcf64758eacaa1602170f034c0e01f23f8250c6a347676f8472e822fa5b4d9f2829dcb3fbc0a960cb5158c19c8f73f731b937f64c66f5cc4f5d2c6d952ef5f37d6a6bb4691c6389939196194e2caaa508a0334f8fb05ae63f0f380af21589d11c5b7ada8ba79f1672ae36d7f624a28846049cb61f77f445c60211005b699947f077b9a7898cf43ca03e716fa00a42bfcb1ef6dcbb0f53caaf4b75f7e098ae0042871d20aa09d10c07114f939259cb6568df651be1d4164eff5b21162577eb88f318936438ad53ce9df30fcc2815e63e5d6a39bcb577542ecb37ef337e08020fd88acce371d7b0f3517158999669bf4c58a445686abc76d54c2ccf8f85e816736828ebe685dde1abf5aed7a8eaafa336a14dcd3080b6a5e3e00945cb4ad6ae43faa43eb89992ff13fba4225b6ac8a856e5828bf695fa846a39778646b776f966d27a20a6b422e703947d4fe4e75605c2470c45b2525979a6ebd6865355ec0e5d22a0c1555d8bb608bb79ddd3e924d865f84a55b15106093b608528e0dfe56dd0779cd33c6deab17fb68da66ab335b35ca1ada043a763a02172f9073d012b73d7ed8bdde99bae6faa62d075c85d9d7a568941d4aba469965dddc43c74ae0b485568b06b7d0b5a8992429f236886bb85b6990cf8d61432070833174bf5f5f0600a70a10debcea7fa5cc74353206a83ae34656081d5abf54641077dd6b088e5925b1f6e480ef5a09d5fff17b99e1b9acc40905413d8dd1e333ddbe85359dd32dbd731b58616b16128de84873e1f98c7e4502c32b0e6296115a3876ffb80d17c961fe71fd54ce9d36de901e42d2d8935013365a6f2b5ae02aff66a9d3b635dced7a2d1a0bbfc2011dda8fb77ff4b757543ef2ea7015d2d51d55014293e47f565168160af2929a6b46bb0bb12ee3dad2caa8c6fc818779b304b8540446702929d5e60ddfc5b5441a0699bb8b7f073aa3cb3f27a6472aba338c6b43d062275a1009deefb2de1eeefcd708470fb5e66a3580e99f6c5ce4afb79facc5a798fe4d5d1837ea4241c6618e8316c64d0491ab8bc7608b3efcd88c277e1960340443a33d7b4e3fd0c531b6df737971ce1c1e811573065cc79a6e7126271cc7200940fdaa9a4676083e199f39efbbe5b697b2614d4e717062ab601b714af49dfd2c96c5ff9081ce55c33573cf90281c4292b328c71377ba2b7e78fbcb079eed1a447fd675582881f4c5ddfb93d5760d1df0e47221a8e7267168a1029cda071d8aae5c0fefc38a1512042e26811996a04730b1dd9f80082a13c69bd21e157cc3418ea9d4b597bda38486b194fb50dd0c72a4f750f08cfb025b1beae5df22922bdf35f43725bfc1e9a51f54d0ffa24eb737e14e8a259131cdb0886d3c89bf17157585717a3ef3d17e18d9ab4a161a082e249bfffc27a62051f98e257dfc15f418138c8c2d71b9e39acdd18f56dc264c824b24c9e24035862c21e8496e979ccb7a6c0ebf91097d37c230ea8fee9e2054ba58128b039faaa0d8093686852d528aebf2ebc4b61c93c032fb2d855399540f91c086bc528063475eedfe5db5a31b4faf0c0c5aa8fcbad77c9b5c6255f04cda9b3f4ead4bd8c25b96575cc9fe3e40f6fcb0496f63b3d34be95855ab382b2a36015bddb4280b1f7569fd380e7ed0a685a776a065699b56d4c46af3567c3fb68c9ecfa14556c85fb427fee4c2f200fd21147e7b4363646de6c599c6bf89221acb2259aefb8bb11d29f7d830df6d48eebbcc8fac111643fbec3ba6aa98349369f18808dd056a42697233a68deef3d264ea6cd95b5905138fa031ac4232ffd41ba621e3a8a5d46e110f274e3412a4e0c3a3aab2a4de6d186555305b1e0e81d1d772c60ce737f65c4b34c5cc4b7b655a10c46452f700baa3821489cac49a8f15281e52a638c878adec28d4c82ac36506403f8381fe88f126535f4a8a01b621d3f6378948b883309641ffa80b702a7f13078b4be714ec5ea2c1a42b9547fe4f552145d1689924166b3fd6f0e2a1b63c29ea1e9e11a67f52e4fdc01afd8069b0f4bd4b0dda6152d983bfd35ab985b50f08da13e75e85a582f79501562420378ac671361ad13ae4b2e111e0395605712e1ad4e4c978f082f2d011d9a899bd05c3e1f9cc6e83e4d863ecc04598725ea750884f5a9d72b276093f9346c241d2da5e59e8c87c495d767eedcb96d06d31e955bfda304c2d82301430c52996986414ca32190e1aef33356f962a87b2b1e52ab6978694f8d0cd85a1959f0f23751f4b3245ea63f03ddbe716224f50dc758efe0beccd34c137ec663448bda9be5307b797633475031724ca77166459f23c72589606fa66568187970263fa7152ad9066a0bf073f420f5084cd7f3390e25f3121aa8c0ef7b2395aa4183ab008ae163be7d69f70d81bb424a2dc5025601c0e5cb6481f971531b00a6120fcb698808912e4109c51f11235c791a03c48e133ac11584240c22f7275f3fe498b0941353a7f83edd7765c908aaddb2b30b0f10bd21e2da2a76703a9df7624b071cb2b4370eb13b1503100660b4398f2a4afe44d473e325df1694e5a21fe431f9be6daeb9a24fd4f6e7b05c62c92420907a025cb59e5cdc32e58b23925a3bac49294c034113288763a37f54f9f73f85c2c57a314939c4e2dcf36098dc5cb036aa6a27ee7b72ad053a4bd02b29e9315d1b271471f612be556a60586fd6306ea15f6e06bc18c9033e0436bc8a3d3d3af6f3e6c159deefb876f5a519c4006959630b4bdbf84ca49a29aebb048026b16f84d844079fadb30531e7c33d3a0a439b19a96e182ba0225d6999032bb7103818209a83cbc1b0b2c3ff4f52e78c3253a2dcd94aaa2223af3e917dccbfcc2ba35266ae5b8329400cd7ca7e6813a2262b999ea114f69854e62ea3795e3ed2953d677c4d9b2da99285ad4796ff2687c3acc9c1fb61f8226e15c84be61f1761427be72e0e5e9b45fde31bf23cc0b4e23c7c29f4b4b1663b517255a902be4b019a63b77678f8223174e2759269ff391ed53bd945ae12b28ddf78b8f9c56c99dd58c2b04b2a62b04675bc91fa122ffc096f81163f9cf7f2099fc213b1f74eed4552bfa0f71afb93ceafd9487ea9c24d7a59a4cf679aebbbae1063f8f6c0c487794c358d97ef85400aaf9270784eba24a5c84a80e21e4bb0850894a727b4b61846744ddf411c96c14491ccbdcaaea77defe97617a35c23380ba7f614bc43824cbe9c8a78a9803285775fa43a859e43614cad8fe05d5018f437eaf1376da5a62c75be1dd1aabf4058540d5080b3897a2f64d812dd837439eec47b5985d54aaafb2b1eae375c931bcda6a42d01196babc88986148af6077fdd509699e2a1b743d39aec8bd9c5fac3d1ae1bd83f27e57eaeb459c74eaa56c278415c276ab8007b8b9a3521659107b42b7ba7e2f702ea9bc598fedcf786154d1cd52e5f75430cd156566263fe266a9a2aa54d0f2e34ed07156cbbbe4ed5d123b9ae0fc9e5c45548aef5cdbf54a3a3f9af3fbf5254cc142cf562ad6d52180f38d2ecf234205ea05adfda6d700499dbf2fbfec0c17f23ccc411547daf066befaf52a96e5a649152f6098ec888832f1c43fa5503190cc2013f9c02fd62657caf55e40a8eeb8871932c98fbde9edddca1ca2143c758acb08aef7d7ece3199f3369eaad0c728b4e49261b20feb63bc0355862af9b8beb2037978c2bae28fe5363fa09c8edf108516b60b3daee267b265d0135867ff4ba61af2978790583c5dbf99cbedd968d70805a64aadaa83600c882b4d25cbd491d378077b55ae493bbd93743c4d20dbbdf63b5fc6c8d8f0afb390d6ac2783d9fcf49432eae89698ee2c82e3773a55f615e0a448d33871b090a0af5c8487d994b05c226d29e0115509dc43e7abaca0b8aa1d35c18aead49e30397499e413f65f28d803f551113a4157bf92673d66fe8020cd16360a5e35999ce68d9b6f902218694a4cbb19ab9fd0e986d5ab68709264e11dfc6cbba9f6a404ebf776e0f6630d21de654b7fbc0f02979f9df25945e3a60f03658130c9b7b1a4e30759c4c107455fc460fb5a357d52d2f4f9ee41b9925ec964708550a90f0823d8113a6f5489656d166e956d1c05293eb09ca364e436336a6f506c90142b455c3646b523b6d73ad34c8ca3c3d8c8b8529f3553490eb5e24d3868d60ad76f3861c4ce1eb59c3e8e8571e9220ac2bd0b79cf22c9cd3f16184e4b836a20908f1da4c14a13c7c58abcc9ed20363ab3b6d68d9b35ea52c87c1f09ed0b90a178b81001f4cc38064bfbd9aac68d6db82ff642a4742bfc0dad249c6434e298e5d12208802b43e13854e0c2a346e3fd29ecdf606cd3620b5868c1ef599303b02901d5cbccc7ee4533f34a731d88acf3c632ad39467eb2a4257eccc9c74100618d6151ba9ea9d56f4f527753d22ca68ceddc0fdcb650dcf8b0301acbc6b0f7c490551fb867997060ac3d719ff44042c43b1f0849ebf57ff8ceaf207fbf13bc6b56bc67780a97f436a50841dba74831368670a66055e614222c4b090e2108c15edc0a830ed24b70842cabf68c256f01304a923c9131553b311d62cfbb508d58cc40f661eae3e04022fe4cafe48330c6a7eaf7ab8af1373b9fdb1dbbdbc291a4da481ae69133374ede402944bd2936f0d92280b3424504435ab6daf5239308421c0d6c0c3deb12c1d806100a3f00549977b0e40670939b87c65f7085f300721a004929d048ab24b9bdb4f81fbaa0f072d82c7d8738cc998694a7f474c4a9ba2b92ae0b046d0c734525410e1332f2e974e2d31e25f7c960d1987a51ca4567662cc72595090fc1c96671f48321c18ba7d5b815d1d9a71d1ab29339fecd6f910d994c67289af9091c7c3e35533fdee20f59ed66f37fa5888f78c95b20f6b308161f43c1f41238240dbc7e3ab46fb55975505049c6014a2113ba9422cda30b99eb5ebf7a3a2771ea69c22bcea0a98e1969d1247ed6cdfd1663eae6a95ddb17582726d0e0b67ef96f67ff331e6599a04da52c0256061067680993ff0efcfa4a0c1c6f7e0740dd6299c48e1f9f31177fd0951c2483184dee83102be159edcac4552ac538488684b5f71c5af5f7a523fc508fb86f0a7c94f1a0a2917b0e311b4eee57f2494fb4cb4bc126dafd6b5b08254120fad57f3230abad2fd1202eb7cfb0985c85c7096ab68a919585ca7ca8685ca6774cdd61d81248a37ed98fd4071bda3b85df6d8bd87e68ab352569209dc2d1ede29c287171f3a095d52136a497ddef2950e7e901cd3fb907f76c92711b3fce8263346c2877a829ea98f7ef7350867963470222357440c12901db63014dcdd0d37221466225f9133038e43404426aa99e97720daac9409e9c5bb15b40bac2bb11e428f3939409e9e5ae75e22f9ea7dbaa836ef2563652105175429847c25873ae05519a47b0b29aed95183fb1e3d8a2f35989c60e0e88a7bfe2194c977d02e98289265cbfc86b8388022ac798e470e34599788e75eb886eb5bec0c33c94011d0133e589896ffae1ca7625111aa2cd622546eecc26250f6b33fa1d9c889a30777d5711af2fdc062c32557fd690a8dff8a342b7f9de8be7765776751dcf0c855ee374cbee8793174a1f359090b86073ddc415c726fa95b0f22e0c598bf2220a35e0c04d6db6d3704384ed3525d866011b3efe7d4cc0d563aa2883ce88e76800838d5af682284f358d6eb5055f69ccea9634f25a94e362646f8dffb0aec8560294e1e544d41da18c13694277facf702131db8a048838511baa65431db17417fcce137635601874a2838ea1d5cc58c3087766b059cfeb9dd85662ac8e216c905b6c50409fadd0442c2d6c1a49b72c134cb85f6fa095ad0b3f6021e1ea5823c4f2cf6e98684bad4c52c882f702b21abcd2f9255841003875dfccc2f6b497b1f5fcdbee4d2239d6698e99e6e416aaccc662f68cca108eb12f7b646c0dba499cfba851aa1b1e46aa4357a879a69fab4d24a90e8b0668786a5a41cb422c7d31d348ad2352fb176cbd7f5b71d569b7157ddbe818ce627827be88cecdc76c2293ca4b87147db7ff5aa5ad74058af2056c6d1af4d6e9cd62b4fb5d189b5dba7943f238dd6b4090fd18878049e0bd7c9781614e6b2d5fcde288c08d8231a180452da64c137dcb2ce078d0ae8d0e870be2c1645600bf4e480c799e4ab462c19ad25fd6e70c3ada6f8f4cc09d9d31568228e1715627c778d1ea4bfd7f34c62eff41886221a3daab9ec9eb56083d643dcf9ca7402e55fbee6a74a4009272e0d30624798d9eeaf0d4556696920cb152c81a9869e17125273cda6be9b3f2cb3206258ea3ca92136e6546930c81fd0450aaeff3370605c167c263950aa9cd4306e0d6ec104059b43b48f48060340c6310f4451dcf0a051a654130efdb161e9f20a85b9fee205333fbfdefa2bd7e3360180d26105ca064547417de384b5d6d66f997e86d5e8a8d0126046bf195ab3e355bfcc1ab4f2bb7c3664ccc04bfa6cc37b146ca3c79dafb5c02937bbd07c04185671e97a7979c84606c4f50024fff11c54cca20b6251c3955cd9e225bc240c0540edec387fec425c0517a7d4612a9fadf2c2bc056410de4867dca34a9597acd0e44119ff72cabf9bcc025361703ab53b099671bb0766270664182739bbcb9e1c1ecf99958ca69700b5c78d981267cb34bec9c19985109ffb2b011e3b89f964c18c80f232b47a08ed78e7f4c333ea048d330fab72821566deaf62f19644ae09ae4ea85338ba344e183319e1013a0cc1e753d258da39643883202c2827f58b26fa73192a3f1e194215abeaea0f4ff50519078b8a75bea44f4526ae36dbf5d599aa37a549740019edf12b457feec641f44fac31d2be41e054bdf799279c6dcc338376ac18fd5aca821c845d47c827c929a173455912223694a4e91bd4a2922cb7c40d1d02b8b3590ec47971070637c1cf3cb302d6aca00e73de3b6283e9ba71fc005fdceab2f69ec4749614c5f69cbbb60d5e9dfa9266e16a9f13fadb768a50d7e45ba5fb5efb8c664f5ce685f457e46108401a7cff5c8719787fb50803a1f5aa2294bbd4cf632d5d0f1bc75f7371c8d35863ea1cf04d3d62f3feedbff92424efce978415f1415a7c4e7f246ac21a45afb209a3baba539d78a444c9588a1c7a0d6daf297d2aa3c30edbe8eea97704f4e2f5a3fd71fb3422538c3aaf0630aa77bdb3acd2626c336af7f8e8944080a6fbba08dca348828ce79d81bc30f6e8f7289781182efe04fe940983342d2c3369df145336b3c9efb986c9ce4cd7c0223af99b592df18a8966775a9dd214fa7396947724d9b6c88e308bcf06f1bfab2d025f8b79d9ecd695576101bd1b886684eac9b238149c48f77724e9701bd36edd9ab74ce1dddadb7111e9c06c0cace161a4ed67237fff3f613bdcf99c8dac462945a2f8bc7dcdef921e4621dddd9feecb0d6142345d5d7a3e48295248b5978c8a180fa787527550a0bf99dd73e3be9d3780d2651cad501caa5869f645f59e586d3410edddd490aa520e0978a06e68fe5e953b0d5e5d9a7a8c3b774cad31dcaff723f4f82c26c36bc05520c484f86e4885ad3a59310ce471c1abd1fa5f4399c0fd14f793962c7827273d07633ebcb143364eff60b50727a7140321e657f2437b674d4cde995bbc8b689f78a413752bf5bb915b6e10329ed8dbde6d8c7c0b24a24f4029348eeaee27a4d9381c58122ec9f5125eccf18b9da51a3af7fd72a335856d2aecd677bf62e1a80be88a554150b4fc0cf7fccec0d94ba7e45fffe3ffd96d04601b9663608faebd6e74b8b0835f6fdde7c414b8cefa76a6547f0f2a50e69228ace60b6a2609664ef7b8f7ea85ad00cc19d0af37c0a487f372f4f2d039a8d4674c311bac9c2ec73fa379db5feeddf86b65f3dc736e61c6a82cd00c2c3ccfaf13683634e6b52eee52ea5a156ca7b1499fd2787dc6b2980fe48315d3ba8c30f5b02017c2fdb4097e7825cc6fdacd0433b8e7a88764896385a7bdc2589bee7974608b108b1c946fd9c2b146155fc87e7323959fa085d0eb40557c2e85fc6cf2dbc05ff97a594b91621b5fcddde8a2f8ad8b14af5d75cf902befef7560cd075f39d74d7a8e6d2789acc98035926bd673c8b6d001ecefb40f9ec51e574ac09ee97546d8c206163b3784385e84d893e1e3488796f58b6ea428a6a9c6aad36488e63210ed4cc90d4b0c18446bdb684688b686d767641cceed11a1d372fd3e99612ddc757328b3dcd444f47e835ba735d06dbbf4cb1d2e2c1304c3ab6e8aa94322b611fcf04f267eb9b784b2e702789e5620a6a9d564b25ce4d0ce8c734aedd39f69a7a3d1dec6d83f9315a44a429ab09a1f8d7358adb9e0bea4543fe34201abcaca91d4869cab292925f76a9d37dbb16dd76c50571b78149cab079e3f53ae128ed8bed371d1bc3001c87ac8306378c7b287eb05ba82f8aa32d6516639b2b7c55d7b601243ad2c7eef2f5e7d8a74b42ee317dab7e78f24aa2b304120eb5ba388002ced6ab7370b7a0535fd203347948d5fbf49f8e0a53c0304f56bf0c1703bfa6fc24221ec29b34c13ea154202aacb7bc617618e2cd09d449355610fe0f1f0256142aedc1ae82ff3c4a2ca32f7c97b926342eb30438a9016215ec87a3631a8b0693e3fd0a0230d74b330464bf29178b9f1721a6163e79a4bd54e9f2f2d24229ba0ddbb0e70c2d4efa9a94e7bef36f8fc4c98efc29e63460922bc2b3efb5611d4b4565eaae5973a2141a0ceebc4c733df2d8c4ba9454f0d460af423758a29d84927b600466c88554afc5ec9e80b0d9b8ccaa37f5f810ad055d48a9bdd8c481f3707287a812473ac3946e2de5852ccb861ee300ab87cf63ef3f8a821024278c3d1e05d3b8d3180eb86745eb928fea5b1609ef5bd833ea266e1371c56828ee2552c1db7b6351ae038649e0df2f79e6d2742968077c450f5a971e6c727edec47986d31bf1dba241c7d2a630bf8a50cf4e1bea8139b85a00487e890d9718821cce156b29bc822c32641b640d117d5aca5f9d9a276784a13fef4ec79b63e22ac7c9e33c19f65cbc9402bd080ed303ce3c7d7b6ffb085b2b227f78ef4c9a7e269caee07a8fe2287595ad4cf2716e9ce6f6a15be6aa119d2dedd9303275790097c706f582640ff4ab7739646593bbb055c348925a263e70a8a24601ea76f1dd5c68e3361bbbccccfd97542e336fea853fb529b4e08500112e28b0b816d479fe0a58aa9231befa9433b20c95bb573092e0c833e568f64a5eb64f42713572076392141487acd8cb683e4d624518cd251a7731b971eecb6737a16dc82df5f395e88f86621c45b9bc4a6af3f8cb685c1bcf4e3a0eac1868cf04d73bd61ca1cd8fae0619c33519cf63f3062e73d1755b69949e2c7337692320d921eee9ee698d4f439583ee44a5c7ed9717e5b95a56fdd5c4157bfe018368750b74b64c3970ca87073e0d26d293aa3de82020a1c16ac9961869ad86bca5010df374037a4078ea4f97d6d7e392ced64386bd1bce357a616a180607ee80653ccdc3546a01da9f4e50f16d77c6d5fa67c1ff33d919a38b20595e4b91b085c5e056f0211921fd43e3e87a308a31f2dc44028d39b4412285c43a8d4c82ac4b91970b0ba9340374ff30a84864e89d971755e81db8ec52a95b1f70c338ce53cec377766582329f9cb8d4caaa907bb349ddb7db860d496ad941524f75363dc785cc2e773571c1496809d5b2cb7111d1e876eb912d1b199eb7e7e9599ad4b55fb7e0d1eb94489925e251ad2928ff315b0eeb171b7df122a15f0fc512b405545008b6d28ef0a92424387e07670d0aa442bd01cd8b69c70bcd5ba1314ffa9a9c2a178700a1cb5cf8a756a48312e8b9f4d3b701eac0b8e81a725391385bafae53b1cc620ebd3e50729fc5b9bd2ee88a03d5a122f6d195c32deacd4e382d701eda1ccec6aaf527ad2b708eed421c52b82ccf8d55d6354a8db28871fa580215c207cee946c20b0affc4fc612751d77ed84203fbac75dbdaebda951c2005d9ed1f5218a8dc58f36581944083a304517c61524ce1ed4b0dd4ff1b4df26a86864b3e747d9ad915107c6da96e0e2a673a754aecf8a7465126afc17dd1b33799d1ec67af18b2cf6db8c6635d4193297a1ab413b12153d79f83f47afc758ff6104014fa7b636120cece6972136828231e9d61a8b8377a9f0d15fbd6d75c27c0ab6a26f3146b420fd6c0a65402118540625ed8bc0a74dc9bf7d21494684fbd48805ee93cc875b6630ea2afa1d092da206bcddc9055e499223f010c5538556181c4d3713988252b0725102139bc86e016cb5c27cc7161490cafe2f469d4c4d120210bce2a31d4aa5fd4a52e18661a38901851cd6f218a41fb488ae40612f973dd298e42022e817773fb996571799afcb658953936388a61a9c1f466f1603ca72dc7d4f79a3c91b416e4bd2d6c76eb19b2071c29f74e5989cc45a53f9c20ff71c4c9684eeb4a9567b83952d952a2da5263979cb4900a50ade8b9ed127f5e13f7e1321dbd4202c1c107e6c444940a9b49144e5b0eb4eff6d09c7e9b4c2b0be0ac641aca212aa5f01a64b520f687bbe8a91c036b5c0be14ba569012674ba4a050f73fb2d07d246bf0f1fe13d44b74156cae8524cb023e5b137853f5d2eb04617fbf0cc3ab0c443e3ad31f1f9b05ce730a62e186de582bddab4e43701e00f7f1e08a922846b7f1cab439e02840375781f51d50b89b472388505a885ae82ee1bc6785deb36799aff09fe263b16960d072346415a8aecf4996267a42a6698a633ca3aa6f06afe9854fef1067665c78748a8f2482640040182ff18c4f30f18460064e21c88a10da0e4eafdab8605cea304f279f422821cc6d6bfae46328cc92b887eedd4604f6d5a334903596297311e06bf487390a3bbecdf32b19920238a63c0b8aed04ae75f67a9c8ad1eb858f3913f3c52da663d0b070aed2da1fc09c02d7e0d6d8fa86b4007107d208c30618eb741a0a7ba611593b60392ce96bd787efe4f3ead1f3d58039274a599e7d33e57d1f84344440b9b4f4d2ddf6290759c6392bf0e4177314e47a990d885a0f9e08ad4857c0627d1481763ce6508686d98851a4b14d4a032dca92de3ef2cb8756067b745ba2b065eef1f0eacf98eb219f2d6d0089eb610055a656b107356bd65224ae4b3ea8b5441a8789a0a7dd375cafb084af1184584c84e0cb1bfc6a776ad94e33e287dc8b27e500ea2f7f7e1e82e1619d987ba6e06221e5702cd59239fdc097ff575f1a423a68d8982da99b06319ee78af2a8af5271959da2d8c1e8d1c0530fbd7564ce173524706a0324d990d239b2ff82d57e36b8df16236c2163106b27a26cceeed08b4793d5827983eca9aceab4f8284bf5384ce9b0ccda92c112be53d495f88ca5d9c877126bfe8b052696918dccc04fdd9dcfb070d09c632935add7ad2d8b208d33753caa858772b953576eb0907acb808682af6e83a591dc453a8bbfa891bf9e181edcc8a01705771abbbfa81684dfab406ebf3ee518e687e0b5b3e64500b88dab68d1382cd10d9bc6333993cb7b72029b2388217f54a42cb3385bf6a20c768fcc86254d47a48e50609a160817c8a02df2a946ebbd6188082a5c435ad31ddc83eb7a353d615f42a54fa66f5e08050554098706014eb6f04a5dbca5f8dfcfaef2410e351da9ec77221f19606f45f2353ba56e085a9c41d64f2dab85e065c2141d03263376f4211ddd13f35e037f0b7b51a9b817cc4d3e987d83521af1cbc89c167b8486caba5775313c86840ab5c8186a65ba3908f89ed8faf15b283bf91c7913d52541b8aba3427ef7ae411722747909c24bc28651eb975e84c2be2e61cc0f4119956cc8d391a59dff6bac11158afb462ab5bae2ac8b239d6d02c321f40482f8930eced4b32e329569bf734c7e666725a9eeb2675b6b5e4b309b02419eb4b2ce6ecd59454e920989a1e92a8b2f9acba963236c7abba16eaac2b02acb5c57046e1d13d1b0b32bf67560a66b565a209edad4364a634854d783686dbfa1b13da6cacf4e5b3d14cd4955af02588042890a94959da6473b3268681e8565353c38012c087285b241e39c1ef545795b1a00afabbe0de97b16cb448d4df662d09d12f6b1da4c51807176e4e44abd196230037e7d4705c2d2da24b4f8d352e5dd9a308735b3a2744a6380f091d0a8154faf51589ff0c2bc7aa012ec82a840e17216beb95a9962fa900cd8c6e4c285370490ec3831041a120868afb8212a823e6ecc0fbc493a416a053508059c39c605fc638a93587edb183d2157b3367bcc72c30d684e2f810a6e38368a6394660a9c841140d5981e5d8eb713d0bcf30d120580509181545837e9699a20032b073c31c4e812b122a1e47cb316620f11b256f72b0d511d32350f7e649f85b32a34bce81eadffc6b8c75e95fd17931df62d9ebf3c0b9e0c932a9b269991089476ff2c81a90191b39fbc0bde7209d3adc54e7be2d527d58d51b8a4b7dd1404fd44213c875b55f6e1d8916ccc9f315b25e6d87ff2633333f7c6a99690d4ca7ddf22217e37d4f99ad5ea719848262b81781490286b20bb296d72fb37d4fddac81cd16b54a10e780b362985a91bbec59617e70688b50d0c0d50ea8519031226a01094068bff52c41e9ecab9faf269a99b0cd99b0f1c1ccd3198fdbab3dbd769bc99f34d675b1d513341f5f027cdd366ccb8a940a820611731258d6d01fcaed43a110a073c2813399b508f5739c5f3b02052f54c7dc04fa00415809242afb7086b6e337717a682ffd4dcc85526de10371f204bbd1350062154055b9daf8158ef1496276f087df38ff62842945d62b077c1f74125e06930908018f1a1c3332cb694c5d5b4f57f98138dd07e4ba6e8b53b0e7aca782298f51a8ae751e226137e346257f6822bba1e38bc1217428330685aa9d2224e876b4b1e4856644373aee728d355956955180c85509db5ed19faa55e43ac9f6738b3318f74fcb61f39b4c4f862ff000d57cbbc9f4b51d2c9ed84a508d1e8dacc914547be061dc38b96a105b593fee2304781d4da2c21ab234ed9b10573c9a7ca17eaa2d37af69de4f3d712deb744111fb6d8b6d873328529cf89085035f8033deac135ecec8b496e94b4082ce3307265156643ada0049a6e99fb03952641ca08835e49229543d28e663e673bf53fea257dc5a3e81533e21f33de8cecc54e1637e5ba1f71e8dfde69f123c7941efba62acc0afd3a178359894dc8f932a45dd1c111b4cf5bb9495f7df118ffb59cce9bc77812dc4ccc10268e37d7b50febedada3a0cd4d4acc8f6c1111a37bdbf915b9a27ab5222a5643cf5ae2dd458fe90a147b9ea56bae0ec8fde3961c5db65232dc4496f4144f487186f8f61087c0b229c04e01d897997f2ae776cb4f4bfdd3e0bec41239ce81c53e5a7d370828ea9233d76a3b373dd098c97ce45bf4d5074e6229d5059608c10394f91527e7c77bd2851a64972a9cc73319da18de36d4ba2baf89b51b857f0b7768865c49e029324fd677714573edc4ec6b66bb25a5784ecbd7cf5b4ae613c7bd5494668550277ac5d5250f9455223142fd33186fade9697825a8ed457bfb979d4f3ccea0a7f8572df4bfe88767f4b4b1c7f689212735f77609bbab4409cb2d55da926335d52daa39f1706288a71cea8bcd4b7e23f5809a359adbe15cc606ba8f392f7e5e32dff3ec287052d4319718394339d176e5591a47c9a88064875af92005680d6ef7c19f6cca940a2db8e51b6a7529520d665379a77312457c5c47100c4ca08bf5bb4986e3dd70e8aeb3aafa0df0446989fc97ecaeb9642d45995262d47d1b2cc95b72118602a33fd5c120b2eb284d70733534db2c4e36cd522270945c3c5a278983113b4b420f59d21f08f9189ce3f3e9f55623b037469b7f079550f899d7b6356fc239ac6b3f016e082a04add60fe7ff8aa6328abee1c222197470da53fe84774a1e3810103225b1a5efb3db0e2dc7e3b2bb1b0612ffff28d8172b72c77c82838b90facc7cb1e0a45d19bf11d795ea3921b06101f0cde84ad06d74d6f2abd6591d6ccbfe87cd5181e3c36bab9d8fad2316930ad85707244208f44325010b4552794b9cf40fcf02760e3bccb801aeb744a7eb8b16890cfe97357aba7a3573736b4c415323535fec47cfd60052ed0d597b221d5abc515363cccbc0aa516c0fff54d6aa53ff2c7672dab1013c7ced516a2b4d2eb9a57db564aac9a93c0019a1dd8443ef7a448e8525f5cb0834251838af6bc0ec95a8b6045cd28ed503fd4c78b0c1924a1f944f43acd91d813dd07861ca338271794d124833b18f2a6209ad797cc403215bad2727d60e5704c912d65896822f444b6566e3f064855324f945c104452c32449fd7dbacfd933f10afa0c020f8a8a87841e5cb7735aed98a01d9d0916ede313c7f9209607739edb3e799eb976692b510cdd45aafa325804449abed14031d1ef143e0e4d0e9513da4ad1b38368fc3f2a01270d831f6463d165a3e3c69dccd73233a9744f53ecef6061f5c2cfacd3456f2dc96b4f5718ae0d3ab2d528949b659ec40cae0d9daf43e3026723781fe214d46664bca6a3eaf3b9a7813105911e06f2bcfa8d72d82f037a381a0036ce85b402ca58049b0aee2a7fdeb35b16d09f6158b817762edda4c69eca56ba8cc386f14695314f53be77be05ca4629cd549abb1795a68a7e67e7e30b4102073a126f52f3acfd67aa6ed6c60b38b3a4c82d01e97a0bf007a4251baf3f24d1ebad22fc6ac8497a94c2e240fb56ff95f4774e684bb138b467c37bf950e62a8721d75537e409f19e085f5b0acaec41a8641b5102eccf50d50a6c1f6f4c6121c479e1beb09147ba898ecb03fe71446479ebf7f911cf5463fd110ae90595b0b37b37c3e74f4f4198ff82a27deaab0245b9cd0aae8a2e106c58c35227f935022dc3d96c30273fd0a00a4be6f8c86fde9a98953d0a4b5a3e2b505f8c4dc888122760863251d3c2da55a121bbdc07ab77a8624660a2ffca1ae529d04baa50a10e9bd9d728f9861e6bebc5bfd0b61506bdae37d8e260237aa0c516bf166bd8cbe4757f81eb478143f80b2a1f84e7a7cbc89ba4cea7bc4d643391ce04d665c6c10d7b95f8259ab70ccc07c77f8d28daa2ea82e02b87fc8b809aead1ce87bf34b0e262dccc67bac130b8909b33a644f54a04e720e1c86f7ee5fe2516063191a77daa3520ead646d6519cbd54abf502f193d75ba01e0a836464fb4291edc03a4cd574ad52c04ef508cd120daccc60f796395dcdc22ebc489a1b0bceb22a8beb2928ab5d0d23221b9f5ada3d9669020e24d43ec3515cca54fe00d52d57ed8f5e11bf606599320432a783dd2b845b0071bd3ed4984d229484691c321f0fe14f97987df873e0c114b9dcd5f931e005b3963262bae89648e8083ebd6d1571de2005879a9d2c371acf3524e59d904339ac622dae3a45fa1d34b01c8c60fb2b1f73883ce17646eb8029995acf817ceaa800600e88bf7d9b558f73507f7ab69fc6fb426b3025828854b867d122a0b376c1082f3f338af2be31fc8a8ad8e63660b4b0de7e662578ae7cf51e18b3bc40036059cbbc0813adb474b965c3583bd46fa21c0dc359b1f4ba1fcda4f1ceedc982fd3d708199805f8cfcad3b1881265912346afb73706e677cca817cd5c8e0375dbd3cbed519c43a64ffd8e704c8dfc02cb959bf0067548272e104941bfc0445a82812058376ee2abfd8d665b043e8da49c2ac86d9341e27847c6c8c0202558290cead601db843a0233368c24a41897a30b86597d60f187d8091cf69d9fe43c5bfcf571f1e7a3f899958f56504eb2aa9f6261d7691a872376d3dd35e6829bfa73813a5feaca31f3cb4080f93a74cd13c4bf7fce139b5b938b283d24ac36995ab707eee79041cf3332016384cf9ec3ba7c6575723432fb73faa4b05c842ba9c7c9b9a2ba83df1d10a9284558e3100c21506b06907f83a6c3348d66884a575ac44a0c17d12eb7b3e632a2a7ad3756aef477e3d36d665b26bfa03c375856f0ea98649ca9f5e6a70fda4c56c5c6826580da60f717fb24412c882edeac628e8df8089a929c123cd3b2cf7dfc9cd1da44b6be5b15e787167cbe87e15fc31b0f1c16ea8ac0e1eecba8b61178d99b1bf08f27fbba8759a982d40afed6821deee303d8ba6c44f4248a02a880656f116a69127676323499c43edbd22faf5765b79f6e2f41428f65c395566e4ecea9a2f834525d1228105ff0508adcb8d2ec8ae218a83d8e9d642ee97508286ba93dc0570919822f3769d4539e7cc9c5407c4f519a62e646fbc79925f8088f41bca13f47845d721581d5121930b499721d4a9a42377ebee438447d62b16a52e6f8039be8e28d790347e28e3b76254a4691ebf6ec7c8b5009200a853a4cb2e72c85b71b7e42ab0c21dbc06354f4545f4d28d56851bd2a16f9f4396f4103a67215bb92421fd1f23e7568e963a81fbd64196e52aed442e4983414bb2afd6d2a06b46bf359c24ce22aea83fe7caa2a4350a3e9b6e128c34dab58b1381ae7264a0e55a8882b506827c5f05c2adc4139a92940479d8b20129113d0bc628b35b4a576d1ce07ec9a7c0db7655182e9a4d3003d0459527b1e9e3023fd21fa9d1ee4bacb9c401dbb52f5f501865a3e0d378ac10868ed456f1ce2d1ff0213ee2c494e65713d9ec9723612825742e146e5df0caef132bc00f41b1677595ae097ccbf02789db1c7d4ed269cfe5bf00af4f6064fc3c6a35a2f97a99699ff7a9f026b5f4df3bc8c9cc2a526db7ff24acb1c57367f1e433840d756e0c8d707bb88951ae5cda6e02ec73ac24de44544aca8397086a49d660bc4e8a92905277c6acf2cb615a7dd864d11d90ecc0c90a2f4aa406a2011a7b87aad4e50e24bb87a0c191030dd823d0e01d62069f705d92bcdbc71d91788a56bab40b0bbc96d69bfda6c3fabacfb6688e8b6248c9071d6782d397d93a6dcd7365b9e8ddeeaea2a33cfc193a5ba8f9b22075554b8231c997d28e2cb23ad8e5953d557270ed23f8f211c16981c6b99aadb4dfa85512a5ce49d397ff989d18b6ae07518ccc0522dfcf56b745a4f1c389a7ca8edd3d2fa00284b091ee3fb035dc8ee4ba5103281d56f6934066deaa8e6f6d4641046d6271250b981025de48463ad12f5e8c00535195d7b68a51bc0cfdd3c4cc7f14113a8c830e1bb2a0d44a55a4b8bdb698850c48ca066f15a12a2288a50dce9982c797a472662a50d0cf0c9f11c2a8ef3ec8e10124b32e3cd1628d8d8180b5c9a6b6157ba28f73ff5daea5486cc089dbe53527713c7c732742a761df6e854d17b55baebc8c011278dbcd90ce20996caa9571a01140bbb9be89439ed807e71643a51b81188901e121f2c601feedcf3d5e338f6b082822a8c7c63393c799130fd888f715f5035086cc3bf78c7994f431704629a2e0ce3823ea38aa99237ecf9a59962cb2231a6ffc08db4b283838413c4730ff480a34c192705ca9d532094200a2278bcb70be1076c1d48b320799a561b267290d9416afd883a864546d65b97a957afe49a0e1d725a61a57e86e2d866de7420bbc073aad5e88d0abd7675053fdf938217b7d6fbb11d24e537773274bf4cf6e96533e2434256b34755dbdc041413e62e0705a405fe880cee8a07d9e53cf62c323d724d1a0cf91e595b2857f08bd4f6e5cab65727be4d9227fb7642a83181681173771f413a59b2f3e2d32b24324c866573687fdce624ebcf6bee3ee211ac4c9b6f22db1cc2cdb4e0f09354a98638f4d0db062985d336b14b1015b54c26e5012b3e791b98f5daf590209348be1ed554d756554863de268b981f03827b9c276027d0697ecb0dc4ec856649e765920c119b97c1262cd929b9bb675011bdb8aa9f4cf0225ed371c231de19d383bf748b9e3f4ed9fa9a0789d8be254d791f34d8079bbcc4072387ee02c6a4ae8aaccdf85afdaa977d70ae8c9f4541b476a5f2bd27f605bbf2b3099d4a5d6eab0bab36f3a512a1aae24fba6e39665a8eae10e7e4033ba4063f33a8b43f04fbce671dd7f2fb923d0b25311e88b3ed7684a82fe64adcc35d21ffd1490fe6ca44f7c12822d6ce80d8490e14a98c7f68737b560573563c10ada5777bb8e18e2ea7fcd0c82516013d1b0fc5884b0e1564a15e0623d9e2302a4b7da0fa62480c1f4eaccb22d3eb184e139e19c064c1a5efe7af93d9ae6526df11163313e6867fd1b6d6bc094bda75f879238f5df1f698970b84a5a900593d42fd24ba707caf44d6d0b9e936157f14b232d5724b90edbb12fec3d233cfd1e56cbb5b16849f63bb871dc42e142b37f530248d729e8ad2410b9e9d4455936fecab9f8c92faf6c222d2070859bd4391a91abf9eacbf17ce758f815a3de0dc9105e4b6562e17899eb274a2f487acfdbcef81df115820c08e07c7c9e7cc29a5515e809d44be676329638328500f1eb44513bd6b9325499ba4b68f31371dc0bf03df7645296fc44aa59037a0fcd857b7078505558e19fcc6c148c1e5df0528f309fb4fb3782f95969c6f4a992e8fe94ac89e13095672f357a958071eeac5e0efc3abe62901ba2380068f9765e79aa2c6a0d05f6eec54cb421e03a20d4aa13fd6956541226440cc2c948750c6b1218b51ea8140f6a544903f3ee69041366b921b4f1350a96215723d051c44dc219ef498e51101e7cede0ed65fe3411c50596e9a279d9852604d0b1059f20b83ecf7f2e539a02829af50203fd2c1a99037761e7207491c09075d671b7e15d718c4b2a0c6b117b37fb984708c21826551aa6b6b00328da4ee872aabcda04a9d6eda38e393d8165c87e6c517b2f1cdecfa434329e22b57074fc6c2d583836801fde78a148dff9ccb19b41b1519079aa05791d4bc4bb35caa1f61c00e145625ad8c9fbf1c8a11d4a1310869b07c549914b91230506a221889161a6e0bf8b00aa720b482e488d8403f39ecf977bada07c57b9881f8b8d0dd333806040045d2c8f5eec99e06d6e9ddd3b8632afbbc649479ce68ddb8ca986dfb3a2d62c4a59021bb7292cee937a285db16527f194df69f3b3568e3eaa546096552bdb2ecef4552cd27410cfd81caec99549c22b3f8b5ad28ee69c5278fed2242c0fe53384175526866c56d3b3c454389c27ea90b396f438bd33e1a3908ff2ef5bd7b4815b0e109972c79a863e4760caa9cbda64a686da4e46f605845b7f68bf2fa0ac0719daf1872d1593683291d547851cc9a99b60eb0a5eab3d6a67003dccb80578dda220d76870d71493fd9dcddcb84c1d83b7a6af0826ce449a1bde611b6b2b25d0976bcceb2f75c34593196f5a704d69121f9e45110b87fa5f26afac34f5cda7d55e481fe5be4db92627fc29e0176af5e2f961a9b8d1ad2ce6d603baec995ed20f787f7bf5c16f121324af2fcee882524dc0ec97ac9410f07524e4aff1bdc147ded35214181cb82d5501096b5495b3fb0af16c29aa2f7c71aa4e2b61e515f5a08e008795b0bed02992b0a2f5df2e9960a6afde9a9058cbe228d7830ff92987db76586e05ba79196295e8d32c3782021354545de8f832a8196e947b71c06bb2ac1d664f37633d409f17178797b0c7386c6caa6a949582c0e115f0d18c83910adf17103b65f0587cc5f20108be8e956070a8a4177064f924517d6ee89a891d56aad358397437dbc7df6a934ed40afcc788c03a83280328f767bd19f42700f8c74f47b967d0db1c342326bc716edd1a02ece6020a4392725a405c514d0701c8e28bd355309555aff10a6dd9bdbea2d9bc162aa86ac60eccb933c665c3f1d5e2d7133ef040997dfd24f6107607d79ef0231bd670f45cb04d19481ba17e3722bd37133f07a454066a7befbde5de724b29654a32e9062f071307aab669150a016a988c589539c88996b77b5d9d60419cc239bdf64851e4907b3ba66382740c65c980954292b53ce68ec1bfa344b5dfde45fbedfb372cbe6c22a9febf6822a9be2c69566a216808ec0253a5b3d9e168f34211d2067dfa39489536a24f287d269e9044a674840a30013ed2df6a88e998a93252758d0cc2a347cfb413ad6a9bccd60bd0a7f2c607587f0d0940195b3808dade5d5ba71828cca0e3b5a03843cc69269cb3abff584251d9542353dab2714001cec79132d64a3f23655968e6743a05b1801d28106bc5641307d30529810cb2095af495d93a224049e8fd34c00df213f7ae457009f0d224f06f8fc50d166b4d2660920e2f4d85aab4bdf640748e00a95f003ba51701ec94f075973757d8b9c2268f59427105ea0a5796505cc1b291251465b04246912b8d6293b241142cd8c112784a9eefbdf7fe8e2ce585a20c5090ad4a6ba592829c9865b5d65aabec1ee8a494526a6badb586ddb5d68cd22cab13346a6942ed141bf6b7d65efc37c786bf433cefff7081e8dcbf6d9bffd6c36671e0f0146f403802ef08fcd148d334cd431aac9436e6d7301b6fdbb6f5b079ddaeb5b6adb534d0706bb6596badb5165b11f4d1be6fdbd4b4d13cb1d6bebd231fad8befa3bd77d3ee76edcaccdaa66d72e3ea66b77b9bc57ec95bed5eb9f2b28042c11890c802962d937dc750b97f8bcde4cfb7aec895edaf8f3974e0c6dfa2c9e4071b4ed3bd350c79f194fb61bedf72f3f72618d9bfef4d5ff69f32e5be836f02df3f932e9aacb5f673f52f19491bf5454780d97736c9953f102d2008815cc9524822effd25898839c62cf222620d1fbbffd4ff84d7c7eeef05afa6d1f7497f6830fca1f367a2b913fd062cd2efec1be03df473d747d045d0c75ac597dd60ffed10dc3611f4b1be6bdabcd7ef5469d9c1534cfe2dce036c971d7cacd41f7bd8da5f7f4eae486963b323b932f3d56aa780ab498dab1e84a63517034db2352a69f194cc039d4d3b32f5fa3386d829d3bf945ab1ca130a2b6c68c0d2c4d4ed29b0e295abcdba97ab927c9beb30fbf186cff5a9898f99c8f9288e3ef6732832a3d080830b0f3e800006d5a306c84a0a9717c2fcc08eb32ec7f62e761b481c65d63a10fca10b3dcb1b26fb9dc373e8c0db63d1e4d96eb695fdde49abdd7e133be3ac4d445389388e7880a6f740676ac54e768eca15992b03bedcaf80ab89371ca95c99ded5a36f4302501145dab002347dd66a30e240d94bc071e10871e1e8bcda7dceeef6ee6eefeeee6eefeeee6eefeef6eeeeeef6eeee96dfddedddddddeddedddddd3ee3a37c9e18cf90188fc3ecb06ea460dde0b4569dea1e9d6a99a6e9994675370fddededdddddedddddddddddddddddddddddddeddededdddddea1ebdd800149811f04dd964c889161adf3e510ea1202d399ab9bd6948f9dc83673f6f0714a297a4c9d2ee38ef26194ed93e8674da2628e9a3dc6c7e96e7bb000fbc8dd401b7483f4efeca2e92577c7008350005bbefc8642d3195c6d76b56b4231c957a3563b3ed3a2d56637bb19aa573b3e43abcdac09c5245f8d5aedd8777777f96ad48a565a1b25c4dddd51e4cbdddd51402160bf7c77779752ca39e79c73ce39e79c73ce39e79c73ce39e79c73ce39e79c734e97cbe572b95c2e97cbe572b95c2e97cbe572cde972b95cae395d2e976bce192e3a5d74bae69c31a98b4e978c19ae19342ae005181cc77158069d39936e39936a3993e64c9a3369cea43993e67c3832323232422367d22d67d29c497326cd993467d21c71341a8d68d09933a9963369cea43993e64c9a13c3850b172e5ec080f11f86620c1a23c6f48e31e64c9a3369cea43993e698846128c68861622243c60c1a94068de94d63a43367d29c497326cd9131e64c9a3369ce8c1934c6f1e404000008400d5aa3c6f4ae31d29933690e8d31673c991cb600133d69b552d2596d76352a25b557db3047396e7a733bbd719df779e04764044441a0e90dda89f10c89ed54989d91534cf60fc1886258f88f50249484647a939c6c803c61a3ba59a9266ceacc2a266cbe26cfdc992f544aa6470a453383c237548aec3f296bd2d50ddda189e264ffdaf2d1e9ca47248026ea97f35c6cdbb669279ff11a57b98daf9cb5b362b55cafa93a79eb743a9d4eee7ac17662994aa552a954a7d3e9743abd80f1f97c3e32403bb763e06914337a6ac56ab95eabd56ab55aa15028140a355faa79e22a954aa5aa71958daf9c75e76ab55aad5028140aa552a9542ad58b44222e840450c6c8aa59dd7ac156abd56a8542a15028d47cedbc627ef21847792aeb6ce8f26ab55aad5628140a8542cdd7ebf59aaf9054e2c2c58b1730607c184eef50a4513705ce8c6a5e95c75ead56abd50ab542a1502854b3bad5ae176cb55aad562b140a854251140c181f86a2182386890c2a43c6f496f1e141c2648ceeac1ab55aad56abae6955dbac56ab155d897415438cc17518d6354fe67f42301451e04471a28e1f2edf73333a3e91e4e2754f6ae1fe01b2a4838da9600b2d6801eb742acd97182f7d3f82efde9b2f1e01ca52abb5ca733e61821d2001093a9fa863049c78c28f4592157320915ae8699ecc27915ae6f7b9894f9cafc76f9aad03c0ac4ab4045241059c9925a82cebe753143de1f71ebf2792ec5b1745edcc972c7522c9e53b9164c516cb6a954c7327cf071501fcec34552ceb66a73c29f7266b934954a43676c5ca93ced09979325f0ba9ea66e1dc4ab2446766403ba88f72a20067965098a1896cba369860a5dd0b9a8106996619c4089ecbc4df2ce4ceddff3550fae51423108a4022cf226079fe280879be770a985245003bd706bcc28e46d304ad6dc420e160a694de1b30e8c2a494524ae735e18290207c847c680ab012a4cafcfe2b556c5b8b2252aa05ebef2eef7493ec385092e0f7661984882846198fd6488a219820a70c2700831540689081123cac22a0c2500218643a355405f60a4028c21245c829220a2240000b299a28e080095624218a31b8ce0d3c9a8227322d7c088a50861fbcc00b47a8c10a76e0e004343940820a266886c0e814b15119130b321e4adc8c07a873ca9a87e644ec207bf60e42c40b32ce320811321a6a95eb63bc8494d266d6096b51339b9549d558273ce57ecb7c3d853371609636354fea77e1ec5e627a373be616af00d29f77e3441367c12c0459141640ea6247081b215c01a09403412e4f318d5a48aeb2e5f5ac4dcdd0caf498a1f193fa59689db0281f595ac6de2149c694abb13a24b4270b535130b90a21d7df56b5be45b9ed61bfd6d73ca9b547ae7805b9e29a5ced7b240774efbd4bf79ef8f2c3fe8bf79d155dbe8fc63c6548ed29b24f7a33fce2639647ae5f5f53c5a26a2c0c32a55e21c7fab56a21d7cebba2be45d558ed10ccb8fa207708cad83a9171c6798723195fce4392ed9064c5f93772cacdc6b91539f0923b20ca4060ce39ce3be432ee38ef502493e8cb286a9a40a20fea70cb18e49a3e961cdeb48ff43cfb1d7699864d749f85d5b3253e562b8a5606e5631d73eddefb1c586fd2f20815a009122752c526d127f52b09498ec1c78a26cb044adaa86f5136fb9bb3ccdacc5a8bba59092a45a37a82275754aeb5b272fd9bd91256b73cc56472531b27571bf697bc09078246d7590461ce39bbe795b25f8aa60bdecb893c68f7d7d98446d9e1630734d061620a3da914a878818a1e9881052608428f12326002cb4bef950193cafea015484084ec24a821d5e07505589a98c0217a64036419640855c68e6d28c48f7e3be204509e7497c3c536dc00929d0dfe74be821c0124936419e48856c69f3d915a3e72048624fa1e155f7e50d1057c4f7c21d11fc17ff15ee41f204bff329a27f677947694a8f8838bc87fff0059fac41711d13412bd09472dc992c89b6e48aabfc33cb155fce101b2d422bee0304fec7fc4972552fdcfefb09e4872f11e7c4f24b5809ee4d2fdc8773ff25d02c51f1a6882fb26c097a50878ff7997ef435f3fe4fd477ce9926792ac16eeb193dc4b5ea7d329084f91e96cbf9df0140985113d7203c996cb4d936db6de29a6c99a3526a0c9f6a71336895c536bad0f90259008039a2c4f91414e30836c7f4ae12930b27d2e2455dc85a7cf773b3e1f92fac10f3d1e094fa0e75e762d2091e4c23de83971a6b8ef12e7028a419668652066a61f127fd4ff842497ee3fdf897346872e75dfa5ee3f3700bf3f0f7ee87500813e24eaf8e1f27950e875801e14492e4b9b8717f0d17e28dc406867cd54e9933dd5647bea18394ffae4a3fdde1379d1772d30309f073d0cf8a1afc149fda2df5112094544be5f4424be84c4b69927f6c17f0189f63fbfa33412ee286130fc8435a4567d1e7c970f08be082876cc3cb1ff224b6028fb344f2cfd481b548a579c2dbcc37a070429437f0f26575872fd6f1975378c702113495324cd1ff35fa6e88277902149be4792effd8e52cb657bfcf2317e4f1ce749c53f4fea0d32ff309236faeffffc8e0b250e25c985bb21c9e58a385673ce550cb2378db75f7e97b6ecfa98fd76052833a905c6bfff933b93eaf655c453012d3030db73e2cdd9c3688fc51ae649f6e116561ca4eab2bdf638db44397794769432f008e047daa83f4f6eab7d5281a5a778c0e61ea48ffde00c2cb9979f8bd234338dd24a334e062d26008705043122e6a31f5b6419e4043cf228cb20430c31a2229403da94ca6fddf8e821a2b247a3a9227a7d0d1c09a021cf396da5979bf3e9132e2988561030714eaf6d329a6a20914d7d63634e3e82f3bdb19667884392123761b50a1f772a8f7b0128a5d4de9f9f3d7d4c373a6305c9a3be701119a7aac871dce32aba749da5147374deecd61dbab55c53dd99616e0bf604e34259c2e18ffab8dee4fa6d93ebac4152a85c832c01cb75d65a670d49b3d65a6db574d2af3199529bab88e2237dc971dd635107fe0e7fe7bd8eee3959bad9b4a70b862a7b1243db8557809d3de3c76100fa7405368922582384604f04f091c328f6d4c2c6788ab433d6899b565920f6645396c6d6a832b536997e666b9b565fc403d034664bf2beff3ec913738cb97167ed66ad66472e94f86a4f7f8e35acdba73ffbdd49188b39c6d1471765d8427df4174f00ebfb6889f0010fb69f3879fbf9d9e31f80fd38645946925f3801b4df2fea01d8fd7cfca44ecc3166f7de294d7cbc3f8e3550e40af7d9632eec2c0790b3f9dbfc6d9bbf4db146489a39c651bbe28b2780f6eb9b645407ff153daf02d47cc995d07ba12cbf45ae8c7c7fcfc81591efcff7fb4aae80df37cfb733c8f3b316439e7ffd26cfd794c8f3b79110f422e1c8e34f28f2180c3f8fbf107c1c0abfc7d543d08742afdaec6a1be632ce0be98742ef3b7b49f6263985179266e0852db437b518bc90647b93df78e108bf692a1182de0b59706f9a55c83314e5ee4d1407a1bf39441f144a69a36566673551d246bf17ce97b4d1df715209b96160ea2fb8102612a6498590c91c690d0a2c12422484488899899a2faaa2d566376bcdecf86aa25ed566b635b3e3ab891209211242b666767c452b6dcdec888470776fcd88847077972d21dabd092c82015bbe7cf9f245309dbd06a22044417887605c904a5cf4907a5af490f48c7a58f4887a423d2e5ec0e811f5847a403d233d223d9f1e18dff3e9017bbe1eafa7ebf9b0a7ebe17a70cfd6138a3d5b8fd6737bc4183db727eb8961d293f598c8e891119ab169a122da27ad36bbda86b9cefbc08fc808282462312269417a717acd9ca8ca4509a905c988058c0f4b666aeb3562210a8146429134335123221ff01363b46894ddf9bc8e8b6142d2a81dce7f3391316a1195fd7d43c960915f597b85b266d25459e40186b29436fca94aae9c424030a594524a69fba43553ce475a6bbd4fa59417574ab36ca9cdf56bf02c9b74c8cd87058113b70b26adb6bbbea9e2c8774e17d06ab34c435300320d4d3132fdf9daec9ce82be53693595a2b95d24e2933bf73ce394d13ccf266736a72ce29a846a9cfc95d5ab10f50cbed03bcb97d8019f6015aec03acd807887d8033770b4c201fa0e77601d84fb3e9a371d807287383d286fc2b25a574524ae9060329df44292741a0111c93524a29dd66b0688896524a130e4a7f9a50b2140d017ead527e5c50a1e0eec14eec939f4e4c9029ddf2d141d05d131bf03a6b666b3667d84cb02d5b49ea9cd66676567a334b5115353345551445555445f5c90343f8807239d62b8e20bb1aa594da97b58e806a2c18d10f4724e0e76a73f60d9a78c1121205201f4037b3b4f6a9e5499e4eb289902a7e126f209b90496496d6d927959fc0b6197d7e9fa64a5f70746af909e76e55a185fa54212dd4dadd4a4cf9817c379a6d5ec705992c05a0ee6e4deb0d735dc7e14d139d422216f4daac4e9ab350023bd82366cec205e07084e76c1e612f01508e40b9189036fc2f0003b09f522aea367004d8af2eab0168ead7a88aa091100b911109d7dd36cc31818ca4b5073313608b2ff7884828635249c642398985243834173d80402322252e66d5e8bd999d208d7d36affb3a1b5cbcc8ba9b88533822013f280d2304d67b417034a2d199e8b4e5cfc32f389c69286f4780a11cf3eb739993bcb42cb7bb21013627eb756ddbc607eb9d2b2392ab4d1e1ee38df6c0d2a47d52504691b193ed7d135bb535f18225504084776f07829ca87a6d62bfb6dc2a3380d60360ae6f629165cacd4292a5becc37a4000f2fd80d5d7c6c49c0bb1d1250c3027c9c1c0d1d0e2a8620f0c0cdf3452053a6084457c7eb2d7df36aa671b265cbfed0e621f7dba01ace2bd838f9cdb170a09c84249f2c5f03f900d26e662b17e2e8f2689e381237b3956a1d0b458e241fd9ddaf0b82adea97aa5f34b2a9553454532504deac9e620b99016cd7e40af650de4e007e9c942b21ac6da8eb2c4e589a587b6f676fba79de1005322880d9a1c55364902386647f972888e0e3541a99013892036e2fbb086c3f320598c3c562d8599570284b5e00b1c9b3eb43f60194b52634154df424becec088988ca2889b3c651446e0e4f9568a8993e76733994a2aeac0bd7f7f27bebcecd8400b0f35bc5eb2e5f27d27befca0ff02fef7547401851ef43b4a94e400f76e4f24511d242ab6c0d8572ea1cc93f979dd7bdf3d28be7c0f123ff1e55f5e64e83b91444def26b09f861ef43ac0ff5e07d077df893a420f7a5932a144c0fb2e245130245111148efc178a7c5ac5e234125f7a06a59a398946443ea0d3676a148b9911c9b7aa410f7e0ffa7e8ac4977eb9801f125fba258a2fe24bafba05aec056a8bf37f54ee6480ee0de9f64451d3891d44fd2017f3fbe5a0d4e7a41c1099e31cc9c4e25ee45fe87cbe7b1cfe017115f1c8b3e83f21346cd887e9e3e9f919788487c113df71f91135f44a2ef882fb1045d12f19d16a1655957f802459235f94ee86529f4f991df511279d33c8ddeffe5870bfed0bffc7061f138060125910bf723f165f43f5c42cf892f23d15721517c71166209ba24f215e86509f42657814492fd1da509b3a3645df38405df87fe870be807c901dc7fefc2fd87fa90f83251e20489729ecc3759964818263ed20fb2844c6e99af8b970303d8df52c8fd55b2b490be41bfbfbb5f9402b3dce2ed8194c37dffdb2da459427983c6f02abe2806a73e797577f769a71c6b56529f8e587cb99664eaeef3fdfb958101b74f5a6d76b50d739df7ad32cdf82332020a89588c485a904a5cbc8081c33b9d5a8ae229decbaff1f239eeb1ca492a95a201fc1601ea6ce1f48dfaf2f1b469e134cba79a309c546330e45243623cd246fd2dc43bd206771283bcf1a93894159f2a63652c00c8d8c22ccf8cd537ea833619eb0bb9142783633ef20c71168f0a93eb6746c8f5454b80a60bd354c6af8f47ee84fbfe447e87367bd8b9385088774aa033355355743a4c9036c4ae25f201f69b2eecc26e1577c753b858d7ea70a64ad7ed805d0bec6ef0dcfd49c8c970281f412a8aa9ef8bf1df37e393f11f66b158accfe43f0c837de27fb8a6a6a6e683f11fbeb9f9c2ff70ccf77d31dfff876968be17ff6d30180cf691fec3309f8bff36168bc5fa4afedb7474be16ff6d353535351f8bffb69b9b8fe4bf2de6fbbe6ff4df4643f389fed3603018ec0bfdb7c17cdfa7b1589fc6fa34d6c7fda7e9e87c23ff69353535359fc87fda4ddfa8375fffa7c57cdfa7c57cdfdfa7d17c97c562b174becf8064b93afdfd063ce5f3dffb2057c09aafe6fb1657b935f3a4de7cf7e6036988f9be86abdc9805788af6dfe32057e87f3f7a8af7341fec837db0efd27cf6bf0cf6e1ff2ecce7fffd49a7802f46b6cda0323e13168c1583c582e5faa3e8c1c03537b80606aec13537b93e8db07b1c8369700c0c1c8363304dae3fe30547826118180906c330b9be0c17b884a5c322b1583ab9be498b8dc55673b3d5b0d86ab6ade626d78f41a28db6988de6db62586c315b0c4dae2f8a6e08b6c17c220c06db6072fd1094711a4bd319812c9d5cff47ac8856a3dd705a4d8d56a3dde4fa305a065a8c4633d262b4984fa3b93066f54ede69b27458acc9fac4abf379017e1fcfadb9b935b7a666de1bcd05bd313437e6de981b93ab48e3197b254232d885c960198c66b00b93eb634c72cff683f114edeb7f315365ec84e0b83a00ccee061a57c9582c275840b267a24f646fc67b4f5b2059321d9337d11764ef690fb912e3bda72757c9523486a2686a88a78864902c19102057c4e44af8de4f21ae6263b1a9139b5578df04c992c94c81235760d8b88a75ad5c2c570b88a7bcc08164b13c3c3a50c91517effd9471156bd3c386c6c6fb89f29492f77e9e40b2581c9c8982ecfde42157483bae6253319b9aa7d48ca9c2535a6841b2582016c816607285440a57a9b1184e4c484c87e529a3f7dea1902c56c6ca7814d97bbf912b2cde7baf7195ea72b9cae536de3b8da788de7b878164a93c7da37aef337225f4de3b8cab541b1e362e63d3237bdf23592a0ece1986c815d0cb556a2a054bedc4b237f204c952810081824bae883ce12a3416bb894911c3c9deb78da7dcf7be772059aa4cdfa855a607d9fb0622573eef7da75c85ba5c3de3aaf1401e25b2f78d8464a13c40b80ab59927f5ef10988ce385ec7d06240bc579ef37e0835cc130f0e57d8babd014902364ef73902c1448dfa81fa321e67d0d5799b10578caf6dee32057ec7b9e8946f6dee5bd741597c733b30cc942654ce48abff7d755a6f7deb764993c7da3bef7deb7e814e0adf28c8c95e9c8104d239689a893eb7b8c4fcc5219902e4b7559cacb80e4fa24a1f7b14cc68b75b12e96c9e4fa2318dd0b178fe7f25c9d8b27d767e1822bb136389db5f1ac8d676d70727d1109b7b0290ba4b3a9cea63c9b0a916ca39817eb625dac3e88852672f1782ecfd5b9ea8f84eeac3638b3da78365eb5c1c9f54540d9484d5520b3a63cb1a63e22f6c6aa4c2c16033f359b321beaa23c1c6ae4a22eca93eb7f3420cda6cc86dae0d8d8e07cb8763cb9f2f898a24046204d01f1ecec668cca5011bc55a432b93e0e3d630edce99cf3b1d64e480d3e5d53e5c2789a0557d1374623d0c5d309f1b1fe17621ed854c1b12a9a057f41dea85f1f36ba30f0c2720d83b451711536b80f90bee9537daa9cd9788aa96b652b0f3d674f784ad7ea705c85c6d7ef8474af6e0b6b9e36b3d52c60dfa88f77e6497d106cdd0b82a95cdfa3f1b89b3293a3fdae35553068bb28e46adfd4b972e52cc7718fb9b0a654ef78bcdbd9992a5d6b9ed4bf171cbda002686a82c6679f7d17dbbca7dcaa373f6b61e3f8587f0c6be4fa198df0866f32fa58bf7bcdaed57fe78b1cbc33533b9e62bf727827d79fa9396772fd0ec73bce8a5dcbc7faa64e740eb0b0cc9e4d5cda68bf92b6cbd972293d9326de5160959afd88a3dd698b1ebe978065ee0fe997a4b70630ee0ae0f6d9eeb948a50df98d3345d398259536343380f2b1a4268ea56db761e69652ce9c213b79fe5f6d4472c3e749af15e9cfeba3cf604624b393fd071a442695e510b20ca2044ec6a21480ade3e3cd2df62b06a02bff40b3ff0f5406fc81b6989d321857b92f9a9dee6bbeaa8bf4ee3817300834c9e8cbd91df3831ef47bbfdbc73e007d6cebd6ad5bb7b60b9d00a8548cda2a62c910cd0c04000000d316000028100c8704224110c440aa87ba0314000d6990465e504697088349148438088218c68c510610620080014322344601dd467167cb5c85d21a2781ced8cf95f65fd2c21e2e85d6d9daff6ea9a6b8893f1be461e6447b00239d43d41ad5276368913c1df283a0e2d1ea271f04d24604e8f8e41d1d95dee59a2c69086f57ce47e71356546433acb8b1d88750eee738d15d0e019b94c765f33b8fb5b98082cc0d4ed7cfcc6652bdc49f064eaa3e8e7998ba7f9de1e492effbe0d6b490696772e8452d4d8fff2d4f6e02693e313f45741e6849b92c0e16d6f445929dc064d30b27cd548d9eb96b3f76edc481878c1574f866f286d39549d5a9ef7cd4929bb410664076017c329d644d7b2a0a1c6846b71de824c8398011bb29f8ec2dfb4cadb3f05edbddfc269f807dccc3ce147089ec47404094a2df05a3b28a8c99458156a9208de61f422da867106020e1c54eee19f8edc8391bbf9db96743beda68bf181c1744d8fe39c7acfcf6e598cd83fd1c333d3f1f7b8e38c7400f82d9ef342bec00ee1096f6fd7ae9caa313b96f5514fb0d6dbafcd0b0b3fea1fa10ec2777ea5f0d02404588e4ea9a673840b71725dd452b5ef176bbf84ef12af0f8c474c7fad498b51434c9bd89284f88c581a71f3a97d1f825461d59f2c2df4cbfe78f9bcd9b938e17502eb49fd7ad98b35970ec69390cff2f3f244cd026166299c6dbe05eb21a138170551ab681b1c64ad3de20c6801cd2a4fe2515fe54f99f05f002d767de12b7b69e5b528ce42409a630763fa7d102707bc7b555fb8a406801321e1e756dae937e98702d6af1eba8518765051a1432d3da2ce92e35058a0c7e6450c3789364759a2623cf6c747209a53698614d9ff5b7ec30d5c2ae53252d873afda617913fe78efa1eb6f388c918be321b10de0b737d76cc36701b587d5777d7f9630c89fba24ad75fafc94010c3eb5693a6ed681496014ab43af5117f3d0fe6661b3ff0f2a5d10b54ab9d552de1b70d3c4b94351650d7b37a11f06c92b30ab32af9fbc887f04919b1bd3bc3f31f383c2823f05df36a66705b26b69287a93384adba732d06b725ba3d75b7e81202e084e28dce4d4075dbed2579b2b67536639e72f7bcb98e1d4f6df29fbb4565629126c304c371dc7ad071573d706a37fc223ed57d132010a18d1f79712b0d19d2b6f199a55b34947ed9b1f5abb360254357d682efad3dfbcc9799fe60defe6d11ffc5ace8cd1735fadb1bbc9e2f0df5ef66ee274de877ee7d67be34f65f6a5cda7e654a70e3846fa0ecf9a2cb7b085e983dcf5777fbd99b919daf01fd2f66eea79bf077be7ccd97c679000c9c363a49ce17b5fa41b3f95b23fa4591dece9736fa5f188a9caf1bf5df7ffeafcdf0770e7d63be34f65fe81fda3eca967063099de176b1c3015f5696f345517e25990fe74b03febf49f8bd79fed269f7ed0f258657e612f365a27ee428439fd01aacf34551fe6a6a1fe74b03fcbf49fc7df3fca5417f385fda7e1e60b58d1fa575b863847d7173c902e70b2444a7f5aa164f8a6d11b92345f497e0cd4570fae51fa0319f2fbd534047ae566a660b463c5e2b032eb680cff9321820153da4e300bff8e66bf3fd899d77c79f0789df7cbe0cb9ed5cee29f77c5159f0c2cd1758afdbfd0c35300f38cf0b7dba91a314813125d0a53ce2ec54c093a1ee7cdddf4dbf04c672400858b8b3beb8ab2e1a38e60aa5d665f305e13141ca0c79b652736fb25d7ab4d10e35596af98eb4c9d36f732213e31e9889303e70a3d543acb9947e201c6480d261ffe6d48a2fb85dfa6a238f56641692d44162b80158ec178147d94730903e6cea4bd34d349c663e36fe83309af752fb1e02541ea6dab6c63ec4cb464b7ab690b4d124c5d6c0565ee0eb0d58ddf763ada0efc985f74c5bc570c66bde7ce6bcf8de4260de96c0189f55a2f5d71bd79f5e89e6956d37f8939000093b1bad26b78b904f4cefa1d0d869a74ba8c8222484fa1f1163fba95cf02f263f38a89cdf78f4e62c1bc2747af2395401eddc98508554e23a0d08e38ff1e2edea8abc431d3db5ab9b81121f81397a0023ee7cf8f84235dd2c45c28c2a3f484474b4da61b153d84b0a3e52d602bf06c8e608fe157eea881e9698a266d23620d28927fb76db80a20d1d4f83f484d498a07a3ad2d9d7a17a353a25d35c76cd73206f3265131e735fee57d0c263dccf44a8427ae870064630ea8208fd0ffa4aceffd7f8a989f09fac2b00971ddb3b6ab5bc91e4fd9ca15256ba27aad30136f9edf34473db5d58ac4e3d5145259c408550ccdb952fc55fc99b0f77064468816678f486f97b4adeb74c2e5b5873d6d073cf2052796812c108f204cd56087914c139b5ef1d01e1e3b1c2f4f1a7fb5161d58aed41fd088b1202c8e12f6c81bb03da54e08210388d296dc905cbbd65a9dc81806d668861fe44cccb59b88a0ba5d09e895ce9c1bff8f1ccd23ae7c487212e4a50f9cf161672b6cb42e8a01eff3eee7535512cb68d3f1f3a38974622399faf22cebc05578e613c0860201997566914746ec3e7a050492e6add897dfcac3d0a066e7b95e1876545f234ff47c613af8cc8eb7c61ce41ad8ce0337768eeed8deccacf2bd0128def56eb511fa1fb8600a587b0f083e7d798ae54679feb5ce2e89808f79939f45d581529bdabe7071f731d893cce5a3678f2bceb8d2d7e98e225b28faf740716894ccf50c51be897d00a8ccc8bb28779b47e8d3921efb344c1168c0f9f4a1f15f76a01055999e50a8403f45f80e31368e5142da18f9767ca4c0488c604a21d412f79ea613ef455aeac30198b0100b3b5b207c4c912de1cf3644df1d1a0d18641534acaea85abb361d7bb66110a1ef19e8f721d0b0ee30780c502d656718852472615f5b1100625f385b64e20c0513ce8dc1b9bf8f7491feb4f18d11235ef24b3a2c837415e10cb415c46a5019c8599ed5333317ec0deb10b41266c057f557e439982f9a32f0400e599e14103bfadfd49830e5572b4f39f582422d306b80f1cb37b96e04f8404200885aa3f2d82a87cf80142e9a1e00788e75857456ed70cd0b0d5f898eb3248e89e37547050b0dc00b7e8435801c5a0091a85a69035fe97c4995568233846c4f9ed0fd4f4afef26091b1da917342a8e083c135602ee3e3fea7c9bcc9ac1720d014163c9a2d324515b91295a91d48fee651b7bc31a881140b8a25d0986259973813571b23413257843f36f309622cf0e09129b1e3a02d598981735bae2f3945c35f910912e79e6d120cba976777bc819e350bc0fc1b43fdd799c18ac157afdac0c5f9e2a92ac4eb6b18669668d3927774e83ab26dfba7f8cebaab18b2cbac6206391336c27bc44c13a071fcc8532f4d35899e00eb0b944f0e31c1681f421459350ead2c335f2b512b03116fd10b0ed46623df7ad4155be84a2d2087b54fade9f60be1c55ce533c44e40be3aab061e58d3daae77e831f96c570250f82ee3bda229e9ba0235f3e3a90680c030930a5df9f8e8c4ff5c5b7b6ef0b9f9e98c48eae072c7bca572bc9e35b1a8643fc23b59228fdcd690110584b227a4ae1853e377757a916ca1a8e5087c803d9e9fe759b03067d665e516d0a28b904c67ae427820d07f8ac07dc2c8d4bd02099288275a746df699748d24df1b94204b171427b7ed2d088c450dc74a194696a482fe524cc92809d39944de41870310b228de9aa4d844089287d161251f92949a342aa9ebe0a059fccf3c6412318ed6332ba441aadb5360050917ee629fa60f6e5ae03539bf77dcdf18cbb711c780b6791c1138262c60f2badf32ccb66810ca92a5bd493027b966bad560990ef9f4ccad9e7e1e728780be4905bc5ca9192e181a38454066c881894fdb306d81b82031faa6bfca20497c15a000b2ad2e0d00a99dade0ea0f42ad02d9e343f09c32027e97ce75382464d38492dd4f94018e1d80d68cad7ad17aa8947b0b01d0ce68c7a1487b7c95bb9757e3f4dc1f8b8cc07c2997ff103b67868b437a8bff0ec37df41462b5cb303752dcce32c52261fe7bb50dcfdd8282c6051fa246c0753b3f28e7578daf27d7eff81014eb466fb44ce776cb3646eb739cbf8830aaefb4f5b897e31d7be492c0597ea935f3413734bbe77a3c5ea9aa16b405148af00e9b98a9e764c45ac402dc822c0df42bb65aa489c05859b67f6c4e2160dfa79057efc4f559efeaaba361edb917213a051083262d8f804084ad2e5cb5c27b66460d33e42789729aac6e334e4eeff330b07b47d7c960a50bca143a40f902cb27abde2d1a20f6a1e1db53e58921a1ba6480ab7e1e6f852dfe8e9e9f8e65fa6b0b4a789a43a83dcb370884f1158cd059299f025e607024472bd919043fd6b24fa19e64211afb4424d1ab3cdef8d7f81ca8c8dbc13b3443488828e729600186f041dfced3029142e884101e21f5b2247e7d311800417ebb9d66e01416498071564e97fea0152b4b2700ce9d72b3c7564e09d943077b1e6cd068ff5703c2d7f0272fac62a475d375a1322916a2e4afd0c241bfd84ecbeb612b71d96f4746a345ae6ca4313182f009f9f498ffee2886c0108c55b8ae21c7c821c7586a993d5ff7b0b3b85d4861ad8039d27ae13dfaab0d0e2731e5d0c5553251ffc60537b5f48dc9be045fd68aa8ce82debbf1246e7f43092e6a57c929e7e92077f98e390a3ca2d8e463d8967404730cab3ff9e3e138c85a0b4965465066134f1cfae264511a368c8d1c7aa404bb3e75a5d5432a2c9620941af349402a48e3bf954fe33166c902c831d25204ae944b10ad081921b6654af4e46f66f015190676ee85c952dbcacea8df90108f94ee102ba82beb8b9ba311cc0a5d3c8ea08fe992fd74ebbe4c00188228a26158222dd9cc9bd9a16f418167af56b959e3b5b7b6744c239e5f2039de5733cef0bc90254d2069f0da7af3f1d78587ab21f84531c4f077a61c36945dbe367a6b8d5512e1fd8b70a5a0cce976f85c8e8bcea0bc3b4f3c610e64e3b028d6df31aa54e8907ed30f37b6191b59bfe41df39d488eb442a4baf8669a891dc97a65bda7cb5ae8f96c72e96438509646398b5444f032635d1a342df98e6df55a275c403144d8c7f923b79dca61896672781348732a6859f983ed60f69b6ec1536f14573511863e1190f5ae5764fc208460580c8939408941618d0fb786e2b0e843d9561bb2c413df43d0d11a5a7b08e6a89cd1209abce66e0c64960b07e60048e43675873215e84a0056ee80626756464b7e31009f788ced61eaf8e96f2327be31e3a2e0269ed6c8958850b13944f21dcb834c5bf9939f600424df5df38834d9829f3fe489f5b533a4013aa71ca1a83d85d5b12a8fb8cd939ed8c562cd208216f15d14c3ffa3375c0324e68412ebc2b98f32d3874e25123ca316eec789c4b1fcdd672313ebc4fcc3e04ce349d75e8cbbaec0a7c488718299068b3759d8808becd0174994b2e32d5c3085c9ad37f1a06194615f841828614819552f3fcab77fa5741fcdd0193c290968c12294e71eddbd36316d9806bbc19a016e8c8f51f59046413f7928167915ecd09fdcf68fef45595e34211b6c3fd46a50883d197e4e90285fbf8dc09c7e64e60dc953be1049090142b20692cc9b782a95231ef3b52a363a49456d80c9ab79ab0f95965f1d284b3d821946120e9f58789bea3d767226ede0d9c3981079f6bfb14ea8d29b3ab9cfbb05437b13e0cfb9f0a13ce132aa1e238e5bf2f24b9e634a2041024f755825181c68fca13fed7897c7867a2468c840fce5f72b8592b9ed6903fcb12542a8f272b73268c8d2e0c57c384b56c090ca580cee14c349a69dede83514f02ecb8559f266208522203dc9d3089a40d3d0cf76f67264a5e209317b72c070f8ade764860c97240537037fb2336d600893148297bf6340b124f04fa8fb2147429726b86e420e546e91422445856217ab6533d8fce309fe1a667dc1d13554aaa3aa1eac42a27aa165376159f6eabca32b738eb96755bf66d196f61bb3562989b8df36cd9416f81d595e5f6cc5bb06e8f58cc6de3e6b5d87425491a336ecf7e1b6631b799936a19352bd069c4b8456232378d63694951b1aa346559e6a671045a56ea2137e5be0482264a707a021d779f36ee258af918de1f92386a5c19e80228b7caed66238399cc06c733198dc764b6da5ddb9e838e9e9b610676a3e30cac866322943bf1b6668351e696c64399ad7dc3d4726f687094d9dae028c07306ab47991b1b8e32383720f628b3b5d9993a13076428f77e545562cf36285a7df36eda934f7e6afcac51ae3ad5756458275eea42513ffe0f896a660ad9350f17c404959194ee30d6fea3c26f101225a994eb3f79b47b9a1c29a3ca731fafb40fcbe377bdbda86372c4e7731ff9b0fb3cde47f30521853a0f95f03309c4112d444e00a9217d2d5c1d384a77e2f5b18fa18f9c7de8df8abe8e130b540c904232b102733a30e4a44745a623b60f99cf60f9cc1adea3e88a0e236f18acd920493615a3f05ca4e3e7134b7c24e1a3fa549e800ea4f3c0f6281c3796174c604a2f7d4ed12a3720129c00c4826012af875b3f122f1de1ae163e95e3d651a6ac7fb41c4ea3aad451522110f16d1daa7bc65eab12c2edb0da372dad500ea2856240e130eedabb18526c2b229bbb55f0b997df821bc971770cbbd23f98ae1333cffa4e8bcbc65406cd21818c00acb295ae166201c00325e9270e9323bcc60a71c7283ddf11b5bfb12492c909463e281457054a7460ac98067160ef7f12a22f95d4aab57be505d24234edc8051ff1eccbfd6730e585c0cede69f3cb208d0339993a1423b2a969ee1674ea6c48a4f17107e6a9399612bfdfab09aa3dbac673a0ad7914f76b49f90cd9a05df52dc5ce5d6a78f816d0f9ed209b86dd8d3d4cb495cb540ab4b157f1010ca69983dc87e6686828c7cf3dcabc8f79b77be2ec8f397b866ccc8998f0715fa3fdda7b6a60425061308c4059b7d5dbb97fc14fc64d799216106a81c373dd2cce686fdfbbc843efbd4056b20b12a0b9d30225397d49550535f4cd39e9d9ac000c81b39f14202c6e1a3cfaaadefb8213f4f76866fb503f32e33eb62c87028d935df225ed3615dceecc42ab9a5323c81aa729a1b646d0934113d98a2044ba3c913d30c13a1079be30083cad4434ad39d734ec10db377130e0ac24a496861e98330642ceff43381178d560b0ed897a41067431b3d2de91005b617f5a85ab36014f0f7f71aedec7238bdd553052ea2c0444a94e578c33c40abb07e4469446b6423e463f4fb93f735a2b8f3a55ab2fd33ea1a26328827a7449d5508b124660abd237a314a0d0e1a2c29fa1443a8b10af0e256c4631b2f5b4a6fcf4afef461ee48de912f4393699a3c8f71971d315f3f0d00c1abdfd410ea78ca3432cd0c2b62ef96bc0f7979a851dd52c3067caac484b7d049113ae30f18e701e0c469e9ae5b231b54cebdcb0637da1b08db8aa51ec06c79abadcefd650a60f29e2331d66b54f9c20322d23bf20fdceb7fe3e03a4ba6adaa1fb7a0280a4157d35a9b856893e341486feaa043dabb1cb5834f360e84c7cf68e288fe4ceaee57ce1b364eadfc7837ae1545c727528e0b8f4adaf262f9ef5b8ff97bd8430f8ca3f2161ca66ee141c3005fade53b12372a03bc60cbce564078dd483751eda797b123fb82df9f7cab984d1b8c9b1c6d87c6b4b4f39f4047d919570c16d88cf61e8595ee0587095b60b3727a5ec15e421673a7fc889325dcb7c87216739d129a781333ee31d979773af7515e68798f2a0964c3648d7cc3436b57351b698a2a0f2db1ca78b4da022af1634b5c719681a6f5cc0d139541add97a1545307685f2b33dc2799d1831d7d7e487b49c4cee8410c5bde2d1d302e530507a4b936da079512cea0b725234c9b7c841a742c6572db521e5682a93802c82cf899ce20f2dd22cb07432b07aed25a12950c878dd8a01e0ac80ea10d26ad0deb06e5d324ad1db8d1b6cb25c9f2ef9e4f8e05a4b5743535c314a4ced5c848fe2dfd01bb4c3e05ca288dc1b5fd7f1bfd49e13b87eda97b203f7369e28f2073869dbf627320723ad6563663c546bb0e5a15213d6fe902e6666319a35036accee71b60eadb9a70d6f3b603dbac46aaf189d48b2f4328bd4340aede05b3cb38a2b4a4d064fb556540470b5df00bdf6863e5517b4ed42f651be4754a7e9dc596a9c415cf69debab44338dfb79a2c238902be29674dc4977910cbcb9ccd0a6c90144c63352e8203fb65fe9e2fd969739600e204299e8eb97adf56212539b99dac2d126febe07395da890968aed156e2d90d9805bfb62427c1550455fdf2615a3b8b3f7f057a8f0e70322f248b87ebacbac0b8b84355de2054e7838857fc5e81c881d44bf41f64fa0bb2b6c14cad3f07143362d09841f135b7ebd994bf6ab8ce0681ab74deb35b73d25418d1d27050e27b667c7cdea249c84183439365048cd92bdc78189636d9e528d76ed037ad1f21775dac362fc82148d6341808513802aeeaa33e34be216eb1ae05a28b850df795c349e1cb0f20174feed1bdf8444b257866b4ecd55e8996beeefb185dd127e11d358cc6e1bdbce4442ecc3bd46ba8261c346a7c1c489327f9cc3f87ca8c728964f2588d9815fb437d808861ab4f653b5ee3a57a89f1d5b5337b99f5ba6434fdf55224787f35c336fefd45ce7d699619dccdfd475a667be4895f0e3edbc7d804f2313874b2d512f4de04d22e7d1248fcf1ac4aa185cdc0bea9cdf953422402327fd338f1641f5b6a92f435fede93c39059ecb014998294f45ea3399109ed8e6ae0713fad4701643d743a551870b1b59d47f4ce39a9e9df3fcda9aacce9cd58e2e42cd525b1036d17711ad8183b745445b96e03c1088136ab58844b1c147c424fa5c371b5f00dc7e264ff288fe01368a61b8221e048d929c753e34609ed8f2828e06f4bb75d7772a85c66c06b38a60658ac42109464cc010ec732adafcfc8b1aa62837c6ccb81ef44f301182b5fb16b05db2d89295e3173812a6353e04076808fbcd2d137fc6f55b65a862acfaa38d0355253cd53ed6f49111985f98869a1609d9c0a5b7db848c931e2b20e1929d495d244bdffd4bbbd603f8592cb07c50788153e293ee054a8669f6d6bb71b9aaa643058a51900e25682300309b69ef3565066f2ebfa0f065ed1e32bdb03d9a38d9110b112e6f53ebd7821f478aae95559e84b3dee8450cb79a4afa67706779e67ed1fc55ef3d190c1cd6b4b3824011ad02f10a184a5022712ca30c1c45d9b0c8d3f95b64d0a8b097e6f254b0e36ba7e16f3e19703fd20b0fcc7c4f8a9195fe1d94545d07cecc163df578bc622a8f88e1b2c8a3e1d102f950a4f5728b7bc22b1516b6f4b764dcaee6dd73931b57d6cd1dc101ca62a04c5d809fb735dad4869214dee1177fdd227e0c044d740a3f10fd75b5f44ab0dd0d8ed281738da288d2f3be0ad82b3d68d8fe01075445ca6b45f4661b47e8c5cc1aa8e59f51ca75785d3fdcad05a7567dc11da02148319aa6f6bf1a2289ddad87ba0f41f7a2181fe309ed9cd0e59a550a42f74009391c5f697f8ac52649bf6d3e4758eafadaa6e88946938ae8add3f22cc881ff51d2fb0c885e56d71822ca2070cf1cd6da2a4b199776ef5a3419360c699e0511d1b22c37b3d88d8c9d5a5e88e6b6f6853f4b3c31b4ad9f493b15c591fb51b593978a18a96080cb923ae17f6818aa77b65ac76b20fbbd36001ee60aa31958f7112455eb877cb21580151c265f8b74924164093ecbafc7ee5b90eb392ebd9c6561fe8bb7bb69f177b4b75e3fd186c713c250e64640ddd0cd6d54ded5a10c157be0082749449bfeb7092cd4bf17c1af4f2b04ce18ae83a6475c827e0c7f3ef3841b20eb869377fbceea06f59c99dcc69a1ed1302b616412d7d07628b1d9f884686ba915c8252c0c7f0daf15edc9637fc67e612bbe21356efe222cee9172dbad77622be5e06b74c3e089c3b230764a618757dff33e502a2393ada347d3fab0636a23e94540dcacf4a48aba194ac23a94d3d1e126d6945d989c97f1271af778ce12a593fe234ea1c2c5cef19283427dd82a7df52a46b6655129a4b188b1df4e4ff9f2c66559a0d675f452562625ad74afa8b52f679f3d3a9b221380bb60983562844b7361c7887f74ae54111289261e08eeb98be01beda5e5dee54f028024a3340d0a76b3dde3c6aaa0883ebaa76a35f008422a1cd58da66e7f9b5ddc7f783612ae75a014894ac88f7047fda9fc1242c46cd05882deb8e9708e9cbb81066dd8cdaa720043a2017d39884bb4331ee5aa0ec6308c83c0bd458024dd6ae0a8f7d8bff0ba31a51de1f48c310d8ea730b2444ae70c675f61c52764d01801a2bc090220539c24412067f3cab13506deb04d4c4178b4075eae1041dc076c7445cc5ffe34f0944d51b019d47097c97663842121b0f0819099042ce537fdcd6829e9115e21d8da9b3fef0d3c852c0a6d8c2b6c8f85104bbb48aaee783088e55a9a0391398fca9945a547c33cf84a49a1803c1cead9c28da3a6c3a9fa8bf2b33b0a3aa4630028c36be11458992c3ca31ca451c240a30c52f5145242d3680892a1dd6840b7cea2fa98104d7a295ed142dd32e629aae25f72cb56d660ebc3d016a47abf0b85955ee2ed79c27d0673fb1134f60632aae3ab3ce5fba84c7b117e5660d4194958b9d13159d0dfc568c02f9c9766472f0c7ca78ba1df9e08247d7a986bcd6d44b23b23502ff99e300bbbbb273f8b4265a8a02dd21b00c3fad6c752cba22d14fdba5033324fe059a6285afe2685becdddd14371c7d557d3239c721c553eb10452393d13e11cd5c526a3b28a9678d719893136828f85f8b2832ab6d2d4c72d7422f79a3a7b651974042d9d8293ba26caaa67f2a18713f83c27ae8a066b01b951a6ab87a742b749f8af747686c7b690838ea9ea5b17bbd37ffe14aa2e956af68299ebdb644318759f792fca5c498d2d05a3b4cbf3c0636b02736dcd308be202005a6c0d4c0f5b1409a632a3e03e84992472d7f92accff8c9e16410541710733ea83f1a53c4ebfdc2d4f50dc19171338e831049805ae3db55f896e489340b34ced23d0f7909fbf5e9de24599e90a9830327d6315167053dc28bab1e659222ead3c980b07c08bbb1eac97837b6c6bb1683712680af6a951c6ce494c320bd5faec088c956b07a50578bb1ec2ee3d1285e6300d28822a3ab128ff0586fb6530387b430b4e799c75480d2acc7f472ae7a2eecdf104fd140a99fcdfc9fbc61529f09048ba8311168c4e5e82d46fbbd95355624390e8faad01b92652a5b04cdff011e93154f0b6ce7cd5b060988a858d6dd69a2e0cf84a6516963d116d5d1fb06075472311ee9eda3a722ee283dbebbb24e4038b496b4717c8e1b2970b016ce82903970a1c8fb4872f56f944887d54ce977975903508918c85eb744d42d900a514d508aecf70a37c6d0f9dbad92148c7d08c9d751174c7889e25a879997ca192491a409a16fc6fedab56d997e865ac083ed95d9bc8839632c4820d7563b69c23bce6f721d44969a29ff2342f3ddf28ad73a43a927af08890064c53b41411088ce981062f57da21d858bb55ee300ad80cadcc247e2f39b20e402f20257447c9ce605e4e0f20dc664cc9628fe2fca35acf49537eac4747ccb5053a97e7fffc5726cba02835e23e7d6c73ccf9ddeae501cdb17fcacf0149cbcdd7dfffbcd0d5b111feea6c9bb587cb4dfa650152333bff5ca6e285594c1e12c8da372c41c863520ce0cbc80dcfa06ada6455c732a07a49e1a19a76be29429e16a9b8d83ae0f73b8a3fe890c962cbd2565ad98dad72c3fe0c7277b57eef73b86aebe2a462b213069dbab61effc04feaa6f0e02c0583a89205e7a2edc8c891aaaea3bfb12102b1491251670f885323c7745d370f82501791d316db40d55191b566de668de3cbda486ca64ca6d6b0630b6e566475c0ab93b7a8ab6173c7f7c224c633bca82fea25827601841e214a81cc7b051401d303562dd8b4a60fb22bf960e0bc4d31bf6d6b499af9b80e6bc0ae192ecbe60912840bf7129ddc08a222db574e7dd8332623c1502a5112111e9d8fdfbd82891db6cd012f22e3b8c64c47e4b7e7fecd136b22158e221f9a54c580ec0862323082a15f5895db9796199307b9da43cdd18fbdae29ef70d0a0c6a8880d2f0458d3f49632fb2e8dbdc7ef3546431ca3cf16396ee1dbb3c979e687c9a844d40380eed7f60688d01548da55042a6b5b45f82a9dcd49807529f756630c63ba898fabf22d8720ba0e8c81b3710e6f084ac304df3ebc5d2d981eaf5275895547d082e0dbc5833639786f41bc29614f4f85127c39ed44689d374f67f4d8c81ce843e42b383aab8cd3167e601d47f8879d8f9512d77afc82b00ed0dd30d314bb8e10b6c10818271bbd5845bdfad146200a7809865528d5102e112fb265ebde8c1c934a238f43833bcce7d8d22089379969890042083236e6843e0623719bf88203fe284cc78127f52e272c7bd1e8417f8057c3742886d83b639020244bccafd1bdc28d21367bfe905b3c60861311f11c3d2cae6a2e2c7c67b2b67b09d1981bdd7ad7923310260c3e9bdafa4fcae3363e993bc1a765657e099d6524c652bf0d14368c82e23fb11bf9f01c8199a9db045aac57f94e7d27d35ec70cbf471ea5a747d50c32eaf4fcca11112d6e990d127d654d20d68e11437d50306934e9c6c50aaa4068ac4529a518e7e78bd4dec62d3556c45f0f0081c690f7c7fac99b83a502971f6914e66dfe75d701048535ffac293d0bb7ce8e7231d509070a5ed6220a02185671020bf06b182020d05124336c81266b4abb697b31253541ec2cf2bcd39248332692656eb381e47d5bc778844b46ce6f6e2c3813290244f79d9433d87a647c410cb9771bd286181bfa4534e23aa8c0ec35db54d1849712a8308427d1160cda530c86864b8652e057986536b6ad6844ea9cafb78aff0ccc21752de30ce4354107d6c1a31df54dbf3e9694f48ecfd009d5034fa4583e330a8d551fd225c66993f1d2d50b7c771ffe0ff6a803d592ffe596f5ed51f1f3cf881dcb6b78db752650afda0171fa91fc2c4c3976d7c43ff52caed68cc4979db72dd00093f9b19500b38ba2a0b46f4a8ea41fd1ef4ff01c8c72017b484b813cd57818e22de294561ecd5532eb8900c171f47f804705acb0defe85693673f5fcbbdc75fac10cff671d7b408dfa4ad2fb700735272f509151a2bba5b5a058d95db1fa61901d2d66b21d9cca78dad466d199c16ee840fe60978890ee10fb4604880b420b6fe9385015e009e94184a70f5a710c93d303755b2ce005750c50d7ccf4a77e43ac884e3aec968fda944251ea2edbf36344601c83ef4dacc9a367b9b53b6fae68195f31d4f7b4608bf3308536a6cc2b7234008bf736a5f05d12c4f7328628d382bbade13348722d3610eb528cbd4e4f38ee8c6a0e73c12b3a0ecfc1c8df34d1243de717cdfbbcdfc59805aba0da5f8eeeaf9ff88e273e8126de836d42096dddd62c914114375c64bb1f8c437fcdbd0a49169fc00c55cf86063470f40459b94da6038dad17a029007bcdb8f5bdab0cc16aeabcb2b6ec266236f97f1823af25c045a84a8fd3438db9f74395bd66f7e2eac9f434909396195f634823c4690f598172abf62a81519ed09cbad546597402d32a55c6e7da87959a05e8af4de3260fe3858bbf94f554364ba11db18e999ceada482c234eb52cfda74c72e0a9435e1d7a82350a7247be2ccebb20948f3d23bed0424c9f31478b024ebdeb32795900cb85c4fa41fd918d46ba3cd3345edfe90ba22e0dcb81ed95d62cfa4f62cf24977b0201fec5f4e2adcf1fbc65ba461a6d89d96c5f4d7fe37317697e123209aed4634167bdfcaadb05c125940fb4e214192018365544a941f4f9a7659fde0425cd4ea8393ce933eab1c3fb78efc4c037639423fde3741430d06ec738c46e62971882285536e95278af1bd51516ec0aaf906f4a995e9ba7d4752b4a8a238e934714a43af5353c842042390efe56960ebe020953d39f371700095839957cec16d324320b2e3c9ef5761f265d4b528e8442309227b3969632260d9fe40e42a51849f3ef199b06570f2199a75e7843f13b60cd4fa1b26426697294b213638d88f76b431ba916a35bdd5379401265a288c1fcab4963105f6e827956b732da7bbd6950c0ad3b59cc7bc5485bb902654cdc3a64cc600032b707547f39823b44d354ef78b69f5b17640733158654268dbc43909d0e5c3fe91fd623cb85fa5b00c68df408045a6202b8b530c0a72c07103172a62fb3988fbd1ac57c3d2a801f6b8aa10503319aef1589cd49e9c6d955de35b916a8a2fe68dd2a73dcb799f93a380afbbf56c86d833a1929fb15d7795d1aae94229f0f622e70d712cb1afd9a9b3ef4152c5856ce7838c78ebd93df0ccec3bf15da99ac27d47f0105a60608853d267721553c676a87cf4c8cc73667e7c67944732c8e44c35e445d218e8ce97c917f6837b04d9909060dcc3ecf8eb26f33a99de6dbf3c1ed7d5e29b2386a27610a666ff87de2c4b9b2065d013b9e066a0da6f49b6f344948e1b33514690ab01ddd9c248804c4be60d58ae8cec725569053f69e1a071a38fd5bad0c6a4d569791668b88a4c990b64c7f3996ab8c0903cd16b3e9d62e15fc013875a939d2319340168852f0beaeaafd712cd60dd00aaaf8d681a8b35f7201a933a70362a6b768efe8e954c3a3bc2126648ed9665437bb5ac19b115245cc1fa0cf8d0ccc8eed6c5135f5a76c3425c84848d7b2c97389b45ac79ac9c9393e8e21bbece53f07c6c7c089ca0a4181cb7a60350a98cb7582685dcaebde0ac26249636d03656d7b1bfe14994d4818ddbe0caff0ee8a29ef3f5906ee1dc15fd437cc6da12e6f55d81462a9b667808985c2658434e7d3f231c14aa21d7a470f3875f442e8cc67d768314c42678549d6b1082b63d0acf4806858617d4b012c18df534a96c101db15e11f00bcd0eb20e18146e220076c283d079f09d650cf7738eea4885d7f728f1d0186a8a3ce2fd370d0f9e887f2d2682e336b426a673471b3d2c1258f1a9abdb6011f68c6930e08665a0ad9a6e5aa46db4be62e2f555e78b3643a32bbc417cd3cde0a3ec8559d9a1d081a58438cd42c343c1efb896ad89912b31ef2e57d020540803e6c641b3495d4e710c88cab1843141eddb28ececc65ad13360ecedf1b3a93e0854ce21991e816057ffeed97411055776426c8eda36285a57bdc6e83b0d9ba6df70490ed8c469698554e344fd281580c8f0172032a4518c58c242a149a74ae483b2e2c035d33596eafe387db0c5b382325747cb176bb053fd44436f9a8c993034494d9852fc0737616c8551642922bc43bc60ad36838ec5eadd0c2fcdb3921e4f9614b33c56687f954d66e43a3513a0d8da6564a89f516411e6a2d4981027e83688455185770c410b828470db9352c144a580644d15497bca7351851e72eba98e34f4d54322d783ad192072599e54f37253c696382261e713238f8821b74a4e19a1d0c4040487c062c1d18d36f83e70b7422ecb43cbf016827a72a3306904023d0790bf89dd39932463eef6a21a7447acc6fb8d4d779e6f92f11a721806e1181c4380663029819fa58fdc92d7f7b90f8af8947a0d833e6b9b2c2d57d1933460f01df406cc904f4a347f752b14910b4a82d6a3e140ce75bc8a0cd0bd396d5eb2b1a492f5986a5779ab6d1a1e08d5ab0474645b06cdde7bd489b42b4d35644eb74396f38e6e75f9897c7d49959527224711b1d57e399156fc32c1a09ace8144385e5b2fc6b21adfc6cc2c0aa5afc1b224cfe48a96c7756d2a2cc3a00d6f50f79ca813009f2c6e435806bf3a7ca561c155f7582a24dc50856052f4203ce1f9af1f41382975e8e358ea04d5fd7e10d6b406a8c964828e17ff13f41f94c99ca13874c689a29ac4b9c1316d4d99878d3152201acc8e46edd3431c75174ba1b89b9949b040199840498b7faca996438bfed1010b236b39da0892a04b75fb337e93d461303e2e1d08f53a954bbd82d7068c43bf9e4be8b95ea89e1d666464f71b044381882ea044d386bbdaa07df8cc6f83ce2d2ecf96c81e214cbf2efb2e7907b7e0278c46f0408e17299a4fc9b3257a1244a20fec037cf3d8270b62fdc65ba82ee828a9e13c8c0d3bb45a59214c395722c85dc319135394b78cfe9a36f439bc3177022422892d990001377ff3b11f8a674b6b2d7219e459b8191384c0c2ce4f5dd98dd7049800db8c49b3dee7f41df7ddf6743827f119ae46faccc87615b55aec7146522bd63350f7d77dd332b99bbab664016c97135b2f84ceb8487e00a91d9405b093de380f4601dad46c5a8cd79a0c76076dd23c21413bf80798e57f84ba38bba723b34dc1b766711310a75e01227b22cf20ae4db3708c17f23c17dd024ac28e8b5b02958eec4743ad6d3a2517f8df7dbc67e71b5267f781e655466b2bfcab82ee0e703142885b1efe081aafeb2ba0412c06a73f2ff53e3fcbb0d6a737304ed2bb4ed10c1e69e0a2db2936f0e35a12ac8f3de23e0b0a2f90ed136431c520318dad1118e84b4c61cdc208a2bcb7398cd12c0d5acb0e6f6cee82875e75dc06857d981cb5bb1171f17dc9882948cb405f2a5f9286ff9bb285a1572406f86ac0e50d06f4fd6a1817ece100da09f039fb5f8693f60bc05a9ada490f09459838c2bcd546f34ca5a606cdeeab61c3d7aec7a9b87dff1d79be610464cef2eaba2c5e79df9598d67bcc3e913e5accfad0349517097933fbe736cb9392f2d23a8c66b2c274d1073722c413c572e00c85f0bfe32cbfd4e30c474a7e88df0bec897d2daac1609bbecd41b903636b2086823a81b5910d2d481d095c47ec9cbe958917a4971ad50749b2c2712a0c74b85fdd0da7aa50d71c4ccad8f7237a258410f980b743709b09098b273ed0259ea0a09e47315dbb7c980f8667cb51e83694ee644df45eeb3e4af86328bb0a617b25e8b72cf4da057e5c9e0380aa9155d37af8452d056aff12635b539eb50df5c31eb97312c5769f2db4e5ac9fd4c724b9292b3c1fad0fd6309c8cb766cd3d7b842c87ec83013bcdc176ec5567f2a5abc21f0bc505aa0439e3ae55a97e13c3b09e7d111313b5de146d1b8bc0b843630416ad44974250901157d408e18cab0bf5721e79bc27248ae07be29408173b278a0273d50be62d76b404fe942c49163160251517b3a28a197471008ac872f4190e88877577c65b1f727ebf8a039f381828bd0844700898e11e7dba4988269ac6e136706d8a35dbdaeb92beb4bbce1e5fdb485bf8a86a3d4cd17f155145fae6260158897af43ec3f839e102285442b233b5fc2510daba936c01577d9551c57db9ea40c8767563afd89b71d1bf96727b8fa8fab2b46d081110218a6d5413f8f4b2a4ed3753e124c106f9529e34bde44c8a66c8deff6377049075ed4e4f2e78ac2bc20b2a84c9ebe956e54c6e731678f8d9c90677e0ece6aa9b8438876e2ccc9807fadd6849513c005394e8d2531328b77e13287da7d31b3502c45ac33b85c0acca22a917bb9f45f8283e666595274ed0e34d29f1a98e43197effa60eb87746a32ec35eaa3d48b04f22f6bd59e24267bd7e303906845485087b06992d012318cc66b007443484ebbf238ce20c99007f216026d0cb545d919fae13d04d9846e19e3e18dd145e9ff4a2934ab512718500869eecde10e224368d1ddec21d3b2cc3c29b9c5759961de2164cd99bdf6a2d8e833d372e63bd7bb761e5f06da06982964eccb93cab189bca3ed42e584e079b67d3636eda4e2e8b85eb0e48b1c7d4f7be5bb09413fbbcbd847c3c385f4481219958620c8c38c83e730177ef9bda5f685a395eff3dc0f293b7ef36b7fcd7f24c8368bce928f3924387292c8d2bfd2a3739b9537fc1a5802163e2631bbe855d4e3c55022bd6c22d7ce62066e65caac14fc91b17109c86b5277101aaaf059b0bf514e130300b0355b3bc232080f853925b35e43a47644195434955a80f9de3b4f45d608d68d46bd58bc5da278ac30ab96cc21b5d5bab331cc4465cd3d301902004d80889b43074762bed8fb92352cc1d6f9b52127c4340d405d8d6ecb638952a1be9a3914863020100aa3c6338aeccd495d541dbe3086740d30ec1f4462ae1cc40acaa8096e35d3a10883b6c765541c3640a42c83f27eb2d2787c602cc4233d03c12f6811fd8e5af855f57ed6c820b09032794d94462049ba88850efd5d4408cd49e89b42a4bce99915bb2d98673183cb27ae71bb23bea3fb29459eb1d249a1c3f054eff55c65ea4cf39f4ee50a9a3521570604789ef2a4a6a3ee20ea1b9247cd3f76877d00551fec7add5a09c55c93b36410bcc735978af6e74c4fa44e1819bb62c5719e0711777ad37ad4e6540e4370e1e3c6a4db964a00279bdcaadaca637af9a115a7848100345fa4a97df1707d21b6f30f0959216c7315b2d4894202dfa93e1fd02f1a8648f2537acb95494e399eb7193a889c0df6c65ab48cfb0533cb82518e2967a93354cff9d3cd8e1e5407640a15f392cfc928703de9c1f284c9f1dc8c4c3d99e28cc9237f7b1a6c6208ba0a1796f3453e8f20321ab4ceb88ceb7ec8e01dfe8764261f9be14123ed653b48db9834751d7e44ce4c0a6f040c720005c37dde7ecb69dfb02e0e62c6899c2dbc478dd4a12c278c17484d44c3aad8f1d2f02ab23b7d2c1f06447cbe90973fefc88c5e43f071836d325c0e0254f1c184651a319b222d4c94354eaecc6134c3cb65a6d86df3b83c52f96b3017c29e9783a8ca25f2ee448bda6e7baf89e446e2faf9759a75585458675a29cb63962defe56e07c0b208746b7a4a0ca4401a93e95925c10c0e625a505d7aa3201ccb17373d89601a972e9cbfbb95d92780f1e508b310a4026e20cb586a9c918052add52505bc742b8cdcd2c567db709778dd6174964bf4207945bb906d7d3270b5d3dc40f7020d038c5a7507c8b7bee172395ee0911fea65e997658ad2bc6409c99250e6050c5a4559a1e279a1bf4b3da689c4b732a941e2a467980a103f33c09a10094def3c625f52c0a0193f54966e1f0086b86096add163850814363d50c121ab378e8a3c684af1180594bd40c940ea0328d00dc60b057f1c59059a758920d3b1c8c5db7705914925aa44a72bd6dbc5370f0db64c9f3889eaeb29e188091706a0d54ca27ce017aa34421469660689db519d06dcaf97b97f5e0e194dbde8eb876f486dc41ad61d777fdf00760e7508d1b0ce7de77321af854a1e294e2b3d7b9d2649d2bb21cf234e2337f53b88507f140f7cd04ef126a9ed0b906eebd99083e05b495de1e14c7cc81acce7b789ce86b4108294503b873e0640393c512783aef03f7ba652b5d0b422439c25459fe46dc14ebd32cacaab3970edc2245a4d86ae1a081707fdd6cd8cce4d1ccef80b5e9f0d8f0f6647ce042ed284c6d3778b78f7d8805a4058fc61ba91d3bcb9d009122a888a11832ffad31609eb6ce15e6bc8cae4469f4411f3a1912fbf3503dbc8d9a2b478f188e3742221ae65ffba7facc096054a2c00d9efbd90b9b743f541680d6acd0322d47b408a8d2ac063fa2e7fb300eb02566394b46f6962e55423df159046e885310276cc9b59f077f81ef80ffe2781098403d82a7fa1adb7677e57fad3d8ca68fe43948743543f5519d3f9caa7a7c46997796004699ea523c20c4332f5696483505fa69e66dc4894a65ed11bd2ba21c561b8a28aa495382a37eb4793fd24cb7e830316933eccb2cda4a9257da30af88661eae1d95441e5fc604d826a4a02bdbf8efe6f0ee342c96a20f569279bb7b9c49fbdcd40f19dd4a67f628c5767ccaed5f1c6fe5af2a0f38e9653fc1c4d8db11bfa4a65aa737884b9c257a08c0e956b859bf48f48863de4451f20dd822ed9b73553ceb6028c70a88bfb492839b4488ca70e85416b761632e38b30d18efdefe0e852f973ce40f1bc3d276831c8342043b9aeaf309da5cc4bdb2935d1e429c7e0755f6b6102b7f3d5259c15a5ee8f6d59507453fc9aae0d888a42d960faaf075277910a949c10605f708eb6b5d4feb911f868bdad3e9fb61d74087658b113c46ac3092a902385efa90f1a3cf399daf0d75b1f208e607801e35f27448c790ffba5a92e7e47de091d5521a06e209c396fc3bf307fb2907d0c5d48b62a99ea65f6efba9bba291a7fa4bc3967c3ff307f72b47e0c5d4c38186ac6b79db71f919a843bba7b30a16df3f3c728feb0d9eea6fd503b4f49d9e4e79ede2e3456349a69ff183fd992170f1ec838b21b0ae4c6550ef1f9cdc2be8af1c437671b30ae6decdeb1a5be4000e79e140c1eb249df71f4b245f810aa1707eef2e06202ab32ba9c908a33ace05c843d83367d73f644f54394633b5e8d2ff81c5cf926cd5dc0b1f0d8582c5d253db323589b3e6bd45c58c4214006a323e8980b011661ba218427ceb498adc33a2472709113e62564304338cef9e4a953347f4782401617a4c002e980339fc74f11c71b251400106fcc1d72178ce2a581405b2111c85f013ad7413bb7d539f4510ec76efb1c61764ff700548699489293a9dc616a36b8b415cc86bec885a37c9974ba364d8c0a1d11601523c8731b4da40e35c81643dc1ac8a98d80f8ac4745b9399367144739b42584e71facc7d610ca48647f265b0dd18b213728c8f4d1c69410f638ddd7e23082a0485e39c9bc64a0d7d0e49e25d5b875536185be68b08d04d405055b91bf9110378b4ed1093998e576248a275d7c2e86787e2bc7943b48fff39af5280df0163d71d5b230c077e89ea8bc13211399c53c59f851abfde9439456e29405de1993c99a03a1874db3f667a3f07b4207fd45cdee9109248929c42786dee6c78cc84279375a15dd4f22c66fbfa6396f4399a9607beac830f49ec90b5a0249c57da64ed601abed42c6aa60e00bd8a7ee47410ed589d7c5f36515206b7a69b70e010d49035f16e8733fab98e25c7a0fa4cc26997efb137bf70d5350ed74d91b5fb407fd44f26f0af70d7216461f0377be00c60586f9e3539b8c1fae686c5ec254a81caf07eaa58e27d2154f40f42640ae1590853a2a7701fa8c77fb94d216b8774acb30047a7e616efc358b78e9d1ef328d7368ae84b45389733264f6c6727a7192e523aa7ef4510dce5f202b4b7b850aa71bd9bf1072e004aade20207555573b84ec27c796778998c7f3c648c52625c721fd1eaa89639d42ec4ba22d722598593cd9075833ebbf168064a245af8c411830e0aa610f51a2c1be32dab5c064f65574819d011168f9de7a8ee2a87719cb36f35c9c0aaf1815023cddc546ec481ae8474513279b30db65b344eea99831d3b8f76ac399ca0abb2a55495ad922ab59654092b8d52bb3494ed9228b34b52d92e1525acb44a961255b64aaa6c2d5125ab244a25607e15f739b6c84d1d5be4bd8e257283d3f4e79522ee752c22f73a96c81b5bab4fe55ec516bdafc412bd7db17be03bead72b456eabd8a2774aec1e80572fab7eb544544f82a521cceae44e899c9e351bb219c31d3148c9a63e36bff5cb454944293743205e8f7e8954dbbc7e0a316508fb5f0a2403b117f86332ece69ab0b5bd7f5a9078bcc606b10eaccf06a276bd895ddc23778351da21eb37c7243b7385a2eb2eeea976e62a45d417274203f5194c1aa5cfb640a37c4db788e3b2ac887f0c2b1655bfb94eb4375614bd705f3832e460f4e10cf4df44a0def6b12bc7297b636511d46fae693bc6d545d4ce0bc685026dda265ea165da39df8f8bfab715b11f7385a2eb2feea976cd5545d50737c244eca94d7043ca31e7beff141bcc1ede11ae0f7e6f0b82bfc69545156edc62234b29db5f4eefca1ae2ace182488c28953496ad5d6d197c6f6dbf035157dc44d02c9db81e0d1e5eea8189cc0ad7b7637ad7dca9452984bee0f85df29b30f9f05e2e0359ffe037b86fe017c6be710177efedb4b9a38bafa65f4bdc6fe48fd8478cabbe5b5a64aa435f65233835da7ee172338fc8efe7282a712f559ac6a21061ce082411a6d377c95547c8b9c8980515d095afc03574fcef3e2bbbb8db943f3ac073231c403f000f46d17534b09a0cc063e968acaea46fe832f80e61188cffd9c414a4151394ba3b38cdef5a97ef34323b07afa153a5539962c76eb845f8469be1cf81aebf0760ec385d89448cda051722158d61523f67b74218fe50585002e5c1b94544b5953364fb188b60e1337f74372685aeb505682a2540872433b1a3314c4ad26d21d9d03dbc11fb265bfc91403f1909dfa6b7f19e46fb40ebd86503b01efdba796b6724cba20f1246a235690ce573c334569154c74cc04a070efa9abc93d8494b7f40405a67f42dd82d9438805d259c29a63b28019f04aab34dff721ae08315b2b3f5e8d047c3a11569cf546127f68a037876f48cbd6091f0f0b172746eb2eedd5b572d8d4733a79b089945089778c7843100b8f53be3f8775e101a07e96901b7c99d58cc50453bb7e8d13e543ab76344a34aa50616b4cb5bd6930acb4ad2558ac45205a978e99db44305660e375b1e6cc31ad5ff504e255b921e97a369ebc1f03fda9201c0083f1849e11d1fdf0e147c32ce0fc4e937b3e9ac4fb83328f513366b1ad112d0945588e0f230be90fb55e42b76e6aa3c8fccf48a0d659aa3d3a94bb22946bc743826a7666ddb33337c9bb65cf32adbe44982da85b10d030599eba2d7f72b2d774e3e55db0d936fdad9ef4a256981efa7cc4c6a2a041823f2980aa5e2d29d995721fb630e5cc601ecc6bc5ce36a515212d042fbf5753ae4d70d3c15abfcee2c978b2969ccb196d205190a235cead8449a4dc7994ebdc6f062275650d4138f019e27be0e1a4fbce43017aeccf1b6be6aa6e30c2496c00e96ec05b09a0dd54493ac753bda17ee5620382ad3936fc34aa6b4a0ca2ec997e876a0dafea7245538fc63e1aeec602c569432dd8c82876404963930e6f3900360ed1570a0620f5db5343dce9e6a42641721f6c51d5867d9b83040e47bb56d671a0ea383e705ef3724dbfd040354cb0eb7cbe180046d6ad43e086747b55dabf1688a8d18a8cfa415a26a8f6ff72fbf66b03f7bfe25dfeb7f1b5d7b1f7ee870bcf79d4b0a1c28b6bce2b6f0f0732ff0d349d1432fcaf5736b7a0df044b8ebca8fc0fc403b72ff1b5d24b3281045f5b44f8b3435d41da3b532471be1021913ab44d102fa6e027a5a405a15271d5be6bd1a76f94734373f74fe36fc9dae6705226e6017d1e4d0a6f6f1db660d3ac75c9e43c205bedce3a3769ca53ea39fab48b62e9eae8f9bf4abb803783d616451258bbe196bc951736d6a8d1042c8de64ef2df70ecf075e074007369e5b09b89fd053e8e1b9938c5032a7c6730fc1ad83fe018de76679688028d9d320c03c3c77091a0a1d9e1b48e8d3255611c180594430521195108d20e3390601f7630f623cc79b38c486e72883d3736441149dca73f4f13d47104034a43c4331e0fe054e9ea1129467680508051dd8f6163ee0a6c17291708770c7b0471480003703b831024600f245c41d1e3b8888d111936308216a70d458db791ed6b9f103007ce8960d558aa6071a6b3bcfa3913383871d648f0eb2c7a525871996196bbbcef35e9cbacef3624c252aab0f46ca0b4a51e809c569f1e517de8a2f7b1d8b2f779f6c33997cc9bcc039c3b9190e8d36040d47bbd16a329c175e775d5f9e41f03565ab2c07594d4693cddc982bc94490c5b47aae44f2dbd8741b6b245615767472704ad80ce603ec06abc1684c3f4ab731e936d6463dd80930192ca6d5e3e56881674787d447bcdb78741b6b214b63876071ec8dad198d62cbaec0aeac8c8d19f5c011876e638dd3f982129e1d9eaed6d4235456c5a937a1506cccd5981a833a53573378870c3d4a78b8ed36c66e9890c3c2c19e331c9d9bfd20db11d2041a24cc645260297f8283ae9f65c8802c8de737834054a4c00424d0f7ed1281fede9f3110157720f03c651ef03c570ee8bf6734a0612081a88e61c0b34cb28067b944016d7ad74840a7e04054d720e059b20ef02c730cd0a5b78d23fac5fbf20744b54e019e2510023ccb200368d2fb8611eda207a2ba05f3dc2d013ccb9822da7b07c1a3518e4094a4d9f1dc5410f1dc4874f4e89d23479fd44094cc19e2b96f84786e1c1c2d7af308a25bbcdf3d204af604e0b97d00f1dc3f7087de46dce8153c1035677e788e4a00f01c7b7ce8ee7d848d2e025193a57a8e4652cff1480fcdbd13105b648de7e8832860ea03515309ea39d2bc3cc71a1abd7d4637a00988a23a3cf6c03cb8f42f005511882d528924602a6b79864a7278863c2c46401495d1d7015515882df22bcfd0880d1c9e67e0be0c88a23c9247e738d980db0658038c412d10a12a89d822df7d8fc3d13712a5d150e09b40bc91c0e71255d126025f8640dc79c0973b07cc88aa58d3801958662b06c42c2046015ff66a44550c92802fb71204d41ca0c60036a22ad21c614347a2305601747406f0654ffe4654452046744ba2b019986e09a05b457cd9930f22aae20c0f233412657b76d01041a3e3cb5e8ea88a3f72e4e44894cd19e2cb56881c1cf23ca22aae628b7c104750962600b20708d9838d88aae8e3c6977b46a26a4baefc300380191fbeecc91f11555126b6c8dbf872e3c992a8aa2357a22af6984a24aad634405ec54ab17a60d5f8b2457dd9be7cb9a3f12999f1e5c635260251b5811db912551a882df23cac7658e9f0ad5c5abeec75397cb963f9647cb96fe44a5435115b2e9924a24a89d8228fc37703e559f9784e5f6e1bbeecd5f0c5f8321c952fb7a6d1d84415e5d168288fcdbdf7de7bfba27030dfbd2affaef2ddfb7beffd6ec4f7decb539e7befbdcff40a2831ae1243e5cbf3088e35d6d6c0f8fffff7dedf7b171cccfd61fc1ec6fdffff306ec4ffffff282abf2af7cbb306c7c65fb60a92adb255b60a926232994c2693e9ff7f138983b9c974ffdf9b4c37994ca6941bb1c96432994c2613cafdefbf3c7b28a151a24409cd8b52a9542a954a2693e92653e910c6542afda6df542abd542a955edc884ba552a9542a95507ed34d5f963c2f6ee3148c050463612c8c05c4058944229148a452a9f4528974085322914c2fdd54fa72c4a48f44229122269148241289444231bd642a7d5916c16666b0196c069b9941f13ccff33c8f44229d44f24e381892e7954e7a89f4e588bdcff33c0fe546ec799ee7799e87523aa944fab29c41b98d5df4fcb03db6c7f6fc38198d46a3d168e479de3d6f7408e38d46a47b2779a3d147a3d1e8e4463c1a8d46a3d1688442ba47f2bedc4c70ce2a2767d5422412894422d16834fa68241271302391c8fbe8de4824ba482412452c12894422914884e27de48dbedc3a38363eb1343e2c8da5b1343e568442a15028141289441789422c3818512834bae8235128140aadb8118742a15028140aa18c2e1a89bedc362d9956ab25c3a2ebbaaeebba502814ea0e61425d277ae8a2d0d7751d8b1b71d7755dd7751d8ae82151e8cb2dc3e2365ea1d343474727f6f8701cc7711cd775ddbb8e0b71301dc785de3dd47d39721cf7b911731cc7711cc7a184de85ba2fc724b5a6d6d49a5a136340dbb66ddbb6711c778edb0e61b86debcebde3b6eddbb66da01bf1b66ddbb66d1b4a77aee3bec69fdb58ab311b68926118866118b66ddb868138980dc322c63e0cc3300cc3300cc350b86fdcf6e5086447033b3b3b2dcd5a6badb5188661f6c3c160d66ec7be596b23b6d65a6bad45d98e6dd897610bdfc6d96dac5d374ddcdcdc30b9e69c73ce69adb593e360ec9cd8ed31fbe538e79c73ce39e744c16eb1cfca48548623a34aa3895ed749097b28a594523ae7a4873093d2791b29a535c389b085e2d00f657e423476812cb1f1751b6b281b4e29c3d9b03683cacad1d168346bbbb1807386d36f0e867eb63f4cbb79322060f9931b747d8d068726531cafa283650e96750629493aefd4d16089d268e44ad36a6b742c2fe73a30a2321c15fc019ee2351a890a005cd188e024e0f8175be488e800fe52927419a59f987e99039b046204b2052136103264c8902143860c193264c810214284081152535353535353535353535323448810213d2b1edc619eedf232bbb878deec537f3973ce949762cb3c0c486cdd9fb3b3096de7fd3467ced4993b93070dde289bf4a90219e2abbfd19f6c4196aaf1b0c95bf175654b96419a413699317366029934a8d9a3577e4c1fb8debead94527e93f5f5355410cb19f252daed2c381869a5767b4d6a5cbe2e39d8713ab4cf4e1a5b3d094277c9e796019ee917f9853818fb9ee176d86fdee2544dbb2732e85ab3155510d7d984c6f40b9da85871f6ab0ab83ecbc0f0c2898121a41075e1c0957af80b0810255b93060b9782e7842414214219e52d0215509f00983a89140a45c8d29f1313f79700c18f6d89644a2b1a973ec97b65f76215c1317225714182ebf3e948fd9c1389edd9714e3a67ca91ae9f3dcfd6e90edd81a90bd7d32ba65f9a784ce8125c93543b0367bad3fdf02e20b8c223f5b2c9dc332ce3bedc87b165f75a62efa5e44a72f1f4890559eab17b49711121b618e9533dbd574e9feafbeb39d22bf557cbc67432755567f28573517139211a0301a62aaea735b3094c49ec59af25b1bd6dd485236784aad98a2df5f6f0cbeec4c4da970061ed7d6db361e330bbe0197d8a36fa14ed2167836647c7cbe9202bd7c0f62ef5b347c53375236ceb3387ed2944cd267cc2d40583711f88311e7189883fb7970a7826de922e09ae4870fd6cb5b06fa09ee1747c3eeeb306b2d47377daf4a9ce1bb9d28aaa3924c7f32a0e204b7dee8ac4a602538d1b37eeeeeeeeeeeec6f43d03a3bdbf8b1322c67671f4edbd708adcf33a7a79f1e0fa9ed9381db469605c45204bfdbc174e911adb2f4864e7de4d03646606c80c42336b4ebdd25779c91375b38695a353c3168313a23f24b8af75fa54df44c4dad747be142574b9733a67fb9898b2c9911d276c6fbf569f362bea4a9ecaeb654ba25c7aa55f83d5e5783a3fd56b342e9cddaededaaef3bcfc937c1f27fbf2a91e8b9f13b1be569a26aac003243ad0c1133a906f3981161782cceeeecf7431784e9406e4cadca21683f469a6a494d8c90e3ad9a35f64fa259b56fb8cad98b75a72462691c4f6788e364c615628424a790cc33e19281485ca4bd1d6f5c94254efc095799e23117f0c718e345fd768502691ac1115ba3c91e83711312665907ec99385690d12f1d8e767cc94f10153dce7670960eaf3f9f97cbb19f4f9320c7b8498cbf112fb8d6ed9924ce40c905ee961c99919542759571ae9152859dc1052f6605ff3b4dcfee21e2904e30cf621a490eedda45fb67ea1ddb7d33b7014850e893993e70acf14267479ae3c3474708a27627012ca237b34e9ac5637243a563013331a519149fa345990658e783a24e49b88b83f2f81f40b12974160aa0630b59dfbb69ddecc7d39ce55c4dd063fe5fce144c4f29b2739e8b25ce1f9151313e7de39a1c4d32651cd03b8320f045b043c3b0978be9d80a4658f1d8f492fe9244dd32f4120f68931f979b9923f66cce993911b597d33ff22cedcc898db3b7d9a8da49b9c89b764ce6bd9953d763a6984055352c014f62973b822e21bcb8b22677a4638e90c6499b247bf64d6761dcb639d5a9e66fc447d9a90ebfa349998387b167b13c7981945f4250f1e7d42024587843cb02646faf13f344f2504192ab1c0f524aeeb821d98a1ce3b969da7bb4e2f8f3e5df013827e7e7e33522ec70d99fd86ccc1a35fe4af9320bc70059bbfccbecebed9a79967e03943c6a6d927cebe39e79c13e2b021519fb2c3297e5cdd115e7651eabccc32ecda430efbb63e5dd75fbaf988b3c5179eb5e6cc8009ac3827e4e43579b386e78c18a8819188975fd6640edc1a76b2a770253e8b5f118a81e3bb43c882e34133a0c4f6dbb4afb8a1dbddece1eca09b8fb37f6eb601671f1311e3e0be4e7493a881e1739c56b006403af0b44711fa8823bc8db50b07873e163182fe088804b376d26aadfdc4f6cb1cc0b7e3d1276a2d3d792ee8320af6f846c1be1d276cbf1c2a9f8961c29183a8181361aa718ceffae491a18b1779f126de18459f70d8c70bed27c437e34dbf44216f6f76947e7ec4b013eef797a34ff42a7da211db938f9eade827dfc85ad1076f9c3163068e193dfb744129391c28105b1c278783c3715dd7755db3e325af780ecc39673e75f4909b36d48753a4c026c618db4e943e844af409fed3211e3c61024a29a5946661ca39e79c734a29e75de69c734e39e79413b24e56dd9c73ce392716b4d928c849000a5898be018de3f136530004bbf4cb1429a03fd1cba03322648938461738d2e74e457ca2a11a98c2cb506997d389074c412ab3604384081122448810214284081122448810b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1e16026fd3c9df130fed0e01683e5bfdffbff26d34ba59348f7bc8f4617891e0abdebce71dfb663d8adfd64b141a822e5cb3cc4b620331e2c3125b10553125599275798128d4623a2d5a0a0c51c6d104288021ab8652b781798ada20a464c4f599b25236099b12e0ba740810f9c331c09a7782248bf7409b09c02053d646604cb4b3cb9f994245d9e4be60b202ade1cf13c6b802791d983013ccf22b70c1015778c789e1ec07304f389229ee74c7d0244750c8f6739052cb320bba0e3593231e900a2ba26c7b3fc0196524824e078963a47b54e10cf120a2c5f206b809fa50da90a88ead68de70603ee32480ff8f02c654a4680284913f87a76f28536cc6a79f2ac40dc10128babb8fad1280804e530b4d6066c29d4566cda6baecf92e0f965155c9350c1f55abd1dbe2e08472090253b085ff7d3fae0eb725470f8badbcd86afab491f1abe6ea624c3d7c58c60f8bab6692cbe6e6d72edd02828beee8cab89af2b71129025fb8dce21f1a50259b2d7db78b475924615e0344a1f0478963d06f0dc4d8c8079ee25987ef24854013eb99af94480ef03f83c233e1e988f9e89254078fb124ae0eef9449e5cf9e39907a48b384b147b21309f17c53ef4697fc2d84fb09ff06462ca9544c17cd176a22f779eb7e2cbffe02757f3d9735c75b745f33431f1f6e6b1afc7b81df6357245d8d75f94ed4cccfeb1aabf2ecaf6ed38e1fafa15c1f4909b59b3e81b89d7512a60ead1138dd9e7722764a136b6fc640ee089ebf541c8d2bf7488e868029b19d8cc6bb35b4a1fdbe46062378d5189ec91ada95998a2f7313fafc154240164893236e8f20c690129b5903df628035331ce481fb246defce800a637e8a24c1c810cfd8c4fe0195950af1ac8e1908738cf38051433184e01850cce2d33c58f166e8aafab449fe23c7d8e32d388529f38fa411af2fac4842ad1a7f85e65271082105892fb6c1ae8b371520365a07f401cc5f4d2184ad3a7882d2852216c1f8d038138eda37db4ed9f8f103e9f8de33edae7f3f9681fd0e7033af6f9e0e7a361da33e81ac75d03619f0fb7450b8a1fba7d3e947ee8876edaec3bcb90690cfd60f6a0b96d20faf8f9b69dfbc44bf9cd5e16f4d13e3240dbedc75a5007b2180884755fc6ceddda83aec9491941da4627fdcc2c9b734a29e79c53caec665926a59452669f3b4197fda6e5aeeb72037db48f06da3edab65ddb3e524a29a594524a29a594076df2e23e1f4ce3eeb53b3fba48038140a0152c421d3612b158010a751808a47d640ba63629e79c34730ee1b37d3e9f0f096dbb156b20c97db2c5980c172ea5a564b870f69f8fddb8cf07a6b46f9601a63e1408cd9c43f87c348e0a41e33e1bb7691f4e6aa04d089bf6f9689bb66ddba66ddcb671076d9b06c2b86b98c681b46fdaa66d9fcfb6dd0b7f381ab54887b06d9fed03fad073777ebb146bb78988771cd38362065c10b3174f317684c7d34526d3cd6788c4c616fb1963660d9793666dd675737e73d6799d9e1eded9cd8eb82364c91da0dfcd6c1a85bc9494bea9a4e917593a94b225a594524a29a594524a29a594524a292566034b43972dae1568941272a53e1e366a099397fa82f27892f716271fbd88583c5e46bfac78bc4bbf84de1df479fc8d7ee1be3d3e47bfd8d3c71f9180467d8f8f40bf68918389a7949b9e62e2c184e9d2da7a5f5cbbd9e74db9ae6fdb3f973b2874bbafb8a1b3b82b2eba2c3ebaa29fdcd15bdc937bb7c54b1762d35d820331f16625eb8bbbb828275d17f72ee9a51bf1777b104979080ec47717994c171fa96854bcc9bea4bb41f2e706729ffb05b8960ebb4b5de77938a5534fe9b9bd2f9fb0e942ac7dd7be8412b8f48d83e1766897f25a6fdfa1996491db2c23392957ae7ef44abd46b75881a80353133613dcb5496522e292e9da3e992c2e5d1cf28de2e236e9b677fbc86d9ddb54f4a97e542f6a9e3e2551d2dd5ed23d4c5add44c6c81e52a64f3efa54ff5db99233fd9abdbea360b1d96edc2cd857e7b4d372dd89145deea8a3354b8a2238fd422d0743df38455895db4129fda28eac51c9d62f54a2b4a80a0daae45aa3ded61a280c7f82a2aafd3a84cfa08a9b5005b3cfb50fa669da35ed466cb5cfa77b43020439238dc89c7ea972c95625124905aef208ae97337266664656add57d5ff66959e7703ab2cf098ddbb41884d6509b465d457aa5d2289a16e98b0a23b87e59851ec1753a3131f6254018d3ecb4d3ce1954d334ad5b2d6bed6b58b9b25d458caea2abe82aba8a1914e6a369a07f0ed23e4d03f592d30fe943f6e826cda4dbb60edbbecec1b45b0e46c3b80a63af6fc749da1924e6ca26b2859dbb38caedd0acb5d6dadb39a10581b4269c8e153c83f4a9ce2bb12cfbd5e72eb97796657d4cde6a70023533f6fd783ab5731c77ec3f94e01b309ce24711ac83b52db474d8e6fd68f05e97d8e574e44662b41c277bb66cd9b2b5428204d77b101591c0958abdbb6f610a5215c42d2f07d3524a1e7dc240d8e78dbdbf144ec7e7732262d0976fe260e4b1cf091a34381d2b9806e9533d6941d75da44fac3ed5ecde90a8ae912bf5ed82db2c802df5f4769086416ca9c76ebfa081409619c852e7fc3ae745f665d99c534a39e79c526637cb3229a594324bc9e8f5cfa5cf8ab89c8ca41ce9b2ca0d61bf9c9dfb2477e9c4c4f24b80b0fcc5bd634c6bddd778bed3a8ee0ee1ee7330fdd9b8d1a7ee0b08f538456025214747254712ab287662131a23adc4c70d15b235817cee1211733771382e9923bf3e92b3b7cecde9f7bcae9bb9b1b6eb6a6b8dc27d19b4bde9e54e8bcee29b131d0f86c2c1646f0c098f0b6e47f67e5e71d933b6eb401feea22bcf706519604bfd8a1bbab6ab5c3fcbb8ce69b1bd65cff48c94318dea19b9524fb3d5886e70adac9424c819c190c59ed8137bea3bcb346b4b1c0cf74d1dda3324e61714aaae1cd842bf5aeb532a0051b2b5847e85e9250055d40bd10b58c0f511700054d13084a10ab8be0130957abd02a08a8a410c52c0d9eb0d70044c61af1f007402ae3702a6aed717c143477d0e983a793d0e78045c1f044c75afc7b008b8fe064cad78bd0f3fe07a1b30257a7d0f2a5c5f03a646afa781c2f53360aac5eb75e00193685a703d0b545d344170c0f52b507505a98f0155574dfd85aacb46064cb978fd09a6505eaf02532f5e7f98facd0b5c6f82aaeba69e0455571415a73e04555791920753305e2f8229eff51d4cb16081703d075517ab1e83aacb480e545d3911aaae23b005a642afaad778adaf75a6bc39983a6b5cd5cf3ae541a043c8c152e9107edf21b461e310fae0c3210400000ee10f3f1cc21b370e21c6871008200e61000270088308e210e2c021c4211462884338448e4398e310ead041c40e1e45989e1b0be010127108771c421e87b008d305f0949bddd475b16ff7fac9dddedd93afb8dd4577458b3b3ae9b6b88b4b3aca75f11717e5bf2f7eef0fe3de1a577501dc2278ec2042478e2184c011440080c0377e00800f36be12079ad40b514aad37227411e7a93375a6ceaca9a9a15187c6d58b6cc926d64e9e592351daac99353535128b81952db842e519208a9e6880e9748197828e04ab0f44d96aa15cd7f50bb35de779ab55043d47ee39c614d98a3a312746caa2acd24d373da6600cf8c713365d106c2310bae2a1d997ef795da769daf3b52f4b96dc04708bb83cee8e4bc4d57173dc21ae1017c70de206e00271f1bd717fb800b83e5c1b375f319936c9b445c590691832f502a66fd36542e5324163dc2c5980e96bb859be00d3db70b39401a63fdd2c6b80e9576e964330fd0d374b22981e879ba50e30bd8c9b650f303dcbcde16619044cdf72b39402d3bbdc2c8d80e975b8592201d3ef70b35402a6e7e166d9044c3fe366f9044c4fe36609054cff7251f43ddc2cb380691598bede2cbb80690f9fb807d5ebaaa7c6b5583289aac923bb0055b4455b5f5802535a1550459b34e18212984a6501aaae98182d2481a9cc0a5075f5e881054cb12940d5252353052430754101aa2e1f3ea480e9e5ceb55ad1932640d5f5e387137460aa5302545d33334c3802532b90005517102049c881299111a0eaa2a13902a69746606a747a2905545d41620b7d902260da22085075d5fc00aa2e9b1e40d57513451198229d5ee2c0940b984239ad19820d106e7c806914f49208545d3843a0ea2a5203a8ba583280aacb486cb181a99fde5318a7973839288203cc1262840658d57a01545d39b185028129163350401565c516fa03a6ac4ab6620b7dce1117607a0dc6fdee5d186771bd872e8bdb1bbaeada6b37e5a9aba9a8c48851430d36d8703aadacdc70030e38c890c1c292430e2d2d2e2e3ae8b0c30e3ccca0f18242ddfbfdf7fec5fd5b5cd247b7c54577f41557f4eeaef8c9edbedd935f773b76af6717bbeacea76e5681fa4a6b54549e9bb6623cc673d32635d4409bc4d860434c8fd3a987ccca8a8c8f1b6ef0b1c20187d50f19327eccb0b0cc00c9210720342d2d34415c5c82d4e8a083cd0edfc106d35f373c44310387c6e9af222f2cd479b899711a382f4550cf7d19a991d3434a757ad9aa61a4879c94ea2cd952dd4c717deaf6703387eb6b5cd4cd235cff7269dc6cc2f5336ebeb89e879b63e0fa1d6e5ec1f53adccc82eb5d6ecbcd34707d0e37f780eb596ef601d7cba8c7e16668045c7fc3cd1009b87ee566a8045c7faab7e166f8045c5fc3cd100ab83ec6cd700ab85ee56668055c5f214b7de8da0db2d47bb7832cf530ae08b2d47fd7832cf5f796204bfdefaf0a64a947b927c852efe2ca802cf5a4eb0259ea5bdc1990a57e746bd8802cf52bee0dc852dfdd20204bfdc9cdc1c38823204b7d7613d000c8529f722300592ac43eb109b4ec86713a24ce1cf871ead347e3e95312d34b30053abd64014c71a78fb1a910e32aaa1a498c31067587f6aad5cfd7cf9ad56c9a2eca4bb393c8563279e40aed26cd24ae220e8f44c9c9233fbf73b682beb88a45b08b62234e9fe8e30653a1d3cb2760eae414bbfdc95d0284b788aff993d0fc76a450d13931f112b10763293b1dc4198ed4b00a339d8819142d2efbc923615e8e0a8ae0160ca78022076ba06dca9835c649b570faf5483542146525e9136d1f9c7ebb50c664405a04b8420f03060a0a0b1638f74ac399b2b00bcc353a9697337950e4999833c98b0f4c0f9f22852ef72a07a6b6fa655ba45f4e4e2f81344a8915a72c604f145f8be72be8814f184ea1022458830d619c9fdc014a2f6f240ae6f43d79eae5e5730d9ce5ea59b22e2d4f2b4666158bb49e802bf44a308dab565cc5150bac0cba219e0e30a5ac1f90855eb68c6096444528e00afd129a2447e2d167aa851e9c8857832ebe8085e917572745e8b4232ab0c12a184ea102990a050eae2c1ee274ace09327913e78fa4467ab4f94d5f54b9259854c017cd14e2f51b004bc02886ad67564270798ea089131c014a6a6a649190a49947994f98aa2040583f9642f6926de733769f162b3f4311a5df9230dddd6272a1aa15c26ec5d90bc1622896173ee9873beca6a51769cf0c94fdeddb224caf67524aa62adb4fe080e714364d74f18c31a6ad767bb201cb7fbd92eb7dd6dbbda76b3ed62dbb5dbaddbbdb64bb73bb7d097c4767bbb11cbe8934b77fb84dd5682ba38214207b13cb908a660eac2f423888a352ca5141aa9cf2c98aee40a3dcd49a8049a5ca8448b992a8ba653864600000000026316000030100c850302c18812a589e2e40314000e7398545c6038158b822007421c0390320618400c00008001000081b10d0045b052c2061d284bb7932c378ea4600dbb722dfd6755729696f4a400d88e41299b5668594f905b286f1bd8bba8991a053bac9fe1bf57454aaf9026c8554c878e310e6310f05c1479384727762be5a7d211d443f9cfed043a48e5ded3117630178debaab808a78e6f4d8a3803abd3b851f2de40ebf8a72905670076cc3525ea0dcc4eff4d5c73b69df873937d407a12fd0a4cf8210789e83c11be76b023418b940522e8437e3fd0fb8208517c4cfdd4c7aff04f1412e84af5dadb085407cd1eb4b0713d04f7f129099c1289fa960417751f263fdb919789f8a49276117d9cc8e0d48dfe7798a37b76d4a425924df735a86875d8f643f89d43e457628bde9603feba6131b965b54bf6f6e1f83b8be11913a707b7cb63e91f0f9b06540b0057604b9d7d981ad3941ddc402e9c0a62dc8f6b8dd9e36b53818ff66949e3f0b221196a226851414b9aed04a5d140e58335a9a93f6db10aea439ff6588fcc78fae551fc21af33184ad70997dd7523cc039ee1b14d03d35f4f593c499be22750bc4762e28924fee01471cd07f12c641ec4bc8d1dfc134b4313274389bd0c41bbd8153e44136eb810eec4c1650dd3245faf6f09bd601e6f2caf3cfc5b41ba8dbd0bf46540654a0d6a095218c8606006234318420112ce53c4ab5fe83da4801c5233303b9989c9beba6c787a62e067380232130ac23a0875a809eceac6e409bcb3448454970e4960c04cbd56bd9ee923bbe7f3dc2789500d1ac68a94d804ef29acb53075efc64492cb2d9628bc3111da2b969c47174bce62946622ceaa8145c0cb6e942d0360af4be46b09802d8ab740aa130ab82b49ba04a9e04787ee8f77606044ad6e1ef13e383e3450655dfead31a1ec7caae48130211b0494e4928ae08fd608255248935cd3472dccc0d71590efb18306ec3b90550798a7488630b5287f371c743dbb0689b0456db0ed3e3aa1dd25b91aae244e1864e6b0832aa968cd2826b4558887542ce0bf2326bf05a1c0740d5ea57e83865958c00915057b3394f05d28d0fbdb646bd3aa77417fd453492857c0a86c7204d34a6b4cddb1ad848718a3e64059e964573188ac0bd5a6bcb2ed9f809269552d93ed736808a8056687053bd2220f6d0d62211d61a6c2798da81529e89249af8b302384d678d0f27f080a83b2d0749886d275d442f26dc5f0e901924e9fc8d01c96ef89a088aeacb5fa7bc2b4500f5000616d4d3e6aec4f6043f8b60c0850d886a8e02534b1e96cec9d4c62c8aec3c586ad80e390dd5b09a2f109d00ed3621f3b904d7bf211cddec1201bc8e138f051d3c6fc48572e38724dee24dbf08dec293f386d887daa0c711150c5c32d64bc8db183345a9266ef358049f4e44c544018e1e42227fe352197c133ee8e7108f6029d215bfd0fc7882ce4a11e69a13b028e2b502507fa73bdc7f82167c56305710f8270ba8ef09dda0fbc7a9afff88e24b972a9692cb541ebfb48dbcefa4db15038efa4ce33ff14bcf0c471948e5e45734375dfdc210523a0d2c1f0633e02808424cbd24cb01d9387ed7c722242ee82279609e8cc7cc1b1fd66ebb4ee1242c4f4f887648dd245a9e7722d1dae4eed65297fcd01bdea99d6f952d1c62fb52a60d9b90bf5eb9d8cde8253e34fd9f0b5d7ad1c4170ad00d946da4fca1c7c817cfaa8509d82a960c09f5630131ed86fef188b13ec8c00cd1fac24178473093515fc527c03095fac8569f1571feeee7862875c73e14ec08d60f868b626a1038c2992f878991edf37580f6793fd428a75c8572e9a83c71c3d0ae3ea20cc063ea290d49afb7023067e0c02ddca5b3880af54ce705e9a577b39a6d0772fed0fa92f9242f4dba4a12f1edfbbf51fdaad6500cabf50513c7e9c2bd2fc9e39a522a2096deed4601cced9e131246436d51ffc0fc8943721c668d238f20996213343806bae71f415a40a704523924b135451385b2a153da228cf8e393a2afc67d61007fec2469a7934065778fa7fa01ea4954f19ed9b04fa4f09445480fe4c55706701fd2d84fab377899a794144ff67b8659454ef349b0924b04606fbc93fcf262654c5e20e802a7c88c35930028818dca348211352243730b820f24e848d35ac7bb1608642fc59f579e5b20388eaeb0524f3e9003c60420d29be62f76736326d26911d0aee5eec908b63f1c6b9ebdd1e149bfbfa6d00dc97d3ff828cdd051db18d74a78286f0767f778baa4d27552b764dd5aaaf1f8600ffd31729efabc24652458dc550a496a078d45b8ac69eb87e9f398d5e9f97358fccd20aac23d6c64b4b0cbdc332278020b5d7d0f77fa67b42225d1dfd1303df99e13123fe9f13fe1d96e7260599222c05a4d6fdf6d084faf2bdbfb59177043cd01fef9f27e346b3f6d1f8c19a261d7f14702fff1ce432bd2ac7e0cbf7771374e8e13c34d0dce85897b130c72249fe147fcb6e0091dd78242951201e6a00a1bc2afb38a6cb4425511fc2bfbdeefb30a71639f5868a13e2242e5cf72c340a63e7a67f84600a1c7ade80224fc275151b38d3cc582a3a132350b3e815abcc4d0c58a8bbd41abf6f0b32c28e72f41e0db7ea68f2a12b1778d18aac13c11dd8c56151ac7c915911274e6698e8b54b9e45e8748d795de83888d65956e66cf16d19920d8a73b2f17e8c15faefc647da69c91386b0b60e2329787635a0cf0cda7569da1ae94b229520e9c85f38d0eb880ac3b2e488d9048d94383829963a8676fdc4ea126b46ad4bea49b69662cba21b4e2f25b323209b548a0534475d6cd5cede4ab274b4b6b372057748316bf2cd91af372d3f07d85367dfab88553d7ef039ae313a17d035e35d3b922a6a374ae869244449cb85d8478603772020feb93ad5e3eb0e8ab639172105ae2d56252dd69f0b0bba920eddb055eb0edaa0b86968af6a39df9412d02887fb9c249a7e77c51e0bbc349cc655ad9bf81e8171da8de0f867cce402120ca77581234815d26b216a5b486200ba08910d59e69d1681fd05c6b11c66af52e9aedb24ca8970a9ff29c2b72257ad8507a1b1948542585fb84f2860ec67580a16907e36c75abbbf937a3aca0803e5bf577794e01881ff30128aa8fe7d7672e6486bb6cdc815391157cd1c4206b0a4aa389316e04a5552d8b7e0686d84498019e781c13e3d23e2394171ae2f6b953d2ffb1ae2ad7b1a5b433e2270ad2974bb5ae9e2cbd64b69792922417e87c305bccf656befbbd44b7571fa332ef54d442a1c954a7ba660d8a13f9966aea0068c34f0120ad60fe64fdc05f36ee5ac1f014e13c7051fffbe644eeb89fd8da255e18cd602c0490fc1d04a760d88ab57d228bda55db6559f449a55abe6b6640176bf1cb93d0dfab67bd279e81fbe0d16bc792778ed3b2f1fba2e694c3c0cc46759946e0afec8e5272c94957bef57b62a4bee0014a674efff285766c9a9c9a488ec22969ea0c02a39ccbc8ff89bf4cb81f980285de5a7ad7c002bc5cb64a3cc566e43627ef5ffbad554715e80ea2bd64a9db1b9d4089409312900c08a2c4148220ac6273f19c4d5df51022140f6b00e59a93090e8527f181bd0d886e3781160d88a626f98b8291155c160c3b2c90b7634c4f775c2c8126c8d1cedfeabe27b99ea73d831351688b0f5d5f02c5e281376886696582abf5ebb98cd1ad51b6ed13b3a8e0dd7d07f2f1ff3df581c582e4913447facfe446d2efb3aaac33bf2dc4527bcb3198c28d48cc64b4ce7e7e70dabb155365cf99f0771389d4779a0134abb63b7b44808cd2e23636a92f2ea8dbcc111842e84b81d5c641c7112821ede47566d0790536034ac3bcf46ee1876fb6ffa839be76aad5aaacfd0db6a87c540c75d2f6bdf64479cead86a2a4e487f426feaa893050a24ccc0bae5ba4d4642a6213f9f1aeac6c7f93ce88cc27b5d93abcaa35d9404a06f822c9fa82690d5fb754599517a18111c95e31f5dbd20638773c83975b2f3615589746179565b7f62cbfab10f35a1d09633b62622e760930579116c0e1e7811a62192bd3ffea177283a41f2bf6c12b9158827963886bedfdb0c126e2c9f73236a1f81a5581552ebe9a8d64d15527a95c60a669040ac732ddcd011f12018303b6744b49b1fdbe24319f0fb35046698c0294f117f480894002bb280a953bfa78b7edf97a6bd41096958c0e2ce67e974fd28e5603df40424bd25d0d7d13678d1ee9e314722b9f9ee99b60e023390cbe699cb53b0b230f6126ea42ce1ce1531f44505e3fba6362508d44d0abe0214a501a8030a6115e2490204c4096ba9ac4909281413b4026d490ba88d1272154e92945b00b383e4a93b026ac688640f2750443eeeda4dd6c18e1073b672a228e7b7ba1649e10a4fd3867557a846b09f2ce0f1ce4a05c3efaa70faf66b56e125e11abe7d29e7aee9a050cd5a325ec913728fe3c9eb487ae24d4484195f4d23f566224203305e136f4811e363529803d0f07b31fac167641ad2d8b259a1d256de6cf2a4497fbc32801161d6f36ae9b03db6e3c276bceef7637bf4a1184237a0e7662ddf7bd42c431bed57ae9218efa4825d007fa50210e7c413c3a8142c9ae4ac8d8a15f70ced229164b7d0234a91cd2422a52753ed32ae7ef27cd5feec97890a1451cdabab00583fc907ca2834728b1efbec149b063e452d3d128d40b36c0e77c60d936d8f17133a5e5962caf59307f607692f3e11ee8aa26294ac00053d750e3b1ecb1700f7a7424ab728bc1d3db889fb2551cc91b9ba0daeb4dabbe1c81c7eb75a7d93777b416b699935afb01ed9f415db29149ac7e2d6334835049c0c0f1e1eb39711ece8048e7feddb81c7eeacd546f6c6ac13e0189ab18e3a32714c8fe72ecdd9234b9189a19389bb5d704c1f5c44bb8b409cf7b18711119881c21937b6ce0bdf9e7618493235c37d05e309f96e74fa028d410f8711ee6220fc18065d7702e8c1cb0a9fe6e1ee1d582b060967aaeeb8006178d6ed6d5d961c220019e29cf46926a9081b991d7634e8efd1122fd230c7d01764828813750b7505379b154e903605880fbc2bcd4571379b2e1fb82e59758d6a5160c2cd6a1ddd41f5fe107eb6de18c0fa29302bfc394c83d450cbd39c263a77c629fe2db82580f671b8f98f9dc8f01a65383f01b0176a25f0c1e36341512fae6752f5049649ee1df86eeb841578e8805271eb61c2a7347a8befb8d46374473888de2e428e4d8a7f0eacbd6313f3d5004586e800947d52dc8b2d0b3d3f4e35ecb84526c0f5e87e44dbdfc291255327f0223b8a53799dbdbf759643270781d67d9f3329661cb048c77e8546f53707c0373750c4d5e93db1a490b73438f6f228251bcb88034d6ee3205608e3e5e7c9399100321950b569ed3e0796a9db40fc67c53af29a07ce965b5fe38861ed577a5d8f9764af994199a4c5ec33dce7c5ba86270e7fc99926bbee0c806455c5fb9a7727d529470480982442edf1f30c78533e1fb4a0d9207815c254fda5b9797e891b1f37c48bd2153e885f4e2f6ca48639d760cb70feb0c869d424ac8889a482a383b23249181d251bcb1a944f8bda3e7a76c0b72ea11bb47e27ad7fb46e34d3ba17c5713f4964f9fe04dbed184cd2f18894c5849222a794f6927beee64fc7e24edf12f84ffb6176c28f596f91f8edf77452fc9ea8ffe2300a20da5269640934b5d603d0c5804940605a32d160c8fa6103a30a66e152e420d62c69196235e5edf071a48a0eba1526e8078d1af4ef0a776cada6c2fbd57d6acc111640a40d74c2817c2551df8fdc5b7c82fd0e0a7eab5b831f9835ffa0dcca7da1c87337a2a1be8cc81c17efa2aece2cd3e344311e3a27d2e9ed13d0fad8be5fc4f9b9c9849aa265157c38f440baf9d8cc02197ca62cc334ac75e78f0523ad05d4b95f7c44e45c8730898408ec69337f92591fdb47a745608388b9ae1f29a21f90d1fb015d908fdeeee24295216a861b11430c425eb6445dfc125660b2f0818870c80280bbdcb0c080acd7a01f532cd25779c3c54f455ba5206860a1634982b24177684621fdbd5de80881216fc522c35757b1777de009c31d7c19db2b23a1fb2d44ccd8638728d6580387204f2cf2c15c04b884348124f4009586ccac8ff9c14195a3416903cd530fe9eb2414d7486374e9f728ef93a0fdc27ef7bbfe9cf3471f62715435dafbbdba00401b9cd44ce3eb34617b3308fec6ffeb4378c89ab67a6e7f85f81307d241fa4094872865225acc35e463b84069c725fffd2121596b08c4d88e0c87c8e4c74c279440ab795c21a20eb8b223400d52f8e3ca090802ef86cbc199c11bc2a1e08a33c5348e8855a051c63bbb908a3960a473e10a341014134ad472810b0c654a9a29e2c89a330fa870e080cb80d797f9748b8020278862e0130705b1e608fdd5b8f34edb95bb25c823b29bfbf50b61f95b26955aab0de4f37b18133cf6308c58ad9c1bb52062c127d2a59e04263d47f98ef0091d9ce8a09625c36050c3340e8dfadc948ffbfeeb0bd306c213c93f7079901ce9fa50c6c7a920610232ac82c1925e689a603f7c0cdc8405a1870b244a58012e8683134110babd131b45a9aef2d5b2faf7fbf412ca02506a777f64cf8729d8a78ef2da8f25fbc4247d21d9071c55a80870e9e35c0e7be9fe21278b18131f473ef309d2e3278fff8d89382f785f7ac1beeb05737b41fbe4ded413d3bc6d9536a85ce91e373f614f874a0fd91e4f0fd08523f4a5d8daf470075020fd9dd87a953aff9b9607e411eaab6fca75b6a569eb35fe0a6729856e789955015485b1a95140248c7e9a558572543c10965b911b583050d653e8836cf2f8f53705b523fe49a8645864462535568e65258e46258f0d35ccc3c0f201f67081018624402144808c032842a3b20f000319c7a73cdf91c9a39180d42149bd151e88e66c4921e280a9c15e2d5d90e89178feacde8fe9830387fab824d8744eb283a18d0ecca0cb4daa279bc5aaeb93c0fe4319453dacbaa6896c4dbc3a1a99243252ffe38ab7f6e06bed083b61fe0ad033689bd29b24ff10035dd71780e29b215d04ae4991775e7aa4961f1b357031ec271c0722b1c286d91ee785720ce3dea1c76fdfc04513ccdf4fdb3894a9583035b1f80d09625d6e40cb039a8b30813649f490c8d600bf3a447f6264c191e863b159f22c753056db2c4452c3ee72005227bc47a57a79359f09381a83fcad4849881929092751586dbb6178ee3d397adedcd54d226eb2dd32ff2bd05ff253118e0f06e0a03282b537d60cf7e3195352e04d5d90383e6e3d8b73fd299c5e8a360821fd3aefbc265dcf4c9535b06e0ca6b88d686b793a7544295e5d3934a71dbb2977738e2499ccea7282e6ae55a02631242021b4d0948153d034dcab5772d7d7c10af155735d6f860785c4413979d502306e1277571b8e183f84e32327bc2246112638544c37e4fac24403c1a5dcd1b9c220e8b161495033b83712f4e664dadbc2f58e6bc471a86bea04eb3bedd046c637c67d47824ca12090db4ab3ddd9337ef01ee21683d8aaf4383d9896edb47beab61d4da8be7f8474dd2427afd8c00675a7a4c2df9aee61cf713ea72a212d774f19c53b4eb58367abf55285872db3ce6addc318d004c6f8cfa32d1760f618c444273705ad9617f988fc075d27996f3689d49bfd58d2d46f3e63bfd274d6651a93e10c44907b08cf036a327fc379b7ec6c0cc8df6190a92c18300754b3e0d0aedd27ca49bbb05fce0871a1ab886fd355c9f078c761007a4496ed190f4e087a2002f4a35e22eb264064d16b902586dfd142a3418645e4cbfb1372f6ae62328d53fd38021db25c591b5401ebc0c2b74c42249ff04fa796696437c3d27728e62bc8cf0bdc875fc6235706a1a161bc3b0beba59184848390897759fd99d64c9e773031340a8cf5ae6d6b0a70efca5df3397b37f11bda2af1e51b1c1aa1659b48704a377f09a12727b33e5182e0456924715e1b86397f76b3ac007421cd39ab6ebc8ba940fa3fd908692438d29387c8d75fcaedfcbbd3cde7d81d277cb5817d5897f10c3c7986d1d13473290894c24d31908bc3583989c28107c4c9cb89795b84e67a800605c51f870f8cf1d03eaad21834b38f1e6d1b5c344db7935cadd06e2f500e1d8bd8f177998223aa431f7f4347549c30e9e06af989855525a60663bcc12eb04d4fea0703ce688b0107a975c1412b42ce85d9c4abc5587f32baeda62059e534d2d75a3a19107606a3a26238e3a5262003cf0282a2be25cac11a107c04dbb7f8ab6d699b8b6b2cb1c16ae6ba8e0f518238976acfa9619f25d90120252cac6b6c6653ea3dd040555bdf6690b64218e50fabcda34456cdb3c04c7478600670d0cca5cea2e45d14bda7be6c07e514df62d48e0159020973acd981d8dbc0826f1efb36916ef04e182b8d49a1e9ec24313a40bff21d981abe77cc844737f1188f006ea4816235009b3f7a57982bbf1a40e269fd785f15a0d9f0ab352183170636bac2253f5dd6e440190ff90ea894be9e10c5c20b24d124b8831c6563bc73a9fe5c8c404d1fdfab9a13225e482f0ef1320d084e68f4d6339ff695ab2c71a9ce3e5240ec3f926855b76ba7f079b8df29bbb1049688fa9f4108bcb5958400e1a3e291ac731f619548e5f2470439bc6dc04cd54ed86abd844410ecbd5d75966b2495ba5ef3cb31397370277da4fc99c963baeb717d7cee9a5efbad06e56649484e2d038638dc00b9355ed4d68395ffba214e115909ab4b90abda89736031624c208083982f99c898321ac72152c21d9c06f30e6db489f7be79b402750d8b91676c8728b474c9f41ecf552f5107600be22b28b2b8d993c248425668a8581e884bd2e2192dd2851171af3185f8fe937b5418c1154a461879e8b22701dc541d26b053e0cc1f86a54bb128bc72b4b747b656c37431e966e128d783c3b32309343911234492597c545284df3b701a837976874db85c7d863927288c2ea0c0525ecabfbfcc84a8957e9a660051d47fac4348db944005515a75a11e044a364184c7cff84db5005985a09c209c1180b507bb8282d124d9621d45e5e2db679949ffcb5ed4260451c49618bf414a38e1b1b87bfc30e2a597d9c88dd4a313f26da7096934631891710b190854de86358b2b1fe81556e006bc19cdf70d260c17608dc2524523648f2cb57d50a198bb320624ed1b8d0cdea8f1b353621a62b08506386af2ad8e178f9dc2de2784aa67adc60818a50c6b198f82d7194b1348efe14831207c199c82e10272c70ae924b2e20d719c028e1d00c8cff9ca7b089d111fc8708ac07eb86f79410c89f3108e52828604701fa831783b6c71ab732615bc8c16147811913e1007c10a15112650e6a940144214409f09455d882201b4b95f343fd432271da0fe6a662262d8cafadf74c40ff88a3a06404f875660080231bc420c008697bcc8c1310414bd592eff858a8d1b0d5c664ddb0e0b3ab8c26230dae0ce9ff3bf0a29773deae26f1828e1a19703a9002d0bb4ee509e3e39589cee7ae8a625c3ea2175d13926e34b0d33b0d1fc13d511bb81d9844bd6097b18d926d9693d81934c0e3ad885b27b0f81a89e8c93d56a6d81cc6b0c55374b101e0fa31eecd0c444bad9c29e9e08dbe818162d2316ef83b44633a84bf797a8bb8fd7270aa5fc35d02495f867ef8a6e8ef5273e73eae8c441212cb52871ddcc030d2e3870585e4f3de7336707798c19fc6a9a73e2c32b5ff20d705f3d431711a1bd7405b2e0c0b2209d174da112dad56611d1845121a76748e58eeb8dac04776f91c21041031c075caed176c45ac788a0a62cb82c597759f1722205717e3ddec104ed154a007316d7564e815fde609f6d8d15c7645c4811bfb19fb63a05e8a870aa895a59f4295a35fda681395601ee9d28a21f823f827d3cb1c741187d1f0eccc521594534e116ddf6ec04972d638f906a6fd8468e8fbd94468fcc721596b9daaea1f87009d08a1611267a6ffbc2eb4544a775756ea3cbdf78d767c2a99102a2b697d709b2ae74a92ac9a1dd3b62a55e261bc9c91dcc4bf638349f0a26cd8f749730efa5dbe74812da8d90dcbec0d223aeb1bff0e9db431b1a5f036bf73ccfe30ae988610282578ee5e9cffb80a2bc9b891a2146d85090bf6a57ee00e1a2c1938abba8900405c1d8380959d0661757496583e02b2148ac87783fd434a0ccec4e8ec2d45896923344e61a94db7016de64392821ec3f4e136d8b19991dbc5a0f584b8f7fe7fe99b41a736cdd511ff4cd14a90afb928a3247b3fe706877a1693c2330f245d41ec29c1f434e098952a10ab7d22840de68893fb19790c0560591ff94df16f87973808d4dbb8de0235c86c1bf3ebece63573345b88daa1d901f01b233e0483aaf356b44a41cf1177b54420fdda7b2eab56b82e3c57860b121405948e10b4a368c655c1e2fc90904ae98b5a68a30c4d65cb0e0e22a0f49d9280601558870ac5d0a284fc02d82c385be2a93857cce10c25b5a10e2117258c5c9793a3f89d5738af02640a1a42c7cbd384f16a803f5ddf5bb1bf4b527c891097c2af0acbaf243933055c5a8395bb866be4fd878a6ee6ba8507a02057680f96ff96ab44eaea37aaa0a428261ca1c84e12cf05ab43e0edd49f29b2abee13ceceb09d1deb0cd026cd5131c8347c05000195ff895e3474a0e0a60351810a2d76e7d67a5c8cbf9997d7a6c0f5e36cb4379aa5b590be8b056a1c0a2093b8b7fa7354852e2e0a00ade8f1736e74ac7d4af6a0a8d3374bd087375381678a6c27342ec5babfdd67e79483184344e929cccd0c72c6001f191dde1baa8c94cd20c7491956b5e560fd9aaf070246ce3ec7e5a9eedc97c86028fa15a47be3177f77819db3e05c524f1591ff39b7239f3f324977da3e7f595807b9dec5aaee7357e1554c2afe64b2f4a4b41a29b49d6ba458b4ba820195a3be7fc90f58b779a9157b98e539be3938289c7cc7c0c4a32ac1ea404062bbe254745c62d87ee135f6e8492e7b00fb4084af6ea364b1b031fde64b92e66cb2e8e52919fbf4ab13f817ae909d50deed17355194558bfa7bf2c4897a28a0dce7be26d13a1b5304e66bde049798b695a568f7d1fa8d409f4d05bf853018f3831c3b50a9fafe5c6ea129f4590b3221edf4226653962fb6bca1053fa3a3d2851fcb86a192ce1332921ca60a70c3c2f3e0b23fec5d050cfe301bf5548756a012ef8208cff0660c3feb61407842249df3c7c9a3aba52a11f828448c125bea461e611785ad88510067b41754486d04804938e347ad48fb91e4da65ff362dca99adedce5175afc8e2264d83c1855b54d7a82d4448a830a38a9d13015369c9d01528ea209d0cf6145a484bf8bc1417fbb5e7a165f2e9a04869a0ba9f4990af5a21ac4dcd4e66a375a2cc956bb252c49e00eb5e567595b4957d1a2f8072e80c36440fd3a1207aec039f40eb4559852337e9a99afae2dffea83e9a1ba08304c915136c8c3cf25c8f0a9d9aa30519039d680bd128a45cf9df0967d2f8fa15a5c3b92053728fc04e44cbac0e2aebb0c4129fbd837b8e97f93e518e2e0f0a1b9412c61266dd783c262d06750bee3b143ec5f7b4dfa1552e551958de17439a5c8288da7487c86e7f33feb74c42605c41c690fbb13cce15a2f74a4862632c2e70744c5fbcbd77ae1c3f8fa411fa890a914fb8662e702f4beb59b447c5a9186aa8c8a5788138d8dd5a056dc3ca8c2b5ec7f94346bbcafed302f66c629eb341e7b03526ba51abda2ab196f90e2afc114681a1a51300e3129a07b4437418e8528ee6c908d7cba53b54db3e911270cc3f989cc933f3d461ebbe3765e7d88041c6e0a70250d73b7b7597b847b37c1e958c4edcba392ff3aeb14d9aec31a2c4be47b305bb1643e4fbebd234ce74b8d5dd17265f6bc3affba0674659ab19f80b554b80d58b7de1c106eb52c1e5c36c4870e435a79f88b83df694e1dc4f585b404c2ffd2df7a048ecb556e56edf6af0c6256a5bec9095656e17e914bebf9aac708641d25cb983c18a8a7c3b8cd2fa1f64b342a13a710eaed79dbeeac68767adeb9d29f564725c4c801035914ced8c5b21da5260f7abe8c4c68a0d6a830fe902ac089be52a143ac94e1092ec411f8a599e4e59734860ae946294ea8e0e80a979100daa253439160644407bc4362154367d884041207ddd81124366b95707f0b5d0961c28609814f37168f5517f71cfbba1ee9e5829765e08d4a70f2c1ce36379e3e25ffa8e949cbae65dd1b4352e1717828de06a2883d01766ed8604c133261c9fa4cd8823a7c083efc46a82adc32fa13dd855dcecc25845a10022a1a09f964b4739c9a96486c82538e63910898228051249e10930aab56618e62606e0e609cb7090414943091061a1d18f3e751cfebb22bdfcdecb5e0d9ea04ae706abc0acfad8ab9ce0a8bef2089fbb4c30070bcccd0a77f730a21adcb4004a1cecbef67a90e244b33162d20e3abb92259d416faac9ff344901fd87b6e81fad4801bf7f26bae7d846443da512489fb7cd846d08a7ce75581b9489cd3816ad54b5f128f98819e9829cf7f6d746633454a3d7e67d8fc932d6de67853e32732cd0d99d7c231106b07869eea898191aebc7285965738b4a338e3033a52faafe460abaedbe2bc6431ce4333d3779becc3127b3b37f6edfd831b3e37f637f674af6acb00a0b779553646b85c9c8f94061133a86f8d4659c29741ec8a0cbdb2b4296415425a1efabf1fa61c7b820f62d9cb90bae121bc90a32891a884a6bd222a3f2544ede13c97c97e9ddcc31ae9be71a02f61a885c7f38b091d17e72a18555e97d70d6d00006b161d0df6071da13199cb5a8bcff23a360908423cda9a7f91e9ece05c71d7916020874e3483491baefa41089cb318a8117f1e923dcd291ffcc8c8fca386caeb1dafe01ae14d848c4e978f1565141e420699b801c7a5d81df8d8a1512f4c415240e1bb832c51fb10f675a9f0e5634b917485ce4946e17e0cccd6597da5162d9ef3b5e9fc4367411fd89cb556f5053d61854460aa8c19d761d5d7084e0bf8f0abfa529ced6aeef5e4aa4396c855ee89f048caaa0080bffbd7b4aedbef8bdcc289ab10400d81862d0d4a2e4fa7427fac213f177250c63d376d46ac330ab7564af35c42687c8b3a0661115acf0bb2d10ec0631cbe6d7949d9b609ed0d849f047aef63ed7b1c9e2c7864a72d6053303b4c0b9e7e02d8121bce381aab10af94d7940fba954a264b6180ec7f11563903fed91b04f0fc497a18f260a9355eebfc6270715b094005e6e4ae042d690fa246796870eccfa851f89f92e38948088b7978953a4e0e3cf2dc4564b05ad38e358bb1cbd2e7e9bf359a65d07dc93dbc710576c57b9bc03d0c19a52eb8b84ba7545eeef920025e704230d5f72def8aa6306a611df7360c82dc428fcf57776a202cb754ba2c71f6947824d5d47cab2436a91e0ef28e6e1ae311bcb31d45f7dc22d293d7120296d3eb4a39029a8b7e0bc9b3e63ee1c696a119afb48380e532ac3fd299a61a80f2fa9831e6f8bc4811eab16df4c98de8d6a7068d89dd4539b0592b7f788c8c6ae977466e9eadd440fd2d46021341789dd23279b1115ec35a904c37888a0e10368bf862f8ca5fe64429aac359a63e3bed9bb20d69e5baa4c042cb66844658742fcf7bae7162dd12f2b4ed4725a502f2620f4e97a9bc46ed28b0be67bf8812b4065d035aa651cdd540632334a2503b240faf4bd80844cf9f327f2ec86faa066c6cf9b7db68f299a764f41f87bfbd29123e275ddca5491d8cf6dc227d71fb82246e08d3cecb262ec99e2cccf27e28c089639c284bdd81119581582f05d4643f2f07d30e7c46f34fbd62a62b262a9243b0efe63c364dbb07603356370fc0ba1fdb98b76d3282a4ca905c985143f276020e67020c6fc4bcbb11bfdd173221a7868f481795b1ab40c21590588dbcf3fe4a416fbb53c6b207ff64ebc0369f1ab7aa102593980a53d7d24d57ca94c6e42bba1b8bf6292dc65dfb2113b16e692c83d5b5a25256cb13c8ed2d6e0d69a17d28abb7e2e1165f2c7f1ed6014664b8b36802647714988180bb45f01392a5741fd7bdb567eed3508936e9676a38fca5ff417c5af843c8d8164437420650d716310801b7fa16678625f8959614c29217cf65f5a94a765a4ea30ba00d1623fb608a2b107ad6b4fc49c79de4a51159a283d1bba491084909c4b12f16d083f8c095d19e1f61a3394c62726d339afd62bc036514e3ef66b096b6324f8603ceacf4d93d9cf27044688ead0496f55d9e2142801724028768d84d1cc883ccac0872d5df0ced811341d3811704e34eb2427bb1e2de3907e23f10db37f08405429748aa4ab023548aa12c427e7854b129519015e1d173323bd1d89a8cb0be708d262040de6cfe114afab808674b5b5bfd3d3937dd06bbd00812e9a630c16e157b7a10275f9c86191184f499c45b7f6c43d469b2f9414d06f4f1e6ad41904f08c1057da749260832a6dc294899643e3be9a5944d8a8c5940280a7ef17f8e739c8b9672871dee520af42353529b0a31b221d7271e5561ef9e039710904b388b6a44f316d13c0b4af9ad1924bd2b73207b2b5d18c847d4f45e04e6ac055d0a9515a7d31485a48b44c3a4ba5c6ea93125bb0518d328ba794e90edb3272e58d2e527a2db50c5c6bee1355e737a00df980089e5086931048f674e7e1ad75f647a247954f1ff3eb8ad7205e7d5d60308cc54ba3808b72a412cce07ca352e054180f7bfa361334d10e2846781508cde874684312b24a1cd55fb15da7895b15d83429212968b8726f71d517c696b1584ec3ff780b82e7096f63a325cf721ce7b2b08c642a8b9f227fc32118d66aecbc4d62bcfa94b38e084e16248e40107f542d80ec03e1424157469e79aa36c5bafbb2788d4fd6aba97e88948ba21222a0f0a8cabb72476e5be436e6fb0c9feb8c1865e892b70345cf0b23c2b80b0122c1c6c9739125afe402ce861afa3a06fd4dcc975ce97a96a53aed9f4c3619f090965d60c100f27a0aa38fc8e8a4aed4db1323e042c06c271c4b9a549df71dc4fa884f29e4607c1e7645a5ee93ddaa9fbc7a07008a9e924e136a9934c1608e3a1c6593059878f989b49d428a54dd3e708b2d54635a5ea1fe1d4daa7f24942b48594e9a3ccff2124f97991415c822f675fe5868c95058a87c9d054226b9670cc2faff787a7a6641efb94fa061d17904b5b36f2a1b93a741f28a977c59e15a694c9fa9801a550c7ea2d1e989405db25d573decba5b3b610cf33fe9109bfad91c5dd3b89f52c3ab941a2f3df60311027af6d177283096d7060972cbbcf4c762f6b65095046083bf17141a285aff6c3eea856b842ef408e950b814782498cd88f1df7da080e7847180a54ccc09f82ef816c0a87950d5ca4f22321fa2a924b712e13c7a3e496057a560bfd0b064e53c723de97b7f2c0a383ba40d6559b58176c51e92f09573dee973090d3dcdb16f84631d793e60cc679320741634ab1b9cb7374cc15b8bccde25269f008f029e92b7b9aaee8ef92da375a9d024b06fe58b1454f0f63b6de04bceff83dbda37d7a437ce08be3b5318470e2d920bb14dab2a6cb9c79d7c6ff83409ebac677d7891c1e5cb0d842d197d7722d84cb553e4a1d702dc7ee295c45b4514e6e0e386179ccbcca8405ce0a7cfa7cca94bae0ac882f7b4e29d821015f1dd5122722e0c79a4d5cec0cd438f13ab6b7ba8fe18290e654777afcdcde062d22f0c3060b6979faf0eb474e94b3d910a3ced37c11232a8bba2143f6c8f744cf39175fabb72f819560dedc1ed0c7957ae52a25d284438e343900a32e7b6cd9306ae4e0c5fa9d8ec7c06ab6d84f4c4dde07492679eebf1325202e9d800405fdd417a2d133433b5fc9010b64c5bb777769546313467fba1aa0f7abef2c0c72d1fb54df5b85db8c40b9038fc072ee5513d15bb50ff4f5e1db87c097e13b18331ad0f5d86f0b9d68791a5b1c6aa80c38c4503125f6d013decf73cdc01bc50aea5d96a81d3ab745d8deaa09151706fa6b5dd023603e71619bdc9f48e96781a10550dffd18a9b589f53aa24756a8166ab1fc415de42c1bbafae99186e60028572fa8292618c418b23be045a4a994dc9e1f1800027332891b7c94112b06ccccdfbb7d7680ba100c9b2fd67387e84408b2f79f5ccbe5d74d2ea14f810358c3c6abf973bce2b71e2f8b843aa0ad46d3e66caaa7a8f5dfc439273c6e16692de9441f1b9e0e0a2cf8e05c4d74204db1854b3017ce66df5409ce15e633df699bc202190e3e50e09d4327c823f845ce92121b5d321e3489d328c6db2654313dcd4bdc148f6b6aa46209701c6135b3e0a560a09cb8217274669e3e80b171f1004ae11fc058387100a5b00f80d8303180d2980f805898d87ee71d0ef4c4a037057ac4a027053d31d02305bd31e84981de31e849410f0cf442410f0c7a51a0b725d483ca00ca357a26fbed8e71c1aac1a9704abca8016c61f23b39768a0b935b6f95893115cf458ffec200f5c8699e23655926b0c496ad3cc3c05d920634e60d7da5c8b18e06314188ecd895df5ce20452c513a9f841a427187ff1e84cf4d987d22fc13385ea129b62c3dd59a5ab0af1862dece2804dd694d6f61fa0a46c59125bc2e10db55a97dcc9f0c0603a0893e3869e949db28b047303c085c7098c189578b7fc8ea1c78d5b5df7895a44fc1690cc33d749dae8a966920d24e92fed2427345cc91df8b395f4fadb799a7a7aa6c1ba2552dffc6b2caf4b1a9b0e814c763de11591b744d9420c4060cb40df6cf08a723020d9e3a00f378cbb4f64ac6be7e8551b792c4ce36cc7217aa8350035ef53aadaad5172c25d4821fe79b0008714fbf3d52824034f609ce2a2efd114e34ab44da41d4bd10387e095583e7e86aaf16a348fcca22fd3c3cf63c27899441b2ac585973571a64493f52030c4b837853281dc7b6b95e3628c73238e84410d452cddf06d5c6a124fad2096f738f0c747f26b9e271fe3ad10d6e76c0a324838f359e74f040b597d8e3d212b82053da96fb9b210fde7960e112d14e2a9f004510bc97c4e3611031789bdefa3597fef16b5f02807231b19cb3e28d5867351d247f739228829e6434749c28b4a7d5434248710933bfda9a5fda02f377d9acfa4161d3d2d9820167235a17f81049e2b62258664eeb3a740dedec0fae8be330f07a5c0d12bd84a9d4a4f728fc2ec67f252625589c4cce067978724605c90a8c656d4c071b7973b898bd2b80da2c12b0f70e9db14b70cc82930239b7422d8600fa5244052609b8a678d6532f44910eb3bc265f56d7927885902bc4e811587ca2763be90347f900571771fe24419e648999c4d13bd93900b70e3c8fd573495291e9720e12840970207542127a8f9881fb81d5b2a3ba7dafe9b6235bd2cb1de03bda0e3a628e32b53369d44d08e008c45d5ddefee0991fb0b4f14020e4f857dc30d28566fbdacf2d6405258e52f97758caf9b7de7627907dbe7ce410f029714cb9b5ca01f06be3b905574ed284cf66f51e0fc12eac44610c25b71af742155f43da757578740d786fdd9b1a969cdae3b3b362f698f3d3b9443e24655702f37f4c3c0436115802f3785b85f6087d60840842cee9d4ea84a59e7b3595d35ad1ef375ecc0bb89d0f378e474038f672c84b5f7f9781085478f2d8629cfe34d58de1f0fdc1a7a59ecbd7e37b60461b7c2548b0bbc1c77057638117372b55036bf9294704a5bf3a07f644ddbbfd542ec358fc5f5aacff5ed1cdfc82cd80331e846a6c5eac233a641cecc2e50df51e59b5d84bd906071672bc882d4eddb6b0727cde5a3abfe9106f9d8d28758eed509f876d30e9d5657231a50a4a1111df7263c1e06458d1061051464864f71320f9bd2be898363282b27bfa903c1ee155907d894778d60fc6a0284cf6089ca61d5541ffcf34bddff5a556658e7145b3910dc2ab7043320027399230506feed6fa560d496e187c7ac6e907aef5f080eec7c468692843dcc83ffd62b832b6a8017c2e0937932612b6de0b0186789f0ef6912bb30dc9103737fffafba33384ba7bba50b7307429baa2eda130d5d898703601991078eba4e2b28ea7fc43313717f095b3af0e77b468deef0a9239106d6b921d5bc2bd6e403ff7cd4f1abef814bf9ecfd50db5ffe704dc97b37e71107a38913c696d1850d85a69e009197228dea9797fab4409e5d19b6185dab35da8f643bf2c8c128f0696be88091b6786a390ad7eccb5889c535b2a60d33f12ee20e0a855e74b37f8da9f848d42f31fae3480a8b24f61f8e0d60662de663b171a0830a4b2596df43ce063a7a1527de3eae57a1d045376fb53181bf14fc126333ce5e6191c4fe3db7016282227d101b2e1ab3b054c4fe81dcc06aed427d12333eaeb6b01862fff0b46ea8a3576d62fce30a6f0a5964d3ca1b10e62bc107b127a3bc17964aec9fef0b1cf18b81b76252c23e836169be2a79ad5131f0f56b72196a9c62587c147e413808079a51ddec73e9c9eab738b0422114ff4933320063aae82683db169c78ee3942573420ddcc101424b00bb3f13d625722f72f3c572d0ec0c3145fedde0861c19725c1e2240aa68057c315f9d0a9c2bc540811021d18c9d9f005359cd9b96db282db0411cb24a723134c6ae88daca1c413b0e354a32996f8951c0c5ea398a2f23c93e050dd85e083a7d667b6fcb3218d68dfef28fdd2aa6cfcbd89674e8fa897555d2eea08b460bf5c550afd1af61deacc459bdc723a70fe3c50432473ac7f9e6d00a4f3555c1cde616dd548208399ecccbb5f1822c0c19236a13b8eaa80ef6f2ae554681f1e5497735733387e19dc29fef0694f001d0e32f04ec287602c31b427e07a193d4518f4272be9ab15d6b2ba35fec413e495101bdc815a901875a07390e255c4e902bcc25b1d2ac1eb1845a49d2d302ff85085c730c14b1302bfd7db80564baffdcb2630ed39fa755726b8cd82079449c36323d39bc72d7312ab61ddd46faae2789f0c99f408d2d95df505088522a1cd4e8f6f686e381cc960044ec3e70914c14cb6975c2fcd5be284ec26cf4f45fe057a1ebd7de863c93340c6edfe5822b199b5a1c41880cf29a0a027b55cc409b4371a0f674bf9959c515c7829517fee239664c5a65e1015187e0e4ff432247a0ef684c93c21359837ae6a44fd5be148878dc22c8585f95bc7d2f65e61f7daf88fd37def4ba69aeb5c7e407bcb76544805de268b6d209a7558a7932ed456d23f1d7e8ab2a9bb7b911fe72b642f01bf3ee13c0394ab1a37be4f7b4e224ee15ce6d5585c15bc8c0b6f9102d854b82a30a4f0cca2c2efa92faf0e853eb054b0727916ae7249fce015298dd2d6e024c279c061f06c4447184fccc124da732a135932ca3c4a1a8c59744dc0b53a08d49b112079dd1ea61d3d1fea7a70a9dbc317a06f3818203d725d7f15a4f954f34300044c2a7006475c1c1b8e452582e31a95c0274f501a33bf0e01c7d74033b05ac3a42113aa8a0856448c51180c7920d0833870cce4990ce0589e0d8ea52282730d950026475463025406a3d3d0e380131705980b9ccb53956202853f38f4e93c0f152a08e998473cc585ec716c35119ceb28047c7a429f2407e0342cd4c869cb44ad42c4148269208c45008839656c370d00fdf0e40d11861e0ca0102acaecf85d04e2ff474f2396aee0b874c4ebed5819936fb0b46f5a5122ca6a813516862119001a310efe81f11da35fac4f981ee5963bb6ba18c7f594a19f9ea04dc261500623a6bbb169cd64594df4bae26924ac411c080892624ae0e048ffb86afecc07fe96c666775710e1b88e2af2d511041d1c06c0d3ef745b028d035c744c6e2fe32080d4cc74dd55d0c653dd1f05139cb4c0073c71411ccd2210b1bfe3c7310b57724f3cf153238e91fb2033b0fcb6e7864af326ab2ba2a7120d43610c9241a40af7e08ee1e5e18218714836f9c9fe0cfbf8525738881ef1b13c38856d1219b209044911c9737855522c26868d396140199516fcb4bc5f023ae2e8edc3f5907c5486e09a21dfa210c1718d42e0cf272883001896c10c18309d501619b77eacb582f370aa5218a43d570a20249c34191befb63a132fcab4d35289c0b94645c09323f4181112629c68faebc8d298b4cb248385384b888681b0065120728691e94e3e47fae3a9f1612ef8b41c33fd5d4584e71a8a984f9d2074640cc15e7fe58bdc726b6565e528903d03a218007d4111683c0ed0125b8eab0aca83f73c8b3fbf3540084a2ff1bc17764a18f8451ead63efd70cd5c7be9025edd1a58e962e9035a2c01dc018889f9f280399b2b0a42ce13c4755946557581dfe3f50a0407afa8609a12408e8567417a38840e5430827b5c06b5217dd77d28986067a439fd82b6114e324b2c9164524ad21e3b954a51c77df3ef71e2b804040da2f2c323077222e9845438b9caa7e9bf5c701965ee89b8c246f7edf121917f00ba1bfed43c4549b77d3799e3506de79f970d10a7b5a8cbe00620f41ba8079ff46c52b97d9c30d8d81568ead11889de4d1c38a7696040428570684270d5011cb0ce2c9d3e9686449ce75829abc972cab87015cff8b4e8aae13da82a2a3cc5e9aff2e6b2f306fc6a0ae18d5c1de69b2fc7838329627f01e00075fff0687d88446a701771093a2199439f0a7682a3cdd62d127c5e8580c80062b1b4cf1ac53802535fc50f78486890984112cd4dce4415b0426a19b3d4034a207084b3ca0715e235becfba00c9d947642811694ea3a52632175647a988118da6f16e6ebc51de62855695bdac869b3d18cbc922b3d27fe6a85abac05998402e56c0199939246cfc762040763da5b096e4a167cec2e697c1040cad527b4c456d2b8eca045e5a06969cc595c9a7ef472c219c4a2211805a19901fa259eb65a6dcd1dca2a07896452fee7557c8732d9ab08cb4d246b144afc9de295d41421d8625de870d95d0e3b3ce90300048f72125364eb5a61da0c129d025e9666cc5064324e8a78d8c11558abbd08a3e7fcab72fd81ea4f77994a001386ca8b1a5847505f1c2a3ca0fde107abda8b13dcb385e8af03f1d259ecfb6fdf607ed1a56a125fb3a787e35e0f8a4df807e973e072005a036cb16c1e4d57ac03b9bbe30ad356b99c1db914fdb5d21fba475c56bf9e5cfe1c8112635d5818db087debe8b538de5f8e7711560b4a235c05d045ac169444702d408b589950da801b756e1a72139f1b876eac09ef1c56104a1cb821a03bac2228ede0424073b00aa1b4c295079d3ef4f8dc7ce437dca9ea0bcf743f4d71007783f0d273622e9c045853b17f3f3c265d2be18b3737283db8e48c5f4b1dc232a47432a040fb2200d86e9019a566975e6fad63f728a1b0b7d2820c149db3b6f0b6ccf30c7040452b441dd40ef62257aa592aa77bae42f5e505e991693688c86dfecd49d91a46d5348592415f46606ab9541749c44a21e84a36a0de831efca9b52832deaf380442af01ddb6fa3a09e980b8dee50dc0694d1f6cbe7b0583982a8181d49f83426105099c3a03aa76327f541058e9381d90e522f68592997b2344e75cf4625145c092e23a00b4847441cece47469ae031da4d48ef55b577eda4b9bbdfcfbb43ab898195cb10202fa8396600467d90d6ceb4dab7ff5b08092d697b6f29534a328907a7075008f24f6ae08038be77b68a1383ac9da75c953a09a1369c6e01240d31f2497aa7adfc264a567e926751d2b0177ef16a50d0c25e588bb264f9e36ddb1e86b69bab64d8a804bd0f7affedc6bf6d94ab38dbc39f200d93dfd5b93ddbadfe2062bebddf0f0893ff65d96237999a32a117258aec769b6cdb2643d5200bd83c3aada3c3af5aa43f98e5a7963b1b49202cfec422498b7b2402a5ebc09cd83e5824f16db09857e749b00208e08e1b9ca4abbb8dff3824bc11635cc1c6f758cae4137080e37290ddb6d6d1df3661ceb6f536271298b31de922fff497656c85af282181f3f4b80104d0a7fbedb73bbdce08d3e010ecd69aa7d3f6dea9eb38291fe2d8e412a408c26c566556863375b1dd73a77726cbef05f5c78dd41f735f5474f5d706afe80c555107e2a6340f33b16ccb2bcbc4c251f6ddeb352784a7da4adea3a94bc3a0edd174546fe7b048067384306fac29397d9398d41c8feab9f39a8d494a114c1402f4f19edfa34b5690de548df19d1623523cf22517d3309a2ffd40e6629a471565d14ac3ae037191563f46ea9d13f431023e00fe6503baecf47db390ea7dcbac773ae751550752d2846d8a98fed0de58b3cc352bf0773a99176d999dc74d29eacfdf73ca24b295fed83d16f5c75106735809c7acc4fff4fcbe34c6d3803ef0992e59ddadd65873affd890bd31f3f57e31214f3a63aa8166b0e04654bb1281af58ecc79fa0810c65f4687c65ce3e540587e202f02f22c6ce58bdbc8fde55aefdc0ef230bdc37fa24ce32e90b211cb6a0f001b2fd66c248f999cc7811cc6df7573be5eff0eb4c297899343b4dc2f5959aec6ade6c03840eca92af1877f71a0bfcf9c528e9e8c2c5fa6b57ca0edbaaefb9c477f1ebb23dd126472f6ae838f7a58a145b9c333ae0eeb4ee86019cb2c84e51140187f4d4997cdd23f5a97c11c7e99ea8f6b2c9f62190b73fce10709c2fde9b987fdf5807f82278aa477706ee06c0e6e2fdb37722449efc05ac4e432b6592cf497e2f7be83643828d4a39e803e4c450fa528113aa4bfb61b13e7e0dfba401fd433339feafdbceb801cc8f23313f449d5db7cfa3be3cffc107b3ad51e3d435bf5427cd4f768150542f53c3cf9514519608ed373176d833c99d97b034cb23ba81e5a1fa2aadc0962d6b957bd55d1209efc4087b56d2a2ca7248cf488064c167e5323fdc1c83400268e8e8eb2383acae2280b24242b229388a43ff9ce5160e49e892a1ffe42c3a5081d09ccf1de8b3831582865d2ecf6c9c173d5b41efe94ac698473c88734ab87ef793d8339455f94380b3d4eb968cf52abcd65c576e929d2d9f26571b95cf37db572ee572ed747af26f5362a98ad96d721f592eb6f93615d425cbfeadaca530171b95cb5f3effff59ab3f3a6197b01bd2c5e51cd548abe90fa55ecba1777c13c8039b64862a6fe3c9b54ec1d16b356de35a7ad90346f0c723dec6f45ebba17cb860dcf66898904735ca98e4131c8793a88e66b9c0909898644ebe6eb65df1517234130dc05f380bf344cbe189ad99c73f20e3cce3bd5d46a34411fd64dbdeba7a7264d7b933779937b0eabc258afebbbfee4bb5eba5cbfaa2e1723f194fea4abbe5effdfb7a29765290a7b901809c9ad7ca7cda00f2f6126ebb43fa984f8af6840bcae565dd7cdb9aa4c6c5a3a5dabd5529c95ef4cbde37ad933b9c56cbd6ee090efd5a452f405ffd9b4ab5fbdd74aa528b71430477ecb00e630f2a4d72c45d97a942d0de56c07835b2430c7add79bf7ccf5c17a8d3c36d0c79f216c3559a9b76163f597b5625fadeaea97acecaac247a984703d13638434a5955886b251c500b3bd136d52450d2687ceb2b07459e6162fb2b28b951d46e6531c488c11ded1458039a4472163651f010ec14a9adab51c34d96e62495fea98a637bd620f348bb2178b420b46e7cbb7853c8acd30cef811cc913fa9d3b098fcd183dedf15d4aa71b12823310ddd2cef400b98437e8fe93cddc5f5b3674a1ca93f795457e0c1944ce24e83b1d2917aa767fd21cde4d764b3d90caa84c0ac8be94f325227452f2ca712e2fad83b5b70d2a602e2faf82925a96fc27d84d5cbef22c01dab972da05e729e9ecd9fcd6a4635261373d16893a2a1d2ce99c3206d4a29a5e7a24ef341f32bf060cadffef43455898b499369b9a7f91465cb647aa7ab38dda75e3e37a56aa555a77d807600e690cfa248608efc0967b4994a661634875eb337a2dd7833bc9133331fed8caa1e8139f269d007557d9c6a13e6e28cd53e9cc9caf70d0cbd3ebaed2cb1b9b6d4dddddddddddddddddddddddddd558596d23b0fc56df494baf12bdc70cac4ff467753858e9dbbfbe6be75fe8aafd30a7f52e1392e453d1f62b6fb1bb463de75d38b291cba428c42a4c24bf91ffa40b03fc861f2e77c7507dd6fc8ca18f4f57e96bef7a26c0170e3552a212f20af8faf8fafd70ab487b6cc54a0dd44a661f263f73a71bbcff8dfa09d8d9da53ff938b4877a8b0dda33da45fdc9bfa16dd45dba45fba83ff935b491fa93f24b2bcdd006d3b50ed3df528b6926da63fa934f699fa8c76a077999ee627cc9ede55847db799034acbfbb9b5a7952c9c02a8e71940e9243b2fbdb4fd82ae310f48140baae7320d905e9b6ade33a6e73a61bfdda72648515471b33fcedf5ea2d7ea42f4866c2305396893c88e36e49d6e64adbfb846bc9329843be70d0661d6b2d69f08bb13757faf37725e83015749f296fd5fbaaa934f54eae31c8797ce63e8bb51681eccbf37f554f2233bbca247a63691e6e7a154d7fff9a1d4cae8e8139fe92d258a8f29146b43a5fcf185fa4b97a35458c319200fa4c1bbfc90a0585a61d8d82faeebd9efe78f4175df8f14104c43f5129ddcfe95114a8e7e75461504af7735bb0f1f2b4701160e30c30272211e3db84993c65dd049ada8da5a5258779bcc42a1cfeeed942d50b281f6db7efd1bca4b2fe7e440344060a13a73ff54f7e70baa6debb62fddb9ffcdc8e89a1fec56b0e833f27ea603c89f6e364c01c7fae32d3527f97c930815d608eed1815d0a70adeb1bd77e9984502e7f067fac11c1603e6f833997f7d2f9a9a8cb1bf5273d29796f543569a50d226a26bb071e8e8ad759a37de608f8e0e1d1d3d504747cff7ac8387c00846fc4879fcb66daa2913fef6b7c76ecc1b6fbcd1a63df07b7aa79f3b46de81b5db83848b387fc7dcccdc5c63c99ab9468a09a679784c2cccd624bb5773dda662a6fec84cb6a9e741f53e5379c8611d83e9587794ee292d6b666af26c335cc285c4e41a2bf567b334b97a71d8feadde685b561cc9cc5d89d1c8c8889b26d31c339998c63415e813631fc09d30e00e1a70c70970c77bff4602b612b0a580cd057a15de31df593bba3fbd7f33390f8e0359efa677d80d204f0f87f10e239c630590e788c3fc5f35a721d1aeb06066d084aa65bc8307ceb10613ef602c9c23089087831c46a68f68202c4cb87c04a6313774fbeb57d4c6aba8cd73b4e6374af3297af328ea7a8fb69e8d5ad69fbfcc2bd087076371a804dbbfc5689083b0fd57b5d57aa116b6d9ca9514581663b1ea15806d95e51cfd9eb4f1bac1c66b4cbcb1f97143931caa5e68e180394d5b353491762c2a2cea53608effa45e8573f8e3d066820e8b39ac936e00347fc9fa1548b496027efe33b4b9c0cf5f455b09d848c0cfdf08efe819e7709e5e01ec1980513561fd087602fcd0809fff897212ccf1ef287b0173f873947d00390cf839af013dc879380840587f2026404e3a022b76d3344578902b073533333333335f56416d8891244db058b10c6b969921196e9352cafbc4428e31f337c527b19f57cf8f961993674d1e4cb25d64349b47905809a5e4239264929965305b35411f1dac8564191b1df54e9297167cb14d8b81bddcc5762a86858bbd8ca454c382e5d471cc711c1791ec56ef6be9089c904e3326fcd9f15666d65d6383297f7b94528d14d325e7a9ad6b667363ba8184c4dde8afb7e81d1c20f24f7faabc457f4452d589700f3705eaf57342559c1952ef3d0da9f7509faa34783375f6fcc89abae29eaaf6a0fa942a55f90afc39d5cb41d665ed70a4ea050843803fcc69c96374dd7de1cc1cdfbb395faf7f8e62914dbb59d9acac57e6abefc71288ee85e39efb7975ee4199e5870e63d9243fcaa6dee1de5f92d966e07e4ecfa717cce1f7685bafbf5161269f501ed00def8fa2b2c961befd40151096e1f07796ebab9506123c592c33e3210efa57d2fca949bd8ae6590f5d0f9de7f5f3a65e06622cb66b2a0d7d518e598f553343e60b22c1a6ef87c3da8ce936624c9b8e440c35d75d34af0f717f7969935de4500fb98a3383f7a9a7e1f4a8da03ea4f8feae1f41e4c720a9b30a71f3a6ce3016fbdcdba261b9fb58565cbee6e8eb68bb6fbb25ceb8c1939088feeeeeeeeeeeeeeee4c63fcdbc8795cc0d130d5df4e526242fded1913d74048faebd7c1795cc00161fdaa5abdf250d2c182ed94edaa63efcbfa0d9cedef4b8915b4d9801564a38c3146d695ca92b1acf4175932968c6525c2186364261b4f363e8fe91d23e8c3c3c6e72ff00bcc89cfb4c642b750157fabd346891514454c4a4a9a0d6d195a1adae24ff850529213732929c90bc8c3649c9278c9877ca877747c0b64a1fa903bea9ffc3033cbeae52b150997ae72573fccd982071d9c44a90ef21bf9ac3f7fe94551ccebb322eed14a4b8030676252228239cea424c5e4576a150c3330c7bf86cbe41e67abf5179685aaed0b98e31f6deb8c29abdb8ce154382ab8531a1dcdbd9beb1f3f7ab8f0fe3fbc6b8f4e14b307ad69646c57482322e9e5c514424727c98da0d3755dd771d239c9c94d4ae949493a3ab52978e38d3796ccbcc998e2154bd4240e1de774a2bb43efd1d1a1d3c36d3a3a7a6af7c71863f4a2a50b19058c32b8d8290d3168ac2dac5a19124b77a58b0253c775ddcb9dae76d7c18d939ce4e426a5542ae23c42547a7a685eb414e1c50934a41262c858f199a78bc56231da0ffc48e3bb3bdceab4fc128ac2fad3a23079f3f77b1162a28729d298851edf36963d78e3c8cecc3d4a3c7ab8e0ecececbe59e845cb514f0b228efeba9f638e755872dca6b3fdd63a3a7abc6819429ce2c68b1b2f6ebcb8f1e2c68b95840277f8658ce5b2ed1edd232ac8638cd1c70bd1fdebca48e50335bbd21fdbf860caae946d42dd0b6def6d294ee583dfa52c6ed067f85f4f987765246140cd604ec39caea2867088c41feedb0a7195071f7eb62a652c2ef3a2866c5fd490ccf6aca8678a50b3a82187b16830f92f6a88161b15c5e41d6c79a0c102a01fafd383dc0d4f334de18f0fcd37b83f0ee3d0c09506d8bc2469e7b0fe48a7cfbfc2c4c4d431c6c2fd2c6bf8a3838333c45f02f0c72b90bf9057bea28377c4fe6b2702ab5e10426df4864d5010417c2119c8de43d50b3560a6fc7ef40e87c417398062e507813eb00856febc62deef0b9ca3ff7637a46c92fe5266cced2fac71dfa37907bc4dac075530f8bfb4477a470a9d9ea3489ae754394bb4489a07fe7010136650c7411b7f91feb84cff1e21d0075a78e3a4cddbd966ae552a604e42104655c6f8a2a80b295274c13dc1840b9cf8420d20c2f821a9c78410896bb0a8064ff8620d5a0a6a10058f3310a2c1ca3ee1d28323329e68e20b0d0be96d99f7044956059a2eee1e03e85ad2e28323a064b1825994815014db931428810ca4a22454d9220bef85c54645876b68c2193f68814206372063268445e2208b26d4b438c1842b60f013638c5162b9010503a60093821b0049e9a2040f1085901292498c2ea66c1145109a92682d206ca3254a4fcc80cb12509085ecd5aaa2d548480a42155d8a6a528e86a010a282826938214989203431049421ae703643480ac770290b328e6882122a50c10d20e3200a1d0b64f8000d2a4fa821450d9ab7116514f18215702b022ba02909537eb0011738a0c1031081d13571811628f8810db0a881153aaf873df363a21e2627b25c4104146518f5962e381f605aa00435a468a142891f1dd8bec41b810431599610b2d2c5400741cae4a08927b2008389259ab36c39da7c9851b30a08c165cb1948587282961c30a082f3610b2126258c71c20a143744ccfb729a23d4cc08dc5b58dead032a8430459725c6e88113414f64e9a658c218484738a3085a969f18638c1e18f3fee3882e60233f8cc184194800438b112cc4900b6c7c17260c664920b304185a8c00a6fb62de395fbd1475249829d648a28c509558155d14d2b2c4968410479409c20a588082237e628c314a683bc62656bc53c47f3b1beb809fd0008c12130bb8d4c08c2a510b0be1458b105d19552425717414260c2c3ff13f863e98814614d6e0020826219e3471650757403992020a95e8848d34b0313e21c28b232ace20228a962e108c323028030b2b42a491440e9a0c46c5f83dbdb38346fc2fc61863173714aade5307b9389d63156f88ad06d1a866a3d1bcb2266bce23710061fe5958efc2ba87d11d5191c95625d07b27eb3899cc795e4c57b2ccba6461aa1dc9868a8c6848b5deb9dd52ef5c2e4c8d33c29b3284852f812c8443d7ebcaaa62ca670bed122e137ba313e644da2a768c5c137322cb95c83d83b05c914c5db478a698747830812487e0518c3151c694bd80087b3f2694ecd5d10369915b0edd95dc2287a60456b399f3c01fd972a82116096c3f7335ab2a0954315bb39adacc92cdac892b334b334b40abd9349a72c861feafd79c2b995dcdbaa6085a589f0dd5d4600e1910e6bf841935ac3f14bfab99258ae20273a41c923239eb2291e497de815e9c50f25a15f6a6624d80b157d29a18b2576e2193a494918d7a07c5c576c98232b2ceb4fd515ca04fbfff0afa748ba69a0242317e28e187071d0668b767f8524248a1954768fe571473b6183e50efe0e000899191780b2ad00756e60173c146fcad33a6d78e995dd65c3c2f12e4477f3a5f7fedd0c8911ca45572fad4439a83b4afd3b3e8e9c49dfe459578cf7a2f45ef5b9cb7f110f2a4f077da140efd6c50f8adb7a14ae0b7de8337363736360f03b43675fe6d22ed4dbdf073606bf3ab169d7948a1b5a133cfa2f7eded5a9f4d75d5d44ad3c353d47b16f57e52be4da485efa5a8f7a3bf0e32841229d25f1f116246470ae3a64f40def60e5761564bb0ae6aab396993366993366531c9d6f6803e0e04b5805ec01fd88641897c6821d7349fe947ceeeee0ed2564c720834c8cc15095af5264fbfaa5cbddd37658df5b31e3d7d11e7e9d76c6ea527b19f22ce037f6a4b4c31d4f7e81fefd55dc461fdb05be8d95a725112031dc2bff23908614b29219410420865b4177e21026fe079ab38b980953905e1eb868bd9b57553c44cb17093749324f9c98037454c96524209a18495d582da84df5c068cdcea3846115b860c3d2b2fdf71866cdf8295766bc1da1881c5f0bc1b2ee6ed6eb89810e6dc7031af947d9639dee0766f6f863e46de103139f626eb8cab345e5bed94408414a043d843a7e38f1cd7cddee16ab5235baa8b1fbd4b4d96c9d8ca152c5d3cd2d560d71cb4d15832864dccc4639889997a678c8f4e357f813e2d552e15a2bbcc8c1513ece9813ea9ef61cb6d342a985c3763dd2b32e4f4dd902652a43d2bfd7932e52a1f33b607e6f8d72c61b6bd3d29552ae5b9603664097d46ca7c34ab66d87e86d45e86ed53455043889caace0793b87ac309534620ac80b0aa79fda3070bdf30fb037d78588e85e649f5409f05409feea4e346f73d0e16747c0130c75d488459d57c0d566c756c28a8b30465e18e0921d6419d65cb5c823e3c6c8b61b21e86953c0ff6177fa33840b6473d0a5a78fa2728284ce8b0eebbc961fe1eeb20d61a73a3de759077a19132b9da7510181602ccf17fcda715055927d21f27e9285fccdb633d8915a095f567283f401fb842823e3c18cb111dfdf57f3f9ce746c31af5fe36401fe7f170344f12e78f851bdf5f12b8d43609f4d9de1f049087a1c4e0527f0fdd7bffea0f0585d9031111efbbefc1fbee5ffda96820228282d1d0bd577990640829a107b11f547d39ccbf475719fc21bafc230891223d36409f86d5861826688be7341a0b79c630ff19ebb97b7b7b47eb758ae3b89e42e3da672cb3f3ec9564e40892ded9d8b68a090a07853a0d11e4eece8224ebeeeeeea723eb1c3572844e333824441ab3b0c946da6ad3faa869b669dd4772e334608ece6c694b6309eacfbf7d3693804ac80dfff59907596ff58713dbfa1721e6465d9a278ac784acc35a100eacf31725af59fff18fec2ef01274c5c623ac3f33734d97e933e779bdbf1b394f0aef352c1bbf2d390cceccc026d2ce3c4c5d316762d0269fd98b7c46346f0cba3e5b5a8a366acc1ba398dec101c24ff33495c5dc181419c619a1170a0ad3c6a7f0d76734df12c2f91e8d5379f0e1e7f5fef3a1f3ac667cd6307ff797cf663f441d937a953c0af54baa93198127cac0d7cb508c58824312abe714d49b0408ea9d21091c1808fe6195c4ea899870ec7148e28970781cea9de1bb2430c0e18081eaa4e3d813cd506f04aa930e4abd18781caa93d4927a71f85575925af244abe758bdf767b0f24433fc0cf582e023606586278ac09267284f8443bdabe7181325f56600034f84aab7433d518703131c9e88c963a05e5475326f782254069e0803383c03c1e4f98757f2a72a48d40fd46ba48a0c271deadd3e5689495e86ea64caf032d46be451556478a20f9cead5e1bb2a4fb4d57b525129ddf311d5032678a20ed43b448aea4f50efb643bdf13b29dd13a14cf043a40c7995940b3cd10e9c6a87eaa433c113753abcaa3a49119dea557d579da44e4fd4bd09ea1d62c47be08986fc907a653062c813c9a043bda737c113a9eaed5e87ef40927a3f509d743b3c5157253eaa3a49a99e08f53bd46ba43a99499ec8c81ba9f702d5c934f24417f87a557f82278af5a27e87ffc04b2a5256bb20b23a49d150afa4b221a997035fc30709f2444898ca13c97a25479d70db13c5e722ea06eab540141bea1512658bc245894fb4d1f051847c140b3c910d1c111baa938e8627ea2840246315f94491867a856ce08984bc907a835411f244412850af7c0ac4a7e16d7822ae3ae1ac10d0ff1041529d741c78a26e024fa43a491171f512f9ad3a49714fb43d07eaada13a9916c913d5f035d46b81ea645a21a65283a8e1892cf051a4fc0fd104eae57e024f44a4deed893c07be873310fc0343e1d8131f7ae0e1043b98400727d4e673a0375f02fafa263485c781da3c137af34b5240d19b3fd1d7773485e76e5ed2d7479ac29380d6fc0868eb45405d1f026ae36fa035af84b6fe52d78380daf824b4e63f405bef01eafa0e501b8f84d63c0768eb37405d6f03b5f147680daf016a81cf00ade131402df046680df502d402b50845d90a509ba1fefc69a01b115630896129407d09284866582294db01101066602740b71f40d1c1182b013a03951f12e585d02a1f012ac4542a0ffcc3545e062ac4512a0ffdc3543e0815e22a9507ff612a358acd50b7e0cf53aa94ff81ddc28d87340b84ded618eb0f017a5d45d63f067a5d63acff0f7a5b5bac3f0cf4b6c4587f1ff4bab658ff17e87589b1fe2ed0dbca62fd1f406f6bc8faffd0db2ab2fe96de9691f5ef416fab8bf57700bdad30d6bf01f4b696ac3f03e86d35597f1ef4b6c858ff1df4bab2587f1f7a5d43d67f01b4875e5717eb61acff0ebdae25ebdf02bdae26ebaf835e1719ebaf007a5b56ac7f02e86d5db1fe08a0b785c5faebd0db3ab2fe39e86d2159ff03d0dbdac2fae7d0dbfa62fd59a0b7a564fd0d406f0b8cf52f00bdae28d61f46af0bc8fa7ff4baa6587f02d0ebb262fd0740afeb8af51700bd2e2cd61f07bdae23eb1f007a5d48d6bfd2ebdac2fa537a5d5facffd3eb52b2fe00a0d705c6faaf4055a0d7a6c8fadfa0d7668bf5c7a1d0a6406d6c509b2b53acff8d15d85f0d85fdd1508f45197a2c7a79b0f125f56ebc24b03ed8f8b789953af0206d946e39aa64890e36f5d04a2aa590cea67ea34b389b7afa93ca87aad8a9874d1a08972953a64cefd800d95cb119b2b1626db2d84cb19159ff6b83c5fa5f9b206b33b3de310bed6dc55a50602b08d832027efedb10d69fa362fd4f49587fd512d67fd56201b4aaad1553fda9151382b68080684b36046d5d41016d0d11415bb316ad3f268251c043d0fe61200a7f5808ba51096ac51ce68f02d5a9e3362885c21f8f837856a53888da8ad2306fc5faf32814feb49a705bb1e892cd9f59729e560cc2fcbb6e66e935b364dd8c562c00410ca53550a583d0f32ecbff70f437a5e2b0dc0b26fceedbc6ff70401f95fc87f535a1f7a7ae477ff54ab875b507ebd19bbaf1658cd0b7d83ca7eac2163ffe47ce063590ae1e3ddfc59a7ff31bf5b6d76d3ba7eb6fe8121fec062d8b2e61bb4d2b965cdf71afd9345ffd0d05d9ed5f3034e370627e5badd9325b4fc37af9decdcdcdcd7bae9b57fd305d7f73f3aedaf57753af8d9f2a215b7d3dab84ccfcf6de8dd184763e843e29bc07535b18d50bacaf11c2bc5ec7b067581b85308786f59ea73a8577550caadf6ad75f0aabbff97873737373d3346f6eeaab3ff9addf3e429f9adffee65d54c9f637ef6dd45d2f57c501e2faf930b852a8d746bda1655ff56e9f035bd7dbfcbca1aedfa6abbe28439fa9a9975974aee80cc5d9de8855519cad16b128e01e55bbca4dafd53c383adad637617e12e77908932fa5945830c185956f6dd85bc1d1962d6c002c3c8a0118db1076acd612f3de10835725dc774ab89437b1dc6fb1eb9ea992f832d6cbcc396e0fd61f728e7b020873fc49f737499857c7df79a39c3f9caf42fdd551cdf04471d950142f43516cbf8ef3f0103168696cd87e236490f42751cda05028d4c3d016c51f7907efe01dd0f24cd99954ec26cc99ef0e88ea5138331f7166aa0f6f66c67dca30335375fa8baa17e643550c338fc2493ddbd44f8a937a68e70a2755a79db40566f6549dfe5a2fb6016372eafd754031fd3d21a9bac4cb781976e833b3bf369ade894255cac7f65df734344a8aa60227d8934cc2dc22731b6f1b4e0c2c7162d5d1d1b0685b4c986fef9c3ab155afcef060f34898c4d342926df703ff06c786f14bcbcdd33fd0f318cce157c1ba97c12f08eb87f06db060fb574bd0075a61795e5f91d743616c022cf43234b39016061016d2c298624f76b33765618ccd83477f3ae8e96924fdfdec22e5912491bf068a19df3baa03099a14e9af37123411027378c7654b37554d0e665096c839f863dd38073f7f92dee1ca59029c31a884ed5535510b15a2110000000000a314002028100a86c3a2b148341807a2327d14800c7eac4478529989d32cc7619832c810030c000000000000230233d300fd69fce380a904728361d32e0911fc1747cd85c18acd8bdaf5562087e10ec7572788ef59616503dd75b9aaeeb744b597078c1c50a3602810694fa069734f01877837557dda36fa7afc41ae277ec98c4a11b2b60fef87ca40f4569773db17497a9f31b20e60da859a18780fc101898e7336e2a6c19294208316971f66f9e89ce594f49ca99fff48a3ce7c9345cfe7ef18bc3bd181b0f5e9a611cb276bb985de00e45ab71d5b08354ec66cf2195244ccb9962e04d9988ae43bd3b63ed90d47d5897df95a51798820c6359890379c38941a1f27b58acdbe1336e89a3a514da42251d599e49d4fd9e89a8751aa6b1c2278a438450d5996256736a7134cb101cefcaada3213fac2033cd78513793cc449568a2adc133e56698b4f25c498ecb326837ca0ce434974d9b88e69a40afcb9dc550b90538cfcdb7dedc9c546acf02006b1c2cbdfc97e2fc12a56105cf9d000f1c8ff0f114e3267b2c9305ae21e95095fcfcdcd873359357dd56482f84b0099a02c4887bcfa645188639c5429365b9f7059a90d7a79daebbffb98c1ef15fc8c806141a74d6434741ad1ec4a253fbd2937d7e45c4d907fef54822fbb3fa79c96d75f70a07c44899b6b0b547072151d892a156171c6c7d12465362a52088d3f46c0105ac10d96881063337c014be3810995325029182e931295a662ae4c789786688ece98a8a3f37304fdab35907ba44ae4cd45bd4bf7a2686f4c6d3dff765f431ba7d562786afa3136f645629f5c188353311c78634104737c49561facea1d5c50014ecfad7f9f1f3099a4fd6f692abbc8f09240665b02c3e7bda11b02b943b6e06416143bd0d6c5301c863a4e1dcf49f5f7a3bb000f5124cf65f394832864ca4364a2af2890f3334ed144d1b5f24bdd3358a434c72cc669e3245cf19f6eaa80dab7b53c95a5111181a369f5fc5b4ad80d1baf9151361af842abd2959b4935e03c18982e7f8be0caaa0263f0367391a1815a8de975bb7422079016a932b74efb1c0263953ed5a3d3ba899e2faf651b2f122fdaa07be07096f5621065b31212fe7ad63e0e00a6699e1155e8f5867ce881f3871ace7e3e641ac25145b7a1ad0c4f4f8052273f39ebe194639bd1bc0f84bc16ae6b847bb660aec3525cff97294bae5410095d1deb0ceba0b41c00654bf5b38ffadd20072d267af2f146664b2c1fb93fb6f382b3c1ff1d1ddcf92eb119a28cf2ef5532fdf60fce7b7c1f79456f39c4163184e493988dc676e58800b1ffbc5d3ab9300db9966a6a31020ee18ed3c4af97ff29960a778f8c2f882b3984f59fc6bf8650219e32f05282db612ec585e9ac767694057089a3a2bce251702b2f45e83ed5e356a0c33ba043766c06f72056e09a13a29ff32f63fddc10526b2261ab283e75d41f6c72b7b0f2ffe05b3723a4b09fa1e2db46e5c9ca5d543c44443ba200e58d1256d11992f174262d006fdf3644d929c4034fa058a0415b0dea0b07018928ed8ffbd50bf32f1af7204220f10911bcdbb8099c4c53c9e962b0f6e44c78939d2f3b0866e3ccc522c54ca2e51327513d6fb2855860db6693954649c880e07e7bb5baa6a9ca05ec92d7f87d5006cb398772b629e20f3370a7d3070959832205ea7e70516d920355901f895c79faab10a7254c29b09699db92ecaa5f92dad7420123c088e0cde81781c13325c91df5a6ce420ff11a9718b844262d3ed14b1d9358768fd0b559f7e273beb79b343d10c48c91f6d0ec7b835a29bc5c02d6679ad8d00014557b80ea8778e9c41b22a7f51ce84b380564973be41b8e13a324a1871a1de0e11948729aaed310536fa18c6de9505fb78519d35ff716bd88b8396b78c0de9d090d28d0e9f3260eccc9e026a2f710b1e38446f988dba6d76e90a392efc389de27fc7c7ee6333588b5a85e9b152308c5170f04971266b1c443101e3ba88e011fc25aa17762551e78b00e1e78f7b7408c48cee0d35b131c3c25bc2f08e8bbc61956ad916e1a4dfa19e71f0e4cfa8370e2d86a7b6d740382c8c09a1ba64ac1408a9a7187959611d109dd49eb2076fad66b86b5407cb5476e897fe814122d7ed5845de82ea93e3e91710290cc10807721b61f92e594b4cffc53b3ea7abb8c5a3a1ecd79adad3ce57d6dd4179dbe0925badb3c6da228800cf1c505a7711f3c8b367494ca18c0f18174bf23bdbd87c03613f6b1bb9fe919368a69fcf79c6fa8152bdeeab49f2ce321b0d05bd923228d83dd4d232457b238c35ac40ddcb6bd11099950f8e444ce5ba4597a7e1944e66de015a9325cd1923453f6f387eebc0f23143716b8106644d32d428cde9d6a8f045a4841adcd2d78fdc1853f56beaf5fdb852c544953f71562cc2961195286661b386a4bf9926b34ee28c76c1f5e7ad3fd16176ce84bd53d16be48884ccce748f51247ee6182294c9d2ab3e1d3bb9e246be903bb9e6d42bff2424ead1c5f461254e16edd3b41bc42588ab9955786213097e7a1c5b854558b8201cc70ee78281ea31f186a5a076d42c64f31c3ca6700a5b9c5cb56b19306750233189e16535f2fd2b945e3cb459ac0dc54a40bae8ae1744d3c5992d6d693016681598d12a8becb5c7360c955192e4a287c4916ba8b65d690d0d412039da06da2eb53b4dce3373e4a86f573250ad58bfba3b90544aea540b0b3b5e62ae5c0707a601c446f907bab5c165312add4148f7bf95190613bfefc3c95dcfdd92af4fb780fbeefdb21f2959693754cc19a0a001194afb21c33a323e35d98ee5f1822cf0a009d99de6b470b15054e317e57f44713c0291046b40ec458285435d48db0ceb900013fa8718e846ad770fe2cb165cf13900020e7136e5770437e1979dbadf386828f4ba097ca061058245d9209248c6aee270ce1d731a8e21cba05fadafc79aeeb08517cb89c7c87f9cd228d1fef81714ff752f23d7bd704cf3a9ed1730f358da2715432c629a8a9ee9b555440dbf061ecc64d4ab8844f0b981057ef37c449f9157bfe3407951b912fdf85b7a9de9f5dee5c36d8c59e1148d6c9cc84a87eec19b6402c09e88c542ef43449a323a7aca6b220321b2a63b665aadd9badd03589c2d35292369ab5b35b00df2eae2ebdea14ed581d4005c364063c5440f7100eeef6fb7ef1814211cc58fbf243c231f3954a0ddec4bf5a90d3cab24179970cd084eb29b0de70ff91155cf0c2e928f73e16675c0a83ac9bd4e5eb52bf342ef1a017a432005cded3fb2b6254038369b31f1d2852d8f09ed3b5307c558930c0d713ca29fa14b4bb95977f6698331aacc570a6197d2af0b14200ef34ea869441abe1eefc599a27f47c9b6fa01da26bfe132351e68a8cd2f99a8dd9e9a30db80120f6361b789b64dd8b7323af525d833fbe1dafb38ce29ffab29d4c99a64fe879d27d3dfeb0bbf33b42161c2b153324edfd2a3040a27a8d3fc20c359417dd9df7f89490e1da28ded784858d1d19666ad16542d441381fa6114bb0b304ab41b0ae9195408445ffe2fddb7fabce0fb88d61ca516643dda713f52bdb4e01e1151728e1aa946b751525ab93da2857c3645894822550720f3212418e8f8de2814984f3780ec827050abe8d730ebd04512ad38a696440cc846ee5e0fba4ab966130d3a3ea10349b8b915fdffc3631f325c6f77c3b90a04890302e2750eda69260dc106908f0194eadf190e6b278310068ab653f30c1476e16055341399cd4696cbcf36f277736348333029239fb170f50be91aba2a18624e101f13103231d782bf5b9f18cda210239e331321d054d0df5382ea259ad2edb978c60b2c837725af6633918a889cbee8dd93c28682202f6704c8ae16355f83ab5ca2ff123c7793f5e3c0dbdc244111b7bf953c29860b6f7e9991a24bc0db78acf4ab91582f528155a9a798ca79a8e0df135e3b6369376c1bb9e309a18267c4782ed09ad1bd3ab0b5a9c2b18542ceb07bd3616dbb4530375fce51edb8fd2612c3369a7443998ccebd89b790bc1932f325c257db879a83dff05d36d1849e8c0f5fff3faa6259c778c6f29879f1b8a4df32e48679ebe5d859ed6dcb7eaa1c4a347402bea693fdec775e39f0db3d6c1a1486c1bda9f0ac881db867841606f1c0d89b659f0536dd781fba33f61dde722339e11389889f6caa055132039789b52aecd4c39ace4795704e8e5a1e0c32fb06c28da2cd1d678b5accf5ebf323286feb7cd623e1ac82a3597048b7533c586ff7a19f6249f9528821bb47a70e592387ad0fa517a24b41b71cd2529ef890c4856f6b65674bb6e99653e63653ab0e2b13ffbadfa11a91caa86a3b85ce230466242ca13af88b64d50e9031742f268e0d80c9fe5f44c1021bc20de39b0d4515defd59f351ba3586ec4ad2f4cb954ed65db7d82f4a70b10d6f0be13955618f8a16b01768c0b5ac5424ae4ff8e3e146ec2572abaf561ec0edc9b763f946e79df54412929e95dd87ede4ad43750a21750fa82fe09fda2cf96b7a3c3928fed429cca655966a0649fe5c7b715ba424448256efd03ea26abaafe2fad9ed53ed91fd490c4173778600dc85d0aefcf25275049e58bb3729d50eecf3c7f3c1020d8f8161eafe9dc01b4ff3a10435ff9ed9ea44a38cc0b9bb173633e05d7f96535f49b0fbc71cd7a6c5f952f149e4a69df0e1d71a21b348e5e3a2f8ef287202fa8fce1153b734d133e9cccfbe8a8b77d893efd79c4ed394a36042d7f967fd3b0c82da7cceece19fe488ca54e1e27a4f763d9ffe18a58a3ee54ce77429d2ee89fd59c755cee922a85ec16ab0c55080bfcd123d756f59a5a0a8541b611a1743d215ac085a3cd501922a5e9dfa0569c147cdbdbcca56eae25d2904a02a5ff0e6ffa677109a0d204725bf1bf50daa270001a06022565af627d36d181b1d3cb90e2bf510d6d3d235502a521bfaae230a1f7d9d880f4980a326b2058f35479d5a873d44425306fc159b8ea40d376cb6d98bebd2120a1ee570704a209ffad8faf44dc38fcb1c61e6ba4e18b958b7b416b24dcbb5cdd30321d5a03ea3c4ee7521e29e306b53ae78d3d8c96a3ea0a0de40b8fcfb93f904b59656b6ff0a2f1c8da8c19970c4ecdc3a88ac213ab55c3fb186750d531bb7b0a23062d9a02940a3c89c0b87ef8b9412be0da4f41227b602a465518099699bd4004cb83dc2e7284d68e01a01a28397ddd0785c26ca85f186d20ed163ffa831b010be654cb473d45bb23980c53e3b597fd1697b13c256df84181b1de1e2f5132eee7835e3124bd534ce0e411012c1a4a153bec455d59bd831f14afb7f0ec74ba1cf04fb5ddd88063ce01f2ef196a55ca5c1f944d68c2cdd7233508eece938d516e0f93179198362d817cdab8c8b3fb0896d9ab02c584609c3906e2872759a4072d72a68d86e299520c4a257ff4b6989553ed304063fcc124cdebdb2497d03494b3204b135bbaf389e3f6a1ddff8a42a54a287750c4a104074a5601f98480c74dc996c6faa1b8f38404414680ba50a74a3fdb39a392fcf673943483abe1715302e89c512cbb11f2558050d5803622b8db142cf7892eee87d55f040437f2f128b14c0ac6f574986dc383f753aeeb2a1ee6789f50a385beddc5a1dfb4a65a7a1c9eb0aaea33a40884e06f5cf961f2e85a36ab1adc5ed56570158b9c74cd2f740f8eb90158f2246de75c5140bea49677bd4c42e26b7810f9102fd2e612f0e7280a1350cb49b9993fc09ae423ebdeb224f1ff25749ff754f1d4bb4d3ea0a9b06cbd04ad34f5295506e39e6bb3f0decbfdb9d09fd721b9fb5d8c7521754e86060a32180e2ff393bfdd8a925c2d4a8c550dffcf9637de79a8aef4ec1497f65ac30afb15ea23c656b6016cf176fa1ea9074b7fa08059c6eaa28ed34ee80a7f9181574fc8b059a1ef8240c4797ad2f9fbf0d4f34a75c0b5d23004deaf8b3eab1c87ea934e9b61353218e82e9319c6580f02a9cd9a5f8f0cd75d3332e8e144d62680c6b1ae0daa457df472b36e5d86617826f9ee491d5e747da3ca0b01406966077dd6ab7db3d2c236aaa4d503c3e2884371b0d6ba4addd19df7881f6d4a26e98871f93e8e974d90d4519ac4c299111592511a165694286528c17818c25bb891e969274c9ea12d2d05d01831c5d5fb633d396237901dad88a606bccacb6652ef3bc09aa7a33947fdd36db4409f2219da635c028282d512d843f67c7f1630b721b26d30b69cd9383454bf5a0043aaa1a91a31481684a69e333feb6ba36f34a460b336e90e700b0008704934ceced173b9ac856f96c47c4e6e4e675c2051dc68d56d70a58d3817f30d6ed00befa6f71189620a4f052a26ea8d499d4ebb1318e1cc88629b539af60841d126244b8d6f424d68e2b51698c6d0ff2211d2a8b67f6c78613e7108b10e2482d3957202ff14bf51e92369090c95480f572f265526c49e862324a5804fd99936c5803d6ee5e903d9b665e98d041c53b20fbcd360b0dcd1eb71e17f1d9a5f64f6c72d1fd26b504343e2c8bd462933e4639b4cda556bf0d94687290cd686630461a302eb2298227f676060828f7621c2076144ab2d8ceff72e9c271700f59b89bd61e64243de763398cedaf379d629358a06268671ac0f80d7b70158aca2482b98a7c356c5084bbfe61c52b87d538b38d9db3f12dc04fda84bbf901e37fe068329e2ea705c789e756961a529eee6726d61ccfd456875f47023e7800c29bdea228a6020f98ff257d5d720e0f3fd42f9d35310da9cb574988ac6a5066560e3d0aab5f0d1eb202a18da7cd7133c94f130a6772bb44911810f7a36d0be773778f21f4184485c550c2585067930511e5a51a284291a4d53cbafff22773958a84cc7c0b45f8dfd9ff0d126c446ef482a3de01a93b946988b5d43fd9f54d5a7c43ad493823b0762a62bbfe53d10bd0c039902b66960f1e267cef7a25beda5eecd70dd0a1f23edd9a01a584c519de96dc058a3d35f29b53dc6e416892c216d432399a60ad54d1bb7c585bbff846cd93b5d9d4e2c7adb922a640b3ea69aa39e470a1bd5d20d73a17514e134435bf0e54c326e518186a4479721de761a298e74f14e47862b3b53258d3581e68761dae1261f6184b4da2697e405c13f7490b02702f4e163c31b53f42ff5a0c80ac3ace49e106af28db5853e6e6d0361bc3d9318ccfd2eff8abef2641e97a9c02e970175a017191fbbf888dc50df51dd0f74dd0285c16cf9a334f9fe333e0edd447f0d8ce6620368a7fa78fa4ec8073eca6ca849cce03fa34e7fe891ca23337c31d45d5c95004ed2f59203cc4035247cbd24caebf72be0e60ba41c59c0a8cfed168db07783f00d28a77743c97eecd867628ecdf7fa11232c576dd7b9cf222c1fbb432d6271e1565114eded1b1734a208d26a1eb785b9b005b70f594de611a57b18847b2c1ed6a4368ff5a5f378f7381c0d414e97cc880fee0e6e3bec67a2b1116114a2407839a95fdf195ac7856374c668d884ff85d1bb0b79188ab0deb3a2a5e58349b7bbb294232a24d8977097611675a9fc2547a85e4ff7813c0e5b969d1dc3bbb1087a449cf8a48ddb28ac940b2304df1dbf45b5c3850d90a00c6fc99901c01ab742f7711926227c345211117cc7b0fbd005ad22ab02e7fa4d7ab69d7de847fe94f7c921d1895c8630f6ba78bb05e79afd542a83d02ba93b7ecf9463158473c7f130b7c1c10241ad0192afb58e96ac9b3210c3fd7f7bc96d14be97de575f2cb4966911d73347f7ab56449f3fdd304c6e6b8b1720e0d4604264a2074860b46a75f670dad570e43f135fc736c15f44a298308b84cc73f392a0f0231492f0a90f2fc4e93837a08d1164ddf544757bb390fe57fb287800000a67729388f06e37ed67c83a77e3a5925ec07c182818b8ce3448ca710804cd341ae30998f0fbd90fa7fa3ab641dd2da457e656edd7f79f7c4ad6987c969dedca0a46f5a210c9f04523b14f48c9b20acd95f95bc3ac244a107c98716593f8ca9433f8f77b2bc32bddc96a17991ad46fa3481dc7469a2f96b532c3d5f6a7bba7001170db54b0085f48f3bca547a1d8e41d7d1e7de940ff4256ee3a764d9799f819e87f988a19649e48d7a3b5dfaa887450782f9934629328a622b421dfb145ce044e14e5fe2f389eb542bdaae7d49185f87a140e01338060ce1577c03cfea79db118e22cda0e3e244c94507081c999e4eac0560c761a75940ef8404381a3c8f057de2a9e4793c08089fbdba70c9d803920e76b3cc5625f017630f080f0ca0d0e07b7d2b6230d1fb3d62a9098b1c7e9461046dfb388aecbd71de6bbe89c5d65bae1a847dcb0c18809f79f7616dc8c3404c43b8925f2528afa954e62a30591991b0ef20449bb9c4ca1e63fae194a3c948582be0a2ec1a432f53c5ad0d1ae62b4a4261f1a12fc2761e8bc3795a8565b2be23fb65b568d82c4317da05e668a792a75f248f049db6c9f34d82dd13860f35d2f1d6f7c515637ce608467827c672b6df4416c5324e81cd4aee11f843c2e142d3a0041030ccbb0bddfdd4c83e8b711480e336cfc81f4829f3afd514c1114bea5d85a95fa3e6bf1d361652c64a36074ee3c08aee3ffd36caf45efc47801406f40c4d72b207845c3a4dfa666f14ee2dddfe97a835103c73088d904065520720e70703ef7de7030c7cdd105bfa1593587a4a79f22c4b42e8d32fdae529b7b65e678bd4181d97e83d78b41086ccf9ccf7bf5357380d0c274cfdac91c0cdb8f72878b6c9ff41861c9f5aa40905f765e1c0d911acdeeb93c0ddbc458f4600e81293d47e4d1881565c743ac103d772cf580ebf5643bdc87ce567f6005e331b4deeed2946fd3a0ec8e9033008315206d310912209902dc2776f7c2152695c70ee911f23e1dc73911fd5e4346bfc8b9e2c61832196861d5d689588a5b20a91bae7226137f0878c741f3e577b8a6bc135968581b1815b305ebe4961c93d0972436a12eec9c67cc3874e17ba9e0319518113d4a36ae40db09082dbd109d23866218bb1a2b8bd282a38f8133ed7a8e95a642eadf12299e7d4428a721522381320bbf17b86016106f1c0f1272bca5bcb5098bcdad1b50fa15da7c1ccf08dead8ddf7a7fec596fa4d06f5c8f50de596438ef6007db50bdf25ca50a7f75a2514ae69131026dafa568f50476079d9933da4748b786d992dd86dd6aa2625e52b777b90b46fb7d4a13c58939ae1bdd7c84cb760f3d4e4ab440186f8f86e897875bd57987e7223aed75fce6ed674c9a17d58d284dda39850a2bbed3802d0fa6a1a86dcb8500a03b4b53276fb7e82d9f669b3a0bd8b15736f7965201208bb90fa606f4bd4b2fdfb93853723217dad8357c927de1d062897e29e7c257bb9e364e59298b9dc01a8b926ba17b69e8ad315a45d20e1916f6cade5b6d4b177db60f858dd47f69b67ee09f0d13bcdc0f1c1ee28d2e4733e20b32b79e0ddd98787b2c786143ea896edd411fed9651bbed420bc6f6204376180f7a192377cdf0d2a4a294a7ddf1db51ddd3da3b50330347d348659ec617404ffcb472cef4c3dcdf5f88aaa4c5d6a8a351705a3c492a377c1642f780d85e3e24c23c6313084b6db2ef6abb32bc466fe87a92c0980c6ab255c122b30cc452b1431cbd658ae77e51d8b3a44e4c612428318342a8e10e9283c27da12eae2e5cfd3303303a3d641ed4401c6f8f0292a0664e8a5cfa2326e9197020e2cca6818c50ba43588ffd22255cfd13bda10a8f64781132c812099a078d43367a5642e1a1e07a18126768f05d619017109cdb693ea9f9657197907c816c648c7cccee4266fc8ee90ca7e93606ce66d9a7385d93a58b7814b7d0d05677f502688b37b0b1cb0e4fbd999496d8531f34762eb235c6b4d9e5770bf861003ee248c5e6b62d9c06e9a5409ce9f2ace71089a3792d79b81441cac060054834aed365c07eae070cfba1a932e48ad37114829babcb8fad309f9c8de4f4d43c2a83adcabfa8a822c0ce33765a76a095ea4b2ddefbcda255ce90423644a172c2f58e21a5bd684aa025e5d268612a8221db3230ae41a1aaef70c9030b9b3e10ef045a7c0c6467d4170dc8dbce82f2fd70c62511e7ee8231c6a84ef3bd5bd77cb3bce76b6094343cdc3d6920eb9fa402d335bb9731f0ed2d1a99dcd1b0513697e888409cd769b10ac16783abd632a4f2e66437ac07f55cf3cae9f264d1a1857a534d2a1d7af546f715e8e8682593e152bc5099dec57275356741e7dd315f5549eebb2a208f6bddc600a05ce6091311bca1c1bce387f2614ae92887c9d5ad112f262d0c7e8df3757ad158b460bc8b05b3b30a2596b0220d5ac8e85664cd1047c8e791a39ddcd976df6770418ffb92e7743b9325d620314c238586780b20ee518466ee95312639c5b0a168866e2b251929de89985b3292f88067b5ec095a8a4764b0b4b8f08127e632eee49e46ff161aa4f04ad9f5c084d67fc3886d97aa4fd452726fed318d48a9571342d81e67f7a1fe98771de49eff444a0a5463170782158e8a10f293a2168e20ec36968085d38109ac0a8b9a297f9f1b310fa454dc17a23dba70f495051c3475916f51fc4a13a64b044bd87ad1903db960428de1630a9dcbb845b105f4b47dc1f7a728bd3004a01d4857117ea3cf45638456dee2b227a9f6454e478c6e0c5e7abb026d668d08e33928902887e0b42acc6c70a5f1128d0c612fd13e11779f6cc5b7aacc0a022a86704230308b6d6d911617a8f57403df8532401d2edc869d6abb03dc274eb55d5edf8ae95a7d8d213f1aee29fb6da94bd544a4c06ca040ad410bd25113edaebb94f50000d2eb45d90a4e485dcc1aabb6d63b2a061a301e1e769c9aa7eff1370840459a009055df51a5f7ab658cae11a3eebc9cc3895300eaa95feb8d053436e4ae17b67283fde1e1caa045bfe0a015e82eac5bc3cc7e4e0277a17b32573c89c8049f422e1fd622cf8260d5ce3ba06c52eb3a63dfd1acf0e4f7092fa7b13fc9fce07c40df5cb0b0e10577d033da3e055486bb1911532bc1c4556980be8e54ebca5ec89858f95f0a6a4d37f5f897a65e52f5d44fcd446da570e02ac10863e325b99967d41adb74092fc79f343d65fe466254800aa696f25b8df32d199ff8bd23dd3e5607f79e84d570da54410b35849845213f8254cda06543f5ba8ab900ff3c84745b5d46cfd0f55358bc437fb6613dfe5838c8778fdf5277e6de91679f9605f7fb7346b0697bf7426642e764d4465058f6d5988774664ba9ff00ae161f1140c1392e435234589057b58eef1ad9fda00aced10f7e903431e6d047781f2e8a1af11a021fbb02adcc52c2fae1bda1c01561b52623d90dd9caa1824335e9454ff9ce1dd307b745db9b88fe5342b62d1aed1ad32ef32af82d1c6f7f50b347bea08b76506bcdc3b428a090f5a387b5909dcb1da9cecd9228f66d4d62c18aa3b0ae6c0c6cc00296fb7233f6c61602324724f9d2a4b798c4c87899d44e3a64aed2640cb572f2b4a7fecbcd6989c9e6b427da343fd88e846c5255a834f471906ca827675d32c02d494fa385644c619816b1bc7f57dd6819bfe7827b7ccbed1b8bd8ef7739c4ffe27a636d48e33d4d9a349b789758dd2d72fca3c427be782490f3311ec8bc6cd857e580627231605c802a4411a9d8e915836229510184d2642cec7a5c73db090fdeba6baf49a61a3688d99361a75660aa65852551df1ac93a9899bbfa7f018656eef5324bc55181021832c53f556db39f9f6655256eedb4fa7075b165f9681763a9974b06777c83a4dc71146aef3718b7d9eed8ba8635b2e7d33d5914be2c22a1f9f928225b2abd66e9d58b97480ae7234c9144cc1e83411206bb6c14cc68bef738cc379da5a6553d07f613dcb17aae53b02e717074cc643c3b72e7828fbe0f9e4dc3a172cd9bed70489b00cc9ec04e75ccc8b8be1e744c5eca4c5a35a3efce67d82dbcae08b71e003ed433c2d0a9686c8b2bfbb73100b880ed900cf6740b1b9b178ac8b0a139878dd37b46e87950b4ffbed9d8980e0419ce594eb2064d27b53cfebf7ffb1a8e3db48b11f5e5203596b6c865e36943366310aebdc2dce566882799f441fb1455a7f5687c7aee04cb46de3e5a73238317f68b1ad2f899166923a2e7c1f4d7f4109df88cf25b74581c1c953f429320e2d625dd86f256641e4df8aa70a5fbd7c2b2b3c87806f4959dcdc6fec1ded9c0fc7ef8cff100f923ac88dcfaef2994537c23274a499661f72c209209698bb4f09d255e30de37e0864237d34fc06199a7c94011d9fd02e26b2024e7e6fca5e18cd41bd680d3da2710395fd8ab3ef2e756ee1011201ef77e5f4d54db55a8f50013a99362ed2ddedff2dad4bdc3ec969beab59f145bac3cf473790002f1c9324e86197ac651db6345c582111ec8c42a6ee6332c699a0526b1905c1504961550fe3e1160de33de50be9cf090f405fc38ee2d30be2166a925dbb2aeae215cf4d58f08606cecc104afc303a977ab132514cce1024d5411ebdf1f320032e0e4e600c6bbb3ee344d72b34a0129472276946a416db374a8b50ce4af6f555e6af45ec9a88634ecd74e77dd86383e2d62581c0c9d0651ca0d43850265e230755c2646606434b866143c5cc2ca9a80d7725e5a2ad0390f9752d64747e10069437741abdf315a3292f411c469cbc1dae3c93aeb3591cf1b116308faac013cff499fe4f330b191d6469d090057608e4e6f19fdf3bce8063645f7e31dc205d344af9a9cfe292806b0657dab9fc957006b5a1da8b854201ff404b12213c6211e14a46259882dc0e48ec067801c0712c6dd61bfaf5a00e38c6d6a583cbdd0800c3c76a08c6f6ce2960b5e3fe5db3c63822c7e13a337376d1314762f71f02eaea2d0b8452bd39ebe4d70013dc4e9238648b417a93f2bc05ddb233138e0860dce7edbca0580d232bf5f076bb0ca2ac65a4e96b1b6f12ccab6ca99451093abf7d938b5e62ec613d6394ecee1d9273e83fee28a4bd189c2fa9141bfb1b85e9a68a9570c415cf60bec6c73362907cddf5498c9b2627ca42afb15a13ec534c1879185d6338f9b0f6131177e8f7e77703353a043240929ae689bca02ac09ef25e1bd3863d27a90b99d8e75feb3af9e7b80dceb760fd6878176cd1b8a898c160822be466fde9814b03dad5b3762e0c3ddbb8abf79e0253a6729a3201dc23e3ff3ea3666d54fa75ac18f4cafc1dce3f560b64287388815d03344b3216958182c9157154433afa59b7aeeac5a70142b1b06e8d12bbd2e22b4c6071425c1da2c1a4d75c578fdc80b3a6a2db907f754acc7a5dbca4ab7669aca9cd9c8e367f036ee3375f7cd27350fffb2093f8786551baace39c9917c564e3bd245d62561ab04fcf50bc374318de94b8694ed0e594f3930fa356161df45536328bfd8acd7f27ec234ae7ef93ebb17cb3e70be9ff0b403a3f65af9dd0484d95144cc44d977488a65a797333f7539381d08236f0009c26441fc8840361a8e54a082ebfd8dc2f4c3a43a38c41ea6c8e78d486bb575c5de5565c00595b6bc84dc730fcabf894e130fd0dac9cdc13ae052017325e0d72a976ccddf094878c9218a79ee7996fcb1bf44517078512cfe10afad49de3700985748b9cce1c73e082490c8ddc48548f9ba67a1f4a1851a26d898bcfd1442db50e496f429b87a121ded603820173b68ac1f3423806859794257ade783948ad19cd0f85114b7422267530e90ac45a875ec3ef381215b6187f0fdca2b86928e3890e77a767c5f5fee613ae9eae21ee899142ec368b544a3669201d1c9d1ea298571b07e67529f9e62de9786fc112dff46e050512f85a022d3f0220cefc1da6bf5a7742a9906b5ca21a475b81187e09581c872071286064fc5a8e280b382cb22a7392720d228981a89ebbbb1c400ef9c37c689ea399eee92d3a3d58b7760634bae2c83c3047f0d69b8fb17e2f261b472a38d7fe8a44087372b5c2ae16547ca3cf7960b32647239a9ce9bba29018f7a17598122812abc6486e899dc1e1d6c899d2aa4d0219c67c3bc388af354aca213d3903c7537dfc4d08a78ca8fd493be281711d0a3493ae72e10fb826f8ce54e9611dba2de94ede781d58d6a281d06e8e1a02a94bb3d795f4ebb219afc362ab1c7acb6d2bd035f8a155882d4ae895716bf50dfc727b164de696d2b49418f9d80aab6914619f1558b240760f316c7840bf470a48ed58ca0e4787aed50a76f00a7c60ae43e2a62bd2f1809b310e69a51101be3f46e7a900b19989e8849639a25d31187b72ea8b9404e4952a2553981fa4b5378806a52c169ada48866e7fdca5e4d7af81d0e2815eb802b10c0b22fc6d9b9d0ca700a76f048ca525df06dd16fecb093be2a64339b3f30d8f9ff716022422e108cb8e6e776d05fe8fe2f772e6a9129ce7426d547483e0bdf8bda2de507f03f7a58a5fa9a6ce4f63c4fd7384eff9e6d51b65d8702468b472bf21668a51240bc6b881ea1c6eb693ea27ff2408838c78e4316d155594472eabf7b1a5dd2793d2f0f6074253e7a0136b10081c2ca227cf534cff2e4213492e6381a062b08b0d7ab400fc22b8f217afe355f90d0172114fd1c27199d20f330042173b925de41ef6ce6e574415b5cc1f3538db2bd56c7cc072540e789bef651d54b423fea1156f7d59dba0774c820e8c5424a998119aa77e581d32473a6c2071d9dd9ce3a71300a23a0bd0b57a6c6dd2b74874944b12332686aeb43ddd2e490efb7b6cae88afe036fb6e2e785daca89425033f7d213dda866ded5072081bda2f383c8d02b7789a0e822d3f52f308f904b0c8d04ee0c549395e6712ffb095de6931ae5b0d01a977407b3763482d9e8c8a5058acc1904ddb531f12f35fff7ce1ec06dc003bd8de3feee575e02adbfe9346f3e5bd2ea74b526c826efbc84a948d5bc1f89df5800427060e741aa9b5b7a109e548f9e033e5c4dd218a9558564a66b82fba4b37a48e1c420d23ffc85ff7c81c0553400b7624ca105a0b4d0b23a4e42db66631c7b08a008f3960b2113e272f9bbd0de112cdd1a6a3f776784875803014671e4e4074d3974bd4010c23020c4fb86f71a7a0253cf8ddfeb981cf9bb4f7f25805c078023a246411d47a1b46019e86a15acff77e1ec0b16493279dacf577f959d2dd9b8cefed4edf9f1a3977940e05e47c2512d6bd7538bb5995af0fbfe71046479946c2cdf63e1042d93ea616a58395467776df52237d4a58dc36a902ce53ebf869d218d046d17cb298bf10c96e0ded6bfb788aa050be989c356639caadef7c4ed6da26a3935f49a8953270f9105698ee5e4deeb520184124060e79a3eed730112708e19da9dd628310f52c055c1731af84974ba5de5d652d13e25d637e5650495c02348bf9437ad5a8f73098eb816bf9e1088e1b1cb2f46856e12f3f2a33f2fb2b9357b2567789741d824a3974f1dc6f32e6981a585fc4150f46e02af87dc015cb3d76bfd3f4fe7a9e100fcc449f133cde9ed72082e8339518a5ac505f6f33ac9e6f6b58351affc034ad867e95ef47a5ef615e0036b1275452eef3beeadf4756357d29905803b2e93b5b8fef2519f9d8dbb7f3813c9c4f8203112d859cc1dec98dc58479f87fe171e145d8142c7a418414ee320421b9ee6b2016cad2b5cc4bcf2f83001e5e5b8fca203057e8aa26472bdbe194ac9d0e345ddd14ffed9a12459f0ff59349ed7f8f9446fe11c7f976410c6faaee20acfd3b7a3d6128574bb1a3c7f7cac150147b1c82b41ef5054e77ab8e5cd9ab812de2f46e796ed8ace43335fbe46ce01c1091045d12e9e9e8deeb914d6ce3fae6ffe4399024f8c567b5c086385d170c515b5844bb799784e978763b5d7e8853a689eac30756ed3851e76e009916cef9b1ba11bcf52a6cae26e25c74d626779e173d55dffffb8c84b72146406620a99fb6fa68de369306d9c4f30b697f2ac483a677269a90c9c35e10b024395566d593ed3504982ba00e6817f591ddec24689dbf2a1a4eb1ff7a6d478b72eb5bb371676d83ab334fa3e233dd81fa19e345150e7a7c4c46c9b99db7022a8e3087174f4c2897cf9f3f2ac476fdadd7f42a901926b7f2caa68489979c0de08dba518532608529194878a676aeb34ab23d70fb473099e73139faa8a744fdf90a95b8bd020e20f3a76df83c2adbaec961a57d7294b275fa70cf568b515d893cd06eb2799eb4098b3e2b5819671bddb4771b05b23bf7067b9ced4f5e776ef133de03ec609fe9b403a01e0a06316c244716e0ee6499691eda87f5f28d7bd52fb5bd0e6da756655acd09963ccb27a5a2200a1b0886a4499b3a5aa9f21f89193430ebb647e84213c0eaf0bce0eb3a1b865ff5482a2b68de6f032aa60063a669c0b7113d28afc09ca547619c01e813860ab57c2c3c0e26cd60a338c3b3d59f9361efcd6f6654c537046f9e41de2340a4cbdbe9697004c1f91762a3174b90cb903d056f6b7ce0b4e1b71afe2daa0f854fae20921353d7be88aa6a7754b4eb56182580b5100fd236a9b39b7722d1b8f6f0b9e97bc37568bc8dae61eaf0628c9d15db4714be9b9492b57ff41fd2a48b081fbfead0385ca8c7d4e6adf5b10a8ac998770ed33004c8ca45672d43b58026f8a59361505345aa42f132eef3cdf9d0539579898d8d74d51439471815803821fe37cc36860687706cde5c9a1e8a722b9d24e38b45f67eb2bfa19860b36e6c7a97ed0be96bfa328b675a6bf8f96d7afd2eb3aabb282c1ca0fd100964cc9e2363b6e1474887aad2b686fa82e8c0d9a22b707f1940976152b9ead3230c2789bc6e85dfdb614f42dd8eee6223b90a76efe5057edbad9105bf0bacc8dacb5c819d153d0e882f83a8f6c5c2183c15142ebb5438962993a6089b6f6fe8a0449057cc5923fc39ba355a7f3d8ea06b7e939a4e8ca43e2c75e15c2512217ed4e49dbb276db7ad667dcf6728e32892cfdfb0fbbb511fa2e57dee879352c6cbe1a256361a7d71c7c10bf3299e77fed07a3fc7a25497439ace46bc85dddeb4696c0d60289e21174a766e2572207b22f121c1b53ec92dbd8224b3061b43cb818c4e9d14ef0a190c23b60db4306fd335c0c92e1419d5142388218b5d2cd695c56584873bdacf066a2fb98bed445bef21c2ac14460e6d1d4a368af060d0308219ae8d5fa133b3328ba71cf65bdc865af1bfd2b1f81eba9b735309e13d8afd9b61ca7d6e54bd32530678e3734a8cfebce7dd22db9d7398e6238ec937c8c6e525d9de14c31451facbd813bd57d76636bd85552795612c57de48f67bf102490acf7540617ea1e456981d07a4834336954a552978a85c21d9e07ee1abe79ac6d49bbb92a6bf2b827e738e6b19199c4cef844c67dec287adc879266b647ee57b1919e0cb5cec2a8bf580c3b626a3a48604df0023b6024e39764e09eab01c14765fb418223b8a7c548d661895b9ce340e9963162901172695b0b52fbb7c34baa1874a2c3dc473e9e85d54c0d6f2fe27c0ee9b9f686de360a5f86b0ef967526c728cac22e9f5a2d37be8171c5163b43b08dc93718b7ae768bb61081b7a41c5b346ec68dc36795e2500e91f54314ae9f8a6306ae3deb908d2c50f795e0eadf30fad7443235f060c7b1652844f3aa25a34c828d15190b910e97e7c31679259d36118abf626b0bb6dc525742d6182f09569268b0b08d4aa7a325130dcc420f85522659950905993051f3798f5adfaae9a398532541bbaa3e88b31fef1d7e144cabc3b693503205696a73230a4cc776be2696f7c6c781ce3ba976c1a87419723132e940158b978918d6d3f8be1e6ca3753f8c4c38d23987991c950a6ba82dfb6af7ee34627a46634ec2774332d3086ea772d7d039caf817a2d7af39748ed31f813efd15d5e5cbf788c8a9f3704fbc1b0696a8885e370d3235d4a3c4f8029921d3cf0a2576626ba3a1f441e71b00446b0cdc7d7bde987c74481eb4d8c07030bc5d741b2391ca08a9062806fceba3f9cf69705fc74a0bc5f2a107bf3849ff2891bf4f31b38a2787dfc48224fd4211f082bd72ea17c8ad55f7d96ba15458e6a2258c61a5df743c953d8d98a926a4b035decf4cc835484952a460b0a61291406f0c12e8ba29f86169c4e979169672a1b4e1c7aa24051b7f8ced9bc1c992fc5989055229834aaa55f342b2dee96948beefb703fa38e9ea4a4cc394a406db3e3d57d045e6e639d02b1d21eaca81c0bec3b6ccda04949eba771d5ae269423b7088c86f0e5a88874ed49198abc754e6b4d0530c7dedb903d41f0db8b74b7d4c16bf6f8632124ff582daca0438012d063ac01fe2fb0f0fd1853524cfa6619e6ecce2841dc62c1fa3586838fbe4c83c49766a35dcbb6bb7e0103362219fac050a8b70e52dfbb41ce657e0fc84fa1b8c8c3eae450c6951e181a833491fc49ba1b5d73e223f3adbb620e3c99a6ac71ba17f4dd8244741a316973c8a1f13640ab0797ed2aff633e47e1c17815efade8978c08d0ecce61097ad910dd34583abc987eb3b7390e1e90a51abc44d477ca6dfbd94cbed76025439cda4e70d3e44ec36839ec343b3e1aeca3442166b47900ccf4b7d890cb704a24a38a0a47ab0fe8f8ae6a5a1de0f4aefd5112e0c63e03153cd8c9fc5ca91f92a00b5a63faa3ae652f5f54fa3c4b85dea63296dbc58e014a72474697121e776a9dfcca153ccde3d4dc75725abe326c5e921932486413cba164160bb1477b6cbbdc2012b03d19d6a82430d8942cdcefc59493f14124bc5f0860dedbc812e26340d8f330fe57626c12b4ddef5cb8f266e0fc945a12b43ad6e0d702d746f7c74a2decac032c369af07a3382bf81ae2b25f6ed548215a4af4cc74fa8e9e6b0f333be1433d8f5266476f60ae668f2ec65d478252a56edae38de0ef085bd9a595300291f281081633adfec43d45c9e3cf8300d348a4a56fa1ee39372aa2b6f01f53014da64d49f39f07dfc1dcc75cd2f1dba40eddeff78638335e4fa8f71eb711457ff14cde0f64bc0cc68fa7fd68d42e739cd06b0f863052c7bb3d9e30f08286c6b61db3737004cf1665a9c67cb7815d0c46ed86e0868c5ad79d6c6ac2fa1ee617f2ca04594e24ba5b900f45030f7f086b4780b974e4b92212f00733ebd91bfb41e2b184a8ee404a5959f7118bc7ef7697c9710e1e0429a10912d7d6a68d1956f08b2be166b1b23afc9c3d38ba401dd9963f20128c520796cb51d979fc1de143a95fa8e1254a4949b45980701ebe68f8f59af987e6b4817534b64c88e536e0186f4eda747f7e667bac88d919acb4da7f887063c53132f869a08ac79c4816e46852368945bb1e760084c6b01492c3827b686676ad63b39c7aec26fd55d7542b4c66e69f4504d72a62a9013b676daff6e3b4c53f33d916710dad7393a3bfb6f37cb6b24b85454028610205798adff979071723ab295ccef4cc0a7e196e1bbdd4872faaa0682bd7761648c2305c7e32b8cccfbc76c208c4a6dc9b4fb9d418c231fa3ca6356cc632c2576f86c7e75587dc3909185fe9e3898662d79232f1cf42da5f16829396be31061380133845955755d67c167cab14240aae255a99e23de7eaada225d97e2f4c3a9884d55bb8ed99cee931c17ef431491fbb333513060a738cd0870e078f773f0f0acbd704778fde17e97f900f8a99ed644a567840e26d44ca36a65844b19a3dcdf540000995b8c5d3eecd972eefe0ab18fe36448a94ec56022bd27e0cc6e15065051f1f71357ddc34b134c6bafcb1a702cea5fb51a3df498fda8a528305326d6e8c9e430d038dde333647d66de33037f8dc9cbb199aaf3697081b24d0d5553a4ef98695ec2d5020c4b07837695fabe6f543e5ebf65335db78cdc5c4aa6c1f374bc73553ec4be5b83aaf8c6ca200f8388887a026308b63ecbad3b7721bcfa029e64a9ac7dac74f453de67c1971316ceef4e474cc916bf8d9c1d86854f8762312c7ffa807b962bc7af719f193c864d25b00b0e5d8fb1e2a5b5644d421ead906c363d843e56bb65b21a21273977b970b4a0456e2e8b574f74c2b3e04c92b8065ba44bf88ab7d24144a0090cda72a7c22131b412aac281b9aedd61ecc2db2d8e7b02566d9d32446dfe781ef724381274fb81a7bef0334243b51df85b55012b28f8e8adf4fc0f1628fdf31b7b9923ad7d5f69173b3ba942f71445b45041bdb9a1e84dda3a90de32e6dd88e0e5a91992f6c9aa78517dc57e841113e1c12e2af0c05e6ea9ba7f6268ee3dd46fa41a7797f43c033325e3ab983235e0102267fb5f159b400755fabf7879b9a386ca776c8218e18b948796de9acc64572dad4d1ee7e7298a97af5cc71214e74f4bc0ba7508fa353e464b4852cc00020e77040b1c21159b00a39796533d1f90d7849c2e55bf3c14d0c5d88669025f0462fc3174eb5e8b479c0649f9e49f2f00601a81a355eee903c8f4ef594210c0d778ddf00cb7a9ec6a78caf69d09a472f6519765e9d26ab172730ed19b30e9665f905aa69d6263a95749c29e35201c5ad15bb5ce803fa638a68288f8714d585d3c5023217256465818dfe6cc09667978dca3b3a15717afac88430180fabc2817bd3dd22a47464a47594bb126ee1cc32a796d405bb89dd42f812f298534524a9a9f02905a59aba05b29c40741b64df10596930e53b4c3be8ff99c81070f4fbf04a5a029e4093a69a81300e2f30cb27a7747a4eb5a02e6296f4fbf977b2d15451b87e6c0127d80653af1f723b7e799c2fdbb9f3a47fce3b7a91c1e1f1273f357f54b12cd42775e2fe32613421e346337819d915da93ae933035ce371892d969683cd1abec5081ab5e0d7a2587cd3d0278f85eae420e0d06ef3474274a01dc0d38fe8bcb5716da86339e76fb746d6a5c9a78dd4f51635b4c6c1c439e9e3de13b08bbc670d57d90e6364fbbbb75af02c8e39cfe3b43b0c2afe376f7f9973e9024ada57c4a981f7a1e8fb8b869ccbb8c012e500392563a564ea58b943e5fc153dabda04f5c518690b47355d33b15ec02129e799e1921ae43665e203a196f37d36d3435bca20f967c931461c1b0edbfa3cf0e06af38b7bd31f329ea68dda1895043d5c2658c54910bc85fa1479d2262d3478bec701d503d44d6bb7ada76b2d55cb592015b81ba70b53a502a17298acae3c53ced036a84b5bacde59ebcf554fc5ef0442e6301de90348bb352c56ca935c0723abe8a9ee834db07f9594fbe9d6c76b0915d6f81dfa99342411766940c10630da2d86df16404ca462efd893e82ef1ba54f41ae6e354e76115a1b81d246eea5a5e0ea2d294d2c8cdd14277cd7eed9ee725d5aa3d0d50d96454ec33c41ba612e11f9078d2c7a73a8711155326f33b7b56fa2644483f5612463f84d1b7cf311ade9fedd74a80c997847277bc4277a1c4081f0a7c97afed4b63475fc6b6b15c3453c3867ae13f08b64d9457410d31dc018a8b3173e11bb705ad02c1d1739f651c22a501023a24618d41f54b036d0688ba21d6ec0386cef4ea626a76e5b80c568bb6a679737654b6e67960f7846053d2be29b82849efc1dc443f070d754a4505ddc57053344c4d9015f8b03b3962e1e5238cd79bd8a19640b0a779b5f1c7a63ba7580c48adf4b02f5275fe1db769de2afbea5815141827764f89db0efbb047dfcfc90b7f92c9959c7cd552d295f40fb8db0eb041c45d1b875043084b5145fc9a7ef69cf95513bbf11b90e1e95bfed054e901e0fb99f3f86baa0028b53ba8acccde9be0d6b7cb7bb9fd70833cf6e615c78d29f7f6a4a5bac5c465ecef8106adf5ed955983da02acff0afc771004f9d38f064a423284c8cce696579a8bea876e31e360cdd4cf2843ad13229614305d1599aed735ea2b28e7abef657be2663b069491d6e4e3fdb028239ffa31c875d2819dcddf1829329e0bc927a476f15e43b32b4873d2938df7237b87b0db753abe09b42f0c51b3f9dc627b6f1573afef37a95337e2ff55ef6efa5a4576cf4cafc79aae486144cf1daad8b54af1b89c594e0882a340a4fa954f47aa30aee579c9f7c7e3fa445e938aee9c8cabf5f05d6093ecba37a64fbf84a3f4b1ff919f2c9cfbed5ce205f59a8dabfe4b5ada7bdfe396bdddb00146911e2a931c7e8e66babc6bb54ec37f2d89ab1e8d9cf782c1dfd4aa841e887986115d49a8be05e34d5e2fbdcdd6987e8c8eb2f54a530141c9fa1863b0de3420d9f490d62a8a9c11960dd942103334859d1732175b393d0180793dd30982616c87e49fd7d99442e1e8e6ab15a1cb9a8b434b7f8747ccad60d8c09c8a0fb2d77bdb4d055ac22e6783bd3c22e81d9cc4c47e3ce6691bd6cf07c95bcce07fae8cd0d5e95de7e9ed21929fcc3162c94917a30ee87bf0fdcf220a4c0e6086de38da2236bbf8444f7c6b07aa405205e73b628a9a9cd0b6217cb2daecfb641acb1948f119bdaaa402c54cd1cf4cbb0a70724104782eb5cf8260ec3bd7aa635839ef64461603cfc6af3ea6f8ee8097c43537d419a332acfe2a6f366639e63acde01ca481bfb310e8287933e3704ab6b404fa428a6279c0f25d47f2c47808822a88f3618d67c9bdf04cc8d025277351d7d3de5b8c8e172c6fe6dcf03c7818db6a3a1313178e7e9f1323a8c75a47c9c487c8923d5759148258509d40e1d601d6ad32108495556b2d355c868c5cbb71fd385ea4e356c19af93ea15a96eccf7a8760c825c0402426286895339aca7b5ddcb250c7c7197643aa936b864246ba178437630a7457f77ea070d46ffed452917c4083eefe56e8f19eb447aa177f836a6c17285c714fd698bcd4dbc3507053dc19d3dcafaf25660985c13eab65a8285501f80aa82d45a605871cd45c671fe83c2693aec0722a13d89b60317c3f86bbeede942baec3b775f133bcf0dc2c3d7d3e10e34c58adeccf829d8879a5c665be836b73031efc84d06515fcaca299525908683b308346adb9575bf786cee76f03103020a347936eb5c64b24362f88a596104d0eee122af3c804d03d657672e2b4f5483e7395855ea255b11c5e1673e82421e09ba9f9ba65fc31b4347e6bc9f06840a7e02c242bd6b4fb6e9d01850e88d9dec25e023d2b92c4403218b9c579014631312579362e8509d24517ae2153533ea15d87f924a9d4a7882ad769596149a1aa8037542fe9da3049bfe769ae96191f8583f63428295b7bfa828f7f488be9c7e48ed689e29443014681a61463fcec0f4b12b198d4819c98a45ce617a3781ce7dd4972e15e245f8b58ea6604ffb225d784101191188134b91deb3429b87145b837193f10b6de73af667ff1d437c6adaf30f4873eb779e64ef438ab358aa8a60efa06bb87068f94dae08716c8d50cdf8307ccfbfd92df78e89cd369b46ac32bef335fc088a6b6912a6f91d3f7bac0c4b470f08062199ccb09a91c437389e2c6e029cc90d53112cce7b36101352290322a86b25e49738a1f89cad3091b522164415267d8d19312a250a903a25563f0ab4208388f3fb4dbfb88a9bf751cd28a39488438413bcdb4a2a66b39c12a1aefcdbfa61edff1b821a79a0f9f07fb39af5be74278fb15c4b67fbd0a44e3af5996588c2cc2f044e3c7ecd098af179cae7dc933be2144eab78639fa1c326b540197da4d71093f728a9c93b1cfc44239f347d0afbb7810b19b1a293ad409fa4215aa8ac06689e5a1285c1af2e91c893200f0e8db1268cdae541745ee048c6f3e62980c1abbe3ddf8d03974991443933aa0c7043fad624a7836291778fc777856c5d883873bbcf5b26868c2ad6089c22b52660b34ea740f306eb8535073f4db049e39a8a1fdb8f7e8440b35f1ac5df8e5277a9b2c53e605165b0b847541bc4bd8990a51f200215e4ff5df2e24724419e769216b9a5f0fac9a4b93f71d74df69f0a5ac983b48bb4562f054332addd8a30a3ef90120eb09fce20ff7fef2c4c941f267b1bba965f12397627ce289db690c029a490e90a4295313e272869e1fa6f2c6ee4ca49c2109eb3e1aae05b02d20047f14d8fea2810f74312840307ec42b684bcb1853389f14355b1ccb72107919a819f107269d80e2b9ffc76e1c98f95e0158d2db63e85bec1de3e4c1de2d01f30826740f017c368ab5612fadd9a674505805b7765290e0eedb8ed3d09a3fe183fe963173e424e1e69dee83c8c224cdb524b36888beae26e37600a56b328ca272a1ca63d66f53b4d1cc359cbd29a7b5a1b646980bc4e7a3ea90b9fdad5e445936d7004dea09e0e7733644748ab96ddacc9c55e5174da55242a6bef59763e31846aff3cb902ab282b651b96ad618a2fbf2d03c9dc790f13c56900e92a35555b767c26bc403a3669be7dc63947500f17527c1177c19d9c026cc76bd41d998ba12050c6c93495425d316381ffb00b6e213a4556b36abd67dd901b90aebdfe13a3d9b8751d6a1aaec096b1ec420cb6f7a70519808d00396c119ccacb241c4b162dfc5ee464910c99bd845379e8d8a1f3385e072f99f9d8e80c2ff7a72bee65ecf724afc8ed6bc9fc6fb7247bbd5161e67498c16080b40bd0b808cb1b5d9e38f2bd03d985cab8f7a40dbfc40f63c8ca77f51d8d30768f81eb6b1b6bda0ea34f1249da462ffa43481493805e9c1cad93f9b80e90adbf827008068e6438f2a2ea7bd0b62d6978ae07aad9e9d8ba1b244e98e09c9b600c9becd986e8058418d2c38b8de91981a4dab5be38d2afa9d4348b0f0f55535149e01db82f139376e0f9d657ef80811a43d9aba16a118f93021ebd3d1ebc78778dda122ec38db79f5b73af2c13a6b1b8c25c07abf8e474a423b17b802253058cf9ee680167c20a745d99be2f000d7aca8b7266ca327348b8abb5fb903c2a90e3e17d16dc610ef12302c78b3deb0b0219a7664ae25732c305d0fe75603371012df2a08e32b08c6f178b7599f2afa0aeda8e2d5fc8f04e75bc88f158678a6e83e5ef305d58e6aa54a6188931eb35c1dd25c30cd98e059c0d75e0f240b2392941d9f9eb1e7748ce45bb1de0c755eff5e2e03b4b7f649e83a2c9ab60415ad9d82475bb654a14b02a53c18b955b38f521322c573b0460d963cca7827f064f783f15d872d9b3116c99f09a77bc71fe765db6f9c12aa1c468f19c6a039383e9f1b9caaae1b93201ecb87130c4c48e8582fea9105df6c0523d96d459da1160eeebb241a357eef58c9ada8f302fbaec4f58213b2e7e93e51cd9d5646f2c83b154b66d023e115b43219997914bb0f6309dc94a431cb347ebdd26dafdbffb98a7ac072be92d624e08687d47cb9830513c04287288f3211b150e05ae5cd4a24eb22c5266b175718570b055f82d248873ddeba3d3a0cca2c0e6922c8c2b39c931693b5ff9d8aa95b7f5ebb885593ff98b04b46887af71e820b0a3f356aa90d1c7b47fdb7d5d4c0a6d28697d45c5203c54cad65bef8ac0fb67cd223b4879a7996dad55c69f256919821bbaa3f77c429b044cf8d1e1559b5e903418baddc2a0ccfe8f2bce9295e798772b84c3fd7185d273484455d67f5227c45b4705ad6382263a8827323a1255a0acd937cf6cdfd44431f087668086a64a996a71a3e3da2b90cef6e0741623baa2980741c15b296ed456e0e19114b7d8da2b71efabc2dc43bfefdbfae09343f8f15f5fb49067a887d113c3e80cd880aac025d25857e3408f5b71260a50543d5c1a0d5b133a0e310602014c3b4454d704486b493c7475fb75a1d9302c55e11165386e61ba2cbdcdf4df6f8ee7435b71a40f24d8b45dd2687ee9f3b5ea0e8cbc5491034dab33d5ed96da52a6933a8986714a882c15daf77c5736f63f1ca7f6d659c4cf063e211a83e31a3940e11969d332f31c062eb398f8dc4bd0144301ba3a3a7eb225b237c0ce9db8cbe5be2317e6052175c58b0b5bd1f106fd98389b3ee8c0632712c30b365ea2e788bb810207f1480384f51482c22ccece817bd220a187e9606f14a1754371bdb87f496f017b010240c138e749ec0b042a71ffad5720d659693a65c9ff97f98bf6f47127dbc249d88f1eae1829fad43deaeecbd751676261f39f8bbff69f03e9b9c2083a81817cf10f1435f9027c507a2f2c9624d3e6268971ed75321de5afb699ed4d464d84961ad95bee1d6c0b560a3e0a447a458990637eb9374e883829e2a408955ed12e72cc2ef76688ca18630c19f58a46c931a3eecd90d15095a12a4e807a45b9c831b7dc1b27404ea07002c5d0945ed1a21c33cbbd199a3224c690183fbda243c8319fee8d939f24499cf8f48a42c93183f7c6898f93214e860c1df58a6e916336dd9ba1a3212b4356887a458590632edd9b274450a03c31ea150d428ef9bb374f8c9e547952450b9f5e51a21cb3bd375af86831448b21537a45b5c8317bf7e6c91431c408ea157d926326dd9b27414b9634e915759263eeeecd9326434347bda2433966eede3c39b26245a857348b1cf3766f9e08316112a55714083966edde3c89e28517527a45b1c83167f7e6899430c2b8d22bda24c74cefcd932b659471f3844aafe80f72ccd7bd7942a55531df3c1923c7eee6c9185126e69a9e3f4e5c3e5d83ac2bb9ada3dc9651ad56b5aa452febba252f7f24917e0d9a34d6af0ad282c570384364095b6f0559d80a929611444d94ad63f7861492b10d9d26ea9fdc12f715276ea05675139140144812912816d420fad9ee5b4093e68aa263fa17d08ce97825871691a31c5a410da4ea530f6cd84034c66a67265483dc6109130b0578570b5030043be30a498cd0c4b6e458f44413319eb08195028bcab1e8091658502c986311d018e819ec29c722202a580148ca154dbe2084adbfc5be3577cb6dce69730de5e7fb3d799b7352c91187bedf63864c6cbc9128f70dbb3ba316be9931f171b66559970895734a6b55d48c81a1d36a3ae79c54d239a74585092b1f694c91284a3525170a856bc57068a9a25856a53485837549d8644b29bb5b667965de26272feae3349b65292dab0b2574ce39a70de79c73b60de79c73528bd239e79c8dc9182b2a9cb2ce9839ab125236a7c9c0b22c59b3f8dec2b5515a91548a84eb28ad482a4542a2b422a91a12d4e591ac45ea3e0c8b26b08e954ce0a9661910ecafaec3a939e78421b99ab89ab89ab89ab89ab89ab82e8b46157db432bd7561581656c6184ab30e27cb93d229b60893f1b8f1d163d61995aa8646af8e58da91ebb2302ef66a4a59398d435d3c84983143b588ea63698106b62485992cd8d21740d6cbb188c9932736cbb188c9152ab05a8e454c7210c5d21c8b984841a9b0588e454c94642640d7955974760d0f373d1c5518d05a354c0c2668144417119a9836a0624149a26d7085d62645e40c8d9904d0b881cfcc0c154b8a446174a3074618a65d169d09a0c1801e40e99b63d10b9650d4032d88b434484beb4c5b27e0a00b241aa5e4c9032fe4795267635adbdddd5dbd399c3c00c30a2b799eb3db0dc0982164842058f163451472f7b8800b568e90240d5924d942cf098040862f20a122056458e1831a64b1592897112536f233ef31e57d08ad60085515bba001098bc2c62c33490555ed91428b2ed4600a538ac0a00432343185144071051325573001b16b073dd021cf5ba632c830963003268739e4fe12965491fbf604b98faa8209b9ff2a72910ebe90fb74860349c88209530c8108453d98c95d00210d39b84245111243b0e9abaa4431c97d1a544431e5c6a14e34623269543346aa22b5a11a0a327d77510e7ef22c02830dab2a872d0020771f1de1fa9c34f697f7ebfb55faf52662fa75efca7519655e27f28bca8ff2352daec18eb92e2f0e19bb03c8d267d2ccb82e8a2dec4aeca3556304d94b4fba56cbaf6a496779a8bab93c66ccd5825984687cc67497cd3f6e10d78710f7dbe44a97620bfbb8aa6c6fbdf667d2d09831a14a5e55569261b847abc015d868136d68c429d1460ac51a1b8d0cd3e036942a87a621fdc28674cc75611876451927589f21d23126ed009210f6eb3d26299565357e21745d17cdd7144b622887f2f518ca28f97abc5cae2bab588f5e85d5a757619c32a4573305f93a868366cc6a61e7c36ab59eda1c0e4af24ce2431e674d5bdf304b05a22ccbda80488e6494839dfb6604da0b873a3a19bb9c987543992d6afddb6bdaba39dc650eb292b9d3b3f8f4ca3280c59959e2ca23974e5c99e4db026c2c9a228c1cf3ccf454d79d0983cda1bb1b9de4c810b9c4a591aba5899539cb417a95495c2132892157881c72b9c475edea706c1bda63775d4066ec0636cb2ed3d1ce75c82436164d3146deb98e6f93dbe246b9d8e164b9eb76b0c98a3462442e71533fc8259ec0422c294bbcc7e6ba8e9d834c74e82812a748912e791ea4228a2c75ec74a62ba6327a3593d075389543e6ee3864eeb2a3f95a03993c0f1299349209d94414384aac118340329a31f3b55a8b42fd2a2242921111242322ae91619bc85641de7da543c7e773981d099136b2099cda79b4914d7ce7ca26ea252025c721dc800779884ec7bb53e05bed6c5040878e1fbef39aa6c095f9ea72ec5c074ee5d8b98eebc0393f60d3ce63de68b703333272533f4823974d5c3681856c641c11d94823efb1018bec2780c33ac479e0d0ee007d6850461ec274d4abee3b9f40974f5c764048272e9960c1e5132bb864025b5166cc13d79232a794325aa430886c11b5aa050816e8464823974e3c242921299934a428a428adb261d810f4a1913edd351db54a2e612405843c72e4d14602dd141032894cf268b3494e1ab95830945d72dc820552f2d671f2c8954b5c26b9d289539395565997e968de64a5bb30e803633acaf3a6a3493b1bd7373a239da4ee356d3aead5053e6fb2a263480f9754a555f317b8299ecbccf3eba67830c968079340312ca8c3b4c406c1b155a00f8d329791daaa4d763dfa422491cb24588874e2d2c8630784bc10a982cb2358885ce24b5c5e1ab93ef2e746482726106de4cf63b7833bfd04fad289cb23575e26b97db94467a3eb6ecc2e3fad9a1f16362419a150d65a4a7c268d34e2f2e392a41d303f826f93ebaeccb2dbd9d9f9cec5b3b38379f0ce0e0e7b62e78314f20876f99931f3db0cf2700119c8797666f710f4e9e1020799f42acc8eba1e7ae80e0a813e938603891499079300cd834ac028827a65caf3e012b0490f17e8b2a3d07494592119c51adde7835c1f1e230f0e6b06b283439b813c462040becd5a51a816287c30194599094452c2224452124946140b79040f1700125132e3944630e8438a1265d2642894b547a4287942c9dcbd6fcd4dc1245f4735c18078053e2f92517664028a32f32803afd5da0c64474a4cb1bfeb6176b4d35d8ba257a14574ede01b9d773425d95176252b635e1bd22b22f3da8f96645e03ea154b9ed7a0d08276bacb0a4d572c289617f3d204146bb090aa988c620d79c574a4e15007ec6e07774f3567b4ac82a78090495c3edaccee0749e42920fad2c8a5116c841c52332d39e4461bb9c48d36d2891b6d80b8a1e9893c9f0192923c5f811ba2b0b86136821b8253e479207747fa70434f893c3fc425e286aa1c823f5788b4914aacb84feed653f7f45a94a7af63d7bebb1cdf29fec19d8247462e01a121d7f1f9d3d112ef41c90b402a2d50d2c4890a1377f111f2797088119f07891cf179b048cfe7419ecf834216f83c48247d3e0f4af17c8af8fce9a757e1cb89a85721109f3f49e955f872fa3981e7e0f1087cc7711edb0133ce12d40ea09fb74cbf71c14dc781e4a6dff8b9e9365ef0d379003a7808f8701b0e3cfb784d0b7efa035c70f00ed0c01bb08133a0899fbe039283aff188812fe0419c06133f9d460af973f0ab0b5c0156069e80218e00227e802037803cc167240aae8344e2050072999de730821380041f40091e6382abb20b407b00ba03a00287f9e13850e01875ebb7e5d7cf72ec377c8b5d0f1cf6e41ee7b9413022ae7783603b3708566f104cbb41307a8360d70d820d9104e8070e2d90440438f491c4e31192642789f5c1834323920c11e4099ecb17e010e090033848b5c0ab00010e7d782248cf1138a43caf82885b00871c7890275e459007c1a10f4f58800707c17884dc023848f5018716b80f201f8cc0210786c06190f3e020dc10af82e742701882fb007a1516c02108ee03104e810fafc202e7000e87b811af22080e792e84889d7b3848f582e0201c4d12e45510f1e39e0892f878151c08f21e227ec4811c7101d6d93910ef3af29e7d075aafeb4c2693a9ebbaaeebb860eb6dd7cd287dafe1ebbacfe85e333bcff3bcf7fdde75dd7537ecbcee8cd4aaf5ebddf123d763f4dacce67669c75c8fdd8e1fb677b0055bbf55d3b39647969f5cce7d23ddeedcf5ac3d2a75afbb674fda51fa77525869521dc6299dfb9e7af946badf0be91fe95c777bd20d7f64d2af4e0777efb153db2d0e533bf28f30b5611cef9fad99a41b96be97db1bda77f6bbf7f20fe7bc7cc339a85bef8624cc43f30be6508f7739e1a0306d550b3e0ba6ad3a79b732f0199879e7be716096d973a42c03b32cf36e4919770fc75671266c32bda6b36bc2a1cc19772ee3b8ecd6b96b199769cfb660533964b697d9dec3dddbbbbcb7e56caf366eafe146aaf51b09873d99e4ddf047aee125efdf6bc061cddc39aebb77431e4ab239248e7dc5e176fb9a26c96e87b53894d99e74ef7e38de3f5c336dc8916e6fb7aabbd7490ef3d0bce1fa68c3bb34570611502e408e455a18e5cdb34eef1669bad76ff5461c5e35b3999ebb32f775e1eba9ed39dab36f14ffc8d731dc3e7218cf43e5c39e8ef2a48c2cd898e565964faa680145ce5e241320c7a2274496cce0b52b7338829e7c3aea28d25bcef297d2bbad744dff6ecb978472e92e4a9efce43b11721294e767f44ae639714c6f1c02b1998854f676742fd9976afe70ca7ab455a55b4c5b55bae986f6f111209d7b4d971e3b09c84c7a4d977498debd74c31fb9f4abd3f1bd1fdbe214f71ee2866cc3148723d0932d4e79cfe16eef71b7e7b0e5f08fdc3de61fb97b29b4bf4ab7ba1b197637615cc4767807e9259c433a87735c5e7a4ddbcb4373e94dfa5c1eff72439a593ebb1c12c705d356a1f0ad9770d88263ab584e5bc5822dedb1d371ba76c323b2d6ffbe7d376b9d8eb0f4cf47ee76d0ace908fba5e3d088ac693b66d65ed325dce1d03acfcc5a485bf55dc3e0ad09bea6b50be250e6efc3e177edd6bf7f3c346bd7b260eb5339642e5de6d21b93de38a565ee455a4cc939e458a4c5929cc33dfbd61d8eb623fb56ba4f9ef8e4ec5cdff0c78ca73cfc1937f6f73d7563c77ca4f7f5ee122173e9b4c3e95c7ae9190eb9977ebd08f4c4ce25ecdd5ed3fb76ffeeb4cfe977b7fdeefd0edb9bf0f79a59ba9dbf1b76f75eba8939557acef77e0963243685f3bdff61da2ad2dbe2ce1ecee12ec30ef3d0cce1ec71bb16e6870dcb876220581ad29086a3cc33714e59a29ac445b5340bd26a6daa6c5d97f5235bd78c5ca70fdca3b51b44abe85bae10a7605812a1f43e566043f923bda03f16c611b3504c22812414bd8a62951dd39b5641699a68c3a35543995a37ade2d103e6d12a5a2f205eaeda437a02ab5d2268ae38ceabb6ea42c5293d84288206e1c3033ad9e9797a656599078f56d1f3f4e5c185c1c69b1e78d0ce466d0be3899df5daaa4bbbc2cafc0ca3a2c1805e5d98462c584dca266f879864fbd2b7e6bab3617a773b36bae3887446a2fce1ad74ed3b24d6077899e975c05c7abc0f1063b7a71dcee91687a59f8e7d37764dd83012d59ae601f3223f9beeb3769f4bb684caa513b6f8c321aabbec6c74514c18942cef7d8b1d082383ef2832e9de5092dbedb8ae6d1a57ba412a61ef86debfef74cce25027dbd20dc15c3afd57b7032c7d61e9f1f6e6947077ef35fde590f77eba251d30cb9b6ecac337482fdd98310cc3302ca7ef9dbb619ff35eb90e89c53eb1632d57b0580987b5cb41ba573434249f6e8390c59ed307ff1d2b1d3bf8d373addff79d7636bed27d2edd1eeb765c2f956ae9b1553600c1963e4b5c8ebef7d9d12c85e3d96ff69afe5dd9d938dddef0846fd8d7ccef723676364c3885533ae9258c431d3077af27d54cef92706c55176b76430066b0e351278423e6992c66314618554c04038872c970a6695a56313a99d0e866c566dab66d5a56b1cba263c8a646869db4665592b1b5c571d66b166b5ce1766e7b766ee3386ec3d8654932ccc0a862628d0806892b9d99493ccbb2ec5767239bb720ca45be5232f48cd8377f29d6b2773f664debce2aa6d78db746993ebd590aacd46aac71590fb98a04175680626ed686728935acbf600fb56fb8e2689f36b61e7a345c29ad190c6d316c3db93dec07ec173e220584b4b92e6d2e4c84b3c14e84da0cb99e44a53f501b0c2781846773bd6d66d1176ef4647a835e38460384f3d66b3a479fced95d036c152b2705976116e8b1e1302c0591db70b8cb30d8aacdb66a3b1435bddabefdbdc2b11d66c3befd66dbb6ed91f6aa57305b63a18b2ebcf88208442802185d74e1c5175a98695aac692afb7acfde979449315aa575935863a857199655b6d9b71709fb8f52fbf8d9775b7b7a2d1cdecbb2f2f6ca22add28afcb44abba679a0559a10add2b8b310c1863359db3a5a45c622d8fa0b755db7e4e71b4ba328a39d050c9bbd1fce1865f3eec81daa5d1a4931b2768c5e2ee16e18c7c8da5b8c8ce89542add2be5d19d42aeddc10ab5d1a69d6a2b4cff40a47a4c18004d46b9afcc91a50d688f44abb2ca2bd26d69059bb079a86da34e10861ec428b55b266256b6564ed585cd1ae6976569bb508a3e19c56d279a18b2ebef022c284f228d76a5131e64871449462534528ff5d24be97e6c4df63e90ae9b1f98eddb027633c3efc7d5e89c34ae577fd0ba25535080cc756d5b4857db4aabe868704b48ac6c605ab9d8508b66e72889bd8377bec922cf664f68eddce934b5a553122b106f6ea6139b44930ecad1b346345b09c87bdec161122b5bebba15c92ebb99b5d21f52d464deaa54f114cd87ad9a49be41a33ada73fac6c61e44aaeb709e0516bad2eb9562206e40aa53e4ad61d0b5a90d0828416244827acd3f77cc4a8952cb39321b2d371e18a4371a4ada278688c8e4daaf28a941ff9d3ddb59bc84fac7124d6883912e955e73043e9905ec577ac56cad4010031ac219eb24cdc8147d4a11fdf459a998cc3a10e8d1c1f6f1d838dc7308c489616be11af48a448af666723b6ccd84cc72ba5e424b5644f2b5abfe1113630c1c677957c512a696c1a1e91250ec34a41a4da687f0e1305031ba6b0cba7309c4395a3aa55f1568c919f572bc368468e455710e51f4cc9b1688a2139cc82725f21061651b24c8e455800e52844453f80222b29f2c14f472104344491432b4808688022f7ad25bd924c220c86cd696d96655996ac18f5568d91bbc8945689216b9e32a948f122f727519e40d409cbb2acbe655996657514374e869451648c1a1ef38cc79c7acc2f8fd9e5508891c489152855508fb9e531b33ce6d363be71e2934d8fb9f498bfc76c2fc692212b4cbc08a38c31b217946f9e34c9dc63de1eb3f698b3c7fc98afc71c23268431c1a0e43e46840dd9c0849e60c31a547fea4f058242ee1031a32b36e6656ae26d8b38f523d4c9f2d5b2e10291969556950106a30c866b0c2a4fc45822c4a457d292f89a7285d1aad662ce3e9a735a5530ecbd6dd68760e589af224e6c58839a44692615ca35a42ea94275a8125d3e41adaa4b5ad5981091945e0d0d79d12466285814892b9356750d029960c31a6568285725497a55afa4572126f4832bb98f09f52ab48298f42a6ca01a34246b50af62ac1124d484288a14cb0a1614ada3305a0c4c09168555c64524b717fd1b27577a45bfc831d7706f9c5c71528693329ef8f48a7a91639e716f9ef83c19f264c8d0955ed122e49853f766e8ca501943653809171b019323cb179e393dcb95555a454349657636a4751933786f8832f4a61bd6d20d55dfc524152a02b8a9eb3ff5f1b109c04d5d9807fe7d77a3de3a00ee6fc49e001a59567368153dccc521c3391567d41236bc01df7b7fe5d18ca1078f6e40864f1a6944ef43b49154660ca51263e829a516a53848225b54c61ad16746a78e202febbac860646666865eae556dc4dafbb894813527c6c54794118f888a1269c41aed4ca499e1228de5e998fe71022b79508b03799ede3012cdd43a5367288733a7ec9943e6e080ead45e491cca79f999234f6b08c35a510a456135d6aeb866281cceccfaae1aaabed2d774dc50724e1d305b3968b22aa16938c3105080844fd114aa20851e1a2c2182851fe46028084f2489443466a2e49a6317a591a8a0f65155281245a86a26b91ffbb58f8ae76113b52dc43a63a8ca6dfbb15a214807572361464dade209afbbbbb12a90d0aa30725581e452a29754d9968c61755974da2db2d05b7821f76b2ac7a22dc0d8220a4aca8642818d8f18ca07e5632dcbb2acf94806ab8858a3b3fc750f08a1d3aa22620d99e53b1fad6a8b561f93e6c73cc2482e1b577763620f7436aefb80810d679a0161e47e0d8f1c8b8e40949f43af8a8eb024f7552103b26c9a6342ebc26429833679e4a3abc8e5ed76cbb26ddb301cdc352132f71bea64eed80d7b3c5ede69b691b663f736b975d8e60d8b6fac03e6a65bcf277e06ed9d76ed5bdc228769dbf6f21797b378a6db9bfe7d33dd967fb7bba5bb1df626d3bf1b82f9fbf70dbcfdd395395ff046c974c1b7dcd0f478d082df2908de6b39687a68c16fa6dbdf4cd7e211c87c7a3c612038b155374c8fdd8e92099fecc11b9a482d20ce21fd84733c1d3083ef1b923e9c6201bd1710872e2c2c5bb775db06da6d03bb6ddb40bb7d1b6aebb66fdb5ace60b3a76436bdb177abebae99344d3b9d6eed41b0f4d9fcb5b4b01c7ca944bafdc17b9dc574d24f9708994defcf0ec7740d771844ee883dd6b449fb66bad664ff9dde3704334ee9fb0e925eed4d1d4ee91fd8aac6de2dcee974c0dc61cde60dbb210d1df006cf94c3420cbbbcfeaccbb68b43a1622e0c873ef275abc6cac1cdb0a1524f717779b98944baf6c5e210c833112ff9f4ddc3e133894422dd7b7c045a5e7a4d7b2dafe9cf23f9c85eadd6a2b277cbfef391edb38ffc815ecbbf136e697909e7bc8097c7fa308f95532f8f37b9bca4509c8b0b0a85227d23a1481fcafb48dbb66d241289442299c1bbccdeadf5ee237f241cde904937d860430d35cc98914abdbcb8b8a0502d2d2c2ca713089a4ca5d2f759eb792452d771dcb6695a964959b62d6fc12712965f9e7a8c354e0fad96a35238bc32e92e7fb957b628cc22c3824f77753ac9aa2c0e391eabe4799ee75d92e7d9ced6eb1edeca1bae36de0795cc435d2448149a72fd375f4bafaf9c8d3534cfaa9e977d7638b60da7b6a770badbe3e86c4fde700a67bb3d8eedf63df9ba5bd7d9f8b26bfaf58118e73af78b8bbfb4ebcab00e988fd51eb9c3f67955b6dd2fea703dbb97e9962ec5c9acc529fb79efc916a770ecbfe3b0ffde93b3bbddefdaebdd90e6eda41bd29c7dbbf51d8771b667f5998d32f51ab651c646990c733a9c0e26e55992971464b0d8350cf5eaf23ae3336e78ea2f35dc06f0a6833f7d03aff7d3355d3047cbc19b74b0fc646d2e9d36d97d299cd48777d87ba66fed7139f6319f0e5e130e757268ba0e982d4edde84e3ace8d0ed7f416652837bb7fdffd7ecaa6d33dd30d7bcf7238d4c92710873ad974d9ddc8ec1dbc2d359c2ecbb74d7638a59fb61da6832390793bf89af6585858be79f7f4addbf1dd82dfbe0fa7bea7709048d7baf7e40fa770be6bc7f15dd3be8e44bb967b1ce75daec5bbec707cd84619f0a77b1673ad027f7a4d773ddce07967b13a09c87cc34d2da71beee19c1bfee19c1aee85f1a71bde80596a78bc0d2f3560daaa19f8d6cb8b8b0e97d7d7b44b75a9f574cb52ab75a9b59e582a0aa35055ab35abb656327838476b4d3b8669c77e43adc3b06b2c370433cb4f37d4c927d05aefd2581c92ee8d1d036e6779cd64b9f1a77b9d74c3ed26aceb6ec7e4644b4bc759eabed10ee7648120f87937ac2ca70b7a58b73d762693774d1bc661b97796138e13b65126d40173d8934b36ca5812e65a653177ef925e334b38337792eb2d757a0ac77496e3309d05c72803be279f700ae77496e3389de53dd9deb0b2dcd305afe96e93a3ddf7cba53e8c330387c536ca70f73087c33b893b0973dae5c30deb8059c3d8a30d75c0dbd02c4b006b9d31b44a4cab2b0d8b96c348ac4ec60ef600c5f031b4742e77e18eba89f4dd6edf3dddbb4daa1cc8f226e2867c7a7f3704b3e779278c91d8daffee8167e17efa2ec87d07bf7ba75bef0371aaf41ee2860cbe4b38023d19c4a14eeec7ac93ed0772271d308320cee17ec239241df0c33a60e63cd2e35f4c24970e6532755dd7799fd77d9ed7d2d2d2e2799ee77963e04ae00dc10cfebba14efe6c6e9b3daf9f4a793834fdfbe929f03513bcf1dfbd6ebaa10e58ead91623b135931e82190475c07761d06f16915e15c1d3fad15eb26b47c561098ef275ecc2a18ef53304951cc6eb583f32b07ec8b05bc9748d2574f9e920776fe3eecb49d77ade5be66ba4dc7c8d947bb9ed6e39ee24ee1f267d7fb9e1f6789777dcfd5c3ed2cbbd73dc53ddf6cfeb308efd5744098eb27db87d2e2fd6e51fce717987735aeee95817126e793cea8634839fdde1b460da2a16eb1e0e4f20683299bc6f9e89bb4732719e572a954ad65a6b2d1959966559966599c779e7fe5dee53c7fae1484472a701593f5e50098eac1feb8709d7b153ec5bad3cd9aa52cb1e6fcdd7fa56595986753821b89e4d36173361b05bc7594bc40d99745bf25efa3c52c97a1bc7713cd62b7943dc90bd30b5919eb3dd3b69bbe7a936ccc39339af64eaba6f9eed74386b2d672d67ed56bf1a066b377b79bbd99bb36d1b69e370d893ed0d7956a49b2ce9c65679b6bbcd7e9ddb485e111c89748fe33cee9e570447b2b6d3e1cec3cda09af4e430337206761d966119963d888e66280c9b812205a10313840e0c9d5ffc0b2edc35d2cbbba7bc97dedf4a97e57d3fb0e51fcbbf5fdd0eefa51da79b5e7adf10a6d67e6e168c73c2a6b66fb961c9a26eb2a8d7b4679b250c22db5f9d8efe674b259b3aed30bdf498830853278c63fa9e83c8d6a2eeb160d42dce41dd7e37f4b00e4c4661f0f1a90e24712f5dc7711cf77ddcf7b9b8b8b87cdff77ddf174c2fdd102697eedd3088ecfd749a91bf96167c3a1df5bd5198e52d37b68a059feec772161c82f77e3ae130debbd7c11beac064fbeea6d2f7c1e4aff47d303a30314a103a309908e9d2de9139247b12b7c170115694b9ac3b8f590ab05e6f15d8c533e98f298fee05bb75a4db6f248fe32a07560ef4b86949ffb0ddba9b38bb9d2bc2a64ce73813c62915d19dc33cb3eb6ec2392ee766e666ee2c0e7926c7699a5635ad5ef342966559966559568bc89ec984435aba31ca701e9765f5bb873f2fca8478e60d67366337048bb892791a25392d5cb72eedec71c3cf2ed6d965b7e387f5ad31ae63b0c70c57ecb22817324debbe7997f4ee7693de9ef7aeeb4835d3f338cff3de916edbe31a8729ae6ba6476aae6fe875a71308825d36471c7aa6bca8d8ea9783eefe882029fd7210af23a6c8a03cffe540065d528748a7904192522e4eb9b00bc38e5c475453300ce3320b3492d5ce7a82e6d03e1860da36b96aa46e16eef1c414aebbae4b0a46ba4b6bc19c931ee35036b0f3f552cd983e8d99999969d60cd40f4a9b74522ad4079dc06563611f3626372dd649ece3ea6c4c1975a0b4235dc14707248d750bd768810873c2fe90b2253fb9be77b01e29ca06963eca1d629d341786443525eb481668491e673dca1d688eb72c19d47d40965efe64cf4e4eeea04356bb1c46ccfe648c420f890149831d932bf9305201d31862a9dce1caaa4fc6846dc330ecb462cbb242548e72ded0e62b461c5e8fadaab6a7dc2c591fd29b2813b1cbb2a865611a3dd611dd97127d0d459915a54d28964c5ad5d7259d4499d8f6521234e79c3ff31587d7257d664c7ca4f4a2b4319571c619678dd77559bf21d259afb0a570668e9f39e21865649c397612ef20d42bedb249afa674126b6497dd259149e35dcaef52e21a8d8e72ff9346c7b8a17460e5e795584495e5245b5be429af882a8a0517da95565c51843c332c85a28c658511f2bc92182424c5bbf28704a4844a77a54f8cb1cedd18637e8e7c9444a26cd5f8f8f585f4c99cdcc072428525b1d0430a456598420b577660861e2a5cd004255ae4c0064100c3c90e2e27570cc04262eac08a2258610c4848c11376aaac208b23510ca1c1125a3801ea2c143839826145a8f4c1421ce34a9428251ac5a31a22c020f77d4cc1c415b60813be2767e37a4cacd15c9d34dae367bc61bad7c7c7c41af211c51dcba4e830d8319695e300d9c2b4bb2805f78e993f409e989bd3feb079e2da73884abcb29414a288c20cb2c8c2c80a7060c206546ea084900c78a0c5d01036eb044e88645b933199d09d61238d8149c1b4602db141a6022f5c443cd43cb168d499e56f7aa002254e8951a2949a2254b81c8b888004b8850f687442fc420732382204251c61c2137450a7704214865c3044051d8a4177858421aae1e1a687ee8a25d44089253d90a28a4da8ca3552ac800a558600051117454862e8220b56a8f0c81e32a0ce39bbfb4a4114883013b30cbbe558d4051420c81e527ee081e241eed33ed82b0ac36541a5f0f8a147103442d5145e8e455dbc804a92211460434a90b022a42e5280c9225d1401732c8af2855c732c8a92852294524a2f0bb3aa6555ace79cdd335e585c008419c8f3b25a188e1c888638b3f663e3cc1be528194e85c79452babb8a0d5147cd38cc4d0d0f6454e10928501bd82bc7a2287dc486a19f6351941f642cc7a22842282a53d836cf8ac10e65c1c5884289c1a2c460412e07141928326af8d036dbad364bf345098d3c2f691069a6c81387b7228aca8595412c5bb03f785a8ad8502a69cd4a41d52bbfddb6913698258f6ce79066ecca9949c3e3b3a79834920656778394312c954499790d0d36c31a16b221a10a212a3e361b8ef2f31bc655b9b5e948ce2649c1bd3b20a48d543263a2044d945512a704c292850a368c473f268d0de391fc8553f416a6568bb24518940dacfcd651a667b429b6c4d5550303a50efd39736c79785aed501f669b03862021d360b33d896ac3318008ca86bb4aeea0611a52877ec5384699896b4499565d8d25d600e50e3c481dfa1ca6816394d11e769e5816e1a0378c8832db2582b2d9ce5dec0a31637a4c1ee40e3fa40e0d86dc7dabbb51675b9aa6454da31a497b4d5b171265fab9488f501ac919be92135716361d599977680ea334a2446e1a8820f6984b90204a55285b90fb27a8818df98a25c5f6b8bd6f1133265e294288fc6460e533284d25b70c7a0ce52665ecce8614d7b7cce57819d4abce72621904850d5b8a85df1d46c7b45c62062b85e4e718990a8d4d0aa3a7b49456f5c4a194d25490b0f514811de7c85e2d476ccd4d11bdb21e9b10e31462cc42ec8246eed734a18b3979985bb0d6b1d7340fadaa69d5cc218514711365fa3831a68f0490854f01d584dc5d33633a015cb03466aa582ad7145b94d2b2e4ecce87cb266261ad27624cf7a5c040a8cf6959924a222b26a5335e196fb480f213b780620d7a9415594e91e5230e331ac4873159765b4d6f8d32d18ac146a7889163d1142f3201722c9aa224d779a1fc1c8b9af093b7296372e552387fa4569fca4e02315be7a80462ee1b7d2c2573f41ba7739f880ff4e4986bfaba722e9cba6e1d5b57650b479839a16c11a6391a563a638a5eb768a5f3d9377ab16ff29daac74eafca34c76358852d8a6bce0c92f2b23e279d17865911042bb84062c51796154890930756fcc0b262c852825c8121f7290fc280052a6240ada0c146972cd96a018ad4021099618bcc896a050a2c2b54601560e382091617627039167151042e88b6e0451963f62cab71c6196d44eb7a42f306e5f82f8a953de79c2b7a1ae917459480c9347b33e4cc73cece867569ad18ad5b9645250ca5944e2b892d6e5fd8580486510ea71118549a26da489f2c412bb30cc36a26a66149448c2fc2f8c20b21194a1fec8d51f96e9c18e5c845145172ec6ccccce4d08201459e476024b122c52787d3684ec9329c54dac8156925cbcf2935f4c0eef0d83cb78832f233085107f9b01a652254a246eb29173b1c362cebbaae0c23b1d9b10e87cdbed12c4699fa0cd7a0045b71d897b4c3d1d71a4b22b6551a46f1003564b97356d88861251674f7af6337044d947366680491d5ddf0f2248a32f2a82c6c287d88b2ec2e81664c77f6937bda74b87fe676ad7b6ff85cb1798ec7084ce4048b8cb024cbcb21b2c8567ba77e0432677847fb0d1cf2f64dbb37b20dc72893bda6b53a810c87dd93fbc6dc4499e259a555f2b6933e5146cea369d42ac9d2041bf6e4ce010504eb63afd024df1c8b8a92140dc938e45804a58c1cea7021d445e6519e975c28c9b3f3e4b2cf142a1a23872dd444a8488c3cdf4ce6509edf3c8a4a62c3160a67509efd33e3ad262dd43ff36117e955c452609f176282822ae2b16e82cd28e375729427985442e96334c5bcc4c2274b9f29d6e7475f29b05bd8799a06c3cd84a769a28dd08905f642734e89438b27514d411896b8d0f083b2e84f0e347810831e010d242484a19150a5b18e52e8aa088a18721fecd5d546723f7638f7c2358d72012aaec0264e9a4b253472c76d16db18737958c9cc8c8ac3335bad1aee8b4e1aee9b266f741dd53ef68ad59e5df94d72bd650c873db2751bca6dda2d02260bd1aa01640bfb50a2676c78f4caa2c908b08449b6b818afeb9e515d6255435d7665928eb97e518a3d02b5eafa69d5c584927c5d32b124bb15453b20531224998835a207ea15ac8d31d7af5aedf53a5bc3a2fb7edfead61d0e2cda5ca46799677536ba6f3824d56fdba669dba601392273df6e086692c655c9dcb52494412b8b147c7827e578d10347b042601fadb282e8558ed643dac8fe5d219fbd42eced8cb1b61bdabca198b0b1552920daa68030e2b3e8bdd7cc4b7a7679682a8796a3c97c71ef6e6a7bcc9ab5e1982b75c20a817db048c15eb7b15106c3dc11157c607078c4322c9b6915b55e230d006e9dc695bc759261b48a5279964b695957c6728148398526c14a2349a555f42c52b0273c3363680e18175a366397855f3f6900709a1d08cd44d49047d093b3facd7a76431a3468ce727d3b5d1a77460cf644a5f863777135b842a40d0074b818005a1800c0727a39c62fa9a84edf424d26cd3dc527911ea2b2cb4ff458ad26530d334e5f6ec30d2f6f797979b931b7b4d8f07263bea1a5c5063cd3d9a861c60c9a67ece0604699b68a5e00c7ef1180dfa77e80f9003e0098140e6b76c128fb4364c6d06864804cff9d06aae5f45b3cdde5b1b3913afd653b5dd7e9c6fc72811c915f7edd10cc2e7fc9a90b44e697c7cec60ba6e1d29d0dd475b53cd3915da3b9e5a6726839d9350ee60a81f98d101ccea3b3c1a3e6a298780c4e013171f87cb451e11410fdfba29fa8f40b57c5999c654ad1c8080000f314002028140c084442b150341a8882aa3e14800d8ea4466a5295c9c32087414a19848c31841020400064044606b30d0861ba0fb5be6b23b3ccc2402d461d4c889149846ab31c864dc59ae89a46d30a4cad0d2ab0b2c4429b0f9cead0ca0570b61c42d782c0372aba2ed9e1ea03567b963e2166c42d06e3ea260d4aee830286c418876bc119b1a28bf8806364a3479c39f6278f18cdd1c28b358accdf34e41e72d850eb0ee037de8919f0a28e4a4daf1067281f521ce79c238acca8c2fec08dce5c5de2120d781f963f59c25dc5382ee960df8541adc4bcd3f49f0266bcc62588ae5be040da2eb57cf26452dd90aaa694894fb98bc11da756d724cf2c8593ec79aaf37a71e19abfeee6e9ce7749d2bc63fb100561df5a7a8d2f6a6bab2972f5d393b4e65251d1eb522d1405358fb7ee093b280626b0fa088c3d923d417fa015168bfb3707ccd2bb3291d73516d6ca98a941d327134a1fab48589d9d57da2e326b7a283151f840bad7813adf491e776a54e257738ccb440ed75d97056e3c18380c642a044d41a997d95e5ec4426c245f5b3e47d44fde18cc8d996d3250c3fa9e4e715d4a0de1a3e18aef1e5ba16a3d774bea173c69f762f9820383843eebfe73270a386eac841a942bbd3c651bb6d2fdd01c5140a54f099a770d4dcfe16eefcd073e14d8cb6a1dcf2e9dcaac7ad9c9ececd2252dc9649c36759eb0e7c3e9064e4fd7d1447242bc0302ae6f89295975f2e1acb38d697a188703da79d1679580682b580ce6e7f2b3f62dd53b248e8bb69037d2613405ea6b1be23b72705178e330f7f8996ddf39fbc4a9152f72cadc0d2949d446b5bd68855340becd20bb0bc060787a417a94c3cdda74a02a38b11cb0a575ab4d24fc7037142beac41dd2a3953d2fbca8802d38405ce01ab4e80b838e5df65ee00d50cd0795099e88408e88d62b31297c034121dd824f639366bd9d674c14715340ea02ec784661f170b850c598bfb0fcfc2d2d9a0464f80d70df3448c02b0ad43488d835b8f1b692d02482d8b97ee7eb1fd374500f95240f4a81f3cca584f90a80302ef23b53152bc6c82b7077b255f19f35877cf42919dab4f5ad1edc36081f1e3dc2d4f47ee9d37f10d6b05187c888285480d14e0f8544826de9050a0ef2e3ac1e469d752909a7e670a8d04e8089d44f44aa46ca0b45ead2ba4e1afb560599d7fe2b2e92430e5f649fd70b1571737600c66b55ba0ad9cf4a5fcba73fd03f8357718a43220ee7961ad47a18cb2fbdf01a6928d1f2eeaeaa5dfaab332fca4241947b079f2597de9f65794e6abc475523f92d1a98fa1cb66be50eae0ac005d171edef19d7eb83fc3d1504ebe9ee00f0334d2deca59f03387bede79fe1116828d824a7607824757f34ec2c325a046281445b18d026097d0e222c39cc4105b413a90417cf6e744f144867070f9ba05c8c4f5d7ccbc5593e0c8117cd6bb1ac74169d0f37e78babbd32662fb8b81ce8a32a540ad04d247b9d2afc37e9b6b5b203396fc05561c9d4715de836689c4d261f876be9acfeab018c608d2ba13f2488f07e0f6ae5a416bcf8ac43accc7b570723d521bb5ded7ce4f1136b610891f2ee0014cf5ea56a4b883f3b2fe45ded2919d39d9853a96f4b175feb958d115639aac85ec6d7aa558b40801587fae9317ae01a68010d812b1083bf19aeb297dba9b58b5be0a8e1482ab6bfb57fc24ed30f2004d4ef6462bc46d8178ae0685fb8db3ca46e8c8af815c3afefd89c90e3fc1ffa95669c117f2ea273fac8c2f9234edb3122d7f89ed93c21300e1db2fde0b7fcde8c1e15b7723840f786b3154ba1c3fd70f9007d22052aa9661e3d8c253f486af235ae37aac1cb7f032e568197237a218acbf321858d6bb8b920bc0fee04fdf3228d975e24f3cc14996b85a473e9714e5054859dd55f9145dcca0ddfa6beac7c496b607134dea1d750b67ccc63ad9fbcb5078d7fe98fc08e24adcefe99826cf5cb6797754adf055739127961ecef004c2152c3aea8a577321ef5458b9c426418126e2e0c784f68a553df27758f2f6774c305e72bd2ccc2c8fc5d229ad4c90ae44e3e1d92d760e6387b55e7e8a0949bb8c9d057ec75a4561b18be1b1becad957598e3330b1fb72dabc83711caa66750008d9a4cf7bf02376f5f36e1804256303bd18d6a922580cdfd727eb6bcdc5bc410326594b5af77c81fcab92093cc07b3ee9ec0ae93dabcb212df50ab16537d20279a8c73622969a56507c49a31a0d167f8e271cf2e2717365695f9dc93bc8f558915df73a5ee4df4245f450a953a3998c5371e64fdfb883855bb8cfe43540df6f6d11660a117e15108ddcdc02f0b2fceda4ed165bcba0aec8d2b5115c18aff53565b9e888d18327779ffd8eeeef3c334108e233bdf58704e99971d93053d9545784b0053a7edb165affa6d3e38650a83c548e9e1ee5f9273d893dc5571cea57cbba3d50df186d4835dcc0c6c2ea64c65f285def47169675abbd8d742f0e7d1b1cc7dd56a9aecfe4da20c289955e764c06b8984a278f53ae1fb37e7a3b1ce63588aa196eefe22ebf9acc4351f780fb702bd7fa126bc01fc8fc2171bc7d36163f7787a5d457f1704141efd5fd9453ec4c425647a3ea84d095927cf4f5ce813d5fbbe054addbe410cef3a566bfba8d3e4e6c4d9cbc971bbe324a06c0010dd5c202122e8226b9b8cd1ab82ab89e3cf7522f6f0245e496daa6bb3c0496249e9cc6ca09defccb48691fc141f93d8b2cc04d1ff7c49d4bc51037f06c606261e82d23ae7ed05f417e7fbc25b50cdb1fc825553ac6609a0f3dfc0b977a73a9775f681fb29d4efcc5b5a297501453dc28eea18dce2c0b6f22a1f66051e656c1081d313a0f3e9250e9533c8c243d079c18d407e4ba99a65a7973ff86dcf8cfcdf977f46d98bad2844c95365e4638ab3401e512edf69b68fb324e826dfb1d74afdd3e27862b65bb82d83139c78a39750f31b9a7339de0716e8d02327bff8aa12a2eb24e0b2705f16b9ea962a5562a3852284c30d3276ebe7c52b75fc645f443b7fed8247ca5922dd05b703834d943db67c7e49773a05398a7890a227975bdc66ee04bac8c4a255643fe20cc9e3c4954c2bdd5ed032b510d9968d42e2645e52db077a43f6d74d20c7f4b81a841a405f2cbbff4d402747ccf43974c1953ed061482e91c13915c4467b2babe5b4c7efd4ce81abbc76f73523b5b9d2180463e3f6178cbc2e1f8c1d22f21b109611404b5e4017ca38caed6c374dc8d216131fd3475ce60de61dc86d6bf6685c1db1c808f0fed83acaa24a1ee2c811b13e2849e9e5e777136ac65decf19a13a0cb4c2ffde413b1e1b94bb25985bfd4855af374ff955ab3ea68be043310683b14b03b59ef021facb5678571585801bc4c01e196dfce61d5898043fb93bcc90453ee658345414d8b3a38dbe192c7f92f1a1889d1b33fb34dca2695fe3047132d009961218b28563e191b7c683567934706fe5b3aa674e9d34b4fbab3be0cb073a8ac31d03728d71a57bd5ca8c0ff8e0f4a7aeb65f8b47a3ea8a7f29f13b7b0ab12b41060954cadd2a439aee3bfec2f2571a55d5fcff14799721c902582b7249c70553f0055f5cbfe41f04b48b3046d99ee049efb71b82e2cc64bceae62abbd2891ebf8240f01a2e1f92b6e16045d6822f4b4fce7395d8c35698525bdcb57684a8c90911127cb42d20a3deebfc88e2d06d97ef36853b44b7a482642349f306015d0294853a2ae4f62ef14f62d346e4b8a7f4f71c27358c607b8c6e6832c16a1a2cb5a628dcc2a26d0005e38155083bfd231a0ad50f686bcaddcb62add2b571c5be1b3aa70229fad84631614c6c459c395deb14d4b2612bbd8a44d6b34dc6a47aa7e4521add185ac4b6ad90da0266bbb3c22693575a198fe8fef60b0a5d3cbab0d86476699e32923c5cdcca80de5e85008165b048e9b1ff7215fe34424cd91acccb1a8fa67ef4f68d7e36b46ccd744c51545ebe27b87faf512e690a4a895d62cc42b6931d544522203746c7fcec4d69aacf6324083c5b68b11c7cd3f103f493cd6c9d769b5e073a9c59e8933d67c32cd4bbe3e7cb098ebcf8ce243cb39079f3c08b0ce1750dbefdb7a5b94bdd7b80a47c8e8ed30f91e470e363823192793e8771ce99eb1fba9f0c82547f9c5b9b83dc77f94911efedb321c7c89d4693e337ea1b8f94c5af894f2a79a5fd3449ec7ec362862a9c48514b14333e99d876964f3a7284695a925dcc0977094223d70682f6386b868a46528d566f402f5b586f76b6c3f64a44d5ba9812a9ad9f2122b0a2264e1b09e286c44c8f03ed4db915427c0f4eeb6c519032a6adf11de301163198bd8837d98f1a748568f2b3b66c804af40ee4d196c7a64b147d691634bb0f46c362e8890fd27c13fc567cdc10a8c4d906604eee45e4eeb9b932bdf0a0171abe9934691cdf4363f78603bda4820995977409e26dcb0265ebbd6259f2d8342bc811c19d3e365a331d8d888aee32e7e9e1f8da890776eea5455e8ca3a3da540a9d32db2c7c46c4b0e7c02b732c82273d37618d58a33159537a82a3e52ab3101a6910aad19506faa771874771d14cd51ce911122a002e9e5a8347315a351035e199ca566f4c76284ce67dd84eb9a19358b6fb4d7c5ec92d895e1b221e778d486ba191fd8b729f802a71ce4c466883fb1f7025d7884369a36252f1cde8501c2b8121a3022f686c6741eb3344c1649b56a3aa18b0f17d45ed995ce4825b35fae48df3b11c04728e880f12beef59907e25911b3cb4b8a91ac08cc1a45c052c1cb5cf422eb702301501eebe524c02a647962b272d47189ddc64a5b32577e1ca3ad7f155957584949cae5593862aca5d9352c36916ff71eade67bdbf796ee3ac3d2ece64142a0ca6b03774184068294703f09db0dba88a435c1e7a2056cb5d19722a9c2499db48d9d1331c49fe9436ba292f6a2c3c96c14ccb9f4ea298f53b1e71efe060f65b4a907d6287d44eac17cebebef0fae97b1b64001c6b6d4f2ef9a5f0f369394600ec7a0ab4b30cabeeed22f51d9bbb4212cdd49cb3cf643705ac61aef73581114dd1478633c6ac2bd6b47cbabbbc255ad21f74d49053b18ce9e7e9a5b83ffcc548ff92c1393b3ddd818adbd09e0a0f6fd02ec3e9b80cedd6132e5776bc7db24e0d59581152a312dde732078c4eae05af45b2c24634984ea08cbf47c32ffcd82f2abf162ce1c63348b685c0c68805bcb324d4d66409f2714d5ce4a0420acdb79b6ebaf2bcfd58f6e2330d721609c98ac860c4191547c7dee0193bd13fd51f1ac9f79d111dd481a4fc4fd110234c0ad1063a9d552f0f73802ad2dc8055b26e0de06a287d012d58f3c6048db3c265afad38d21d074b0ffd2ccf09902c06a51318f3325a262cd86f18ccac2cd6c544a9e3d32daa3002f8530660cedfb4d97051c9155c52776f415367f59405b60313b9cddf84729bff6a20a4bf11b41632010abda36a0d522f057bcc5a311894013ab2b997b6b4e8b03ac6caf2634870132fee410f2b9e0702304490769be93496a88628ad0163f47ed27999213ed3f9020ca54bc074133da6f601b7b00a543fd796c722880ffaa9b271400c04a1e5bc1e12fd795fb289225644946ab57181da35d3e5aedefcf7e3ea6b9220782763c5eccaa0072adb8eba04ed6dbafe77c83d006b2d328075c6c31078a653b66ce53e128f3a9d48870b940b38e6c8b9046f47948f5110a96f12790fdf77e8b16ed2539c30a4f40677f893dc610b64a8f86901b03429e2c28f488e9c86a0a476fd8c0e15a618bca627a8a26152e037d9ece815c4a25778830f78e1a2faba84cb69370ff8defa851ec0abad181277a87216c2428be516c984aaf24539358f93fcd8969dd93f65d67ba1604e69d5f37a65640bfe6126703b5ec88cecd54d8432097d88e2650aa620dc0118aaf4e38b47df528acc9de0bd0796eb63f3bec1a339d35b6009433b411aa37b8e0f797c42db579ca87ad6e25ba0c5783e09ae64d8c81406c1ea9203f9175cd5c13a87ccd8d68ad9bfb4031c4ffc90789682d8f37050734e88161ee3bf765b712c511c161df0aa48261b8ec110184c661e1782bdc5a138bc3050b20dba25d44f44da3dd6dd286ced21a50a2b7481a0908907bf7db2240c41ed82a14df5925b1344c492710ea9f1510e363be777fe4da5abc6fc98f911ec35e310c45fcfad1bb5d93f06899f92dabf342db4ec659832d98bf56253220c9530e07c3a1410ef617a79d8fb33e17f0edd56641c9a7e5bc3bebab0fdf411b7d4a4326588bfb0ab68549b83865cd7f14020f047d863ac224de5b5d58b6022bece555df0a978144f157cfba6d136981e72fc3738e542a060b488e0d033f70b303f2aaa3fa3952ce55ff5910acb6676c22e1bbec75c29c89e720056b0daa179e4a4b43205cd5ea5bd0eebbf2b74fd8415ce6b1509861fce94268b964af0840602a3d29cc3574b09c4bbccaee089d770b599f5775457445e735a4cac5b559a1373273b9778cf994abd869dec5f0e242d75ed5e5aeb2f7ce5b81d770e16a5303a815e04c7982fd83e5f73e6f25b3124a28ec288c72fcfe8395b661bcbc0628e3ffa16363d0f6d9913814f80390572e2071843fe9333980586c4532c45de1fa4dc2eab8bf4ba1a15680bc52577f59b2f927f48453ee97be5f94c04b46fee3d5653f320c4414014b00f86121fb1aa102fc8868eedfbd5ac2bdd5ffa0d0a3cf4438825c8e905e595691ec07ff2a596ad660897456de161670444f9ec9c467afd6a9bbbab59c8a7ee8281c4f264df9b41024f95a25725babdfe253b2ab390c42b6055ea3e93615947f2ce9cf7c96f77cd88dd0c0b3602593b4de4d16039c6b0a557f50e9610d34553eae562d3da9852c7d19ae64bd1272e1f3aa3bd91c89fc23d87c2b5182927ad1c4d1c4f745b3d8917553110cc5f95ff0585d31f359b2ef39ca231a9ad7d2d90b8ddfa3a2233b24eea39d4299b1c5667c661132080c8edddddf3e5aa1b043ce7994ee6721a9a091593f93df8bd5381a2ade8e5d217f5b4c5317eb6672e8468c02376b1b2c2638d78121e093dc63e1586e27c9ef38d726f590c1f54621f70803da79561ea587ae0219b353c46d0c066584e17771084c95640f3e2a5dd0522bec670dedfe133028e6e665e33bbbc48f23d9de0969ad99e9b66c662dbe4a6cc7cf014e6338e957e0b16cfa7c6f442e70623c98944474013c8aa916a804b522236394a7c5294fef47a27817a4814149c69d2303884b6676cfe23047a77260b54ddf5dff8726bf53a20e785810af6cc6bd7c2b88fc422826202c913074586d4967ffb2355a007414d32c208327a4bce6d0bac70ca26b94f9e98d99f5f34dc91b02ca5aec6ee1f657c62ded7d007385733968eb3196c0caedad2e66b9af73080bc30df37af0872aa0789cc99ca3db056e834c9a76395232ce6410721fe9f08d1f29187f8d429060e7639fab021055f23b884995026d3305e3e1bf3d4dbb0bdcc07c752d8a4980ba8a6e3c303544acc160c062ec3d1e88d324e55e7a6181d9800cfa98c51126e5ec59aa2e045736070f5db0c347a0dc57ff9aaedaafb16958dcc1827b10df99e437872e75ad30a297bf4255d5fe44e4e30904ebb4f9fa5fbc89c03d4223547f250738b68775f6015c86c18273c00bf1f4b7cf0f6832e47e2785f90b41a030af7c0ccc093e0c4ee75258f13e40bd80ad0a4081843a34f94a2bad94df87426e23fa9b5c58b373cd08eb04893fec1da816e93d5e3f6a509a46379b51371c57a3c322940f4798e88060d977888e1da204d8006849d7807bd4000ffd298ca125efc1dbff8e5338e7a22c893132194dc1f597fd71bac28d3bd3bb5e9d774e7674f248881f2c51481f10f7e6f5e3aa9f05c9801431612102c923a8c110b0fc782d1cc4010fd20f2b7d7c85a118a2362d286b73c6d3ca89970ad746e6e4c5f8a5056643a9f664b18c1344dc843d5b205432c04acdb0e191708e66989a7ae13432fe46cf443ca1641c2c0483634deca6fa4a3e4dfe2d4fc88464d043606c0dd68505c8bafd84b39086fe7cfa451e45bc2e62deb7b63ec685e581bf6584d21b942df37a67aa1f66a1653fa584c489f235d380f94924cbdb9729cd6d711fb0656a03faf393e16384ee4cc59f117670ff0945a691c5befe97c1e105ad8e39f853ae0bd0de444608bf03b9f2341f45da63e6507fdd630da2ca31138ff6da0398622cdcca32a1a404d546221fc16a83d6781250c1ccc0cec3e3f59f2c6d0acb00a0125bc47011dfa8c44b1c31204041a2af18d41b562226cd97905a60ce3fb21a817a833aedcc02348058cab0006466b7b61632ec087ac026c9c2581f8712dbe9e03c104d3f0762d24f1067fc744cdae471438a41471e66e6daa76e2a7bb063a445029561230b81a67b52b109ba2f2019d454e5baed98beea44b919daf56ad4644a13f256a4092186e5d81179316b58e517b7b4cd47707f94bd14d2c30422065a964270a145d1b887c369084e6a93504b11ceb045c770ec511e4ea55f7a03b0a8b91c74d0a8cf48a03437a164bf1ec8e1cc9ba0fc17eadc7c1e7c2b28e058d9f4bea529e5ec00b357cf4b5a480f65fd81016e9a40d94cd27fe9fdb5549997540a6672a5e2ee21e9a0118555174d004ae3d4a720181891a89b1858851ba9eccf53d60e5689a749aded0c7603d7dcc82d4934d409c7a9ad9d26aca4f58e36bf66a1f38a9f1038666e01b70e8435c4f7d67a12b02ed68be1cbd3e9b1ccf3a0002a14b03b6e4931b1dfe5e97c500bd3f41640be177a4f7611ffa97ca26304c0d0df804599f5fc0e3a2de99a63aaded992d50487c8043c2c6ba4135bfe1ad256ca9b65422217aee45bc21e70c076f64bd34f518b92a3b74d4c0e487d0714098cbf7fa32c7a131a5d4850a7522b1331a38013f1b668ec76a95be492c70f61d40b479d9602ccbb018d439e4350dc48820300f124e0f47df03df33b6f26a3e950db7452ebf8e55e246ae35fc65a25dfa0a3df0cda33b74adcec86be86677a19f500c5eb4a7857fbcadec817428272dd71ce32f731b6a64d16828bde9e0a585c031335d04e064b1db942f2c469ce44a9a1503f54743d7112e42b0c3c85b6a953411f8184002c7e88fc2f7db31d76904a976ddc9004af0d36a592cff391a3963e1ae199f3808abbbfdd5fc948b1c4145c4567130d63c019007cb0da0d2d03f48728e1d8091e48a835b15481fd37fc16352b345053afdc23dc943b9858ee56f903ac384e0478d850da799ccf48fa5602c5340a1ef7a1df4ccea90604ff2e0215129cb44f3a645d74827c41e8ec443c9c0a6fbb5c2ef901aecb3d3675a666a88d4ca04360264e18932a18e198b04a75700f1e551722c04e774c012f7a1edf091ab70f412f947dbe5bf9d3a44d658aebebaef5569eb280a4cd1fef3ef376ba2c14a00a29b791d4ee63a931fd729229b27e967cc9fb4babfc08eac6b609bc928849e4282bb2c05420c63cfec01a372a3721a193930e4cd32aed19cebd29042c12733df45a221350ca315af02068c7205660073e11138dbed563ec9844bd811b104ec60fd78aec83204b14bb1cce0532185f36e9f5671dd4e04c187e9ed6349a58c6019bbd6027404da8f32ab5fd609b9fc21c850ff7ad9b01919680be18460ec7c0880bf99009ae4ceb7d4c6c3ef372d0945da887011f00f13d31e73f88ca68f9f5515066c4ac84328221ab70784abe89390b98efc568bd0d547843937590617d45ea80b2eed908c8e0658f0f9f5391dcde4e7020429c020b313960647406ea981c0ab7f30b636dde604887bc5cb32347194f0086284bc1808ba4be44b71fc7d4e7ec117904590de49a173b70c97888ba7e90ab706072f3fb201af90ba12061d8e41a06f13408c906401a0ce908fe5fac8e031f72ca5b773397f152f5c562a798612afe7c3eb7b5d2839ee62958faa5187e7cd020e3100a534b80c14c0471ad1279535171da0a521ea8662e6f4d8348301e036ac83de58f9dacce8491d5e2146da013d3f59d15f87dedbf7fb265fb678e6d8477fa837deb861f8a8ec1edaf86290d23a6bb3f9379d190503eb4fcd43c1644a620211c1ae6afca842b8de17f150c510bb57148fe9505b2ef6f8f85fe28b1c03dd9ddb0e4f64d34b47dde2f45b0db789258be1a652ce1fdfe6456aa7880a9ddf0456519397ded47155c223cb8f4460cb3c3b8f6d21cda35a85a51ad451553c7eb48214a5d5774f804814b8c7f07f5809a0c441712cab77257bee8d5e4431d2dbc714368bf4ac099dc526f42e7ed49e244223dd026f20005a72c631bc576e8584669f51866999ec38018a9617b0ba2a18c347d69917f35e92201ac74db3ad6f58d59984eeff075ce804c0b1c0d032f597b523660796022d010d83889cffb29b0032539915f6e60136a0840028c6b23813ebddfd549c501b2f3b48abaf2dc182b5cd292f1058383a14e700656334bdb2ea72a216c6f7ae1d26184be1cefa2e082cda8498bce3b4fcc28172becd7cbfe837cb366d96466d264e1cdcc6a3f478da7611649e4e91eb45b728514ef0d865ef72de3d3c88bcaf228494aa1c2762ccc5a28e73020868cc4381e85d2d56407ff522caf304df5466782da365cc7d6cf7015d31b5f0368e79a99426ac67ac243e0cb0a77c08c9f9997c1e19445df62f23cfbd9541628505089986c10d3770868cbb07efdf07860ad1d7e7c416dfe8eb0d6b3ef6dee2e77685c9f807fedfcd404398f75316da63a0ae1c409a69215e89cc633ba7038f193bae0b48fe46bdaa8ded6bac64d3ea88c51e14f79b23e93659d00621040485a4a23b8eaa39b4e01cc7fc8297b1b1ec1048ecc024768e07089337de8ca80921118f22a66f0dd433696bf6bc3012e22ca979e32f5cdfdb4231f28553a64a90164fb2402f63944444b11ffe4409b0b7e156c77c83092326a66c77a464f9f818197d78018dbeb9a10045a5b7610421c19538e6573433b16bd2edaaa3e09feb67afe444b6bae02d4a4dd2f87beff4dfda3da27617d36d2f86eab571085f7792089316454138d9e234b19f0a38acbabf8e87ebefb3423d533e38c1d5e40e53e4668cc936f7526ce9119c489694e550a079abb03befa6aae355d611bc419bbe0f3a7223d5d6009fb9dd6b0d21278bcbff227901a405e2c8ef9eba2ed3325f764d9383a32cd91a1191db72c3253e9f68fed23d1115f79c0f5a46d882316fa9ef122ce4c41fe33448548381cb7a394290db7d1f46a41920258a1756f692dc3e98cea7ba868c95ff17869654138394db4c19bc24b559805b3deb16795fad3277e82050b29337dec5d1da31c25415830bdc457a68ec2a331f5d8376003195835ef9ad2266d140a4c8d013bb5d54d5aaa3f934b37b1dc3124f8f0f7aaba5f6990528a6d3da12768fc13266c3264558ff31085bfc912431e86b475f64cd8bc7be6d9ebe218e671a46688c4842a790d455f99f446dbcbbc9e7a0bbec7928c65172635fbefc880e2cc8d5fda9986cbae00344e59d093a19f89ed99b9773be39d82c4a7e767e91fc5eaa7bafe78c61809b101b3315c54724a7fef8ddd4463b717dc558f99681c6b221d34e0908702f298084605f3516b6ef9030e8c5ff781783b20702f1f7c7573c128caeb627bafb308743bbaf8b6c59b2745dd49dc72eea196e8d8d6e03f416e8ddc91e05622234bfe54505b08ef6b18132d32e7529b58f540a5651d0e5894bc0166536930e084422177b9031efa6138a1f824827fe63b305e933003799765835d2539b04edee583e0a7ea81d3e847a70d67990c8d928774e7a9de1e8ea409ed0e32f0e86f8e39543210f8d0d2ffde122841d41109e8c791f2adb2f0a8c2928fcfabe598bb65daade7554398b4884b3a1b4ecf7b61651132df438f03bb573e7a707cc2cb121197db9e044631db9ff2d0e7350a530f1be4d05c59866c20214c6b7cbaa8d42047c98a6548cb4bf143f251581fe4097d75870a5d01fbbdd0a637e52999c56868817bdc7cfe28eac02dff4044710de4ab8cb520f0180ac2004c04a06c6e1a02dec6802ac5beb32528ca5983507e4a952c3065381672fa82636950aa4bf5011fdfb10b04b92e09200eb2c896aed4859315750755b3a3e9a1eefdfc55a92cc162f0a38d0959b5f6efb0563c7f42cbf48b7e55f7dd1ba1cf7d07bae3ecda56066199afc3f6a15d7f061c34a121f87621aecf8b8c35d641db8f3e89c4451d2c307da2067eb8971fcd1e3de497730c8511888f7604097542c85926c1320987b66b7a6bb2102ac00a54470146160098defc2af591b7ff84ec34ed921d1ace09b27821a03fb636f3dfe8bb5d1f7e961fad2e24acfdb08ac3b192a0c8949d5c88a0e4a5a64f165d2e6735544c4dc12939cb29879a074d7af6fefb9780e5e53d55be71d366a0ceac0f57e6ef6300e0bd78849cc522d1cfa0d57291a7a990b963f35ca54529b3ddff2ecc1041fcc4d6b291ff10ff98b819a85a893b202ef91fc2cb333c7d48aad181947c42e19eed0f4af0967a4489bcf81b02ac213e921f738ba9ff7f71f282daf7c6deeda163da5627841b3cecbf4875417e40b2e84be0631c533db17d833f0e7ccd77192515d2f8a66df1e6717120bddb107d0e2aa8f9737583fef035de9857fa38b84f489afbc12efd91e371a132e8c6d9682361318865e16b7532af6bb4b6d7b92796844426a9cd1e7a92f8aaed69d30fe1c2e3620c27377e1dc2e991582eb7c7393a8fb8c3c43ca3e140253e37123a0016732b0f3d6c39e546619bf8e6dca0d73e1b8bca91fb72156ee4d1f86b4fc7a920b9b8d03b774518d675f4351d3c2729468782a14f36263f64d028800586ae0e8342c13c16d0ced46379def5c1188781905276c6e3d5b3beab91f6ba3af3e7714ff0fbaac9c28370fb82686ec0208c70d3b5b4341231c99ba851f59706e1db76c6a7e2379bcafb38bcfabdccc6836bb8c5b61c4158a3dce4518d74ce82a3e04304fe54686628c319c05136c78b10fb44d18ec90b83ba904d468bd68d328273031dfa1631baab967dce5844f7ae4f8a850213817759187ce86e80dd5a694f420dc6e851a7577e0485f362e33bf922b99b854bcd2e9812e143c34407a4a6ed408bbd9d899289b5e8bacd93143dd07c2a682685629882d710fefaf600adb85e21983688f1f9f8a91c68ca4e37de8c8628a49d8f5ad6bdb63594cc97f09fd9b06413098b74f08989db59836b54581382ebf368c5a58874a1ece51868b7907b2c688d1be122b86c8c2e5624b8a21a5d7c98ef4a5bb02079dfd4d17df95b506444b46c6f75898b0f5d81ff42615c601dcf757e90405589d95d0169f80185a42192be20f9c8815ef83dac9c266d119df33249171fdda41bc41492fc6581e572421a53c98e9624c70a693ac9a0c31ec36056a4c49600c457c87be0db0de9236a11d599b1a143b6c1fc767e48ddc918e81995a7778466e9fe3fa0221d31bddd42b4c30b4433faf8a4891b8298a1404925cecc2add46edd7cb15e5d60dd6231ae866aacbfca4042d709ee130d51911b366889716785aa7789808682db926c77977cffdb5080fdb60ace53e312a31d5535521d6bfffe241895c0a6aac8507f6c2b2ab8af58bbbf7d3483de5cef82e0df38668af35a8270c8c9300a023f149b9a83cb4cb12c524eacb0b54c5f6398bf94d9b20157549ce2ee35ccaa9cbf84b72ea1aef52ce5de3b9c849c7b89772d019dfa51cbac6739193aef12ee4d03dce05393a8cbb0bebaefc010ef5962f607cbb104e8c9203aa3c648572ba22c0b2110f4c160e08b7e7a2caa14223504ff913545ed490e8843a1ec92a648d61b883221b32a294579cda6c184a3cce055c1d385c6e86b666ab012eca3c700099374141a24537b33c3df62a8dcb841d1b363b7f0c1ccecde6a84f6b6046af75820c0d491f3be5d50954ffa32f9027569dbf8190c3cbcbadb444a882baf08671eda50868db882a6e5c02af0b477cd0532176729ed74d758a929ee83797b306c0d203ad28ce0f9baf42a8d2dfacd6926957aefd236f2d33775c570050f4718c9a381766f8bafd2bac7a028b87ba4cfd0f91ded231e3f692793c8879929a2a49c5bd2fb3059bdf3988317b629f90a56c48759b12865ff96343be25b20509dc46fe02ba55d2904e798e10c990fd64b94d46a858a37c8ef79fa8186ef1b2314bbb2467ec15f7ad27a2a40ba9d832418972f622b965207e243de28f091a8f11cbf368c60938616a1c0aa6f0f2bcd6181d018becc7bc22d90013890899c83c0cabb69d269b606552a9d00a5eec6b4a91ed3a766053ed3721c6e7f0c6635fa832584f9b0723e9b2fd0bcc6f5493c796965a4937995d83058619b2debc9a6a14ca807fdfe0bb9d0eb5d34cba759e22a3ac7fd4a3bd457dbf6850574bdc39a3eaa1d7be3d39d9c02c96398ba0855487cb588db87ab85e380ba882c65b4989b632546b5983de574c70ac2043e4359c2617e3038792254da3400ffc793b8613ed66d88950d659c2063aac3d3257c376d02bbbfb1bcbf3fca33905b314adb2c96148c6d8ee7a2adcbb0a694bab68e0b2269c4646ceb574f7bd561af357396bae1066619204d6b100e7444d354c0723326b90f95d784f535d796e06f03209f323e2e2ffc42cb312581922e4255487928f4b518f5445f7505e9fb90e0cde7c868bd9bb55b01f6b4316843a86f9df8a9d475c1269d56bafd3fca1eef465b77a5672b8a5b8d32093dbe3f56577f85353035097612c94257855f13849c4db4039aa5448f3b32cde67f0bfec2c1b488325a258490af70125396a0c56b2718a7640f5789cada3ed5ab796179eabfbc36fc38eba4ff98c95c15660250a5bac5258a74e5bd177b2e1d89338cfd78d213d59f5a5ba2b1c3fa4be6ae01f38b06a089f1e8f601e720ed9b6716270f83b8ace095433c43a4397b8774cc886ced5e9fc26e380b315e236c437642760036c6d785f5086a48995dda2679302f09670dfcd7c81807dcd2af37d2889f248656c6f8307f3ee0906ea91c792264b128f5efd9b61c475b22f08d245724b24ffe11135b655576ded3489340147bb42248a4ca54966680c0a1d6a1e8b0997bcd2803d1bdd56ac7de92b71fadd3af3e01de6bdaa748a984a89a5615b662a90b2ecd4997da502a03185fe0e44462022f463331c74265007d6612532c438dd1580ad664563e8359dd6e0ee683b22f09961bc39414d57a1783468aaba3292c2a58a515e5af9d954361f46bf31e88bc2e02bf8c7cba879597ae5762e910fefaca41effacf050635245fa8c5096ba9c523076b96289b251e17c5c3f9455c51718a884581a04867b7fa92e6b42985d1d29658458efb16734120b004631b168d686a3d084be4e3c184ff4ee7ab1f475e899617e5a3016425c831eb56085343c2c4f0fbdf1eef9733d72e36260ed0df6c9d9fa6a4b7b00a42b854515752e656ed777489e4bcecd0bd73e2c5018fc7503a400c536c589d2d9c974abee5cc2c88842d4040a8ba2178ac867575f2dd3ac3b925e2503698b4ac20d6d54288d1682d3e0e4500e480e675656098f68295f67f4637c117b243c881ae39ec8675d749e3d077a26437ce2f8818835cbbb8f9ef9aa2e80154d037319d91d592007e4e274f844a0c6d63768cc9410314fe3c6a86bbb0262203f4d847582c34d1009526e790a37c7bdc0ad8b4e219545f86efa9388ac44e9078fd1208cf2faf75ce6905a34cc948eba20e929c5fe8d46e202266c493a52a16fed6a5c20ed6cd2410edc1b4efa05f7c5f24ebec94bea9dea2262acf402299607773a423d1d50c90cc7adcc10be9d6f2cd098684a7da62f84e5da7f51ef418ae3c0b501ba90237b9b784111d92862eb5771ea09d7848ffe161e270ad2c4463d41c799a0898d297166d6d6a9cc8793246b607a7c47c191dfa6701bf0b81a4c1e506c0587345554b519d063cfcee70771b9b4a2ad57fcb97eb99801bd5eea90cf9a3e9c74fe22f356a4f21f190700e518b5bbaeaa4f4ccf2846bf6724e52b66b8c0388c4085b7a33e188048878c21f481e13a1aa843521ed1ffb323d25b8a5f71bac7cb5cdb0337a60c5b768f38aa31053643776e152b9f1a42840fa113b1d0e6a407e4902fbb4cec58bc0642e2687349aad4a430185d7e8c4f6f03794bc6d612a36801de7a24e6220b66a949c65db867aaa0aed0c5cdb03cd083ff446584d0b2832013ec92cb4869ec87d08a288215c1286bd71cca08677734b4c9c553bc073de0beb84c88ebdbc496f025376431235db2905959aded22d8ff930333e06690d7b3913e26fe0220deb11e6a210dc406005e7c9ec295473aa9a044066d4a6cb18b72860829e151e884076617e51a1a5860dc9b94b51557dbeab807dacd2a5dcf4a5dbd8bde952c03d2f115bda8e42981ea1a5381e13a8f95bda828a3182961ce01885c30197b515f1e64d366caa461f7ec453ccc434964080b65fa184e45965b76d90930aa38aa1a918051552880aaa736279f6dfef1b922603497a46c221f89f722484a7052e3fb5325070e064d31cdfc6a2a0b4149631830466634e8f771d06b1467daa18a92ace6a882a9a019963c460e2d421a4f5b93e401fe0e44ff21b653a35057fafcd20b9681c4c3e677b6021b24815021172cbcb26e17ac3c7a80a7d72b2eca888aea62ea2c01d169d8481caa45574be4c25dac34b4d8b57e08450868eafab7443652bb687d5226f851a06383e8d809fc0a68ed6d99e9576f85037290b3712b82f3054fe317e3ed5e09280dfa0419c12e9ddd4d76883ddfb0090fb1fe94bdd1317d26b584721939e0b4f186bdbbfde67d6e1808962bf6f193cc7de9394681d45a60a4b04a1f8fcfa100331f43ed15e0a977f3b402a7097852b654f6bc00064c51c207e613f33633fecfbd01f00a793911e272adcb3f81ad4c6adba9d22feff1a189be8e98ee8574224cf18d30b0ecdda93300164cbc3ed4f493f0a7fc32261499dae7aedf11136f227e89f07356577615f11117f3aba7485de5305304408a17f2a414468b97904863c239fb2b00566d8ca76c3817f15dc2e2b6e0e6c727cd107e40c98c02babfc3b0f06bca239a4bc41e2ff0da7f007b5b7ff4f5b2d7b0bccd1e7bae06f55649d856421b95336cdc729ef98df4b538ec087d7fe2da5f610dce93a2fb96bd4ae4af8d7cec8862790ba91f5566bcf691f77ed3e5aa5d72769d9eec9ca6c2362a7fc18d8b69c92df64152e628477fde70b10d3ac05e29ed0718ade5c4b994345396adc7adef4ab2c8199a5e259600ac1847ae69b9f39ef2f09e061908f690a5c8d7f4974eb4f956210d834acf542fba08286b0084c5d8ceb75ba2d48570d3ef23b82a7e8f8d89081406802df99d3d79a02a0a62ea4057eb772e200adee88b96cb6dd6b72264aba8079370ee979517ec790e0a850c8cb86b4009995a54c3a78e2fcdba87df95cf45a61e0b32915af888f26f1b1059239527a751fc2a9e8d4d203786df5d1014fcb04a2259e81d26037e27129c0290bd553ddeee69ec35e42cfbdade0cee839e39b07902127e0c201531d7403c21d3e9611c9e13e6c2770c114fd7830e510f3f4973dcb386afc2c9bfc84b48ca0c411648abcb3258c33891b1878731eed4e46b2d7b3d1aa96878d43259399608931c874fd75ff060b70b788595a9c8be0d2358e0ebe7afbe8622334863f85d2dc4dae2f9005786ea24375ec296155a0cbce5fb8933862f9ea1ef65ad97528e48d50c115438c77f1dd636be6f9aea1aecf03d7cf6dbed6554295d769876684c3af2e87b8c690ca6c7a5553f62bfc2ebff8ab4ef015b6a36287e363e133d218a3777ef5394e2d4553f42de35a4e90f57a99572ebfd9d1bfb1bcd3b8c297c1ff8580a75aa3e3de54c9b2d4ad59786c7e78c7f059b403f81e4c9324ae7fe47465804f4fb583ad96d61789deeead555d6e5cc84d81a21d19a8b9eb780aab1a5a5cb8707ddaf1f0d7dc8e33b45a5df40e4d46711ff5bcc7494b8cf13b202f51f445bb4ec55b4b7e696af94c08a266183ded68af369045e3e26dbe47666704861da5d93c0a32606fdc28acdc731bd630e3f39dd3c0f85305d837b4815365f58f41beca899acd693c11593dcb4d85138fe6f5afeb14ce4a8f805522629150b23502bf04e607e4dfe85587496cebad26457cfa045ca71ae20356be0e6d174d556c72c00af11ff1a68e7f970beab88aa7bd728de47ccca9e528c4c6457e786a07e081e066d8f9ce2398d9b7c96745c2932e41cdb3500f2d448d5fb930e69202145e6da41a18009e5e447388353aa8bd28071d7cc972a41ed8783c7f8760ef4964968601e0d78d7b388372845563f5f0c4a0eb094d87347407d05809bbf1fdff3e4328897007018e02cc21ddd6440367fe02287f6b517a22706f2f1fc402ac3af14230638c86540844ebae330d99ca0b5fe1f3bc23d92576980344880a7fc1127457a46dccab7b653f4035b554a2e0bbd094db0c4d87b7e8bd361afd3af7fc2486499e4dbd814a2693b5fbb41e7a4078ecf810a1b3c103698a6cc1a9733ea86ca496f3577e3d8f8625605670d76a510dfcb3e2d814e5d87d5c70a29bd521d32e5c924ec16238317610ff3d3504e95acbc1b019f66c7d912eec4601ac56117e326c6c74eaab9be7105f222d6cf23abd0b04b5c82ff9657c153b23b08038d15930d9ca157b2388e5890c1d252151b8c797f6d579135decea7a4c4052739e27e51522f5e3388a789c9ae0b3487d7f6d7e162565af34b88d4d0d56819d18226d8868800bd509f9f5750c20e76eecb42280e8043a1e1469fb1733cd95771ee4d2b149ccc18c4972508ba6125c89d0c5be511d01a71c9628a0ae561cf689becf7f4db8fcd8b647509c89e63a438a34bb687963a41040e454cda987ea14d04de530718e6f6bce02005ec357fe0af3a43e83670e54b21bbdff50d90844157c2029de0988be8c0d41c6e254d5f342ee88be9db9163ac72154bebea4a442da83bb5294826aed5a27b46547248be11bba1537ef9938036ec6b7872866ac909d7807fbf02f0453f5fa9749ab6cf684104c6130aaee49fd82e907562ba997b3cf44486700a705f85b754b55abf1a56a9e296febc761b7e237374991d5c721ef0d615e19f39d1755a5a7432a73132b010815e37f1b69ca82b2988b70352a776642ecf48291e82cb6bfa68e93bcb33424492062a53a9cadf9a39de98f8bb94626c2ce823e02a836279312f7147549480be32bea255b545a346d9f8806a451c368d4c85e6e99847ee9988d23de28464519fb6c168aa293da3f2992b9e4672d4115e15ef39119381f829252b96bcba2644421e0df3f9ac775398b644d2c31e01750e5ba1143f5c69e1f686c1cad10ac1d21a266d296f853744704ddcba8dfddd04cb410fde8f68aebc0c7b94ae7fa705c17b1b6239b9347c8e30efb7c33f08feda22f917a1e2fc3f3373a364070f9864731794d0e90b59aa23c22fa2557d653a45921f470541d9713b17eb37255162279893959400d249f9cfe0513b37eefc121c04fe08ae5c6f30532db31f1ffb8ad2dd96f0ac6fbc96f552887b18a4e5224a7e8e55f9b369e174e4269046d837b64e8633066c04c1b426b727a4cc1a11d638fc0e94ae51cfc587ef37700705e514d01ed7facb97a2a17c9b17e1843a464b62084a5c7c4c52bf61c33bfb820f65e3a202111f29e0a84a9173e81a4c26d9c90d0ef8d8ce3384f7530eb39e42a96f29c7275e7657202bcc06f6da2d17fbf059bc07464d09c56e7ba62ff02c233490c86a817f9ea783469361bc0fe29cb493ddc6f21e7b67bcd9bf25778f94c3ba88df316899e92cb964639ad14c577402739390ab06ee70684c4f8621307b37ba3a2e46f4c22853e7e0c3c1a8f45293f55816ab514b8d10b85b91801fdd0d780b92cc09a4e87215c4d56fc44b94fba848d323dd97059236b5abfb3cab8f20310584abff517b054ce304237666c0ee1d8546a3a0bb6548ad22ea5a881257de163f64715f52f1710adfb57eae5ea5a8c285bbf89a25a5fea6f55a0de842d1aec5ec3f2a60f1c39b45e09e0acbd5272867c8e669027f09d299c0938985bee824c6695d38b05406b354b6117bdea839ef17a5a1f3da889faa21e6dd3d43867a72c7a78b05fc1111dfd977bee4c119045a53908d7c5d28f072a242539f84e181de66ad14be5588c23e32ff233a61c88f699c0e3a494ad048accd18c498bc99f802fcbc362597fcc447aa30b7be62849f1a0177e61fe7d15462cfc265a946f9d0c99532684b543db8808852268060e8c6780b86192a18111e8fc7cfb8c00d89a6c75510b4713c4e76d4aad8b48deda225061d05355bbf25945fc4c70285f97842308e512b65ee645bd57e3f2902d8ae01db8d78f0a64ebc9664aa941ee94e4496b2998c8b9b29df31eb20fdc6349902eb2b1d1dc8b8ef12e9e2693ef1b3b2a4a64f33c2504e189b50e083e212ad3f8964fb9bc87ca0cee72c15ba99c58272f0fe32dae24d8ba7e412b75c16dbdfb6e5e35980c1ab8703619e1f34f8b1d807b497881bcf9b804f99792057ad3e5f23aa001f02b19ac0b153c40c3daa4c1a857266340e2ca198c1cbbfecda2be5dc675d80c13d0c324b5627bbd93f6330696e043b0f0d244d0b95f818eda74d6e52086028c071bd61eaa1b3723813330b52b1ac4fbe22ceb97b861ce9d9fe4c4c7271120b2494e3de0365d897181170622d16d6716d2b8c2335db17540a131cf1df5910a23042510640bd0b6f85b442f5f57c21ef68986b10fb3aec20e9d072b80b5aef7cef0345ea131c7cf3b08284f96345ef42f1acc0965bc2aaed4877917c008c599d7e85a0c485b3bbd6dbbbb5a9f52000a28e813f56d48a5b9fa8fb105c04033d107eedb623d9dfcf31acd1712738a059bf01143a47e83b3290825d7481cc85e415635afaa25290ad78c64222db8752e4414d7cb575110d784479c80ed8b635a37643bf4b3b7f0de07bfac50503744a4bbe0c7cf99f804fd99643088e07dda47c8fa97be372aeadf87754bf769fcd0dc4b8988440f3ade106b2c8748c942eac353d71b49c52c3e75efff3ca40dd1348a192877db87086bbfb33c1cb5b34044834bbd92f3fa95e0246ef4907c8c6bc86d58a9836e373d649c6dc6418cd56310b7be32a219e5f0e935052474afbe963a6c726d83a3434d43c0e2fbaf6349e44b362e5d29519e354a922080f27fb83e01292991cb86420329f65857709dae0ee236e69763880916e5c03fe4c5efdc73a4df8ec0961be6888f05a77425ab8b9e91efd6f739685a5b741d28bdbe8862e67eded0a64edae239200786c62b68bc69a7d303213d0d9d9f5470cc43676b90ffcd91ced117e7f2bdb7dbfb612fe28bf41765ce85131ed9a605f66db7bbfd8001abf1f0802a47fc149081947f43b9c40c79215cd3a317b6654304e87b5c7684ab73e1be73d01a98a0a827228738a7fdf32b3fa9640cbc0255eb0b5aa9c4e9a7287fb68f1a1e55c6bbd8eb2a57504d07d91388dfaad2c8d11e2b2e265e99b568743f87ea437f3c1e7dc85b074933151ddc52003ba17b22667cac27141ccb6bad50234f77cbaa28560688c1d884966e1d7d43926121b740ce77330752463141885d750e15b872e0685f5a2b990cb6057e0e4ec2edd21f52afe288b5497a7f9d6a539904b17f29b2b5e23cd71216a05f0df83a2a38226c4b9383140ce40e36f31d66464bb839ef9479e4fb45e89f4721f3fc8e613a957a25eeec51fb2f944f54a38bde3d0eb882bd94d44cc973a2bc10d7e2dd7374a28025c51b91fcc40e786ff4ac3eb59ed884e2afc33ee7d2b1e10af7562bcb77c9f487429b9be19dc4d143a5a89b6597a3f6c274b7ab5ad78bc6a6d8927c233bdaece4258dd613801ff8b3c7ef2901f37366110f7fca4032a23bfb5e5c2cfc4004ef839b293e1161ce2bfbf8ae610c8a9c4f30dc54d1c682b53e7c68b788228b2c2681ad6c13067dcaccea712f256df9ee484b45210ef3e6480ecbdb24d8c0e543f5fc20c37f0b6d5682631377b4148752c5370806b1ba7065a51725f4af3a19dc78f79bc296e838ee2d009c6e5f1044f9426b1385326af4b1c1ab662d166e3f8da1537f9587d7efbc95e2f3d557d2971e30b57ce8ec272f4f13e5c303013464d7cd0ab74ead79ae539276160525474748fca6d7bdc59b3bb40074d17a6b3571f75cf17031648621dbbc8d9d906805a5abc797da50662b6e7cb0f822e40cb44d8e1383541d8582982fa64d89ad6e833bf93619f3b18df85d7e7de22b519063da75cba360cfeabca54efd73845fd44803b882824f981b2e815fd3106819c1b23b8419f8ff6b781b60b007a9dfa1d8bb8cace458c7d5d56417e77fe87cadf437e3fd04b49402a76c96ae4cdeb559cee324e263cb2379e952a86745cf54320f96906b65d12596572e35fc5997c28caa0f677c3339868f0b59591eee0bebf92674787826a80bf9e51e01926cffaae5b9c26a8ab2010509db07069d297d97e90491ba6ac0113d5847edf9f2d011cd2b228cee2917f67ad90e9293c9f0ceab218b1d3e0f7b179caef27d511b0d7abf06a098c1cdf3647ce395152daf9914b8ead18648d66a66e762683a763d0b806940b9e94fbe2dee105c2c0a737f500074b858da330376a35d5b77faeda03796cea42c0070ac5fcb983d5b4c172fa4f987926b08f5bd82f917ca21b6b6ea49c4060c2cac87f1f369c79dc2ff18db8fc47abe5622aef7c5f1ccc5084f83d9f6e2562b0bbc549557e719b55b1641e0124aef0be262a692975530cbe5a951d560f3d46584c851aff3a1eec60e4e2065ecdbe2fd07230cd9dab6cd4b59c40cc23e3efd620bf3f4314fc7a47dff70d0e33ec77ba2aca16b78e0cece671a42524fc6849af955c3e8d3540ddb45d99795ff4c57b11a9ca8b35546461af05ec9aa0802df5404776a0d548a9a3c723fa9113fba3322c6cfc4703641e6087beb63b1e3ab3bda062c0ab027f3d6be02fd3ee46d26590220f2f25d97a97b55a0bd08e00ddcdc87f24fa6cc89f6dd3cc37337e8ba8e01cfbdc11311c83520915296cf205559224422c17babc6b484b113b4edf62249406c88b0788f8f33901fdffc55537a3879fc0f0caac7bc6f1d24378ad6bcfc3180c04649652c7cbba214e118db77f4fb7c3975419e2efdbeca1d2f3a08624dc93de6ca118747e53221cdf0eb0228295dc7563de7a417b498a81f7d43d5cf264a6aab22ca8809fc17084c3d3915063712e494f978b7f8fc01304281f18ee03852214e507a0f84fc5aa1c931076d400db907d25b2b4f50c2d2cfa083148f7930c6f5b196ee8550f68915bd4a5745207d0e1247588eec5060fcae57296404c56039b8e3111c14a00d77290a018bc14b8a3081d26e6424c2312f2f77bf6ecd4670ebb5c7daed12306c010465b97349d48a9cf556adaab7123e278bf335d838745fb943fe05b817322b0c72ffaf50de051212cdb4d1bdc4432cacacc6b0d3062a7b3a72f05d61a9a54d35cd18c3092fd105cba003520950d9f9696f2a3d4b4d2528aa46a0def08712abae4e5f3dff0bb1fc660c4bf76ca373727be207b00f2d3efb0a92fe4603ac414d618a85c261dce3e0ea1a0e73cd1026b9af992a1b661720cb5398bce3b6853c4b6e495e992d67bf459e74a055e1b3152e830ff87abd4d42a4b0525b2770ec4628e5ceb3441801b824b0c1585a4e6cf087ca5c28468c97cb92cb6b38b3c6ab504129f05e6d0e286839d98089187b0d56aa8b2f74ccde575110c7589acc136ea3c72f6547ff698ece7d4a50db31bc46bbcb06ef111f76d42a302ed1171f831df32cf8dfa49cf23237286859031db31dc62beccef0fc5793dbb7fbf37b3e52c0ca0380e338b1386e988c678bc56f784bab13ce4b838bf90f6850e5d5aa307106f176e29e064a71849e8e8492679eba68c44d190ee33efb66149f850dc8a4e36886a66dc1a585827113538d5201fb74b26ecdba7233f858b2fd3055f69a1ae6f35ad5c254d082fc85dd33cb14752c815329d16c34890fc7b23d794b291e729b7650620761c39361fa18cc20074372ac28718ea4bf6a5177df24ea03dd0a80422869c789286d38d0b9fbac196886515e57843646118efe98fdaec24cd5d8260a701286ec35460f00125508edcd5281934224768ca7e22666a26ce1de93e9a1e050d9e2a4cabb4e295080769a74f97dd35eae863da8b9ac6d4a2ee1b2bbad62af959b3ea6db2b73bb2fc76d785d3b2c6cd5e6e3fe8254fd071877e3368efcecab032fb3dab1005f8d50c9c9e21b634d02aa18e89b1bcc25bf698c6ac8562de7f497554d8baaa4954bfb069b23edc42cffc945bc71829eab9f5dab1e6c69f68f510366c72f0719bb909664fc4354fd154cd682d6427a4f6d6887e4bd82f80feda5005657a3baba2751c3ab6c649f07b3c17004125fc9b1d3d9486ed5a86cef7483cb108c2ba01a14ea2371f4433cabbc319f3607eb009f17c0f54ea3f52dd5f7974daf69fe8cb31ac494871fe2ef2a9825729b48413399df510782a60d5000d764aa21550417266aa36af67ed85b8edaac6f4f67b434e547e8b9913cf59fe30932b4953f00e44b2a8104dab0ab3d8362d3238a05a6edb532ff03d2e9ccfa6a4dfca1d9889b3095b70168106ca1f60f36f713728bf067ecf5b50b36aaaf1105c7e3a101fa3b6d7905cfc7421c166f01fb0bd4708bfea19ce839d34ca558d5a5b108215bc9c8a5c93ab5fafce7c6538f5a85118d296b5a6b1a88cc7245d2b4c485fd55bbf096109167da4448b08a2cb5552345ed02a5abae663e64918421e7f021199f1edba4384a65e87f0c32c08acd5a4b0aa188bcd631c5a452c4122516d0754c15531a3e08ac4d5e98930da795a55ed9d5255fa4d54491fa9ab779958d57b2755b53e3355d2c1ee2a5de6575587e92a61c8ecaadeb3ab6a9f892a31a5bbbc2dd3a51c9c2eb5e6bb8c1bd3e59ce42eb5e3bb9401d7ae54be9f981ee48cd6e76b0e06107da04f06e711652fc5a55996b0079cc2851886c3d55c32f3d17cc5f92896b1aec9ee01d5c2932d45155a4d032a7df5f299dc455c75c2b2455952a7b066add09c3cd3845120df28d79926f230f7d03099bf1c25066761a8efedf55ee2c7a5cd55ee8b06191af7451b7b44699e91b3c93b5f11e0de815a6014050154ff1ca58b59301663e5ec113b3c8911a07d631df290ee9ca27342d7fac1574bcb5087ce29356f1872024aab70216c6aa5188699ea846c1cc24835bbb14d9f8f4b8dc97b595deaaaf3bcd2e7da6ca992cf77b0cf79d0ed65807f017b54c533b283dd3bec176203201441b3f002e962c0eea446af9c810d729924a0b48f07675b672bd00fedbc99ef82cc1e2ffc7928b7def76f2e702578cb1a2a410e9f5a1099f4ec2a1dc6f3606ca545ba4e526026253095f32025481fd30eb6f96844312371e76e4fed9abf3c39f84a1d7675763e344d98e8e37085457894f200f14832b692db662fbd47f3731f3fd70035189658d0682a043d0a3b65e5b2101742897c251eccad2af7a1b9b0e646725b3e677d24b3c79f0a810f807a2ce6882e8d2e34ef6b123515be78ad4e9bb8a63445c98e4f47e46409fa3c22641fdf0850d2d7900035e989d1d40b88408dd109b278c584301fba6ad9777419423b72cd4db86ee2cee7c4f10bdd83cdacf1ad7bd99d6f856df78f5c351b126106d4c239633915eb117a833a3e0339a7c31ef30f7b685021507f3234e0a07914549a467014c72da2f0b8c982f09152ad9561c0923ecee6e5c8ab2496936e306be9ff9e897a3d8a16a99278fa10653bf986ee4f63befd1756fca6454bfb92471b4136ca1b2369b5ba3fae5036d3a9b94f3e56757a9184dfad7c1ae57c4e39114af19f9472a1470f02ed6fb4c8cd1d0e3ca719e14a4bcec0c058a9d748e6069496d91b9a1283c61d08dc95402a24348efaca0698d7bd6a62d24e9bd1c08b5ddd45f7e77ef55ec1ab46ba858ecbc7b00379a5e010433540c1cd7e31b459d16e30cba06937d593f7f2c93764e6044c2e28e4522f30012d2d6c44a5be5cf88974d3c53bc7f066065c20d2405455c47647a8ebd1646e965723d7229ef53b02ab4937cdae2864bd88ff2c4cf47622a5b993b801bc9e01c4d50f7d4d63bf69631c3156f65850cc087ae985673f616a18a5a598722f6fe470b31735e19787730cc055fad3bc6d8cfe7801af7b94cbf30347af8cf1b2f033c122a38c19d3f9ca5faae35e032e6e0bfca87f9934d08a5782a86b7e12b7899ffef82093c5b552665e07f56bbe85355dcc7c2566e7c8ac3ba7f13bc6a2f2d09812d3e7309e49e421977913b8ea70c1ac49a19783f5d54ce165860fc31b05cec7ccfe1ad7185651a62bdd64a5a139ccb9b9567aeffc6162ae978b460f6607797c2f95982756fb36bd97a27c1fba0605c6df71b301b32bd0654060cc4194f99582a940266900350b46f5f7d88a930ac69bfd5c4e48b4c56276d1564fa2ef8cfe3031840c8902f70db10b84d8f42fe67dfa65d38119cac2e5d3fa7ef62f386575af6cb84eba8a676ab2a9ae7c8db5092a8c6d001e303d1f9dd075e756d821ba5df65887826efbe0505f9cf2ac79a99a2c28e0bc82f626775f77769d35b860bb27a0b34fd13a5e02b7a31758c9c94eb8f58f48931b0b831fc3cd71b20484a4ac1a646a1f72c076b4e15453a004cd6e54a0efdb96c8eaae1870a2d9e5629d2fccae6a7e37fd8cda1e5317e754f4196e3c0eb1b1eb0adf6d21de2d0680b3f9703db6afae451c9d7d0685c9f02ee0be859a9aefa495a83be268b9eac6ec1df2892257df121fe7ecd2db916ca4303527bda15619f4cc896c89130189f9b9924bbbaa82279adbb6e2980732c23647bd369bc2ac4a68635ec8f8a06f3e0447da4b798fe650e52e1a00fbdf08d7856af631b908aa39f31a020542c55c1d51e85d9e0b895fdfe119391835e9234d648a0741a34c269ce14c4a04cad4988f858dc0f3ded808c6280bb9a112a7d7ffb6b72e1aab258c0428e6859e335255c1009c7cbce036e824d0c9acd88a4ecafa249ae08dd3ebde35d2541f7e68c53d8fe76cb7cc67ce48b4e6ca71bdd6b6079caf4e58f16080c1210eec42a850d43a1006a9253d062b61af6b05fd5aaa603856f613eb965ad3c1c41a4a33615da9b57b9bac99ea99f00f742e9dee4b87392be2f295b5fc866d7354e122a1b1b8cd6472d1289a309b265662dce6827873abbccca18d0e786ecc63c582acd2029c3998ed20cf6386fa086e73f3936f333a962f19cbcde90293c78f4e03d7a9b348f09c201efcfccc02edbc72b6255ade433d119b28f7496fbdc1af6220f90301c8a129f90db48b50478adcb0160f7543012cf137291eda12edfaff7c407a8213a766e1ec2f794f62028b66934146f9224a3d28ecf484b92aadf24dd664ddd3db28ea38142a5c8a17c151c35b160670036dc21e9a054e32a76f39ea04ea4be10c9b06a42fbf2c9bd3a9ae9d6b6bc5c94d6e0d4bce31f00fea59490e74a08f55da7a9ced613dfa599404536c80a19c2a298e04dac3777632171bba97f51d2ad1e6eb5cff9c66f6f429d75cbd803f2bb5177e03b5fd2cc7542a8c0f850e15a9a97caf2961edaabd869f7e35ec3b02ea8998aabce377b87b836fcbf2d234e71247cea028a94b2e153da750a50afddcc74d4ce1f6f4f8efc6953639e8e2035103b59f8dde6281fb049d68c7435adfb30576f4c924a735a8cb3505f75a5675d24a0f0f7174ab4ee0d99b96093e22671c4ec12f7aac463cc6157cb3be500c065d6f8b11898255cef2d3f4eb6725ff89cd3ff31fcc721b9a4b0fbb0b2d6f3603d93b8b58ccdfe1ff61e52f36b2c310890d17bb14263ab4bb99262c34385f650abb9cd35d334001d40b68eed64bf35bcd58f2f49ace752d1a4499a97515567367b02d769138c5b96d741c40e6d096437c9c1c4004d4c9bcb163809b2f94b7a998982b934ddae86da054a36055414bb7245cd02105972e91b7a6347985636cbe73981f6fb5c88b47d2a4384f1e94110c1b0c086ec15bda44c582487d92a6c532c75e2d74e5d1d203110234363ac414151cc8de4a59b4ba7513c37943807c6b668fead5f2fe96c8291293e7423f590b557a7d9e88b8be424c35b9fa2717f9878be93c8cab49e09a444fc03583f91bf9a98658d3aa16239aa722400744b4c89a8df0cfc6ac54b8ba032325c0d53485a245d620adb99a63967b45ed6aa6b69f21d4023e1f6776b64eddba7c2bc3d4551d4ab67034cc973b4ed88611a68d8dde5fb3408aca57f36c3806222fe73a054f5a23c74f0b6275262c5c51cb57ec9a2041f5b6867157f4d3899253b963012de73198ee5c1cde5ba69266e2ee10ce744b7ae60611177ac1be863fad33482d88f57b9ed4d73036436c82ef29a6b2a49e36ac4e360f990b73c09e52660e9cffbe7e428ce33549e1c81a895c7b9e6c975f8df2a94168c41a101c1b8d4214d277f842089ca55d4d195579ce93a7395d604cc90448ecc2d5b6265bd314de77ffb1278a24a445c19948ba5c9c11b5b2f72dce2422b5d97668afc21753e01e98437e8b8bed050a0954420dbde7875e5164a72e30a244cbf42b70242109693deb33f77417b2e105734ce3df0133be3bf73ec2a024c11d6cee47cf4b304d2b7c6e869b5213ee4add53542a0a299d6dee1ece4878452ce9944893ed3ac8c25cd9d661bcf8cdae69403d21ce50db04647d1df52d7af0ba3f677a195b6713950142c756365937aaa170de806654742176294f2d6612015d259bd15bcce0f231eb2466f8ecc12525f5103a369a7ed2ab30e27b53acad8c0214c45cda8ced0bb162eb0cf7bc5d37841e3374f6df8452b3d8098c6879731bc7580d0b4fb780117184837bd6fcf4d3918dbcb171960953c280d8c24715ee4b78de11f664dc513afed26fac9052d415ce2cfa0652f8e66d0e1a6b1a2c908d47603d6e68d6b5d0cdec400aca85e0a90c629038bdb1dcb86598bf93136be9db1cac4a3438b09ac9669ce52e161d38f02a2afa341c5595a684ca4c63b1972c737be4cec67ba9efb2461571fc119e8e25a980f05f1c528bac1375312c815ba6f90e82ccaead4eb3cd13281d51ac1c1075c73ac29fafbd606491f360ea0398e5f9065241bcc034c5465638541a8a6c7effe017240d2e97bab77ee6fc36c2ceb47907a4a2b0e4e44b39fdd62e4d7cd6dff9a446b38cae4911f2b0c92c48d44241dbf66499c5d1a9b6dd4431ce996db4fed76410d3c407d0433f9cb2803244a104f9199a5b2e3ab69486b2addaa83d3b6c9001a3ebf3ecea58c8dec830a5bb9c623db5bdb9d777f6403668535020a1333dc4a333a683165cc93db6bb634eafbe18495115d7a6d2e9507f38fe330df09af3fc97f25188313137d25dae0975fee6f4aca1083a83910818c6faa255e202670d17c106dd35bf9949ab28dcd0191c5305792ccaadb11b0d8a62e97952b07bf9942ea1c49f3e2aec969aecb6a315f13f576e01a038538ad54b034e103137649c95aad5689ad773ccf02512aaeecc04e6e86a32520546964d0043ca52aaf9296cd8b3cd31d7cc838090be9eae1b7b34afa5ceb00e8526be1583ca2865350eb27d859588dc1b2d82435e1c4341ef400d27352a9778e84fd7bb991cfc543c157fb7185d401e29887b460f0c06b28d0e28135c1948335ffdf949b354f4d5b1c8efaaa50e804dacfd615ed2d6909596650a2828d93da1b45e4819512c811f7a6fdfb6cc1b82fd1eca738f61964424ca1ea97f4092c0a11651eb8abc9a12d0a2cbde90068b110cec06403883cc2866876191583d18c8fdb46f92f725a9f5d37f5851265287a47b6bf16e7ba94b569956c3c3a5da81f2083be4d0e773b8ccab4b4571ebb599280d53af619b1fab424c8d70b29a34842658f2ef76ad20b7da445eedfdb4852e8904ee724962fcf9135c0edc9929fdfe14eefeea2f4259a09ee0a38af4a47f210cd5dbdcdc1d3e3cb339d8a4bfa86b10e360fca07aa904ef438557476141700509b6e0a51f06dec0614b26a9ef04589082a52f4e75b15b93c78550c7a79b326abc1050bafbc47c7252a258247bf67a52c9f81df92d0c32e8e24a4fc29a15b1b1718c08831ad06e081871c91083971f4e044262f0eb2a485d4bf469a221187dbc94c0703b93ff14c9c02285675413333412aa5c5fd79849d1dd36e0cdf090534997bdbe8ad9959e143f331a053bf413d41efc32cede33d8eb38c6b7413730e89e9a8c92ee7a26c463fac6d8468599060fe0ed18e1f837953bc46c8de05d9560c7cb409d70588569ca8549e155107f4a2feb9ab5e8abeb57177e90607410cd74c99ac868fe74f604be4657125b22a38552b0b5252ac54430752486afb62ca88df350ac2d2cf8c2b38b14d32a98484ea02d97283398a7680a20de945c234343764bb5e01568c116eff7d20c95a151ac082b681a1477d494986b0106ab264181b516636fd8f745363ef1f8c2145565633ff3b9c4cedb4f10016b6cbdde1da6ef393b3a327f9f3e804135bfde508888218724861e768f68b5c3897197e95c0722dbc9be2e89fa442f237de1df91fa84c083d8424059d386ba9e8890a2676472d34a3bd0355f4ee7902fa8716c5ee32653350c56353b144faab3b3b5f8cb42d187153e29efdef9be36f5b6453464e6ecb8172803b4d31f5b3a08d8748ae81cc0e10408442abbfe81b8671d6573ed6fe9c412cef2881dbfbb5e7417e7c0f7c45d51347f222c4ace49c1b106765edc92572096ab4f728fd034a772d41165c9525e45e968e9b32b9433ca5683d048dd35d9ad723c1d6db94c0e4bc661974cd25c982648529969951ae900063bed7c21b09f94a024548f5be3acef030d881ff04022d19f149b2bac4a3e78ffaaf4f966d2981acaa97db23b068b09cf49a0399c83885f1b220a218e7d1bd27e24fd1164668619e8f58352d59f12fb12c803869d24760b4c82fb4eccc347d44d9449020290f8faaf1367964bb969e264620a71a42a3e6f619e074f263322697e8360e9af0a4905213bb933daf3d0757b7c802224e05460c9f91781a514f24aa0b212b68cee65561515a0833465424c0e1308d59147417e4f873a560cf47c031a7e4a7f5820d2b24a0714e8e969eb39c6f51ce37adac683034704eedb0942fb113caac7416260d7efd9a3136d844040e48ec1a20080ea66023c32ebb1d5980e9d716a2c5a6dd103b9a32b0fbd9246a01dbfb291bdf726524a99924c32c8070108ae076d5ce8df5ce625cb8277f4fbfb09f0fbfb9fd63b4c793b8212a516fed49f6f302d854560aedf9476b7a3b889c4871f2432d7f9d07ddc7b1f90e83eaea57093eb8e5cefa6f54be441f694dceeb265cb968dd9a0d3dddd5ea8721041c62fdc808352c604d740458704642ca8f0bea629a2dce719bb80ab2481e0b57d256025d87a4b4832ce81add42495ff5526aa1c029e2efc77b5f077acc569946a7d3d382d1dfc02bf306456824f2a78f449e91147b480072a93a3a854df6a92e20d29cc50a5a169ff3ddc4296809bf1fba95db54a51d0631346ed76ec783d5ef760c07ba837f735498145945ac384d20de20ea4d84108296878430a23c7c2850d24e772460b494b5cc670e2aad205ebe101c480474332e1e45e70a9e2d1a001421a86103ed1840e96b8197427a1795e77f35b62cb3b42c833e2b7d4e733c51a323370ff86914957d1ee86124542f3bc6f8f1e3db6bb7b5329a57c4abc2eed5e5fa8fcafe5ee916577c30ca498a857ce82fac9d187aadecf056d78a467856985b3c4a5079a0bbf29a50db8810d538ebc90614a1923345581032537a2b8628b0bc6263a3441410821acf57695dbcf6b54fe7ac3e5898d738110c2236e78026304183072c0c10c9caafc40050d2adce08a4c2e8490a2a68c7e061161a8d04216496c94e1ea2a4321a0c8e1c201dcd7f4c41b4f3ca99c78909479205fadf574b8478f9c0ea4d16b8c11ca979db3bb40cec94929e59c53ce7782df6885229ce25b5afa9e08f2216bbc83bdc2eeb61f00592f8c39ae5ba178db422cd1e593cfc616ed01ba1e2395eefed46ab0e592d9abe81d9eaafb7ad3b6b3d469ed28430899485f7f8d42195d70ba0c218e342a7c7e17e2eed7b908c0960f271774ba3e201c22a3d067a5c2c9417fe4471c373635347526b5691986a253466fc86f9582bfe190c59e33dd9ceae20ca1b7b91c17c79d5c7c3cee7008bdb2bbbbbbbb7b72cfd5cdd19bdd68cdcd9be1d09a93ddddd69f0e7f97adee678fb0b398f9a14ea14f4e47caa9aed41c17c7a51cddaecc2b7552149669298da6662a8d8d466d34e7e894d1fb662b1dd48a9593f2da1b1120441148944458e0aec5c9078a4e4a677c52e77d4d4fc4a006a720e4eb89279cfcc5449d989ec42664a653102d38932ed2a907a36e9214690f0e5020ad54ab49cdf3a80c4f9674713a6ae26262846942446ae36318710615b5ded76404172e1811c591114d48d4a02184dd53bef76edf7b1cbc7c25432a9a1bce96969bdb1f8d92c1677e3cefbdd75e32efeeeefe231f633714f722fa6c149d7332b3a4fed327a568bcf0e88c63b2ccbb21e72ff29ccc4f69741b3c31511c183c212a7e7024860dd2c8c18babebb91283a525ba38fdc08b1cb85c485ca2431aeeee35af76f56d726a62e7c2b622e942d8cc0d37e6d650a8cb504ae95252f93e204fe6f9442a1b6a472312f4991fad9c20446fc48cb0102e8459bf11182bdceb42800c6b8550c338e8c28cfa87522c76d90e0a71e85c8eaee6b8f9b30729f6f05ec1ec901217ca62528a6e7fa6aa5219274aedde97239c44a569a46b364fb5effb5408de8cd291d7039a11067d1e8109a03d22a6626e54edb7ffd2ab0bdf7d3e7e54cdf46c9eaadf77257bb86900bab2244805b690e0c66927783cfd3f3db7695ab7337b24025d3469e084c301802ef33362019771a2d4aec70413409ffef84cab8a059fe89a80a43f7234016cf19756ebbf2fd0ae687b38879819a7fe818c452c42b4308977acf07ab48538e450634dd17dafdafc4a4f877fb4dd2b7277a7d7214d8a8eb290a979fc6517244fd252e153812d9732c6eef93309b676a89d23399227419fa4fe7124478249d176d591e40ed163bf7f54055bfd41cf561074f07efd95c218afc39d06237bdefdefc518e37bd11fe7f6e11cd5aef2007ab647d582fa7e07309086eced6860eafbcc268bca4c9b8727c732326bf3f0d36858401e125564616980cea7580af2b17fae0e6eb02d6b488e0b3fc7850f6d50b4ac21f0e3c38f3605f006f53f24aac87221742ec76dee21d1c5cb859c0939581ad052c05efbe7a21c4b03d2f53612b29f966564a27e4a4b0286bdb42c6a87e84bcdc2259a1e6aa7badfea691e1f429a4725b9e7ba5942f51e4315fc126184c1ac45b75986419262bc1e6c210d4f077cf83d66babeaf71b8ec53c58fdae8e9982d4ca42a33ca85cf5a0f553a5109447e9161e4d3c4e1f5e0872fd1783f3087c793c422b48549584f8f010c200001b05836d706a97992a8fd9d742273bba729a2764f3a5d8f3ec591fc08b67270a92c0a5bf06198e681ed74c35019465aa8a579e80d6a37955ca5652ed129d93b404dbafcd9cecbdcddbddba17deefebf3e605151510e46d86451bb2e6219c9329b9a7922173f50ffbce6b12c2359f6442e2217ff0c07b5340f3f4d0f35c5bde6d1bca821683bd42e04ae72aae6e1d7668064e01815114f187cea9f19c6753bd8c6658a0a222fcb1ff5fe6f0b1746f76d41e48561608bc35ce805cc0fd805c70af5f9bb88bbe8724d11f350bf7f7a1ac9f5bef0c2caaf07fd1b106e403d8418665150f6ed8f8de4e6b98b231106b12bb2f7fc7dcfbce7d33710421865eadd8e4fb85e4613454f6e1764982033a78cde3d3d3c8018c084131314271f1c6983a9a277503327fa0b26249e60c28195baddd7c484c5891aef6b62526242892370a003379c641d4398318bf2ed288b1f7559ad31c702c2975eee5e713ba4c405efb33430a844378bdae34ef08b84956ec3d652bd9bbdca12ed0dab880019f28ec7557ebc0f4c9402e0bea6337870c66b091447a1027870d57a8ca81dbd3cff71fc186d87a4bbbb72d5e4336566ee28a5d4e974cb1ae2cf92d1be770aedc760c2f5e78fcf30c6780443e6f727e497390c22881832a387a19addd7648695cb3b11d2135872f0be1e2e39bfeff9c097f2dbbbbfe1102e82eedd307c90e566e882657e42ba9dc680ae7561941e285df8373046b99dd6c5a0f8da656a92858909970d88d4a2431f0ff26fb7de437c881715458ffe72a30097b96e5bbc03bedc5638a8f0b6eacdebc13705f0ce4fd2775a765b290bab20e07b40bccb909be1f78099bd06b5ab377fa362e856882f330f6a500377778710be464bc8bebb6e08403033f1a8e935e39cf1490e323ae7cd9c33da19675319686c5cc3ea87faa20e7a9c5ea5b363a5be2632986ea72263e97654a5f33bac11e8bf6b0416b932cc88bae8639c11756599c59e72a8f7d16d4202eedb883c30eeb3575817782ed40f3d26d70ae8af00f5efb29e1d01657b2216112064ee13e01582f70a7d32926e479bc840caa1be26314eb7698c23da658c2f17fe8d6f4660910b05df88ba50affb5d4159fa9a470536f76d440a709fbdb2022f2ae2a2221735f2985cd48aec3d1ff78622c077025f1682ef1bde8db721fc9adbc994b1655c61a9f4bea6318c5633a87d5fd3184c7c8a51e6763df089101f6590e1c5756f1f68506fee6b12e309317030830f62e430830f624409a38d2b9c52d859aa7fdbefd7543a36d44e75759ea37d55cc9398314f62da20c31076bbc7768f51ca19a59c9352d4a41485c2b0ac1b856159a6699b9669dab6a5523342b4d4105b2efc9999212efc5a9bb8106a812df8f0083e81538ee01348052241a32f5ec07cf122264c97251eb22c310f436861a536b8a80d5e52d4063f612315c026daa989e74548c61076bb4786ddee314a8f52ce49296a52140ac3b24cc3324ddbb6546a664bcdccd44a4353536373738303478e1c38598dd65cf741f8763b41f8fe8dd62aff2e840b5bb005fd7616e5a4288c626458a90b34d21286a39c1435516458a90b34d202a39c545232acc45da0514739e324c34a5d5cba24c34a31767c64a8d42e26ada850e1a8047d50b850a915ad34d2d3d1965736d42e265da5a81493deed221010ae2b91047dac409f8eefca6d0244f7f5c0b1e4001e88113382a630bcdc7e4a4d903d98710e5692f00d3828ad64e0efbdf71c6a5029f650f9fd7634ab1d5632585559558971a5447343e6514e8aa25f7cc9a39c74f6d1178f72ca3ef22863f4a7150c6ac74910ae6050f95f7777c3ef86ef8928d31c38f74a4909beb7527a0fc514ce961ea3f7852b25a8ad962aff832d5e69a97c3b4da3ddab1d563258d5b0aa61a534745362d4eebdf71e7c0fae94b85f33692a834b13195fe8f4a8f32b1eaadfd7140615b77b4c328c28e4ca0797eef1c9ed5461401146134e9d46e6caa24b2003900c3bd48962d169fc0173a0c51ea01e1e40618ce40fc038caa20821a400228b3047d7bd298c0cd7fd35441a58109134840b5ceec275778ad4537ff0080809d33cef72d4a83b45d2014a8381e42f20411f421e53048428e1c3bd094cd175205f1c35cfbbd1bb78bafeee3378b1e48516257670ddbfba90f85e9317495c777777a42ec234d6050dba9081d34c14595b6e0a63cacd58f3729bf3a7e37d06f97537f4135e53182b44ce2b68eaa2898b189e9e12ee230242608b75b82da4e518d147ff8c407f8e340f7f5bb93dc20cf51d99b67e772351394247148f713ba0358a10d3048a2982185384ab6b4de0063e5862031431ae68c2d5f574810383d1450e3b30a74917549e9a5c6ed1e5cb16dd5cc070bbfbf97b7773d182dbdded1d658ba72dc2b40b8ea0ec4001ca020c1664dcea281a9d0382ad4e756393165a6e8c31febf1eef46a01e17d4a705f2bc4bbf30411e3a390db694b8317e91e2c6d7a08f76e3d76ff5b8ad2fd4773b4a7b80b4586a9e77bb7f07f264e1832cc650a625a016e8f3d9348c2b5f93dfea9932da5fb940bb62f73561a1850a2291bd9d17a58f0023f7582879a9811716a0ea1b8b2e4b8478c4420a16562d90148b22b0d072c40e4eac34f13283f61e8d00fca1ae2bb85c9afb9aacf872a1b400ca6f7b13ed4dff3c772f4eaebbc71863931716fc2b6cb15d2da9ef5ed1832bc0dcae3659b1b0a3a3c50c303bd0879d3976f4864dac70baaf49074b04b8afa90aa69bcdc87f3b47c008f9d79b23364c179bb5ca2ffc246cc40b7c42025bcc2b24eae328f1b65c3ed2bed48e8fa8644caf89cb3d26265c6e738fa94996fb36fe30605cefeb18195839dae2c419645c434f0d2d2bf0c0a5646be27a50019d76b9dfc8810f482e25cc244031553d1d8ea231522172f8010d4d14e1d1715086129dd30a9820a286e25846a8035e50e38b8b5aeab085ea67ee8754d56b82f83efa238784437d3f912b630e890af5035e8e722c23f459462845712c23a8c77cb4bf0fd8f199a34c53448d1689ea36537e09b72f2a808d8aef3e3722f3e7946df42c53a68c1b3ced938a4475e5a38648cd7f40ee0a6695a85c58e8c70d08bdf4592cbf218dd1aac07198f91dd9833eac7ef6167308fc3f020000107458392b154e0e1c373635347526b5691986a253466fc80da1855964b57f6c67c2c5fe71a89774427777777794a5264ce8eeeeeededddddded9d0a68f33013acf64f0b382e264ababba594df04c8259fc9507c08218410426999c86feb0fed6b1e0528a01b7a2f01ef001dd1edde63eff99d7b2e498489d08bb194bc2e4a6e30e102468a37b0b886fafd2184df04c805ad12a22b54acf08319d4b0830a50b82084b02d16ccb2b296adcdc34f049550a821b14445d21430dcacdde8ce0861541221f4170f7423afc6505aab4a5295ea75b9b275a5ed7a7a48681ef8d21df646a4c6ca12526e5b1611d8e29c275507fe6acc51ec01ea3b993117d441fdae849b3ffb69bb8ceb84fa7a50122537be1ba4e3eb51a328a60cc4bfff46aec231d9e3a3fa5e2c58b9f1bd9bf37d0a793a9887bc1efc7af09d72fd5944e2bbcdfb07f9c76cea401f7fb1b0247bad30e6d29f9b0ef461d4d3bcdc7ec8ed515cb7fd40bd0fb87d271fc5cdbc2d68ebb6477d0dd76ddf4fb315d124d71169d016f1c7b61f93db4660815d4998fe3684fedc7ea0e01f7fa7ce7ce43a0dc87b3a8af8c4b6cf20eab7ad48b47969635944b0df1efbedb97751d1767487057619d5f880732be2df65dfd18fbf73c5e8bd0374f2fb6f525fc37534b623ba425cb9a0edf9ce7041dad3d4a66d453c460e051e72e4c668bdc6a6e876d195ef1cbc40de96a222e79270991392bca7a2a22b5473b16f21ed628ffab71531e1ca4ff2800b9f0efa42f2a24e40bd902c72e4ca240148f280cb4f07fdb7498028041a5437213eee7b2164341a6f402691c8434bdd1f439e0eae819a1bf53dce19a396a53054fded673eced499ea35bec79f89a94dcb3014fc29142f8c90217c38c3ddb4faec1da0ae52ef0d334cdb361c7f3d669ee9f7e370388f9abcfab7f14ab2bffca7233e0e77035b91e8d6991b9beee6baceb54feaea71fccc6b73fba1fa4cb552ad2640745756a82fced38dc82b93b1b6e2de55e1e4e06e60ebc686a3e180cc7c6afb99d4fbbf2d2504b7e7d4b66ddc931fe14b2e324727a2a3c58c2e542c9b709ad382daf5f88c1c89a450a64c99327ebb960074a30d720db6e00ad9dba141fef4df8d0ad398b714b390cb13b89c644b6519f6f365093b37c85dcb71a13ed88ad6376e20d0901d93aea7de9faec79fda4f4d767ebfbbbb9b87e5ed49f9fef4daf6436a6c7dc5d597372a568e0e080078b801d16ca762db7ddbae75a5ed76649aa609655c10bc389f65dd2ee69f351c1b94adb2871f805fd900d80edecc9f2e3f006cb7e30b08b66b55a163bb7f22c776aa2580e4bf67a5943c90f0d06c50f69a9429f99c92cfdec6ed522f0483fa955c7ed7f8351f733b214e699fa2df61fed4c3c3ad68503f40f3e7a4567e5b30be7ca9a2cb134e4b18d12d407e4a7e7fc75c07ad500635c96f85e0cdd8b2723ef5f35909633d05010038fe73506048bf2cd22f864590af699dcea7bef3a73bff4693379fda8abc0d80058005c1b22cb4fca9cfb14f1a3eeb7374ac9429f9db16a43f08dafa5acbb61d0a4433877c1caf37f9545a96ed7a6eeab13963d20dc71c2b310fb0b524bf532fe6e6b54f71fd3e7ac5d55771348fc3cdbfc1c14a7f3b56c2b88e02f5cfab1d1010fd6ec7ed80a48de46a9eb720f475cd8ed6bf8a6dac791b8e753b243cba9a3258846e6e6e6e6e6eb63c6e867a8db59faf655a270433db79cda76ae69bb06347abf5afa494f1b8a9ef90f0b8f467beebb94f93bd2d48ea83a8dd523d54dc18d9764878743d573e4d65bf592f8377c8f732588427e681f332a20e3f5396fbf735bda1a5cc98db735f53992df70d2537a83471b58b3d45ba5485295701f7bd8abcdcec85a0be57110fb775dfab68c97d150d71b3cbcf61e4fc57f38fe6334de33038ef4ffb47f56e3bba6d41eaf3e3a530d0277bfe91d9573fcba8ed3ca3eff43da3efb6b3a0ed955cfa28651cd867febcd9148137c5612edbe0b01bfd8e32a56e8352bf3d65b64e34a4e4f2d3d9a54079ccede67341344b7dc61c2f658f89999ea2f46662a9efb4f7b71d8771db6d56085eb63edd53d6bf9b36b47f28c6659402db4d390bc76743e87311ca9f61dce598d98260cf36887ffb14175d0e5b9d623875db82d00fc2a8ed50d838e69ef3a85f2efdb905a99ffde4f86f38ed6d70bee7e325d8a261611bd3306f3608f5425cb008334b8e955285fc623608f5f4b3ef84fc72469f6d5763693fa5f994b3b09f5fe9cf8eb3dc6aed93aaaa956649d98db9a0bfbdf6bca4718e719e5d6a990bde31ad844434b0068c2db4d002886b80256471c545ed5457f52a3796b47154dd9872fdc6f065b221461b4f98b4c8def3fbbba500efbf0bbe9009bc1ecdc69dc2a550bb1ea030177e4f1b4b2e7c1e4a2aaf78b0d241131b5da87a5a2736b4e0e2d3c446164d6c74b98c8a31c6f86636b399cdec6531b3417ed31005298a366c9839edfcfdb11bb3ef60f61d678f7a1fed4986ee7cdaf9a34074fb93f48d36a8df2111c6320a1014100aff28d41cdb0b143b5000f980695545ed7a7a78ec409f7e145c5151e9bf0bb5a7daf356447b6a3bede1463fd3b8ed293744fbcd7641f3b1d782e66b5c107ff659d3e782fa876b35f28d64c0a8c82cb9f0eb1a6d5cf8373a2dbfe35624a87f8b911b227fda2e287e90e482e4ff68de586389c64a8a9d9d29dc778080565d2805bad206f947173296edbde2c19cdddc59838b3b773c841a275f61ca394bd004a50a226c8085114b8862c0c405294068e1831463b8a61a3eb893deb9860a774e18d4e801a6c6172835a6a86a2891526308cde6bea635725045167bcc1627eeca8929e7b46a5851656fb0d47841e6c56ad949e3069c349ee0b06ae450fd9c124ccd9cef43c8a476ce3154dc39c770b9734641a3375c39551f4254df5a03ca5dddd7b48615554a082e3e5138eddc6ee74a88c6cb4911682c158106125211683851028d25574a785f131a2b6cc986ced0c2941ad3949500743ba01bffd1e7b3cf503223cb1964cc28255a24407715cc393d8032760e5f8c84af42fba44a87fd9ab2e111728a153150e9a86c10598dff7ab8f1fd15c30f37c61c3a6fee7bc550830c494cd9020a2f3068f1c41957be4f51e3ca015c2903012ca1810740cc4046126a14f1c5142b9c86aa1246da142df77deabed7147652df6b0a52cd7daf294bae0b53466ff84aa8ef25e589a1b0180a04c4442950eb32adfc8f9ff2abb8e7d29efb723131704111332451268da874821b486a6c41e6052a7ce17aff4840041130cb51828a0e2f18c6bc60280a003f975d7ce0e76ce9d81db5fc6004e607336ee0040c442d3c51e108274fb6f8702506b7bb8b8856c68839bca488a1f7bda4746145f6fea970a0e18ad792105bc878c3861dc0208829bc10628a9526e60d334c48b1a2861f7a98794961f261c707762cb553b94b19e2763db049c6af65d3c0a3bbf52e66929cf7bda4d840ca95241b0001014129d0ce4e16f79d1968b0a5ca0c578a4143f704136624b1058a2fbcd8401b4edc00850f51e46045942b6884c10f3d4871f2821ea26439ca010d269d9312c540c5163810f10a628b141c9c3803881b2451051065a24441a30d3ff490baef15e529ca1b48eeeeeefe3e76bb7bb7e025303d2350708356033a5f47462f17c0f03aa2c18e1c1c5e4754aedff73a423a623e972d5f2f687941d932851765d6a8c28d254749af17949889547ce08414548c5af8810b39546601ee7bbd20e6cafb5e2f7cc15b726c00a2ef7dedcfb0ec416e088b912dcbe0678fb246b46f3bc4affdf629f6c76c7f06713e070ec4f190f9fd8df0bb35a2fab643fd2a3b821dc26224c7b31dea699ef9391ec7e6b0436c2bb443df3cf371588ccb7e66088b1146fd507dec51d6c8cc6b936db543266499857628b34743588cf0433b543484c5087cb643db437ba479e60fa5fe350f7d9a9e1aa7c9d3e69f8bdf476394fb626387d8957dfd1a2e8599c79e864b018b9119cb499d823d5ae2a54ebaf36d942a5318c27281e78a984d21fe7375bc74b51f4f8ceeeabed793a49b3df860ea0a6b04f917782ef91a60d7db99368867881ace19e4c49033438e0c3b39527672a458f172908080e60b0ad39d13280706fa6a81978bbaefe58291cfc02f284baf2737c879c1ce0ed20bf06847ce395f2d38b973eee44cf11c1ab6fb5e2dd8e0cedcf76a4107a7275a6e77dfcb68e9d2fb5e464af5be971112093ca0bee3633f53ffbd3ffd8cd2dff956083dd0c73ea9a8a789a8886a888210e5cdb5b26c869bf26ef1568e9f0eec7350bf7d86da7e6c9f6d3142ec316c23c2d886cd386ccd709df2198ec3d499e7b01546edaf17f553f31844fda66d3fa20e6cb5137940993265ae161ff519438c424a1fbe894406b32eb3ddcecd5e767f037d521f6dbe5351cdaec0a85dab15420f0fed6b3e3e10f4c13ed670349c0d97eaa79aedde0d32630ac22f32c93f515df61e50a6cc1b37fb02743ba2a39bd912806e27e4b60dd23e683eed34db015dede7082e237140fdce04a1cb9d0a2e0f016ddc8a4ccd1e7bef51b6a3994ab5d9673bede7bb3ab7138ab50b0108b55a8429e86a385fec31db838a61965a1dd8f25f75513b1d9e9eebffd83b669d2986c5c730bed8f7f603d3da01d00146ef820e80efafc32fa5e46db32c9605fa675e03f0537f81e75ac2647b26f05396e866d86b1c7da29b71bc743121bfb43a061d8cafc854d854553b55eb5bb765bcd087fe64cfe893ef1cea31ae43a2baf4fd46dad7a103b47fff686b9683d7a1cf8a0c09fda37dff91fee9d79cefea8b1d301a09d07d123a70c404ef49ba91d515ea7b1919dd79dfcba8e8d2dcf772d283cb7e67ee7b39f9f238f072e274a30c2f274c903b42cbcc718cda519def8192bd12d4f7727274dfab091202ee7b31f9e29a00fa48ea2b362af37c4ef3a96c7df5549d8c0e1c6111666002e6fac3249870b92d79cbed677967b9fd19132b77e2788cc3f1375cd0fc9bafe1baf9354fc3b180105d9a2c4ee9996bbdfdf0d143321c0ee7551ccb2d1022d5f3f683f53affb60b3c17089f6d9a731808ffb61f20702ce87c137665b3cbb2d4679fa9387f1c2ee73d687bcff98ccbf1ced5ece5a3b622d8fb5369f3288e95f3aa7f77653ba2bb7a7f8ddbb88ee86e41b2ad487f97bdcf77cbcab140882ecdb388a8dec6e6e6515ccd8a9baff33e2046f35966bbd4e3e8661e7becdd76f3311d8e364ffc1baeb34181e8625fc375d8cba71c50d08c4d01e9c72c2bfb9984cb64d9a665db6bda09dab665af65190af4330e05844371fdce61dad3111fc505cd6febb0d53343f57f4c5811d98341290da392c907b2b7b3f2a23eea814cbee492fc88cf494070fdb5c04678b663ce8bb83997a8ca956f03f2b4d0c1394b2abcefb5e41bb67c74377481bcbf3e206f4954b06405158aee7bad578177df0bc1bf39d9f547a24b017eb741efdb2619ba5ddf4743c6559240e0379be97f3b1d3fa551fb67e621d69a9fa9b64ffde3e194ed9c6eb6d334dbdde85c0ee16edff55c95ce7d495fe0ff40a01f13d8b21298bac45a6067d9886e8afbe7135dec99eb7864dce3882e23e171dfb6a178e387f4c2e418d5f71d2bd55a6bad74669863dac51e4b712b32b56325d632c3b3611c7d94a4dea5a87f843c9ada42a54f1bc4d2e025e730cc052f31176138cc3f8effadd2a84bde1b32ef7ccf955c7f5c4774dbcbe0a7f79183ef9cc715b2d773521486627abbe70ff984e263fa1d77e78f9e84a13bbf987a3186d70a5396305d03dcf762218bf3b8feadc518a13fc5875e863ff9937c19f97d4b77777773635186c3f62e034208613fa62b8a7c2546ed7a2e6cc967bbfe332a5f6e8e5ee9623c7c8f62c0d7afc654a0b6909999599a5159fc4497edefc0167c2031a024a8d4ed36653dca1491240000002315000020100a8604e280483420137535fc14800b85a63e6a4e9a8983490ea32888618c21c810400c300418430822856e88a3003ef3d5ac0ebb5e551ec96863b7ed8fc58dc2bb41807073debe496d3d2a70d039bdcf3ef7d1c2e28a484fa37fef8700019c5f8d3538962e15b78a8077e61bf4c1267f53a1f17d880c5194ef2036fde5dbdc045008aac13f555327ffa2bb1fa93785b2ec2d94dcfce95daf5e23568a4af108e5db98c3216c8a560efeb437bbe0f904ecc14a22295afcb9a14cd14a0c8da77e76a4c2c82eee4edafc3dbc2399a3184ac9f504de7da6dc4fc984ae1ca651a251845c922e273fa29e53a14ef5a5047aab640b2089ea5fb15661c5ce08e58436323b48ac22d24a76d48899ec1e123a26a2a5e7400e175555a8f72c26a9397ae77c8bab4c44b5ca3fec5711674f8bb45f38df1ae971c8e26b34f443680d9f27e7499223b3e4f5239e2e7906fcac0749c2bc2d97f84cf5f3d1aaf9c897419d9aab939db98b06d15ea25467ee2fc197a146b1c205600eeebb4cb03aaed598226f0b1f8f6f4ef3c911cbb7799b42c59b94805883fa1b36c1019d46b5c253a00538281bcf4a79e1eee9bbb94d0667881ae5e3597073e789f53f8d539b836c284d10f452822ad78377dd9b97b9cdda1c5c2ecc556d52ab043234629fc2467db903790d9fcd1be091fe58241a2dd4268464f6c9db20ae576ae5ec3ffe64d1af67d88b6f4421e183b6ad42e3ed827067877a4820ac8042e7b1f297e4da25387f1fcfe5a74b07145b303c689798c3571275ba61f129e865bc243d05c6fea9c9f56b60c8ac52eb563c46f03cd18dc708044235c8e4082dac21a163743e48094602759a27dc3553f1770f69202d1cbca5d3f9dc42d50778359e621fee85c7a84399c90904ea9569de232146a88d4777171bae9a89e92ccd5aaf0056fc95859936de059b7cf2b634ae475863e70db6d569b2644ac7c04bf4f707075cb93f568f1e41ac472c2e58953e067bad0c11546284bb44df4daa12a2d480ddb63fe0302e15123fb149b68918136eb09e107b3c0eeb628f45ff731f5a4a6db04fc0c392900909191dc1806dbdd86f353576a9d5da962fcc234132d016c660d0f2754188228ff30499e82a833e4294553b98f4a4632d56909d3584a80d973d81533d0ced8e5754f32d802b56d8433d9c3a746aa7619d722f8f44d8ecaa53f5838679e73cf21e3e3d5950316976dda4d8467bfed9e9f0d4c17aa74907140f3487201495dc491e2463e7b6e0bca2e9466fb9220536cdaf376204d2f5dc94848f7614149645d6a51c602a5461363052f3b1d3ff2932dcabcee28b39a40788d40419987037f0f57b025f643c79bdffc14d888d4c8a6139c01685017080b299e99390157375817a7b4e9cb7477fa6b0efce7662a2d7f9664136f41ab291ff1e88fb3d5a39065b067835d7342105d593bd778f7978d255920849e1c4935e8b9afbdd437c4f1b57f6d65e02b78f1dac451b36ea9f2b9e44ea3992f66102e2c8c12176128d38622e75a8fbef71e7c3cf33cc1feca4a69c8286d2c76686c0c7dc8a429356dbd30c3b6f49a0df71794286690aca5b9ea0c0ff707d5fce496d7d29158d76211540037193942beb418ba709c72e34818131a44f01b956589aacc8f6ca956defa89b90b3457042c8045f9f5cff86e210d593532f62b3199ce5f7102b46f261340d172582d7d95cbc7ba897a34c9af321ca9484518a6b5f446de84414f5e43cb3f8a8123dbfcff8e60577614052436bf0fafd2bfd6864bd92860b03d9087d867d937dc877dd7ebbefe50988a5e41e55ea5424353941e1d288ba8ff525bf8750838963d227c9d17eb23bd68eaf4242dbb06123880d9df0902311c1a1a6544f999fc39a68ea46351b5b7fa5b740a55c539bdbfdaca0966a6f41169118de0edfdb4e180538a0753821fa599ce689950c2ff1ea1f9079d97f41c3582fd00782de21600f3d024becaa4e446d7c4e1236ec04b8f780de262fe751d9eec336b595693128bb694c0765b834db4c5ac87e697a2933954dac931a1508517b3553bda0c1ea4460422cecb888f7eca3f29a6e78449116a1f74eabff5dde9d87627de1a8e275a76cc42747ff3f8e7711f4b3bf59152c2345605fd9b8c1312b8500cb8c6277cbe5f730297e02e55acce4df48fcd0eefc3de70051caaa48150e578e823e46741fc8f3357b55e957a45f3e98cd9ebf40754e8118500c38ca56059788cb37fb0a8f83c0e82f5d145437e7f72d3297f5d687ca3f0ae7da16aeeba5e69f2dcaabb01e4487402135e17c82c9e554cbe154411d007dc97120613d684271e429da5498a7fafce63ec938bf93a0442ebc88eb44de695504ef4629d87bc4421441b11022272765ec5e284a4cf5fb39578919a10cb1f878c0cdca99b7f731bd8c1c64617d23f4eb7c2b0fe0d11ad47f78c1da60ae1dead6541399278cd9cab83ab13511891fe1400b6b1522570a8366944b64407c2f8f412de25231119afa707d6790329ac7f61a1ea12e28bc21e238ff818518d11e2ab725048e60cd32f9dd6a03099bda809b86b931fd10d6fb88ed64c2ed4ecdb50e993bdbcc11c9db259c011ff0bc2869210144b4b6dc70ebf5f8452e0a17199d829bab42b3a323655d1fd0a6a5b96ff2401a8b1bbac662232bc1bd182a095fed5d28630ce23beb0df98fee3b22356b34d48afd766b8eb26ef0e475f1d3df4b38f2e488e6f441d0ec0f18357cc345425568ead7f9374df2e82243a12d6954693434753c32d11087f47f89a47294694dcb22ae4d949ff2d86a4cc204643688bc65e34208c5c8c094628cf314a15db1e66a9e33bff57745ee79bb612a3967733d85abbb015b25e39ea319e7f40e621a9e4cad5d481383ad07fe9a977e72716f4e9acfa106caa001e53b3f79891522587c90f52263c0a3cf45340c7840bee55cebc4921555e01f22b55eef28e1cc55870be1038e245f0294fb65ba5698a30cd3719c8a9a781a6c0013f819d6459603a52b5288cd70c89fbc60828e2458a513e6e16ea3291819ffaaac10780837cb165aeb2d691f1ae4befea38589b2578b1c9ba93471f0f1e05b9022215faf5d7cfd0fa6bf443d623a19e2e63c2a62a5c5a1dfc56e0e0645541674f0aace27848db859e6dfe67ae16cff499b668f84e686514c41693bc38542a41564f2ceb1984be42755542b228d4c5a7fa43198c680743578280c5dc734cffa7b0c21954a535882e4b36c7344aa881f3fd08a991064405236a5f7598cc987296a9b8135dfbce9c96cc1fcc96fa8bb15549dea4bdcd08874d77546831442a9229985485dd852df4185f6a112f4346ee412c3720712eb304399eb9d77616f5321a388e32d74eed65d6546f201fff9df1ce74a7caea4548263235293a8c46e113b4a3182071d04b035c850232f42dfc12004f60b8f08cd72a24e5e676c54e29cba83ca5d75fbddff6fcb29c07c0264393221cb7457c8ed4f68330819716957211001c03b91251d7f715fdc128506da4f98f320367d41f9020afdaa94c56a74214fe5b602f2f30429af1a206c5adf36d3dcd30673de209596e359d9e522c7aac86d9e2ad1ac7a4fd0c000509879365856d3fc124234298ec9547dc68ec71d9238c9682de05ce7194308f4de047db3c1770554459bf1613f848261492eab1ecdad096793ad4e42332e1b0d8b0ff227155ed597571082d8016057020dce618e2bc2d3a9a3381781a04f055bf6c17087388bb36e83e290d02e4b8196804bad25a0fe69cf3297dc7d7c9c9b4eb14d664b319379e7101077af5b75d4f808804c6bd0d9ee673e8e0162534fad338c4a8e9594b9bc821b877a886a873b766656a3586b61f26c47362c55369764886d7d192b583aa5a068d9866d1b03701e1f3c1885f2228f869dd051e54a4cbb8dfc2643078ddfb111380cdf56ea436cfd52be595fd15ab6bd17d8a24671fcfb12d37cccf862fa401ee09eddbcdacf2f9d298ef6a2931c89a104f4cf6dbc20037129037855e8989e1a1abf4a579c0caed064fce521574101b932f89f0640cfbc09e83590240ebeb9e185130d281acdf0a82ad5309beda94bd92db71a283c1854a336bc5b5e789c21788663c7990033aaad5f94cb85c6b389e31cde817f1c2589f8fdf9625cb01a1e8e4547a1c61c6e709e36219d87be68ee6b768fc7cb462ea373ac554467cd0efb5c10738349b04950a97217105fc0a6f2730851b3486cd9bcd8d926c04d731a8ceb4cff80087c79137a6ef8aad0bcc018039f6f8c72682ae0403accf18ac1ec10ca8c67165ec660a24562121166ea87cd096209764c62d6bc37c7402ba841772dc76743388e2915e1c5fbe2dc019d1b0cd5f7b868beb3123a477742ae58bdaf3aad9f9407a60b52d384807cec90704baec660e792c5be61a2af518bc8e9e21d831c4838554e720b7c131cb5ea5309e124e6c10225388ead5fcd85378dc1d2f98afdea9cd800e1664d3a342e3942eb955be16691a21e93b1ba2f5512b5b69471451b7a23d8f44800f5b5b50ae3a3264e455fd20849a70211389e59e1fc2e67c4bcc3984d78b5a0a363673b3fb442fc05040c3425c36d8668b4f208818c01155af9ce6bce56242b00fbd217dab3b235be7ada3f82b09148531a5dcacfc658bb8ad06763be15afb0a91da2be417944642709733a3631b9c6ed1e80072e6295b8d32e4e49b5d1169bab15d3b8ff187e8bd9c558590c2b22e2ef219a5bad5cd4cbc37d2ccf404c08851e5a3eb710d40a167a7200b7cf0deafa58824bb33c2a452b053b8c14ffc0bb32c540c470a1d5fa6d8e953b023b721be9206131328fa036746676f2ffba6a618f6ae8da6f11fb2c3d64fcf73023338a1b0b7b4e83217a2d465797296023748e65bb8700ed644e0153d7cbeccdbea228e469e3139a12dcde44632705b89662baf8e23fbbf8d24e03c1659d1e0eacf0cba303f28ce5a67ef02ae6cc4705d7f205083074134857452c365ea795e18cbfb9115e14814d59139ce46c238a5601b450605266c03e800105007d75e9f68f0e3be6008ffdb80db3e44283b9fd6d7085473e9fa080a9ae38fce42d86070a608a33425ed1b5438df115265f8ffb7edbbd813ec9a7b20c70f3d7b2690deb9eaf6af2c861d27e54c02ac3924563f7d40a4dc6d00393262d9fb45705f3a8deab9218656b41afd4d6c5f212c997b2f29f90806da6ef5bc7762219cacf3bf0f9fa9f9698a918de90539ee15107f0610dc5e4dbd0f49a839d24ae2e2564980fd1335f37c5d229980d79c5eae951430af75171b1b770afa09f401002e84df92393d1398e0f6a8c131dffea61d8aa454bfe287b8b2df4080f7300ad3c9e4a18a3e10695f50c00c2899f6a52f7a66860b9ffafb668de82166ac1cb27ec1c7ee529523b4017119023a4134e89be252e153b561c3700ec88daef7e08cba530c872a5ace01050716e6489167d846bb4c85a6205716d7f09e82571c114b838c5244c19b93a5a203e6141adb58c1f50a86d014d3d356e6cdaf2b0d6429d361a61880bfcea424e0eee62110af5b1a9ab1bf4707e77a2d4b4fe02096c88b9ce4d496ac9a56758716e8309fa8bb0ca9657893e52fe97d5f7b6780942a8f61ec6e303609dd9cc76b0c2337da02804a1c40d95992add69eefc5349d63885b966eddf8e078d90d792cd0113daa6d90bb8029578a551267dafc136d74a852ceca87fb95db1a1136abdd4e3e211a92087e77a1a73f05daa9194c2f6b7c2fda55b5723465bed7b1ff4709f8fd2be31df62d2d57048500f0e528e0f4deb752d2f0003ee1d3d8fc0d478981a7e76d5903a6a465d93b8036390b657bd256b828f094a950d8cc72771ae5b792c8b2aedf9696e488704b8a2cb16ddccc596d61a6b6ed0e9bf2935080c05d5f3c7f0a5b388a30d1d85ff29026b8508d578907bcd8f1d38b8c4e6dd3a3e13fcdd1949b3b0c88ae59e39d946917c4c14758c3f703926646e2ac3212f5e56e48b2df402c673f551cdac5867d6b1c0f3b8a2062bb81b043b8bf3fed1ec4001ccd3ee92d839a85636ffc83253e3dbfa27b7903448cbf87f93df506dc168f9536e347f8dd90dc8f7b8ef1e11768deecb61c8d3659565b4aa5bc5d15813c803018e0e83a65672ea6b0a137607fe68d229b276f472d5dda690a75aa409d9e5d2f415bff5af6d4ff804eae37c84f3afb889ca33fa1cae2dedfed09e4dafa99f7596e3f6d386f34fdea168c0a4843e59be4dad8b5b17870ffc3f3b819f2fad86637fb21d0490a479b301b76949bc7c5029c527117cb6e471be08e2ff4706ff903eda4ed5dd79fe693a4c8974b2bdc9a0e19b2655ae8ff2c299bff827f179619d88488e78c08fe4e2e4e091e3fe6f26f0f2c2fe69f303c96a966020c66945c1519919e50778fc42a7d34f189f2c98ef545bcea72983ca3da0201dd842f80a015532d433478583f44d79b3e3a0652d661c5c6dc6e1a818ebf834b7e4ae12834d3a8ea18218f3a788475f052e2a7580198276fe24c30a75ea02493b06f812b59b0a296a40127ab5becbed678044d2e8ec5ee30f6f2e965e2477d78598619551bc9ce3c8c871e3fbae3a4398b10498fa5164d6eae79a62ea17eb206e00df3484828d68b11975f2469f824235c4cf1d54310559d64f62b44aaccd054b9756c9009751d7b573fc4c982c445e293918be13cc8cbd4b764b1842ce19f9fbc074befad82cb1785e64e9453e74675f49f64accfb0171812a242ea5581b356168f0bba6b526d94e0a32963d48d7ab62270b71fb048e272648bd928a39af58072fe4c3ed57f606d17d726f34b726c70f32338ff496e6a7b14109bebd6dea94158ccf843fb51f5bc30a89c392b57059b3e11dac4e78e4507786c7e0b95916caba353aa675db0944112464a54e086ffce4b964fafed58e5dba32be1e8983de3debf723b6b3c4cf897e809b7b889504883d112156f88392959a8cf769cfe6fc94e1b23db4776d39ba4cd66e061543bb9ef8913d3a514c2556e3b475ad40e5f5d3b9d900b9d84078e45d38735c7ace7b1c184bb0bb89e300b3affeadac9fead982cc507a63788888f861a78e80930bcec4b09e8c36f0bea50c35b1794a7f602bd0e5c03a080b0c57e7bf2012a153abce41bbd143bc5288e3acbf0ea1b3d95c60aa1a5e5be0c2fb3e02b45a0232d14c554ebcf59b544348f79bf0da9b6fb98780daf9f29255afd16b38f96645cc271a9439195dae1ccd6ecbb76f64bd963b5f86fc4d7af8b2847f12a611843f29ae5286eab6d585008c62c551065f35c174781e004fab6ccaed7540f5de71ba7d59aae863fb72542e564820b506f849c41f9e7c1b78254382154ffffdfdd1c64f326f0cbcd23960f4f8162a4de9365c97d08c4f34e5c866a274715b29484a3037cce45ac0a0d40c4cefbd07d827252f82412578dee79249698b6db23002bc3991d7623972edf7491bef0d993b8d45f582559bff29f9ca2d31667bdfb6af9599986ab0432c05b0fca361f1a9ed48482c9332f8221adbbaf2311758228601f0f846c30a85e1a714a071b2a6bc64f8b23f3ca835acc4ec446cf2f79147f297d3a7452ab1aa34abcb15226df87868ca930d67047af330f0f4ba0579dee156d56548a110f54aea59db41004b5b426a29c0dbfa6112e3016068686b625a31bd6a44df7ed55519007a7d83018201a9d385161ad285dcd50fc7f323bfaac579883d827c1101ca85811b238a24247e920aee8fc5f0de28be0bac6449efd12f4d366d949b4c1252992c1d5ce46780a8005c3d71fefdf5c7f5f29e194f59371706326a77b8d0b61d8eb107185b4d3fa50a01fed4a49587a485fa107a5e0393481dd1617b5ae2a1159c78d737f21fbb9bd700eda51f9cd2167e8369dd6b97632f0b4b9001875ee6bfeb6d36012882d3c144fc4214edf4012f0417dbeee7b561a210a115612da0384fcea8f82664a81377f90fde91e486a9302f8f1267a04de99a7120b9a70f4681b06856a65a3ea0a9c735aa1b217c85bbefceb7a3ccdbd024cd3f39c68938011eecd10685a5135e46164ec2d168f6c4fd034d564a406e1e59d895529a0297baae7f6eaf01582545cefae1efcc306314dda863d9082f219916955f6ba95ab90a3a50cf3e9b359a83aa5fd93aefbd49816f736b2d83601e6221630f2ba626530494fef3963ae73375533f2789caceb903339277f40b7bc05be5a568dec520190942eb2ba8c29c468b1f67ffee05c7bb108469b0612a291c96120f172c24fdc60cafdb274e501d6fd7f0b53c7179e978411d18777111775295a8fc2d9a11f5db1fe3c68d49ab09c7ff6308361f2cb1af0f0cc0541833ad170c9806b46d6b4ce9f51591402d8c122dbf0db350c77cb7c08ddbf9c883808a200023781e141b197f6c3aeac54a69e16f1827c056dc8a5d0349266aa40f9d1a2aef98b691f4f21a6f37c77ed3c6855885107b0689f810147e170f000bf8e878e5d902f2782888104f7445b37a54cdd4de37275a70d8e70358c7e853e11a93dace7fdca9b1370f429198cd693a76aefb66a80370ff4b6ba4805887af75673b1c3906e73a350414c8bcb817c9699168618cc7e0d0b883b6f977b4d03ac0b5e5aa3886120619b3aacd5d768d05f31518100eb5f8c7e0a1a4ac76e63cf137c9d8d479fae859f788ba1e64332ee6d1b95d851e7bb0d94c66674fa608ae2e7380bfa4e2580d4e4ef70bcbaa0a60147d29771393db9343952bd0eee7b093575932c581ac61a0ce4737bf687b0123e1ecf434a9f982592b04ce00dbfaa8c1ef8f37be5aff05edcc54e516ad01206a238d057d070623a8053a4255faa005bd16092ef1dece07033e566c1eb4d2a8d1580dc50157064bb8e4381addc89b2a0def18724f0490e9ee3ef2208b1d2722489b18a66a632ad41b87af8d4968a38adc01118420cd63d0aad8b523fbd48ad22a611abfff76ccd2ed235030360028456104b7127255656d903082a1a2f6ca8354685105e3f7df9bb17a0a2921a197ac08762cf0c3e96ec51d6ae5634505300b96d4bbcd59a934142a77b69dbb57ef218064d89f9615697614db4a3e6dfcff3387321851020aee544fb5721313d3d80d510362616e7c1fcc0c88f7ec7cc7c4ab9bd10689e3854cb093258f356059db90fbc421aad44dd1232c9f0856255a0e3c21522aa66d3073c4041f691b40caac0bb92289420122ea81168104dfc50c6c3915fa447016ed65564d1018bc8a086221754c984501242c0aef7e18df2752ab62efc278538bad881f674f975df9a54b28ed238c2c47d67c02539b357d3fdf51121aded526e2aac0b0cace5e59ae8c531cb23a2a6bf3bdf089aaa491549c611e647ed69027e9e073222276477317403adbb58488bdc1f1c1169431e1eae9a816785c6fe96ca129ff911de35e3907d8d00206cb56d46948c0cc27df9420eb6d4268c3775960a3cbf04bc200cd9c887f324d75ed12fe4183e6674b1a688a154c7beda74ab96a51e8e92717b33560bab8e92638102437581651812efd6fb18a9b0038717bc64e8161e52e193b95ebf4787d3497532c0de3847c026f04bf021539ee297b93f87149588b90b0d622e3859c1f5fd9235f98617c5939edab95e9e2488f9e26c88d1a80bd40d42d08fad6573e5365d06fa526e0a217c7b55fe52193eb34357b6af2ef96c26ec5d1a0ae33af13425024a0d3c0bf28ecac5809ba9f98e297013d59620784187c69985951090a2c07e447b96a1cc2549f21256a4f1973f5c2f47c8bbdf0a230ab2bb7ab1539e27d863d6537b5676e3614a06cc0c2800d0770bc227e29141314bcc4ab33f78715940ecb70c6b6ce42f2edfc7ab45121dbe000d997a656238de07138b4436c96a068612e72526000997d2251894dda6190f7305059e9d93e55ecad966d817cec6d2280fefd312a741e61d945390675ddcfb10323877665fbbb00fb5c1b42c99b61b2f4300e3cebfd423726a1a9196c76e19c3cdf4262ebddc31b9c9fdbbd1368b7e9080bf06b30901de89576fbcad39f48cd38d69c4f4788c200a0441d61854176213ae0e643bfc4a857d31f814d58bf8276b28325d785c2c1b99c80a90a8b1c3895d73335815bcc5d646e99739fed4a6869ce288214fe4299aad89017444e055130339fbcd7543ae35837b32eeaf2cfc5572912b37b2ef572d8bef09d6b4e9111fe3df3531831da71ce5eb006022beeb278a1a4fcc6fda52584d7a57f21e8d6ee19ff4a9cce7f14f4af7f803ebf42f1e6f26818ebfdf8c381b908bbc82df2af4d6d770657be46f9ea199a4607ca0b2b73d67218ae092b694e1e3fe5415f55f5484fc4c81a3fc564799eef1ca1f07639497dac50cc1b60399f04fa03d8643d0a684145a83a5635553d38b86f76c172b204cc38cef6b6282ecb38894c704c2566fcbfbab030ab4402ca862716f600e55bcaae26bbc2119895f5f36f28b6aa29e8e69b365bfd4726c9e01ddb96edb82896782ea8c8550988c8c27cabe384d5375ead22e8169280fc776a9f003eb1de56df14fb24b6424db009304395156878e20f6c5743ae00c66f20f77dcdfee2c78ab93d55d2be08d43e7045169d04018578dd65403355d35f4dcc1883aa174415467301b4927072972145fef39ec7494a529cb769dd7308f9e9d1a07c386b9e75791b61ae3c160b6d54f6905ca8bb8beda8ff036ce3ed2ac0726d507e43559b22dafde721fd3f8904d715d181b64dd37a4a4054a44ac03692419574f3460917921021150ac7db3e2c8c8103861df3fb943b1ecc06f23484946361848b51479797ba4ed987a0ef2275eb375f8d80e080a8b417235904c53cf2e996a73d90aef83ee9bcad7f064a909d6cfc55771d258a9348efe715b45702bcdb62bab8a03989fb28d62bd667cb7b81adae60ca681dc1eae4d5949b078bb5f5822cff01d8f134a00356d625c949e201f2ddfe075a5944707306f003dcc9627a4c688ca03958cff853a833eb5f9f00225f3687ec6dd666e8a69febf911b778d5d237963c9975abbe829ef0227d889b9cd862b69a622f074305f130669e03c050a8cd8178a033ff771a261793fbdd82e0bcd2d279292d721c14bb355b3f6929078ce3379a3c154947dcf29c0b20cd2036484c4a189682d640b9ddd7c0aab3a19f4a82d0920b7239748f087880a3d2cb5394262533c8129ce0f6e26269da36a5283d44b5307b3941b08da5bd5b1f2aa776854370642cb6240c214fda7b96c15d1837b0804d3a689580b0a89c5bef823d67f290a8e2c5801363bc23b6f20f5802368bdf0c685d1391ab7d75b3123e088ba1312cad1e70592b105b6b16f64f38be3e62dc24a58a4f000d85292a231e2a9ac9f8c4d36a12e26ac95d174a6578d1529aa3c32f6b3491568f108507772dd2b1cbe75d84d56e7707953e99209219eb981b10c93014b79bf2748319ea9306b3b3454ea0c71963a72fe5e9e11ff82ad6a83aca1432d171d8e9bf4179c39c91b55abcc386001477bfadf2792a036c52e0344e2daa1283221aad35532f9db166d44435a019e51df4a7c902753db09313d7f11fc8a7707be8fe94a4cdfc11a2dc736e816c58f70998c063f0bbc45107810ee7b5d36c1ce9c6c9f5b5008d5b27a2e330d43136ba238a930ce893caf533e008deb6b0bc3b9521c67364713a5ecd42d4802c4b20b8667298d93ec1c8fd1b422715f5890019313fda40e37f85e340fee8960d2a1c9dcdb100f44fb8a6c15dbb3061d4fb92b38483792601000620335accf4da854a69fe9a048f2ad3883cb24de53d3b8896b60ff1b8039e2559a90143e8aaaec0138d97e23774d736a1632565a3b38fe4f0adea1661c3e0f8ec3a8ffe06c062e83b7865a77a922727c67631ea607a6874586e19eaef46ca5da68202f6c3351f5e6c562fea59729fc6a71a750dcc912e30b2e1e0cb5f444d5703524bd12ceafa947b266d6418819edac0391672a84440dd5df6064b265e26eade0ea7b02ae1f94d5b1f56895b7291b8a8c7e96b125a780015818a51aa97908708c626e9224fdb9245b682a1a1f067be129645d0024ce6aac99829b0ffce44179145aa520b877d8a253ba9f8fc64ab1f4310dc17a626ab407a74f2640a58bf2e1af1b787b97aa3d2226d19302afce823a15de586ab64537c50bdfd2152bfc4eb545af5c0ebdcf67a99631e11d921eca92da20755d6127da943bfde3b979e7aa650c22099819927050b41150d79cb6c30b7d33a8b7a3aa4e2faae4d3d64c629022ed5cbf467b80f997cdfb85468241ed9621b48bdc36b0dc6dd8631ca191cb7dfcbacaa7262d385eff8c2d9829553cc79054a8ca829a0ad42b9d037dfc686c3241f826a3f017a4c6a37fd9f0010e8027e898930b834e156322cb73c992e73631bd3313aebb10b1485e871da438ea709330f8d6e10b422fdac154152b97e408e9c3266310e6d123ced6cf56e785fd1cfa6803a5a344f85753fdacf7e0a59cd73a920c4cfbd00ba641f65444df48b5564660d25a20e717f13ecd0e0f5471a921683723b33e9a6857e2ca0a370e9036548d42211ab1b7e2cc05cafc51422fd288263ba7ec99b3b1d12d1b6697ec749d98d01ba7fefbbf355f736e80c96e4b9aa1846fbae70ee0ba87b172bc3baf74238447a9139453bfdea1f86e5edf1bce2c6d0491e62f6d2db4b754ea08ede4c4acf0c66213585d245e9de8d9c95088107015e4e87a477a0196f1d25dec514de3be502cdb1f60183cfb014304cabdb7f7a032f7fc9921cefbecc464598ca85b26109a665658d072a96abb631feac97d5b4ae0ea4930ffbf4bc430c5e1e466f83c8bc0f2f9d7cc8389e5394f494ba4e3642c0907ef1b8e029c47bd2a9dfc4fdd60944d1033875b20dc63b6f0ecc72baa7a8c5b366450e98fd837bf0541c57f429978a9f6a3e8e050050d3ae1606424d8abd682740a0dd9f43a9aa8c4a20fa870513898f7b97a919885662da406f647f02713aa3412ef19ff07fee847b3e5072d2776863c1ebedc7583747ffe01eea4bbbc9acafe9f04f3cac0f2240eb1be3d8af9a01ab44da682eab3923cda34a4a9aa022d025764171e38a79ecfc4a40a74d1a134f21ff04147ee74fe4901fb5ffd3a7ea8a936e8b4750388be9b08b8b885956b82421a8bead6aeb52fa1989528fa7e73cc92965b903fa3a6325f581c10359ac08a7401a16c2278d08b14991141154bfc90cf01cde8e0ec98e004fb21d581b33870239348a10ef0e8312d7c4ff3e3f11720e0b261c7912e32903488668ac7c29146362f0db6b24115d7ed1d913108774a366cafa977de869703e8079af2e89ac9bbbb5b114146a31503b768672c9c9de051887f00d0f1564c31ebc34f0f9a179d8e0ecf1e8cf0e7c258df2ada49ea8e7b63d8a819c42a4c37e523967fc97e9a283c8b9cc44b86bbaf46e0c399104000e9a6d787172864e696333a405881d89fd055307fb65d1749674ff5899fe5dea0cd95242431ed26792859f54fd3b63df1c695871136f6ba423967e41d82f5326358723335b9219c5853e949456f138589ab5037fa2cae2df1ae96fce5363d857da9a69a41fccb917a75eb2ad2916afb7c3eb98747fd54b38aa022fa85ec23072a496fcab636678b9eb3e9099eeb59a3061d53a5813955db803ecba8818bd09e4f5826a7b49c215c995bfc1fa7842ad9822b6b25e3ab20467b113d13835753efb208ae10d50bd122b17c626e506a0a312af9913897bcbc44db247c51a7a4c58e3f2aab3228eb7104b8f9c0ef079d51aae65191a4b5b0d83686b30148b0ea779c6a6729a736b2c69cc307aa5e438ec5fe0b45f2a61486d49e5e3b77ee15cb7fa08fbc06679ec0faf768f3d678ed11dbcf6025ac2624e999502f99bb1fe448cfd6360720634dedc42198f0c7d06847ffd25d0c100ade305f820d46c7b21900d5d25e7266aa9c67935106c3df68cbe7f9814972675b63ecdb552097caeb5875db7207e466bcd57a30b4fe070900f5cded5a6238dc6bf11069ef928dea95f6ad46ef9deaa8bb7553ee3d1bb3f2910b9b8cb8da3743aa9095753599239dd82a6cf792920ef3fc4a3616db0cf13e29915e851cc11c0d169cfcb1af466e471b95bd70721315d9b0dcc355d12e5b622e02e5edefa441b5969c228544eb666581073fc623a33ddcb99f5aaa8460702012b187a5535e9bc14a9127b3cb07a840267c9218c626bc98996af4a1cce4b8777f9ed6a9bad420bc38911e3ee748f83065204360c5a916161772cfdee3864efd4065f4b86b1a927f67203e6d87f1c0ea80cb6e1d38072bd261beaa823412866e296a38ef2095148b73832d0d2da00115223e485fd046c9a1f0d2cb42e7b4b525263665edc3e5e8271768aedb919382a3647dba681f33e83062d63e27d0c15cc7f403a2a7fd7f58c94ec7a41b4f200b658fc441b4c7445ea19c8c00e9d2df1e25a910275c045dc6f51b386279b99d2a883f3bf549a9c942787d3a1c60afaccdb63ae51a5e8fcfd7e4d9d0a5d96055b1887c6e4558c3406e5735a36161c2f5807b2c750cd628ad6ccca732357df718190152a51d3c81f362d0a03f4c4cac31d13f7c85baf3d2d1804e030d766b51542fb94085bdb5ed3d3a622ca40f1de8a8cb2b030e7f51bad5617d395958979a0053acfa26d6379b8cd9ce5b32a67c95e0447a78439fa22442ae82a5a6c1598865292233197589110a8ebf3894629301372011e7d94220f2b28f2d91bdd2733d0b045e5afcac5a26d1383312c1b4ffdba519a407e14dfbbe88abb208952373c007201c9b31dfc2a8f463af13b0c6a3ed9903e329a146457b254d3174e1edcf062abcea1abca37798030f754e07a596e70a58c2ad0457296e09c5d78b9a1bbe8862208ef9f077b0585b5882e4f7b72f2dcf07ae10033ff9745f7e076b6fe5227b9b228eb364d8c7f858db6d67546871951877016fd27acb9b98bae53a50d76ef7e181821f5d06954a6321ce2ca6b66aade90f8dc7471ccaaeb0b8a289598f1d3d2b9ead8af5bc69c7fa08f2923ffff6ff6e87e805c3678ade1d26af260397e65e22241e66b7460dabe7918c4c6121edc17805ee107f9912156be78cb599d3769d1b91584d963394f7aa48316cc93873033d27c9d045d2c150ea39d7ce46843dc052880edeee6999004a159dadca586ec3adbe3fb497781d962e58c404cc2725d5d0ecb24542f7d086a119fe8f4e0228e385bb82b0e3a84d5d0a889807e1e3a9cd3712f86520c70046028503b496b534b7c50f6341c2b9389dd8fceadbf4a9641955068511543e53e4fbf2d97dacaadd3977b590577763838f258dae85b9f8feb66f488a924e242bb49d426d6abc9b8d73d4ddffcd16704626bfb6169ef8935dca315842ee8fc871c83a45780d893eb4a8f16e8a27cf39761075b7810cd2bf26089421c5440b0cd2023813335908f01cac7cd816cda14115dec704902aaa271bb45e13c874834d905545fe2e628c229d49f4834b997726c174c16c95ccdb4c7b3f9e6a442a38d1f56b5cf61eae7f8e9cd2567ca6bb1b5c8393607b0b49dd73b4b580b2dcc940310fcebb8ffefeb7f37e4aca92d8b0a2187c747a023942f59f149c3d9bf74e25b67e910b01abe818b56b25160ec3719d4c11c4b488813c75c7efcceb4c75a294131075f6ef63d5fde6d9c3dea7c5935142fd59eb3c6de8ac87c9e18555aa38877bd25cb0029e7830bc1ee4e236c1b5b48359dd790421acf46c97f7070b1801e562beef5bdedd3ab7659187053f973b8e58154982a6ff0b8fb023d2e787b7caa71565fba91b12c9e1cf4af25fd8d917a8b612166838c7b265e7a7b61f524e7adf481fca53b4c1b77ac9f80c36772daece3086cdf6a5c8a39794a9260585665be55d63006483a575c47851ad65e325d1b9045403423ac751d46c3389d60d417b886254f2640f5d9c3ff7503020d84984920daed4297d86756548671d35156e2ddc35ba52eb2e478592fc0bd3671e7ab8fe5392cad1b79b529380eb2e750b675ac1825120f35b833979c5a9ac768dc933151a793461b60bdaa68e9d95b84d0c27023571468c7b9cf918930a6094ed4564653a2cd21d86e48b30b4bade1cb3d671a0ed27287cd1a89f52b2a7c0eba2c5a77159fb111ebc095f09cf4b1d4e60a6e6263afd51647cea58b4972ef185303a77be7288e28a242ebdb98fd9aafbb5c76801361f911dfebfb385d7eae3256dfd128008195e3197ea8c03f187031f9b3d51f2ac87a6606f89ab871d4ef6f19d0ac20771c3085852cb96a73632188f374aac94120ef1ad49d97c41e4a265a3f671e273564a1a499d86d27002e3b9f5bf3dc2fd91c27b5af3a4e4554c32e733ea4c6cee01ce4ba764064f6fbd0f3cb944fa431e74ff324270292db72fb637646f2fa2dbba1f67dd9b52ec168542aa316245cd2066bdf9529bf82c628fa60e2adb0a1d3e510451c832d14a25fe53e626b870eb866676ddb02911191bee0969db1462bd137e7a9c9471b54f2e116f5f6b9a40a88cd31bdab2880c362a2fd07d43b7e7804aa89ca7f5c1b17a1bbc02953e8cdb05b5cf436676123b8608453de18a6fc8544d4410f6acc97de611dfda200ddab550f8b11584d384c4235e35be0d99ad06657efe1549e84706a0b9ca62e98d10fd84e09f58c47180414ba94354e5e13142bce71b6219097cffa79d142a4f5bbf24ec133c53104d5e52f331bfb6301aa0815c68a2c949b3c462642cc004192df9ca97e2b293ce7f0b7d734eb0ffedd9cbae236a02832aa7d70948138a6bc84a3dfe450b56817f144505846fd65accbdab7b7abab99d04d8cd86193a01da1b9bc46a6420e31dad675dde25732de885e94af1fb19c85e83a0d85ba3773d7b651fb2c0e5476d0c3b83e5bcb1ad8e92f7bc46100f5356cf6a6fadb0b17139f1216c5b44ca7d93216a59a6a5d9d2a9f1e9fc4b4dc69761546e245e3a544258599d069cdd3dcc601cc21d5f58d73d698163ecd71432f80766b3310e9759d563fcd1d87e35566b9ab3aad316c92d2209d7c3430fe172f5f89f34f39936cd52547a4a3c5839aa57a90c67b63299e66ba43a241afcf1451b36f7269ba57359ce5b979e6d424765b8b9d6d33276c16b97d4cf75657b0da537fd36b5c9402a6a104955a6c5add547aadb661c4e81c99feb6fa328a80d2d9efcd445d17a1052d608a3eb0a3f60b055d6e3fc9037cf193c343441e96646eda0b66a2206b083d5c0ad80923f7de57113cfdbf19528dc2591af5fa8949f660d98191c734aa93740e549afaf906c85500a956598c667ab25ae476e24a8ea07f92639ed3cbd9737f3deecc541c5ad38f254af974f60352d1b6e4ae10cc5d9ebdf581a34a44119698fef8b46dad808ad2ae1c465e4a76d425eb244c777455bb820c380756655fe19f1214d9c022125166a6a121a388b48f0da807d4a9b9f8ab814bc2eb11068ad7a562cbc43e358b866be5cfbce4e3e9e5525ce3e4806413955513601228ccbba3f3de928bfe9041dc822f30e2b73e989cddac2b1e3403f1bc084ad46e7f1535050b9787ec84ce0cd25db77ff820dba5ebeeb26b6774c700f0d41362f9f3b5ab22cd9f0f63fbc035662202889adb4756269ad31bb865c85c245954d1930c3d29447138dd3d37321a636e7053bff089e8e003c115234841f897bf88c8de208ba5c7f992ecd3023f247d437aa305ae55a27f359ecb256b3bee111d13fca030738dac2160d60604d86d3d98363093df0a93390d74abc9d00a09a02b7f8726b65e29eb4d15e50b76331114a1b4d5281b659ec370cbb54a339f6e8f528d593ad6fc583b2b3282240ac535a8f9c052f78a5b20657bb49d34381672645e113d78e93320071131e9e507727eaf43b554373ba87c9b3bdb43e22c7c369832f329e841b9796ee193a2457870d6486670cdee7e9c7f27bb3bf73f951c8c3676bb51893da607d2026e5e9fafa216e8bbd1c25e5bfb5ffaaa076576371d19063064e126015444dbbd6f347e34ee5272e2f4653545865dd7aa711e3ebe7cda617bd368e6b5f41457e6030e5baec99efd4f1d302575f3e5426d5ef146c3e8bedbb2e398156949d5503a42562a181ebcff58c7daa7a8bf4bb07f1c33f68e58879f95ef239b3ef4896f4737c0e99c9efe4fd739bc242faa435c669f87fe1f5f7c0961740061f735755d0822b42627c7c878cac8d9c7400c2e7dd17e041bddd2a57422fa240a21569e3e85278680edf10162ec2067bf401e147baeb4c15a4e300653ab79db087252412084321ff3a27981121429337fe153cf69130f6b7b5147fe8b93ffe40060db235e00553d9b10cf1d915049be3539a2ebf9338f281ebc70ab38190aaa2d26e437d39a0e4dbcac750af08b714073e52336fe83a30e60f65a6cb573a4ea6e23c39911ada33b979b617e7f5f8cb346a2fa1e5e13fce90082309c7c3b45d483544413f8fcdd5e1322d3d42abcc7713a9087766aedae4a4fbd5b32204ceb3350e8c1256e1b6f0224066c82f9664c915d48e76c5d359625a0113c90b49567ff850274f148a105e77b95a20609e581006e43c7bbe30ba52cd368a57a44ce8865dd36922a4499006c86ba730dc90796091aa0a4abc2e607c8daf7f59a214e6f4429070e5cc94040ed17d5535545e0224866c1b1f08103cb48ab626644cb047ec4bc219758a73bbc089cd0560e49fbde9083a47e66c29844276aeb52dbae7988c3f59f15c40ddd7568748c37c0372573bf77fefeed4891d38b1f6643c00d25ae355f5c85497d922af9a34b674e83c22f6ffe1423e9dd41052ec4a7a069b3b91713767c6381431690af0b8c29307fe72eb773415cca77a23dab58e1ce63532fc2a4b984a43846ff50947f7f638e04df61a0eccaa59432f82809986fa75963ed8466bc612c25372dd50ab05a5ec58d6cd5a72d396af74a2c528f342a61d1cee9ed1328e6f494bc027211a683275aed43b15d1130d2081a1d9a11df949c9ef19bd0872340ca91d5b6902430e773f56885e4e1dcc721f6c0f14e86ba95903561b0a566aef7c94d69d9de8f917601f42c49c35a46f6f43b2d641aca7ca404fcd4644b5e5a854ca1345a580d030b31a4eb2674039efbd9420f0d857ef8e1a919c72336f846035bb6a47d84ebc40a9ced9ecbe22bfcb5b1a17940e68cd7876916b2cf7910bf623ed70d901f8eab42ee705e9bd7e5d2a80587c17c71548f03eb0153754e817416e86164d2b59f73a0456f4376a4e381e158c903caf4d22a4d79b14f63841cf3b22314c9946379dcffaccaca67c8803b6287773e36d098268d6662c606686c5a1da1d212c35ec39289233644b7258cb42c5d5b4fba5dc5a9eb644efeeeefe6dbe0b1a382b11eb223bd59888dcbba4dedeb9e028a96424ce5cf359dc0913c01d23f1f45b6911ee19a997157e07fe4ce70488a43d4c5449d495ca1e2fe6828eb09a299d1f9523739cb0a495f9262361ad03a41ac86b168944611686ae41b65e5d36a88f81a02b0237ffb2ca285303cc7dc3e7529f8aa52fdcaba8b43c246732f7ac98c83fa9c91d3b1dc8aae2296b97d2018ce5ff54171ea1aae46c4263a4b4d5a7d3a0297189e3d07a9ee6295e28a3bc514cc099b16f2b43d8092b97226bb969560b639de4242ca360db078fd56656e234ff7164d4e5a9895165095657705068fe7610acae9bb3a8baf752ed64615cdcc8bbd646bed9b904b764d0cf01f631852f446825ba42264717259d2225a91ed64b5fc2000b073d76509244586a28ee945100d21e2f7554fbd99b80f660ce37e02323fda47047f08e28d40ecd041abcae6a8730fdf1cb532d86037c2410de770fb489efebaae46d840a551446eab7050a4c97406b3f3bc04d1cfdd5113bb281f4ff31f1b4bbc864122a68449b05a6e1bd6bc90dba289e8955f9be129f26afd90aa56e788129d1e8f08bd0195e2a05f1731253f6de945af8927c5aaaebb3f0a8f8ac9ca4476bc206c6d6fa227dab40a3768c4ed851c5beb5d06ffb664d45f696a61fbb05796fbe9b5a5ba6d5a930fc10a58e1005ffa117c5a4e03fae202533de6531601c2f9bc96bb63df64634608a3dd6c5fe877bbfb0bc23f179502de95a33f77ce9710b7ea960507e5b2d041408c614293d75cf9827ec4ce39e84d8ff9dcd09802fb7a09e9ee92cd60c0e4206fb5a6b2242a6aaa42122f2e8a47047a851ed70ae69ba764a0e1a2ab77405c5c1879e749a6382e2ad115221cd0c9bd8141cb52d1bbbbb01be463c3174e71b04cc50167e963f3f8900fb41c94cb898f49a7d1013bcac9c1355761b8aed3c6481839185935515656fe114e0c38cd814e4f33ae681bdadd028a2d5b1ed8a131ec08f9a49b1918f104ca0a7e16b05d9b0ebcbf69b42b5eae4599ceef842b33a07b651d47a781318c0b857bf9bc9b06a6dce22743a8c10a3244d3cc8484ef9470cc4063959b365832395cb1f4b2b0ff4325936c50ff22f80ba4bfb2fc36c3246d24ac012bc90a0b4ea8485275a71a241a9da4c8e95623c0e100cc942c63d129e47f5ee102be2704317202b00ab3af01a8de2d4d55827e056948d6f3c5d1ca2511c76e4d40292483454b83419e9aa8962c493161c2483219f832e621d3039e3144d54416ebe17a3ee6f27a7c73e3ab5919b0a54c455d79062dd4b6e01621739fe43911146c821b2522ff630f6d924cb3c4295583ee26fb0758550e8760538fdf589c516b7ce346f1792e97ecc610785597804a51398013b9d7c97ddc34f605369e9584bc930eb86e4e8fa12955c4ed9a68203bebdffd804b50f3539b9790a83d3e598449c82db268a3f46358d20917265fe5a2f7bdc28cb0d322e14da7c18ca01ed04cd7678517c1128ce9554f86b2e0a9175ab4fc95b1e1cfb3f97025ed86760e2e721355cefedf9b5df257af50307954978dd3ce41078f3eb8861d92edbf4657089ec82250b50b2284d8408e25f2293cd12c9f66d3fc05fb30eca5859aed02e6dc0b9cce69f9669b0efa0eed9f33f95bb23f07a896fd7b2d8a4652a87e151a020c430f5dc1a8a7e21bb155412321ec4cecfba5336cf777cdac0490896133f1e7cce6b62e981b52a9af4a523d846a0e59bdbf28510f04891dbac848067a2d60e5196047a45fd0472e6aed933885a23fcc11d13ad9a9cdc1fac6494568d1d17b6dcd7c4d5a972e67a6b5e03e6330ffcd7e2dd9cd89e557e5fe0af4285951d3c4e62b5b201ea45880f0bdc453675a4dd760b5f0d28f7466165bc7df1f3eb11b10d994d6cde497e47f19065467c61445a191a20426f7264ef7f39ece02172132c47e93300a8a5bb61aa677e151fba4b65d68449fd2f139aeb471f5a4bd5ceb60da14ae79e3a29ed0c590553d3b1b0006b8d93fdcf48ffb6694b12f568cee34d5fdee8701146cae3d97402bce6bee5aabbe108827578774578d57bd3bad3113fb8b0135c140cec8ce1a77a6850d0901e99655dceee2372dfd8ca02239e35b39a62bd62a0fb3cdf7916ecefa120af3cfa9b9f1fd18ee292b73d47386ce1dd897b38859d3738fb9486a715e71f0c2b57f0706dd8c6334d5aaaf69362730d10ae10c97bf7e7ca9a988a29396ac79d0aba3fc9b6f296b95f7da430df61eaf99b64e381612ff5b99f3b653e8efb8fe6722ed3e6a5a3cf48098d722a0fd0a4cc4c7e90ef11d39d5eb09367cf0977acfec80158154e251d30618f4c820c508982603cd5c22ba0e3dfa933209bbd1f5f7a02d67dc6c90dbe8ec0eb3b5bf74812a4f19b4f0f46d2b6ac3461d1ff78e4c948350bca39a0c5c7eca48bf490b0f2f16a09691690aea31403bb620f45c5e22dcfa93b4d65558b79fbed62a21a7424b01941139b1c82928b5839a6482ff480707323587bf35a40e76ff593a7f43a2072dc5cf92912ecc32c40f063c6e214b10bc6815484644757cef562b612de36acc984ddbd7465e318681500e9ec684ab33527646b2865284276f5ae80bcb5c518629be360d39f1a1d7fe259b630791d69ec9a30be6af5194acd205e61b8b29d09356bd78ae650cd72135a3557e703940ba836176777134de085614a75725269c9d055529c59ece6b5297041eaaca19e74dd8dd322fa796af51812a4b6fc5c2356b05f0642cb40aabf4b09f6fca46e8de871022e37045a4acdc121f0e879e76fa9ebf9053749934d3b03d43f18d34fad3e56a7efed4add371e62f44e9899a23e1b6dc4c8154dc2d86911523cc2410c1118d1d79c1b63b730d3f3e3c8ce4494803bff06e328206c34ba193781927312c1887697576dac230f1b78bfb148667daadbc7d648e773c495170dc0bd1d07155fc985b8a29a7216e74509a6e00e1864d8eaea55f21dae1ae24e7eea4c0a54b9489329516c64ba3f2f691b0a89f34c715233d925d82a628154cc261ddf4646dbc90fa8530dbb93fa877226480cdd79b0e65d02c0eb503d6b1f2c2936f2827ccfb5b913519d8388052d121b4447f866f64a8bba8a641e39635e95e54ba63e312d3c0836f3f7e0be90a2d19da9d974d6a3a5c1bdd982683f0e201a28754d36bf164049955687f427a1aa9000f7a649feb76a52ff0eb8c269505b72340f6951d52576a9aa0a7c21fc23e50e29bf43775969f973b77d3f6fee430086f8f84a7ed5f7f484490c246b0b54397d8eb39c924c574448ca8ccf8901049857f0a217f8490a836400779fc6d56ea6a45ece8cb8ee60b391acc134a841d8989c86f0ce46b442b93d0d88b2aae2cf36d8c962126e39d821348471b907c24bba4fc4616f4aa8be43d906cdcdd88c550d9f5d628d49a5dc017e557f20b46ed1aae3af725666fa8f8ae126317c73d423d49491a02c24d270c6f6366836867297d6749f099df391060949eb5d1702ad593a4d60c40d583fafe0bc94a47700cd502d4811000c924f60c7efd33e9084acc095118cb9e247e871058e27c5345cf2160214c8655f4577ab10f75ffa968d44ce1ba75cbb5b75d8c7b83f155308fbde5a05e669198986794595256208d71bc210482083a6a28728879ed6c651537bc7db62bd81aff59e34284011ac52139648401d7b5a49edc4ee5f747d0bc2df8de278f95f6ece9bc52f7561a34fb4b0e65928f207be6f9baccb0b6bc587977a7bf6d41299ecb33a58942486be9810da6da392abd5c1a8e65a982ef88ee3aa6bc884ff35c44d353886d3949288fb9b8280a6c6a5abeb8a7c1d8ae30f1b0153bfe383bffa6967dd0c634ac168479b21720d618b6b1d1c4d2f5ec221d49abbffce1c70d4568e6e74cd6f9bf70b10bf5974d6a499022155325cbeb92d237359903fcfb3d9dacf1895b8d2e0bca411fe51291390d34acaff1c3c3b1fe26746520fa000f443985c362fddfd8137a2a436cc0dcfbf81d8615f1f1726d1dcb8b6387d8808eeec5bb4ad3341bca9d53833b8680589e735ba62b16eb43b56fd6defae48d2432a291ee746d1baa647194b1cc6db5ca2233c08c6cd86fb14f929de17fd4893128a7d10e841b3952e3e252bb9af72fba0b64036dbbf81c5ffac673a832e993b71752de12c60abbb410e10eaa2948175647d0360ee4c7ece25b2842c5bc9e5fa9e3e8c9a0a99e7fc420ddd0dbde036f2c41606c9f9a3db8fdf75076fa1c457c259d4da1c391bdd5e6de64f1a346fc32b2c72cadadc9735aa8b11dc3509306d9826551cc69d86f44aaa1202823c71f43863af21ed80482d8af5a8cd6ebdf728e0ae546d1e90c97c519993e6e3299117a0e30d802d808e96a704209e0607028b1d934f4d15510e53aacc0d1652ef7cbd1401dd8c8c1ee2b4787b3b21b761015944697e370c8ffec02e7f80f05d1665af4a2cb3804f906542b01d2570a1a5715634ee3052c0635b27c140b1b207c4a5ff1257dd487f0513ec447f994bee24bfaaa6fe1ab7c8aaff2217dc4a7243ee5af9bd721feda7039d15375ad72ed774574b72d53657b6d30a5edb2ff7c98769fed0aded8814c90b1b9b0ec75a147cf294fa5c61cfc66a3dd0d21e8cb80871770cbc44a70d2e5b0d42de1e7ff47bf6d226cc6874c392fe2c4a94e60e160d6df11400745f4ba61f6d589c50c0a758dd452e2fd08c421dd34583358048ae85fc11b32b31b6df3f4c03fac5144b1537c275ff7bf524e0fc3578a081bcdfc7c0e30558a71f93ff3edb74da9c3ffe99f1e4c038f5e13da11138b375e2f07d00fc4bbf008a2854a12da06999aa3534a9c11254a135a4b5db1c25039f90759525fa371379d9dd626221c9eea7c4e68599207643c0a2dd2e67b71063251c2a70fd93ca9a9c3c47287d4da9fdecd246407ead32d9c7ae82b639c77e7588ca55a8b8bf85b5895238f2de96dc0e6079eb1d5c7fd9dee9af1869b89ec3b83388814455649b98a9c36f5f8277115a141da2393595220797f98dcd41bc72ed6993b7f04dd5eeb8b54880224b54cc8076ef089d2794a6fbfa39dc3db85570c1d24020174cec324354a40615514e42739a2a22c0cf19f5a46a9e6e0ffad56b4e6994d570586615a4d98a4c159fd52ef5900fd1ef85c69af18170a42f589b95820c4c68f6f4a19967eea7c1152ef240a42d97b4e4abc56ad8b2e641ba6fd8440f7453fe93b7be826ddeaaf521e55c0890b3a81fca709909b964e2d33436ede7f322580444120c1a668b5aea9a84a3618e09569cfb102c9e7abc83f11a61584c8f3c5b51ccd6ac38a0be4d94608c6cd8bbe6f289fc6bc45a2c96df218988843a0fef8c040a0d0754e7156f41fec37d5b56d29fae0480b78455453b2c5eed7b71c26f9163abec31ef64faa6bb70ad64e077977e65b85fcd7e72ea2d687a6ff0757612e88d26eea580c93a5b6edc8e64704b64f4086d17575ab3fb321fa43b74d8b932a10dd5b2a5cafb85145b9b0699aec61aeba058c24ea1a589a822c73b4be42ce33ce16c0cdb52aebaaee5a28dfa16cc75cd8be868e589e2122b6f9579f62a0e8dc1083618577b108d500b572dd4c22623f1ac61f27d3e8e54c637b7b1c1cb8de361f3197ba46ebeb87c96240eed77d3f077695ec20dcadaca2f5349e10518244c3a157e7f16019263c10dd3bef3f905323c6be68b4835523e7e05981d6b878dfc2614041d6877d7260810aff44a7970ca26be4ce50e8775d875caa6b30826cde684019d6f25219701a83b55594f78ce62754b53eaf15112b9c3a9fedce9d462d9aa68bef50b3144d9b121cffa989082d8a706bce4e3c15fed5b282d5d6ffc2402e066d4171a3221a11e6442c0d9a1af3d2648cc8fbbffa9084f7b572a801659cdc738c557f7d014e6c61c6556653314fa75ed3095057878c590b91ce8d158df55ac162b0fcfbe5a89515b18123a00495c9ef31161cd6e2cff9b696d51a461c6b2c9d1427cc49d9e98df9137cd72eef1937ea6f8c921d77d8ca18565f93eedef9a97de01611714c43b42b39f5c39863c056a251e634251a1cf5b569b00de7c48713475489949a4620d4732ac8a4808928178a0af8a507e0b7a35dbe90303ef600acd7a14b1888d16dfb7913c64464ecb246d744b0ad3b87f18f0b540915f53c19793870e5648f06cd4ebcdbdc51f29d291f6b4da085704e8b442cb4e1a142711844142f9c43b72990f0893d1fcd0061d18d04787b0632426fb214329e32ced3c7a7f3cadd1a002b76c1e04533c91ad4c25714a8752273713883096c0ea3cd6a35ec002b27ea12c5d196551a29e188535054c5d4c347641007ad198ec49b8c763217b1f3273b0584a15a0cd474788e0e27d776aabb0eb5a44b63bd8e06036bc9002c1585f5a2e1428f02add4f83680a5138a2e002087c135edee9d7cb599f12a6118cd71dc1d1dad6126c788edff8946b3645109f8e587a452268a0165763f82ae4a5bac3a8820b8ac3eb83802736046f940d1ef59baf073b87844f0e5da296d0f437a6036ef692a41b6de441fd9585aa89577b72466346ec8f62b30ae3141404edb34c1390329925b0df1e9c98fbe27d24b8d53ed043cdf227d57092ab9c05ac1447a96ebdbcd82111b6b9142b58149d7a52df74fbad29cdf30abc2f46c76b9c552192860ceaef63b2261a48246e79e3e3c08450efa0e0718a266d2ba58a28070021e1d096ff976868898b0d75b3c9053cb6d68ef543618ac30ef2c076c81db594943372d65157fcea3d67812d5b65f17b681018f68d2def272239d34c1769af56f715d515448a8b3ab0d39a1e205ef72a4b88e72b7b487b5c7e48b298af308300d3d5d3661a66a3d0c46e02cc6e30094fddbb00a42986465cade1b6f967d383f02b416779067e28a80ee087d947f36d77b79bba90689aee6d39a66f7150a9e6082007bfa437c3a8e64db0a9433f3e5dc3d6f66d5a01022618242b28fe6442876cb310ed62f8e5c2465664e00c87431bddd9f8b9d6351809dc04cc65d5bf160beb9ed669198c43c2f41ad9c3ab7791bdd059e19b72c579f3dcd11d1fa86b62ba795fff05d7c2fa11002d5daabf43571918b968eb21d35a51bfd6ce334d4b8927b7688561955341718ddcd06a419635bc3dae7ab762ce41b9634b586589ac97208214d7a59cb3e33bd055faf0e9c4c792bff2d360d50a4e1a3a78e317cd1f080d18ab12263246838b556c6b7064d5667de0c7496af1064acf5a2c8c16254538eb950af4a53624d7526e28b17b25cf160639315721eb2161725fb8b9ee4ad76a0841900642bdae3ea1a39a31e5f8b39ec0eb6003b6313bef1e51be2f3817d08c4dc3ea37baf6f950844307ff200a4900b13f07ea0cfcc85c60615892f7e6c817085e4abecc77e933521c12fa1427fb223a810a5da2fa7d45bdf2ef49cfc96a958266692c3c68d1e0a4f09a0b1be425424b6d7cedf1df2d9a83937c27540c938970d113430db84210113d65a4159b131b440825110798aefe2152403229c9a19fbe6383703505db3400a1189f660d746f50ea54206184331fe98b996462a75242298e383bc882864ff7d317d24a4bb60ffc50d33a9d536c2ceb1196b9cdf6274b4e2694030427851da5cfa8afa9c8830916eace77cd68c6ff4dc9e0917e73a26a9ce27b45c23d6bee44eec610f946438d28a9e9e8f884a7619e983d1a08c4141e87cacf3a5c15b8a0c0bf5d25b9bd8e5bba4e1dc5f555c07ac4791ca241dc22b7e9032dd6b710af96a0ae9a8e07ca2fdaece6925bcaeda534208351e5946194d0c1ec7a3dd73f6860f5b32ce6f73c97460a8696ee406a7a40944c01dfd7967a811cf5603a3d18f2de393a4fb0bc3895f037b38eaaea9fe6d0f02ca1f94bff4f69083a38b50589fb858869d44c3701236aa8f79a2a202ddb9c577a711d12ae5b004b240ba6cecd7bc6cd10760ab2659fb45be004fc777c6d46eafed3d340f44cd258930b30bea6e4ae7a8b2d7c339312c2410a84794bd98da8e934144765500d505a9e8f676e3625d32d10b1202f323b612c1a08a960f4761f63bce63160d0d26fbdd75f31c1bfb5265df775b1c3e2b7c3df64d3573bea1185b3aedd13af3beb8d810789acbd4c02ef4abb23a23eeb6cdba56016b339941492d6a00ba9cb59d4402931ef863ce3ff602bc45aa7cc95a41daab732169486b86f9913a0ba08849a91e6c3e56838e273c09787395e4644fe762d1b1bfda7e0597711761482219c44079394ee58daf6d1ac5b159200565c1b84afcb82cec55090ae1be84e5eca437992700a8baaa7206277ee56263f3f6806d961a4d34d34a9de72a2577b3777ed9aad31f95d7b2b39397a7e405bb2b7f1a86d81d502736d9bf66903298fdc84cc97cfb2d52b976e855731cb95bc6a0992b86c90038031b182af997d9e3b71ca469d3de8775a7414af0e0df15e90c1e033e533622664b9ff776fa246972c9091e9caa299dedd1b9dc277397d5504b54a23601f6a536584b083a468a3e079afbc47d3e0d46bb3b62affe9548649883e77f106e61c427a8294d983cf500389e20cfcbcaf2387dcac447ebd98e1cf1ef0f2be87849ea1e9723ead778a9bb52770031efd08b8b90f7819bc258a266be63a02656647d450c19ea009116363332131b2048704322cb0cc83e9115d11739a7b3db42c19a3e3ad32a0594131c78844436f80f2812e055e8c432085eb8e23598adce5c60ecaa023a525785725486a7d64f18a5e77c50c2eb9befac86963b28c35a5e7f14202f59252c1aa296d893a2cdc82f60ad82912590341fe41a4c9f651efbd699f026ee7b8f8b73fda64282d0f4b150a6190f0c9482134a5367c80ea97a138c3446cca6020bc9555ed5a69d14c77de22ee8754c7a3c40e29f3874344380b648253018dacf74f8a5e0b8c2f4daed05250585484b4b82e7039ab635cae965491b80f93638311b9627f5363f44ddcf8e9d0ac725f32a95ad622a918257399733a95ece462955b5b570077f394ce5eaa5be7cd6b92cdb04d3a1c419aad31368e059933c100f5d5530faefabee3e38f9dfc70e06f2ec3f4046d3cfdbafea4c90cbe5e272b203b6ae5f9d38493f0cdf662c5c31408ee5865db183101915532e095c47daa547758f2266da3ea477c59ba0d249ed25d81a83085b7c5f975e0e4af23e1c9dc0d8a52fc59935ecdee66334f34c2ee556d8283bac0953729d1467b6278dd5cdecdc7db8fd839e35ff1e4cd05111127dbf22ca44ff6b68e0760a275c8b8e97dd2ced8bed1cff8cfb3f2431378bf4cd31f6a2b8956c8a675cc862656a8dcebd69078ef964943f8500ea1f347c3c39b9278634f8033178a371fa7d9e4774eafe47e3228fe98b35db04cc2676a36be5583f5176aef86cde51637e9a7cc465c7434c0521aed743c7adc6368382c028cf63f51cc0b22f6101f22527f4395713b45a7b0eab3f638ecd9ed1c87ffe1468f8071927f9c72ee0d99a635dc640813f98f10ca8b41e7642b48ade42045bcf755647c8d0e4aa7f645487fdc1e4fb547b10150aab429aca04e6029a3b60086a32e3aba581a29dad3f56db05c134f426a87b016c86018a22b93f58404a61a639a51b6c9c41d2875f088be299085a9c65e33693384b419b17298a97956d6f0c558f03f6fe9b40eebfd351df11729f31dc3a771ae3bd4bd292348e71885794edb1b8d71f9b09d6f8b59d8dfddea49b88089149a68a03f203e403632e02948bfcdb8f375404437444f83d0f8aaf82487b2e8818347ce3a2081ee7f311a039b45d4814ff07c5e1330765317cf28ff050f66ea8da939230cae293e20d25d31027faa6ce3604b401ade1445c74ba90bfbbe9420cc536cb763ed0e0218bd1331aca215ce789757777b787bf7191b183d4bb6bb33c02fcb2b6f28742489b896666268c526db3dadbfede34f05cfb6ca899df11bd2904cd19e5063745f6be94a9ecb3ace2cc17a57a9b6e130e5f444b781f4aa2cf3a30658a461e51c445b60d844c844d5b46f04370b4d9fec86f4e9224499224aa0e65310331dbbe9eef3df1c7b196aa9fc9d0ddb3994963ad741d49a28f8b7e5c88fc2f4d6b7f847f446dde0549efb95e16a33ce27bf0db13a1e68362f1415435caa0878ce141107c9c13dd1ef479d0c49747f8bcf7175e681cdfe74b54f5d1b90ef549bfe786e25c57ab09d5de02ca21d78c722d157d1c9b551044411007e904a500c6f1bfcf3f1c82dddddd6929e2301096f29d0dfa659296f7a9e7eea51294b80122f889e297ae139f749df820daa2287e298a5e0d7b5f0465f8495a1ff8623ae267e496beeffbbed375405c70e707e93ed0f1590e2d8d1adc6c9a61287a9fe8baf0c5f0bd902cc312378b2f3e16d320b53f72eca5295099a4f57dad76779ff889216e316e70ef7dae0470bedf2d02a083b7085c20a70f40698c380deda307a0d24ad7f9e37e6ca1a438b890eb9cdcd3fcdeff0ce1de8cd320f79f0b501ca038263c8b470e3e88b5c6fb1dd494bbbdc1943de46e6d80c97d7b009842501e79073503c60c65a3e30f86b2bfc10b3d76776aa14cd2fad2168f01ce2ff8c952fa7b8d1d841b37eeeea01be2e021e3073aa154753a0e431e8c4a2eab51839b7d4afc197a6ea407e33896ed8db63249cbf1e3c6f605f8175d4f6b1fb8f700a358b63782a0ebc0577f32f81e06da52128ddebf7bd771587e9fa485ff5960d2fb9681e83afcaec3af92405ccad1dfd320a0775350c50824a7fc4a0d6ef62c8cb86c0fea4dee166a4c1640ee162a2be7cf82e83a91fc01ea52aa62fefef346f0b9c0bf7dcb2048f847ee5db45b28a9dc37f732490b7ff8e8cdbbfed044d702f85fd0e7ee69e32d7bc62e93b4ae5fe09fa4d5f7fb00b708dc1b7ee8e16deff18bfdc7d82d5a00c1e2b0b1cb3703ed4a202da5fa46bafb69e5fb411cee1326f27e5c08e84a0904a7bc4ee4bdf7ea0dd3dd18bb5f5086e0a67fb736aae4ce9e87025f0f804cc0c0cfc60e4ad2ba2d92a493d9530c628c7146b6f0ac589ae490b9428385c6538e391f591b6782174d345234817106f5856a099216bb3486838aed33d33a81a2d765ce9e96e26481d109c35a80c7131554ccbaa8c481f2b517c81c2c2c9d66a35b5b852cf6c23a65850296c66261adacb675006b93799b80f50c4b65081bc15ae7ab7d387bf1044d8ccd094bc634f15223c81ae622caebc247864aabb95861126faf982ea1cacdf36b9369335e374a779160bd52c6b02bb048d8372b01ee1cbcb6094dc42c58ef0f38ac182bb6681d5a5bcb09acd14ac48e0f215c6cebe2ee58f1f3342129d191c3ea4ee3a961e5d575654917320cc230c72e87df98164cd33543a1bf9a840ad695c5c362583bac51ecce0b6be4ac0c7be6d62057a6d82dec081a56192c87b54ea7e933397ac05843c5e39249b1536e147932c3e20a1d16155012e34acb9c2d253f74b8f9c6acb0f14a117c2f29879f18313d66025b8055016ba321610596012b5a6fd171f5e5567931e5769dc0b669af2e6c0e1b5f182b6eba3cac1d26890e9b82b5b07eeb75e3448c2d712489d1da71a7292d8b861215556662b8f0ca61e6c2270696ae6329403161c3a461c7b0445a68582104ac4562b0d78b0966c39a85ade2c22e6005c01a0016ac00d69b840c7b418655854ee1067be7087b8035ec3e1940c517966571ab1a160593344abed05843a40d1e104a886a73a48531098b9a517e605a9fb54d8b3c3feb55d278b8d0b84be47a51682ea62ff6098bf4e1d6e859c358386bd8a015e84abfb9591a0d82b5cfee92b6726db05d96f311e6a4d8f1c8efbdf7def0de7befbdf786290e337e1e08defb7d20782f78bfcf4d847984fffd7e4f5180178b8dedee85def7618c31c638fc42ecd5ae9db4b25d7795b090880f4ef407fc2038518851d528d7c29b02a3610a7e9ecd6c5172d0aec34e84bf1efdbe42a93657f9e64ff0eadd81f0491f7f071fe022f4ff71736dc0af1a992c4a7528014e34e44182c7161e5bf0b882c71484efef58a736d7ab462e6544c228d73eac856fce284d8479c4f76eca18470d2e8aefbd33974af5ee1e444b78d9f69f8654155311c27cd3ef0daa3bea0005a103e88914164a9ffb3de8ade23ab27b76d32ca800a5000d42454c90a2570a0bdd47d1fbe8dd61a1fb12a039b4b1d06996ef9b40e806544c8c245339e4eea52d56e0e4bbbb20f87dd7d3caef710ff46aeff08b10a13fd81e7f085c643efe06dfff83072182e09b2d4a75c88d4408f3bda1f7cd4dd181f284eb92bac3fdcfce3dbb69aebb570987defe0f043f77777707af1dd7dd0eb82e4da9f4ab96c8fe5ea2c8e03eab78a23f8027bac3bdfd1e7891072e74ff1391c6c61d89e80fa30e15451c19bd8f19939b032fe2c085bc08840bddfffc96dd6b06427f38d11dee778b6d303f8413919e074ef47dee81ceef0f5b76b2aa736fb7de64fc1ec63a391db88ced5704b092d2e329aa8c8a2b0ecabed0e2cc1962e46b8794cf7726721d8128f244aa7f703fb8f30777fedcfb47dede4a96e6b8e0fb737a3f4e843fb01d7f21e979ed7b8c8ab70db067fb6a3f82e378cb40dc201d43b28855ebeedfbe6d30fa6decf5e04eb7721e295ef7aee3f44a7bd40de8a221f71aec08842ae621fcee5e2446f61c18b8bbbbbb6942f9e56e8b288d299274b2208296d5a1b4724e569beb08c46d897c217225abaf348ab73dd13fec797fcbefd5b2bca927865935ad36353231442c4da1d712a815a5c5a7b5c5e4695531612d1c4c5a4c59694db6dcadd61cab5a1c19b7acb225320cc3201f592f6c63a5da5c44ca7385526dae374d207866e90b43ac5d0ec3300ccf4a116beb05561513560c16b55bee7608995b9eac3837ab2c4cd68eebb6f56549d972b7594ff93e096625a5e510ebcd78a6666167e3029d8cb5dc2dd61699bbc5aac27a72ac18dd836bdcaca0203b413eb8c2300cc3201fde05b4267149948f09c222390c43f1f3b0731d81d87d5cc842ec3cd0445236651597abf122abbd3b5d5cadf07258a5dabb101dd872b743ce86b4c9ea901b0eed95d88e2bab6293dced9590ac92dd5e495dd938519afd640eb3d969b75766b9db2b3bf97ea75a6944aadafd2750aabaaaadacfe645c5b25e4165d0c9c43beef66aad835dedc5e11ae240db45472deb454662905c63ba3bcdf1bc613a558ee6fabd2e44e4568d759e0392c197d85bd323ad664cfebaa59f93192726224d5c3ea2b33924a1b297b9e8ea5ec61c89e919458e66ea7d4ecc475aa8cd2541816535c5cf854570db21077873fef3b72dd75408a2759ed9d79a60c73b75348761e88cbdd4e45391959889d87bd237c96859852720ad1c18e83103b292b4c3f5020eb1aafe3805a2197e561cf83f3c226c6a97604220b93788a9560eef647958c634203b4a2f1f550f272b0c09ef761a7164c2eda1f4a491ed84a99e50bb95ba92fe457ad6ddfa517b5ae3be8bac3fd234783826a6750d03d1b8b37fc2f4755862f8111608adbb1a97663d46ea7ceb2b754551cc0651170d9efa3b8b7c4d8b9f108f0d57cbfd47c000aef7630764e1b02e39d40a98a515db22a6e60ecdc41d723c06ad4cba49c1c42984d5cb8f9706513e0ed66b23fdc779c6f26c07cbfc425cb267afa43899b2287c0807cbd14f72f51fb91b13d07243795abeaae3a72accea4d07ad1418382aa4a162559923c619182417f7ff085f144cff3725a9f773d8804d95eaebc609164723d7e723d82ec34589cbe53d6ed953363059bc69670a534b9d242278a972329d4acc09ab098536525a64385ef4cdb72b6581c2c7aa950b0ded6365bd71e4169076b869d601dd7abe56680c78d1f0153a6e4cfdd7e35c92324e5a1dced942ef94b88d70eb34ce6f2fdf694bd768bca19952a54a4a888e531df34d91b95c8d0e69e92a12bd99eb47ddff069eb86960f843d553d142748b7bd2b39917f98da54f2868ec8f01fc8de18dc2f86dbdbfec849341701e15fd521f85b0a419a7c3f0cfdba7b988ee8f90cef17c589fb36d046ca19e1366c73a5db936437d20cdf7a6c64988621c621c6614f3ac2e64c6118bedfdc3d434adafce7c10fddfdefbb124976bb9169c83439fcf25666f89ed002ae8285f04380af6b08dd76bb6da05ed235600f2148d5d24692b7a70c2889660bf5241ecafb0e9264d96f0fa2f73180e3971650d0c7e7767deebd371f128d33f5bc97b84cde5e2581cb3df756f6d8aecde7439fd4ac3df8b7275c93685467cab7f43e19da48749aea4cf9bf27d15c04dc54bda524e95f687bf095c827d190249966cb93b86f91683086ab818e27a7c94460a08b42609c62cf0d99880f7aca1199880c90789c7b70222f5fa0d66b45c6b9dbae3c59c5e52e28647305385d69da8ca571014202cb75f660629621620601d264c7a9c4894c170c934d978a11ce72502620a9c943e664bb9c55c0cc12bc4c234e5a6c9d58414ea61e496c38713189e142cae5c0637e99739e317b612697f48507962953c0a0983902668839267576419d5a52649c4961b1254d4e1d134a1b13ebcc09257616d1925341c5845ad924c98175ba993acd729879d8263305d685911572314e386fbc8953562566b7c5b453e53c22e5ca1273899655d5a925ea7c53c3a45a5fa459539c5e298c89e35482a93566843012ac986bd7e9a349aea94898d5121e2698a7534e94a53051569877ee989183648d8e3267142f295c31af7c2d3dc161448a10251f496e9c32a0c480012529c7026d8a8e8987cd39832c37030c992c52463069447982e454e1ca94fa615ee1c87a322377e3498bf349052e764c206e86a03963843151d8e55ab4e716bba5a4cd32db504de9c8d97042a3891325d32c8f590485d30a9c734e9adcd39879834b1609391d5ce613132e22e71510b3ce8e1c0fa71a4d609c769aa840e18c8609e7979a5c14191e5d70809971bc4c3a4ece3a5b391841cc1d3dc4d8f8c2448309928996a24e939b34655bc6ce3b615cc0cc305f6712947345e206ab8ccad4126532713aa5962c9d599620f54033c1ea98686ece1f654ec6b0849d2780e5f8caed8062d640720ac1f2428523ea2473cab950b2748212a47308da9c3a70dc5895992a8c9956c24e1560279aaf2e50cc1f48cc28582713aa134a9498d3579225f34d1224d309da8a3a54dc9c4fca4a1833a9849d5460a7d35715282609484c2f5874a84eaea83388131392a5282448486826599d9c0c37616558c6ca849d5160e78eaf1d141d48cc2c584aa84e1b51369c4caf234b269123486715da69429d356ed0949947c67c842d819942be722b4a118a9a5244b226eb440372c2e9917b0165aa69c263e4c539c5c88a7cb66839a7148e6ca8942a5cf261e750d1000043170000200c06058402410c2361268ef10114000862be2c46442c134ee680208c622004001886610000400000601000611886e15908f500e4beacb60698df1b32434dbda00f4d16aa8c2dfcd65a525b01d6075e62a5b12598a108c768568e58d451a3a4b721e00eb1ec36d5798f06ce745564d49cda55e713048205bb96e0ed8224c8d606c598c30ec676d82cbbbab8fb3dc1b88da47d550a80007131999111827cae742b9ab48025ae05716d93db30cb1334b350184a180c419508ff5960f9489a54981f5b46a2d25bb413995edaa5369348b7f4cf47fd24ffc57149ccf427742d5537d87037a2262366dc4a294d1b991209a71862c4ace3f8bb53c91113ad3b2c06838441be4320d8a4dfa904bdef8c7cf7e3068753499f92494e0dcb68795c0f269d0b722d6567fc445c478398eff645a7e23e1af6d69526c92d48c6e455505bc2549b271ba88810b574e9e4449151a9cb14824e14a984b8964b19364faea14915712e427ce9dcbfe1ad3874f30f76b545411d5c0bb0ba2f81db3afba8e61f9354a1f7971666ab98adadb3c5a370578ccd4c4b63cb89343d829cb7518810cb5ea55119c7492958cf58693307a0035088fa47d8c96b4b290d4c6c29c54b839c139275050d1ca504e156dd768236c3b59e59f59b43495a5c0d8a9abf5b29e32c1d73e9470708e5a234f9a5914e80686f3d32a2b131d464a72016a7fbc3fa2efc35be0af542c947519909995cb1fcee90e69fdec524d49207238cd074e6d8635bca25d79bc1802265ebf711ae13c613762f6dc740e5f880216f8fbdf31050061e02582d9418fe3b86cce520c8cc90762d46073cc70f602394042fee81628dc7989dea1b9095825d19438843febb84ebdc06384a52790f86ca82d11e4a667aff0eaeed5719354afc82b633bd0aa359c135aa03311a17a3cfb6a46fdfc0f518326d5066355faeb4b7c84f4b901a70afdae02444a69bbb78b9f7a76f2bab2d8c3e303d464f7abc102391642bfdbfb13b60e737f71847634d51804ef9b4561fa043433823ab5c383d9f0c624c8dcf5a04b8f603a4c901185387f5deb9c40bc7ab264563c873bab0e03a42a701e4680646e9f621259c0b90ad8af0d536291cf2a3fb14699a3976718579e892fbbf35af66a2ae6511aa729733803d35321179e55865a2f78ce0cfa4cbc3ebbb80ecb9d0e43530e23a5bc34b61f9ea104d1021784dc4e2249b11f55a2ba5185a8c839ae8ce2e1081b0f5dc3cf9743601974ff330eceed998131aefcc50dcefbace296c2cff624364e6286a3925d82dd011cdc0f3bddf1ae2013dbb1bed88f159c6d8c525070557eea23a36037bac966a56d76aef0db8a079307a7214d902d2edfc874672d03fe52dcd2684e07d69940284908c92a0015b3a86aac7783202554d8d7831c084b71a659318dd86f55da48f44a0fba84a0e0b32e17fc7f6945d072322b128a2d0cb9e69857259f83f622b23dba00fac17a13557e9a6388b0697eb5f65370dbaec170be658d9b9beb45b54ad17531fac182fb5f9f058cdaaf2db5c9bbe72a4fba8271534447661b35128b3a033494c59a02d6dad156b49b150dca7075236a01b7ab6c4705dafdc358d8fa1dc85c9511dca3b9641d4301266ef822092afd4c827401f95adb81e914bae126c00660ffc27ab1e1c28d8e57ae152d531fff67271843e9a2e144a490de4fa67d118d6aab55b623bc2a886e685221a20ba911b489d447ef66100e79c07224f866b2a6170515a55d52ceb3ced480160e11bb94277344cb1653d0b9a37bc2d5b55655670d12926c8c1fd8ec28004e8649c9c2e0d6462a8ad8b5147981c6e5ff28e6653a178551a7d345a513d7953219e0dcedb918df1d86340f19a6ca5982db60d592b16c565b4a8ff0396d0b640c69143a052193ec6c70da17ebe6b15beb7c56c00f8b5e9f55d550e10a6d033870fa248450d0f041beaa0a61ee5a6721d81ed6f9488b6fd223775021ddd633bcd4faa5afa88f3217206c3022900b6fd7e25a6fe5baa3b9577b418ab57e61ccc8643b75e86a0d239a8f2d361a9bb92c0aca0fe09ae53cdd1bfe737d448170cd051193f4b601caa59c3bcc5c8ad370e74dee0c8c5fd6cac567716699f141ccad2baecc4bb19237c2d371dae86d97bebae06d1791009842649849ee64f5a9e6ba4e930432cdfc974546c2154acd2f4bc179230867f0bebc622993d204e8443bdb980c014a7b80e43986d9aad15e5d7de59d1f060a14b925938b94ff82a051eacdb8861df0215a202d65b362d169112b2b94869856b3106c77ca89f699aa9a017633bb5f39c36513dc22cb760e093573868ed3320ad1c06c33bcba802082aeb5dd467a40b6b12d06182605dd205bfe6ad81c4be72015fb0cea5125193f1d456ca91b796c6985ea8316129b65fd6fae2b6e1a7b6f79870a9e236ce07ce44c5dec830cf41621c1ef33268dd7a41a4d264d7ce919e91938557cf0748b4a5d6fb84fc42b23b75f3fecc9cf5f4f50f391a9097b90b137b5b8b09ab26624edf1dad18ca40341e5d64cabe8898708b2360521c8a5152c98ae99291706ba5af4285ea518936fed95c1825713b9398870512a39487ecc2121098115d8b66749e691b6daefd0c4fd202727a5845fcdc0244f154bd18f622fcc21a1d690711bcbf71fdc4ab48a214c32e05449003741622502a24cf81e87f521b6876110f0669518037ca040484afcd5504291bf6149da264de4dc41ecd3252b788ee32084184dd4f1ea7ed54998bebe0db79a08bb0c164ce7c37bcc100b8c889cf222126a0828ad628c377d490ae41fc04c1e2139b4887052de5b445127a35d6a7a5c28974d3f5fc7582f5a79a7b30d10785690616586dd70ea23561a9046cdba36240c147e912ba6015da11595d8b675768551b77a14bf2091a8f06f25a4cbc985c9c448346563388181eedf0fb0a451099e97d62e60bfaa1ee8ed26e8312560b2a9156eb71bb1583b02099da3e033753fb2bd1f503a46c3aae380fdff9710f8633ffce48e6765a94f0b5b140cf35b776f1143890567f2447b9d8abdef9ea50b2e3156ad9f4037c251f726dcb27a4600ee9a45e5c2a631f14cfa7925be6c6f36002ce174cd8f2bbb7ebeafbbbb91ca5e61012c4bd1306d762ac18aa76eeb31b6f89dd0694235b58db61011863c44fe501419d0df7ed6765d5a3455d44e52bb7e2cb3b1a58a80ce120b7e2ea905ef3df61b61e2b8ef076ff3f0258d7fd8035c8440ccbe92b45aab92fc1f820dd1f0fa35fe9d62f17864b7030395a1d9819a833140697762c5a2fdd8af1da2dc3a337b56508e7cf26486844b0e1d1c2420614db663d81cee9715a82651dd15654681047c57ed19f6977cc98ec102b4680f7dedbd96a017d75bc338114a454a573832d3aa3113dea7e28a34fa1cd4ec7dbd43b3fc44204cee98ef17da0962c4c726c0a7db14423e7f0f7073946523f6b435986f9275675f5c1169548488c75c1d0b38052d5ccf0f37b69b587c565723b88725b3ad51d5edb549f28a3fb36d39d892f875ad0eb0fb5194ee18c409fe4f094a1f48dad11ae90e5f2b0b23d41166d8617f71f63d3b1e3f91f6cbb43df61115c4ecf86a4b1b1e9d59e417d75a8a30bfeab9f21d2263fddb72c87d574259d7dadfcb5fa9018b5e67701bf99e0ed7e442a11c70e455c1dde68a7d586e8f9531b059219e2d7854dbca01ad4a2cafe6cf8b259cb8bbcbd2ace7dbe95cb09bddec5d333be0e60038c221194c92d3d76c7909ef5b1ab015fb87c3854f78f28cb1afbe0dac91b8cd2c16e4d050704b6d4e41d33bd949b10f51f608ba56b5d5214db13c4e4bfcbe6d568f6e889609fefe7f1350bb1ad2f8ea98b4fc71e35fdeac8032c31a06c44b6718e9791ed9f78d42e04118787990cff5f57d0f810c02f69e69172c55048b911791f65c763eb7f434458ebdd8532e16b7df4e76ce391dd459cde3bbc5fce9430f0f2baae3f3c97476978262b459e495fe807da530298efd3c71505bf8f199dcb186ac1cb34d60dd00f7d7830ce3cf63a364ed3def7625dfbd04d68d6a97fe75b89fa46a8981b991c083fbdbd7dba9c0206c0fd11eac26b1cf5e3726d24f06289bad707c5bde7b4578037622c338827cbc47619205be17bc4f1a9fc9fddcebc20b90870a5dca846b8b57035962e19d6100f37907f0c178adf6835d74d4de766501c0ca83b9005e8deaaae75530665ae4e04c51ef7f2aa6e89fc3ea565c99fd23f4fe3c96dc24a49bd5251586a902cd6aed213466a514026ee0d1316aaff6a246bcad42517b7e4752b88ea9b879d03d5862514d406b13b5e599380d93b92bb93bddaf6c488904a0d5a5833d31a9b3f5e6cba2bdd7892165a77039ce12cef6984e478b1b9f1745328e7c58d3436778631a4742498e1d2e4ade0e491d95d9a57cf147da73493df961a525fb1dcb5e8a76e2ab03513ff607ebbc38bf2ed7762aec933d9d879ae4e10d7eeaa2df32f8f4f4469f5f02d3130ede92b68c4b37407b0cb2623cdaa50d91da47bfd474713e5eca09a95861c5b96c154303021bfc550f39ed3f05c14159a1f1317793a1cded6bcc454ea3bd4d696bc2c0b8b1a2c4a6a60c724aaa2fb7a421f49e80c0f87c814cafc89228cba22238980135c3ba7f9f66e202111382a88535ca95abb0fc223a08703df252722ef0da5f86d8a039e9f9e36f13d2f984e5467a820dcde98431905d6dc5ae465c585c08f7cf64f21effa6713624d680c95b77b91a9992d9413dce9b2f62b4115560bc1c78bcd12614b4ba30f079992efc7da7a7829dbfb090d500ad940ac77baeb1f5627431b4d5ca51c79344c019118572d9259609e13eecf1d00fac42c0a02abe1a2f161110a9a270283a2e00390511cb4551ce06d9bc0e1fadba7f4e625ca47851df21586578cbf970c8c91ba501cca85ac53ad072bd138b80c2a1198b73290a8ee27701e911ca7c77e99135d84d2c62383c2df02b7c8980ba26af8610d7685600130deab0c2f1a93f8d719864cf801c3cb89ec4e4c6b07867d0968f597f2e3244c69c21ff3113e23ff420f7a29de62588b104b1101b7a7c76de3934ad58dbbf067576dccdc73cd842fb5996736be6726507c83ad0a57d40ac5fe9ca81cfe22054f2230b7e3f154da51f07cecacbeb3e4e99f6778ad681269d90004cccd681e8076baa79398315cbc11da93dfa4d08ef14dff65e019eaa22905829cd17c6f7ca79e9dbfafe8ecdb940640a855fe13347266aa2265e506bc821bfd5341f809cde30f3ce5f00cb5a0890dc16dd104f442a36872d6c095f52fcfd05dfa44a4711fff2a57440a77e5db325828dfa0ba9f40154f596cc8b5a8e1b6b759780eaa39c053f4faa39dc7ce5bf0d806d5f027fb46c658980e9f8de950ac8ed0396cf7c93cfbf20ca2a18d80c40e4276844ba3553fd77902f7d13ff0422bf400ec0a8fba32d0de30e0911a9e21170dd280a033340f389c46c63706a347a03b7f79028bdc57c70c33a1f9e50634a337eeb48be366e991d30b9a44472a0c3a5d233c68a9c0c8784cb0451be385d2b1e66c37f710f6a02706ac6bf72f61068d755bc2621fb67857ff8c1dc976987b024156af3b9f5d453233fffb0e425a074f7716b723fc4187f75769c15fe5a9bcb360a7be1d2129e8567f403c832cd0c4036084d1660c0121d09cc0339ed4dc06cdf0c677ccdd1164456379936914d079acb0235c8fe6f964e019e4464f819d7902f2d059e08594681078e10a5a90278547f00a1a585f08006d01094f8827c5530d9ee123742dc07920eeeca966f64bed919e2905ea2264f82a76329c788adc66a861bb82398f861d07cf359dfda5ec34bf233c848ee5610887060e0497a30dfb42d3e847bfa012fa7430a4279a163ec7f32b20e85130f1d4cf136405faf216d81152a0f32084c7773c433f1a07413805ad02f2dd118447df1e84fb4067da0bb9a18d207127d44e8aa7e111f3c4f13878683cb64b0fe2f966ccb3ae8b8692f70703cdd04f7d2daa190313f2e601111a1139aff1779e88b42c0a2ae22d99ad8e7c22d420eb969e14f5e0735db3eefecf215a9daa5ec8156348d402d2f5195835baf990fba663237af408e1365f326e0bb433608d51fec167e46b8f27c8743450bd101d0dfc176440337e034fbb79846141cbcc0b49d028b0b953e4d9e1f978a8ef54f2f83c14766cc933c88f16042a3bcdf23843849675bac5d024c18783f9ca67a16afd15c3f2e605817436d0b62388106df4b03cade419f2d13108c12be8b8f2427434f05e9011cdf40d3c0f4f5b68824feceaf41fbdf75e60b6f15fa53122267e7941af93bcbc623f533e675f9ef7f6ea2f2441a3c28ea7c8333b9e411f9a200c358f400cfabfc0df0234e64bf008c71310185dfefeec0821d0bb409d3c4378b4eebfedbc3c75bd234883be260c02a38fc0129ede82a265f985bc68b07d7018daea09c0234881bede077440337877e409f28196fcf57784506835fcdb291c9e412e1a0e9cca23bc41c7ef1742a0e1a1d24ebb33e2a91c4f729d68190749a3a243f54234342ff4508f781d4f705c9b54080e2c0eda4e3d72e70aa291e2551c1abde00b87a3f2d956de1742d0f050955ec19fa7727684bfe8789ed20e856721cd03f03bb5db11eea10779f59d0a4f5bf00cf9d02008c2296835f876f2edb4bb23880e0dc6302881c68191f104a481fee6073aa0997fe479da797967fb8e3e3b425aa3337eda4eefcef03b81d61b5a17e47d56134c1938a0cf8115a850da44dc474f68cbf1f1b461809bdffb132cc7cebf011960789f083a46e6c82a49971c8ffc2ba7c53ae84d7b7059ef3ecbee40f6554f3c48596982f98133049847590a55953ec34ddd52edd839e07658dc423fd157b00dc69956b87cf1942e790da66e21103bfb28f376f66370403a2507ea90174b3d3d0f685895172e5b919b33ec7914530dab83c784fbad60c5e9f225e70210eb54bda0a57244e225cdc0047e10d986eeadb4f5dfb2267c0436f183000236d6804b576c82c36783828603657fc63f5a27019295288c3968c6872fedac91cdb1d045d181b6a232c0209c79c1ccad9a3d4914d007a87e251da34d7a62fdac2976294adb88a1fcee8cc8fffa051727ffcf0735bfd3af0cd18b8bcaeb9545cd00b029b139db371e68786eaaba897425b1428530bf7e5e4d0107395ed5c9ad8f010e9c786175adc26e592991f4423fba6020870170a78d03b2601d1133c81dbe740c29c77c42861d4b7586c72c3407c9f9b56db536ea17f8d826895084221ba6b2f86db60989945e2ad80ebdc88afa793b6f625b32be0b3b9d0f058729fe286469eb2a4d4c6c01d0d81c581a29930172b605d55369e072810e69be68f3ffcd9b4b8ef9e49a4712e16d5ac319ea8d374106d4486ed04c226f7a5c377ed93e90dad320f2d526cfbbfac4aa2234e0f73d3e2994c3e306e6081206702391e1af2c50f02378550ae5638ee749eff2592a01035ea84944cbca042be1a1e3a0460225d27d4c440a629981307274afe7877bb7083c3908e3d6af8b0c9c20274526de33e2e8946db884251427eb635ab4e294a153a6af23b5032dc9f9ec8909179e59ee25e4bcc06685079db6916c63874deb6a7bf19f89c4c3fd80d5844678f0776661c85989319fedeb51cfaeccb94b04a64e98c06279271b7d9201a16a1127943520d3f4ee62e8edb7a34a907d489d826eb6c22fa0591019c223a27f7ecfb11f29e9996386dbe67243edc20868a7103b5f7ab166868e985ddebee92765f4cb6cf84e6e05973cc5f9622e8df7deb37a941e5520da89a2efe8efd0b053973bb1df39f610f9aba58e29717344403e78b2dbb8190371097910f4fa834e4e4c791d7b338b4af9b5d0898ed4a6a6e95609f120fb515ec135f46dd894e8e29f7fe503ed20ecf69640d45a56a41a5bc2419ca068f10ffd89916ee90e117f7c03c02c9a9473657681304ddfdea0674c4752f73aca3bcc6b2a590f088c6da9bd65169fd124f5149a2766f26d2e8dda5ad69a0f9f8c35092dc0ddd1c95881972b8b2149a11cf132d34538cacb4b0f7f7b69276cfa8fd4eb9328832c3025820ab721ff6e3851b344b9080d8c4aed6dc180a6f9eef2a9b9e36673893c3db1e078536e34150ca4805b17f621e40326af17131037cbdbfa1752d06c1970bbdce70df340b4cc1d9bbd45dfb97b318328c1cbcae91d04ea645d3773a32e35db133e437e8a8600d71fee7b063360d4d1bcfab5b274431d2aa84bd0fea0132338a8dd4c02317446bc1bee64fd0608edbf00476f7d90ebd1c0ab0315497e34296ee0e93d7f17e6f19e726cab537479dbdc6c8c7e0e6e9f84146b8f80fc4c6162db0352565e8dca07c0c6b9be50b2af9ee7df7cd91407c95ac2f714703634ca786b7154c5139e34c25edd7e362ce188ee6be42d7550af1d9e1529aaa0819faca6c7a2c0b323245dfb61f75135577b8772fe5eb812bfbdb6bc200babe40600d046bb813c3887c1aec60b92bc5dd57276ef5467159ab626ed2f1a79997c9125f55ed24afa901a3e6df5a9c27d95587e21f9528d144842e8d945c8bca07070d0ee1977c1626101ac8a897a135ad928f38adba04c1f238b5973d7b9737f0a6c109d85cbf80183c4190246dc82df4a35bd86872221ad34f9935c791196c9d1515483627a19925a52288fce41cee85278bbc60f861239e2ed339465ded45d7e1893d9f184594acb5ee6787512e410ca4de183cbccd86f6f9ce85ddf8b471f51124d0183f72217a690b851016ab13f48cd671c32000d2c04ccfd598dbbe57cf5415e9ffdd56f1353a4fb791a35d47825aadabc10d87ef35658d8fb57bbeddb76542a72f664a0a9870942e276f72848e1cafa548c795c70ea7828513482470d755edd0fb54792fa029aba868254ee5f3ea718579a0a96300a9a20cef74e37859ee24e019b48befc8d44b9ccbb3a4218b0f7bd642dc0ccb9c391d1df143df1f74479a6a3a9443ffa5e4def025923ba5be08080ac3f41b913a56b84569db12d461c36c56101c27a27f4f25962d92f3e66cd6d38d928f6945d75d0bc5ec8792eff90a150298f258e628abb501de75f920de8f7a7bfb039fe10a4dc1377817b02f53b091f8307f01e5c397d5f795e80d470044ab85497f3a627fde1ad4eae1a3487e69610a9939ae45ac6c8cdbdb9f4244a7c41a38c22512a3b1403c7fe732abe2f2db0c5404bd6b5556e47c5d15f6f3b9a78fe0ddbc9e2c2aa159fffe324337c908df56cde1a9b150603ccd3c379910e4226b5b204d96baa6685bb322ae0399a3211aaaf155b933b0aabd22434e1e6d8201704a527226fa22d75f0ddfa985c5a79c7c546b8018959a0a5e4c7b98a311feb5020f3db946967c5541641a59e9ebc17293ad51381d61e3ec0c1d8d58c99e82439e121e8a061556a3b9fe10ed7500f50dbc2d83dca5f7d771c0dc265c32b4cd3baa227aba4f7cff4e3812c6d89e3157b2e9f85e08b0a07efdba1f030d9ba78d8b7462d165d62e8164e1df87fcbdb33799bf6699711df47e232d52cc5de0f960d7f556564536fbc1690830feb35bcb0aab2766e290a6c243e53ae437193a683e734b808929b6f6d96674b969069ea01f9a3a1a85044e4516f41e56d11febdb8bdfd018008941966127c6df900e396bb894eae617323506d8140b8bf5eb050f08661377388a22d0d80e5e75db01c7e84e569ce70c14f3cb2c877741e2019c80c675dfba19c4434a2a8baf814ca9fe43b23ccd5a4b91140e1ed51affe2516523a72c058e023c235eab0b6a046a539c53d8a293cbf9866c55830480271c2ca02129fa62e39e0e5b41c3557c483ac8d20b4f81361bcaf7d6e69355ac71c356f6345308738a89b55be746e3661304ec0778f1662bba6ff357f005040a42bd5200821891b84d51c8083b48ee6410692066ecfd24537d06fbc48fe046cfc955d7a1cb4b0f355039ac76e50cfe5ef917fe640fde42f7c4981d11a04676806395f39456fd1b21202cf1b22b483858f20368e6894f9a9ab7f94933e7e2e4c1eb70ba50c54c8b7d4a533ef5ac9143a0159a4450b5eb26b5500b82c924576e5b24b29349ac0cd8992d12250ff01998dc090dab81ee570563a64436334ba624a7e37d72bd3b61b18a0327b516b1f63623eb2269deb7fe35fa2ad05cd989240668b5cf76773c42c71376cd676a80483506b5021f52f4e75d567a27ce6c56ba79685ab4aaca387a37d97fa9af968fdd9804c0806bf2ca0527d1cf5b5077cf11489e451b629ad1fa0e3a3ee53e666c5e1a3f98d6d611f2213055956992fbf94f94f2dc5a6c072e1f35370746329d8f9edb84245a54f46a82f37e3eec52efd01dac54f47559dab8bfaed53fc943aa09951dcde17e34789347d33110f53f913f01936a98183ba15ec35578c7e972b168b1c4765434301e173dfee72b7d3bc36a8a6ea9f9cace496b78ff6eb815f80b8d3ba765371807bea0976baf64e2cda391c1c94295e76af1ecba7ec6127488b63b773474e711bda99762e649e44afcb5ebd152b8b2bf55dd97f67d59f5ace01b44d05b1c748481e64fafa7c95f777a37b527fe8b20c84684388e9a50fd710d0ac20f01ee3124a7181b75fda305be9bc5798b4412167403f70a5024d3703fa47d2ced070e3df137ba11763a549b2585f824e7b0b2694ac237c01a9ca0d79ffc378d18062cca73d167b1cd672664e349dd6555d659cdb0ad428edaec75b69081b6b49f1d3264086e9e5f0bfd8e0ba4b0f9eaa0e4ca2c837d0e86dd83966a7413feef3c6676e779211ee2e8b0cefb0132986a15325e84a5ee3625c624a6ffe49f5d5ead51c8db252c98c687c20b1e39c1b0550633e058117bab0251ccc565b80899594bc7a92b12e0c4d137ce5f70d236a39deff1d559bf07a95724f70f09b670f287dc70412fee60a3c88f026834bd7c4c5d0e8cd3af32a7671e144f24e506ecafa9f1fc34a945b6e7eea92891d61a2f242a5163f8b5a64b00ec705dede281318ba8433e79e8f2978a820680703b5422aed16a3b47d97fafc4d38c0b66a9d4ce0f5957cf0578d057c3230ab7ecdbb59f78af31e49f9e405e9861d728676a777d6b4e24ba35236265eac58403083f36ec65853a02422c99711ba8ed2ac02350a7686a73099cff0a64e5965a2355423e0a651f892bfefdb10c7afa88718451de3a03b73e07c7b9225920d1e2827c49133da9c987143eaea85cd91f1f3e89def3059d58572173649d2d64e2cfee65f77dd9dd778413bc7c176f6e41b933f7a3fc32ef951509988fe11d33638a26e25e15ea116f7ac7588ac1ae82ffcee616399f14c1d718f235f61603115b137d4f44740f62e2e4fe6afe9c70f16a4ee65143fb14be103275d534d22e8e07a5a25c1856978ccfb0f7f7b39cd5bb1956f3d2d99cced3e3575a0b0d839a28803b5d8726fe8f753efe32bb1991d1a7dac3179af3e6e8ca1bf08248655cde04a3e79234218043957c90194e5f4192b82ab20aa635f0ef5c20c955cd9d28b064e313ab1129f469a772274360664fba3154acbd5f67fea6fd7fb7cd876f5fd91e3654767ac7c91ea550c99dbfd26a013d61583feedb044bcbf56c667fef7bd4a5d7006cb8810ae6629ad9d66e5e61d3fb9996c1c6c67afff41d201a2d630ecda8b06ebabb754226fd411b435e22529e9b83b676d41e9534666d7c2bc16aaa8ab6bd144c589b12c577e8db733c1f4108a3a9cc77b732a685f7276f26dff2f857f6156c28ebfb3bb797037b0fb37a0f0995d96c4e28d6cbee3bf6853d551ee585b31f8ae1110956f18d52e30d0f2d7287c394f15da46e823cfde926024cd1562581719f622564c552b503ef308b02a49ca9ea2b6ee9cd65129ca73ceb1c96fd469153c385c79030a6e7e7c5b408eba4a079a347eaff12e4b3e1aef6b3ce5711d0f8cb4b54580337ba06e05c39a37393ed09fea64071bedadb615e6d138cc68d19c70e7c4a2f49c29fd56a7625908469185103207970b6b866df7fdb637915bee2da59452a624033f075b07e0074d48b59a88426d649ef9db0166b05a9bbd7d5bb9683f5e1e6bf1ca3ef67165ff3db599bd9143fe08d172392d6c2c1f4e4f9c8472e718afc70204451721394b36f8f1a76daefbc972ad37ba4e6e351ffb0f328ceb62a536ce9a78c3f1626bdb55082694d08e7257247b57d29574255d48d5e882c2a4c4125272966fb57939cbfa6f863dec3bc4e2eaac49b9d8e0d3296d36cfb6d8ba8f40e075c0eba01df0f20a3efce9567674156d2d0114634b89a21c236eb2d5787ba4b7abb0b73456ca655b138c97474a29e553fad7d7ffc9cd755d3b1f89e115d6ab856a0dde773c6ad0bebbeae0e5c6abeb7d7afed5f2c7b31c317c300967625f56eb5b0ee332ae6b15d7f3b2ea2d7c170231be2abe0a77f6fbe50a7b1fd5cfc7306eb2ad86a87ebe0a7358d66f7ff2c515b9893fb69d4c9493a2274eb22dd9161b1595e1b366c46a5396655aa24861b2b8bb896aba70d3d6249569c9b448c1a827a1e8f1959023b551cea252fa155993096639be8dad01eebadfb99eb895f00f19b270b86cfe1dab870a1fc442f501fa9bc340e08346e0097902f1965cb6892357939c9c504a9d50fc62166a256d2cb6ae97dcc969c969c9894639f98eb482e5a9b7f80e95f29d96b429e64248494a48494acf294ba43493a25bb6f9529a9470528adabaa99426259c322dd9164a97989c96a248c9b448175a72aa14d69b5e82379916271beccbd1424378cbf0fde8c62f6a79b92d7d9c2cb6ae91a02b41781f8e159b4f7d695dc97ff0258fe23bf66586bb9f776d779d63aed8424189bbc8594fdaa88b7c273e31f21d7f51e26879394abb25f7e35cb1cdefdc359291ef748d63c5d649ad54979872d7b9b350ad81ec47e2e9b590b09261f7b550ad41bfd6a0b34f397e20b311881423ad7f5d18bb12c51d093fddd648104f25ac2d0b2a0821cc249cd9bdf6c97ef1b1ff34cffc33ed66990a5e9596d1295fa5651abc2ad57dcf2c9485b2503d6450bbf7de7beff5e9e8c73f415229affc1b9d563a2fec31a8dd7baf8f55ddab6998cada77edfac58a38d432d5c5dee5c3abbad9d5ee5f159769690d30fc2aee325d42fb31218bcac2c84c2adb926981351fb96efb31c185b2a81a9a48bf267e0d4dcdd6655b7c48f3212894b7eda6931bcdb6611b35db6f90e626d39269c9b4645a322d4f9cf200f26b2571949370921b86fc5a558068e0affc5faeff9ee26d9351d28ff2399f13327d923ee53abb05abb68bd9daa8ea41433d85dac76d8bf68b8f2ad6c4a8c5d7e8868dc0bc7527649f7e956ad31e6bf48a348f3b0fca5a8d166b24093fddf6608f8f197dcdbe7c1567a1a2cd1677d8856da8a536ceea2971d6401508d20a9f28a5db8f09279490e93ffb443bfb85526ab7d8286a23cb3ed3ee67df15a12a95a652a9b6d7e8d370198d9966d3b0cf6c4059281aaf6234898113f65b08a984c906c8af45250a84355e5e9b3302b3d78ff1bae05f17fce8fe11be1198db83f8efdf35afa7924425e8ba6ab5d169aa9fdfe3e3b86b4c8331dbb22ccb689e6e359af636dc731d5a061cee5498c66f869fc5b8fbc9b4d8649a5f2e50ca34665baeac56ec4259d4b505cbb6dc57fdabb0817086bb8d6ba7dad38b5e4fb3e59aafb85e8e35c7cf5ff5a672863b1fc2439bc5456e3285d825332d9996ebb48896548bc93bc23fe2794b3e407ead26a56c9f85fdb86ef3ac768df55f867708ccd246c57fdf353ee29d8de2a9df649405905fab35265b9acd5b391bb48713fdfdeb3b2752612237ca5986bb166a21d8a3e6fd6d5caeae830663fcb88a557868a3b848966f4fe7633198a15a0115fbf4d39f364bdcf547bc395562e3cee4443966aba9ee9c533ee7e3d3ce29e7b59d13d197f7e2ce89b2fc239efb5e8b7dfade2be43b43ad80e97ee34c54b747fb7ba73371a23b39ed2b0dbdd787ae3fb1b1d67d88ba93ec6ed8277b1bea4c5a0177a3363d65e0ae76e3cc267b9bef8adc10b1997845e3f86b7c68524a94ef6b36da6736f77f868c7ef997c3dc99d864806b9cc999f8a0e136c838203e9c890f699b2625bd1bee4b1bf6f81ba1aab71b55f6aa7f97880aafae97dfd907d4117fdb2e9356c0b45f7dc4fbdd769d893371216742e4638318277626ad817c1980f1be9eaea41ce566edec567d37154a72cdabd105e54af21d8f404ed7db70aa9fda671cfd0ec01e8f3e7a219cd7d2c432af4617d2a534336c76dd3658cfeec6e6eceebee67b5f7e2de5ee9af5426a05f8c34b2977d7bdef14fe35bfff88cf6fbf92f2f5eff5f8c0c392e947e0f5e80004e1fdb0798a338040f429bc1ac87548bff7215ec9f8eba93379abbb7f7e35f2bf901cceee88775752a6af71b7c77f629ff9daabee07b4062acd987f3dbd68f8dfdbf3196cb93b54f2f9145b1ab8ab47f649e326e74e3238b782c59dae0b497b20d02667d0405a35ea00ece14cf003af87db649aba7dabde99600fc8e4add703b69eb655b66dddd905e5faaec88bea2eec53af1a71addb6b757b4f40add7a357783ae4cba8cc9de8cf225d3dcaf6551c084fe77ed570d77485d7e3bdfb32024fc7757a511db82fff82425ff5f6d223a30b4a12e64e569c9c2e28adc1c4cfa94612aa8c28075d2f1e9049d42b22bf56154f721543f9b59ea6b49e97bd977aeafde8a9fe074467c118635c11915d1fbd1f9dbb462ab2f09fbef8789707a7ccf6728643667b405bb7f98edfd8e13b6e73938305c4593865b624d63f688a28f95d1e1c3249f97d0e13253ccc939831ceeafa392e58c12266bb3ec785cd9d9e4e7f8e0a5be761721b4549351294d9e540b9bf1abda11c14b6aeb23abed794214e99ad3374aa12a78cf17d2fe566ca8f29bf1772d6c4d02f8f3bde3638b9157ce99ee5006d2cef6ef8bd03847b3cb61ceff19d5bcd8ff2a9dc929fd4cbd1b3c8ca971c8e996d3ead104a29a584d755eb5533302c0f9c29aff3c6c4ec67bfefd7356dbef635535506e905057b20dd63c243dbec4967e62ce885c51163933f21e57290361babfdf831caed6adac7cf2e0a2f55f634bb1c1067bd0869cd4fae4aae7a026a9e6c91878452845484e4f1a7b1c77aceba4cc81e4f5a3d01175ec17f99fe7d14c39f10ce19238410e2957d1ff85bb6b9554598fc9329775d3fe77b3aa50420d0d3f1a9a5261c31b6ac739e6cef4d90ef233f1ef85ff50404712da49452baabdcddb7576d8e57aa7fd9555ee426ab568e8968b57e7cec6186653f399bdabbf657c31e5451ed2bc65d4de597b3ff6ef6936d3dfa31cab35239615084546405527e2da8a29c5f0b6a85fc94d93967b639ab3b4885d513309fb33acb6a56abccb2ec7b5ecef0eabe0fbcef59e53acb75fdb8ea2c8cb3505c9512d82216f6f97b123ba63582d8a2bfd70bbed61449dbc4d346971303f6891dfd99e36483dd8d1bd02f0f868ff4037e7a04db6b49e1245ff4bb4d8a20da0a18a173e7edfdf0cdebc5c9bcd1bc9d7abdbc3dab0b0fe9ea99be9df5034ae90fa15fb13502cf4c0d71a0a7339178a623d0f70f22c5fd5833d38f77887c0d9de63879af8595e228045b4b71945d0aa5ecee42dcabc879c126e785237ec4a9a84622e088c971619312e94abaa05c494e3c7fefed9432c629a794324619a38c51c628b18db24f16eaf2c142186f9cc8859c891301612de4e4d339b3bf9d417887d07c412334d73f2153fa16fe7cc9c1d600be495f7c52724fb9ea7dff49f0c39530394bdc6d94b3e2c7cb437f3a2712eab2752dd442d725a574777f8f5f398a655c812873f9b590f812d44040f3ad50b6c5593cf24c25f2210f7296165bd767323c1334e46583111a391837505b77d3b17c40e8ac1b0f7348d4d77bf6faedc5f9f8b2b58feaac2c2a1e71e14e07ed1f08b88aadcb78f080d7f52eeebabe1ebd7c75be660f4d6e1ffbdf9dcf81eb881c740084839f7beff7bc7cefd3bfff932faecb8e647b6d912c63f828cbfa9ed6518e00878aedc6899c493b1317222a817db1877a490bbd5ef27aa8879cd8222f2a29fbd1a314424a21754efebc121465c805a535e02284d07d025242c799f7dcc13ed9a829518829f2a2aa917ffc2bc9846d93028aa6f92f876f36153fc05935eaa2000634e05ffdb99e971b7b107ce7d12237b93aaefd0fc3affb1bcf7a00cb4707b911e03bce2367ff1cbee361c4b08fc7f60ab03d6971e284b1f9f59a32ac16bbaccdfcebb1a75ccfcb149bb33a6bfaa02fbfc84dbee853fc72926cdd069f077c3b6ee68b8a412df040c09c1d707084f483521c227a52044b0802a240110d70d08108204401c2c2d6f160badb9c10fe84efb7e84f09d317cb21c0591b4d6bbfcdd93ffb7de63ce2b9f1bc80404dfb22371148ebe8adaf5ff5c31fa16bd5f727be3f43f95e9e9c14b6ee31c122590f1e3c24c43ee3e8e5c9e69c737ee3feedaf23394ee5db0faafedd185530286351079a6f4e07a10f42f3f2f2d0600e1c08bc3010254c9ad30cd908c5526e28f26bc1202a4fe50c3d7788690003ce92e22c6f7296c3768a494a51966086efa4e8c8e84d001af20ef493d08641087fb5eac7568d894818318471ce795df1babe3c312582049ce5ef36de09ed3f2ca709862bee3400bfc84d3ee2f9c23a087d900caf30ffebba8adce4cb73f1eac214b8aecfb08eabc8f5f0b1ee075b5d17f4bc2222f3f5172ec159b084cb93b3c2765100f6e8206a75c122cef2c70005bc6c1dcc1eaa8855f8798f10736cca09daba1a959de533abb8cb6cf2cbb24d7eefc1039cf57e454466f83082f074de8bca7c73b25138616cef4f42e79c14b6eeeb6baffa975aadb76ba17a71d64dcdf4b4759992115396df4a3f50a3ba1975a551fae5a936aae8c5cd46f52aee3dc651787928f693354dd3f06a7b1fede96fda53edfa9f5cb92e3b92efabb8adde07e240e04fbe5ce5ba68316c7ae3ead4c4f5ddd75f5faffeab31eceacb83e155c3f73eebb67d5dddd77775f5fefab77a4f1f7b7d615763185e6117f6cd615cce0a1bf6efb32f92e5eaa3dbc756c2c45618262233f6984dad98853345cd7cc74a63e9a75eda91a5941bd86c57bdaabf6f733bdfa797e7defbad6473734325afe66303201c071d5c8d7bd0cb16ff7a1587fdcd70f6d226b34f2986612e73566fe03bd7cef5727eadd7553b4f89b91dd382c150cbe9e9116df3dfc7ef7af69bb2846753e79c128c1575fa324ffac6783d92bb9517b999ac1272c84854420e434339eacc6961eb6a96210bc2ed01818febcb23b3e337dbb3b0cfdb498996535296b59a18935f2b53a8b89282074d9ea8a24c10312841712629eb2c4ea68c0482441920427a61c916140c1d5de08b1ca42892414a06243259a8992968e60b5fe6abf107153a80a9628a2994846e80b104158417409881a1495083e20c49647122890826b27082e3861510490db1839631a208c0644269dd6ea40b3f40681125c9162e6001942a1c8034958223275a7c2193a54e176e9866ba20f3c590192f997e2cc324d32d5cd0a4839399a4292988a900120b51e4b0430a42cc50e68adb55a4c84031a605466471e2890546b4ca7851e2c5132418c30700b4d044834e759942c940c1b9a4e54f6641258b1354813a42094b113a48998268cc9419a4a6c0c8e6a1a93e94fab004d1c48c182f2968f1e40b32455084b638119222082dd3824ccb1051270b3f2eec4094842828090f5dc0800a2ac608b5003503134128992e322df3c39c429f02302fca2b93b55e94fe6a8a21255f0fb38ebef69da5dfdfdc471bbb717536fd0b49ccefd20bafe6b41da53e378b6dbfebdbcdcf9e72f348a47d5ffb8bebb4bfafe14cbbec552cd6b35c359fe20e721c21625cbfdc7d07190f1baf727e6645239d9db024ecf3561852f26b8161a5050652536b0c92037e72b4d8eeecc3313e2130409f53c208a1096cfce24b7ef9898992df77527edffde4fe622ac39f4f32143394e1773f4822bd3cabc871f41f47a473bf7a3de87f4faf071447ecdf2d79bae1fc55cf8747627ed783f6a0fb59c51dcd33698c1d23de916b7ef5837e28c3a0f4e347eebd2725f610af22ae4fa7c6f7424c863fbdd8e2ce9abf92dfc50c7fe295dc01bb57022be557292394e23bb429e6da32fa5422432a8eabfa5db110cf9ebbffeafe8bd2d756986677413aa5cff5fdf312817fe12825b6358572ce9751929cc0a722f892e9d727f8b20b25b2fc99814d0619d46c37645c21cd9429b65cd00e9d7ca7d926b75d22f0e76b7788c47125c4e95f9e81401ab39b1c3c36e840040a1429c177827cc7b3bbd3f09b256557bdc9e465e3539ffe765d22ddeae2e90ea94f2911f812d708351be84f2b1bfce7233f07cbf6d85f9c112d5ff8c22ffbf560f6ebd86048f921d3af47f9e531453927bf561863f21fe9dc517aadba695f1f2ffbd9d3ec067643dffb49335a2df79e0ebc20929863fd15115686754584957d1afeaa4a08ffed98d28896fbe9f4bf9f61ec0edfe9e0ef70022628bffcb2982cfffa9961df456fbc6dbfea8e8da9fefebc3cd9abb48c24e6fa47629637eacd8d8d3a515e21fdf447888f24e615d6b9942f2f8ca43376fd55b377a57cd8fc88c5f82efaf37a2c5e75368f8c3b9e1271f1437e76c7aa9f951b77fe14ef98d3673e8d3e94849f1c8db44fd7864bb838ca38bf1617403daf91c46c448bdf5ddff4e5e5a1b47d7eafe6b372fdabe21dbe2357f1bb59999523c43bb4d81d3b9cf5b608937fe4d7dae287561852ad30acbc1f23f4bfa7f393bb15843f8ecccf648e96adf3fbd54a42f9ac1c7f4accca31bfdff1749e0abcff7be8dbf69e8757482286f67f72bc1fc87f18897d150ff199d80776998c0a9947ee156257377b1e640d3191f96f077e0e8585bfc551ae6fe33f21473af7e72cb1f963fb2bd89f5121abec91c4eb5748627eef31231e588ca4737ffd872116d23f1f08eca64fe77b39dca9f8437fe80f8d749847c4b177af408bbee3f37efce8c13edff181dfef877c235ac65de70efe6b5c65370f4d194a004bf6b74b197e94d087fe902d93e06fdfbad6c93fd2783504be7dfbb8cefeb35cd79d112d93f09e4e67ffe97c00fdad8c6fb5fa10da877dbc1fcca718c907f2e10ec20bfbc43fd279e2e8e37fa4b33482753c8a4f8b32fdd92d2f42f1fdebf6e46a888efcf28e9cf3b419e9ec0f778c1033c42ecfecfe47ebcb3b643e1deaa284104218e547dff9bf3cb187e8c88d7de6d777ae8b5f7fde21d7482341d2b942d945dadcc8c9b261249d23aed8055452905d92440d302eb23626056b42172ba2d41317a930b02a36522b04a102a1197430e2878833637879c10b40cc1025f5a54a898133051f3955aa8cfc5a5daa7491e2b4c2d4c0394080198404191178399a6a62e20aa0a9e45921b4450e29e872c4155d98a21250bae4388852e418b96491639c92411824bc807201ca14161c62902660bac4f045892a4e04895c86c891cb0b260a2ac84a90717981868b1117157cc4d6097ce002c41654a88079306892220a0c115060246511260b31727c642a1651583c61abc8220a0b2da6bc71f331c69c22629c497e74600109a2f8020a1c9c50c1c2891f199834d1c4941a9e78a10cccaf8505132d5f8238fa12394b3ea2acc8f1e1c70450a4e0228821a69c104ac01061f80015059721945c71845dc103cd04caf9a185c512164938e40cd1da42d4da62e4a47545d0cfd593869c283e7ce4b8a0561f637cf5e93edfdfc73399338464c1f63c07886dfefb318d9cb0d9dcd4783feac7c7793fe853239de73720afe8bfec339fce7726bf2b618448ad28312d2bc6784f52782643087137658e1063b4b20c6509627a417c127ef4a8cae5e978b9d37aacc0f274bc3ce30e1b8dfcb26fc067a5915b2927098ae3f710420827fc07c43b4620b6f103827de073f0a0fc8e1042f89f7364d8fc3b1ed93d48d41123ac4e2a3c2220a2eccec1f7f5e81df19dfe7fdfefbdefc0fb01c2d3d9e13ddaa8fb6d0323294c4a3459c182d3c5d635d1fb876191ef6cb9a36418d171c66c34074bfa456f645aafebea9c833ab5393a4001e58733a67bf936bed37f236374077aacb7d303a5e4b15e76268ffe93b2816760b6ecbbf39cff397ca7564a29a5f4217da8ea7e5d3f13fb803a2e4cda9b1b2b029d32bb2e291fbb43fca5953146e9b13e9dfeebf6bc67b1eb0fb9106867db96dd1044a0137acfcbf2efc3f8367a8c31c67e5515ef10f957089649e8c1727c68a4cf9cc9f1b1d590fef73dd9de2be4baaf5eb91a82792047ac8961add60f775229cf8793e268da28b64f2bf65d7cefbdf7aea528d4ddddeefeeeee5e8ba420849136c518e518296737912887c369ab7f65f412a1397b5b55f4b3af3993efb7277bfb1896ec12c31d26c49258b2e36e7e7c1a31089c7211a9e4b6af252c7c0b793a2a45a5ee6e0f688c72f70821c47105e2b81279a4a4d389a7e2b872dd9e1ed7118293238e4a4270b2e329847d393a1ccf5acfbc5b0bd3dd5a982f342f8fe59a94b37c0677f334b81a3e3c9652c7ca316e1d3f7ec5313e0ab6189da47c4722b9e665bb373fe353a8f13470134dbe16820d219e0e1dde634388c7f297c1c2aba9f92764e6b99a7ff33f416670ab89571198f1345e84194fe3e7d3c026ec30b10834fe069b50e369bc09373fe37f82d8c0c1c4667f66f835f8b3b7b1648309f6a851f31da479199c0c211944b0078d77a87a7f550a3424194219d4e0ead3d17fc351e9432b7567a3293bd76d599321d4dde42b4328db10c206d7d9c09cba2252492a65fab028773799a6a01f8bbe3f0dae3e1df4677074e2ca45136c1d0ea92a8b48a526a208221a47183b4474fa2ed0ec51f218c2be1c5d8d11524b91dfcdcdeb5183468f192f81608f1a5812dde0077500edd4d0f058fedddba92972d60c0ebbe1e9f0a7c161323c1dfe3534bc1dacc963f9fbd714f90e46e4ac1bde8ffafe980defc7f5fe580def07f6fed8138c86f7237b7f6c068c04581126c3fbb1bdbf24823db4226c04efc77c7f4c049893f783e6fdb126580cef4706ef8fc1f07ed8bc3f46f47ec8d0642f40e883dc606f836e0666e40cb8c141412a7c909b578147901a3f0366238c70643b7293e78f70a4669a1ad5765f2b823dbcabb98b209551320b27b53c1dff1a4e5ef174fc6938b9e5e96021b3e02497a7e3af7152eae9f8ab38d9e5e9f85f4e6af174fc334e7a915f38b9c5d3f1bf38c9c5d3f1af9c04f374c27802fc6bccc89d8cea037436990627b93c1dfe333809e6e9f08f12ccdba4be9f24925194c3c9d2bfd6a818ff3d2e77aa223022d914ab98b422ec8b4b1d755ad193212735414353d9619098ec52728780dcdf6947d95f2bd29e6846be135f46a6980752eeaf893f368e654194e3db0f23421cff5a7a3fe0c71e7ac84a39368e346c1e5f28e3604451acffbbb9a9d4af0bbec3f788ebd3793aefad86238aad8bb9f177fec97d799ca6fbc9fe78ebc9c0fde3438ef3db43539f7e0ad82a02f5e98b502986eb852bbc3d5b4f0f698c5df3217b542154112af6817d401db3ab3d9766cef50c691ce9edb12fd32bc426bb3b0f1ed73582a3b5f5ede92b43ac2bf61c53c53f63a4cf4c898dac3cd067f209f1473ac5c2be17ffbd2d77dd3d31c77faff6c01cffbd086354f50c89db6b9f82eaeff75d45607bed45d8b0082adcd33373ece9e065783dd6f5e9777777f70732f27ceb51280ae5f7eeeeee3d14c225b894df430821cc564a2a46797ba4ecf752ca797be29c93de1e48bb37660caeb7c7b37d5b33c9e1a072bdc52c84165badb3cdfa2d46caefe5772c8d04213879be109c2c710f0e4ec55dc40223162964663973746ee613e28ff58cc8c6b7910b818620c2c491eb33d95f5bf5bcecf827fbf58f0e2184b05f55f9fbbbf648e8c132fc1e2c7267f2bb3d58c6b2734f82943cc9af49c950ee3abf2cbf262540314cee6a130a5bb295dcc52af36b42a189dc1f95885e2c8e23508882820f148c72975f130a4ff26b426128e7d784020b19cbaf29c999109224d9eeaf0f73c03ea9a876a24dbea4048d9a808a62139050135092dc67c6e4fe2663711051b36d4a52945f5312a3dcff309d53d21726ad4f681367e10b17327c6901871858f95962c352122827609889b2394196eac29929b4560e247e86bc9ce141c9174d6828fa09c20a10470831d1b06484ca044dddaad2f3891e493ae912875768943a81048244ad29b632e0062a425421460a645a16e002cb509421a0a840d51200511103a61fa6bce0658426928c603226881acccc1cbed840a52e1174c5d2602cd90064c5055f74b1c2c8d0088a38a24a12493e6838bc2e59e000948317307c610412482e8c6982c5880564a8917b18255348ec5014f50395128c488209921554d810e68c51c6449b69c2bea843520c78a68b36a51f0c885078e2891f9690d2022faef88045941560b8c2c3d410aa1b7a499528108ec04c0a7c2042c1d195232eae2c89a1354399324aa00ad5069a17bcd410a55617301e66111503974c08c0e0240653333471f102cb2485891c964c0551148483f6a48c19da84855b45860653ba8529601083050b5690e0c1888920255aa2443922cca5c137202384910f5de410431650c480441423272640e20933496c66a8d24c5fb020cb13273680e921045353bc600535a8b0c3114e7e9240d680c18621263e8471440b4e34a0e085276e6841910ac698527516716a4a42c125536264b8648b255420159a76274d2d6320668b1647d47082242ba012c58209743013668c222244902945226ed20c244242d6211db80495a10e5d3d579c68224b0f5c8c780281055cb6a8818928ae80b9aa4c7100b4d0c48d0145901250f870c3951d451c8d200b19a62b5c6cf7101790022c2b74f182081a72b8c284042838410b67742813e68ea0c9f8bbd204972c6100053df5008687133809a3c918538cc8485d22e0a2cb4ca14ea0fc81610b1cb88cc9010a318e98c69061690b288e9cce9c11816dd244a59927aa13293cd1108328986ce822083c45a58a16463c2d3134a5646b38b344d343110a08136869e286232f88a861c4031314182384b8a18c9519832c4314619832218d5ee02b33030a49d010a018a884ee54853dc910d9080000411000d314000020100a08c482b16030cf7278593b14000d91a24e664695c7b224895110c30044883104100008018600428c411491090060d805d2b0ce3d22cac0775d693be0dcf5383c1c33f5ae3840b14f88d2966ca03b8f7e1525ff329022050c1005680f2017d245a15946a7ecbd90f1cf0c6a66ce8f7815bcd2bbf61f8689d655a03f0ea215773775273a705c65fdc0aa82e12b6147c923a54781df3b6379ac5fea53d343c84e93f0f74d2ae6705e39ef8d790dde803f5a1407c6bac0f401646cd5d5df5dfe48be815cce9915239400a3e0da74aafbd2fd94566880d19300ff0bbe6318a55af569ad27d13864017cd4509073829348bd50fc3b026c14701ecff5de529574bdf46632b252d0635af2539e33cfe8b746c3d5247857850781bd1ebed43326d37896ec50e5e7e8472e4351b5b7c0136c2cbac68ac65aa92d0c0907d8335f39cb0fe4334e5980d2b0dd9cca0b4ee23074db277f722802085cf0422e052cb7687a91f00350f99913e0cadf44130b458df101f569e71d6c08a1db7e28fbc98f733c4c7237373778d0983f5a7ee815f16fbd2b9549a0892e104e2cc41a880595eadb346f02385d9009402e5e72944433c8b605f1f6a0100ff54db4c99a707d52d451d55bfbba891893d8e481be9bcc1e8a20f11923e3a1152bafea410b04897b8334075a8b85e71628001b61b52ce94b61d0f70e78f5fe30a40f3bd32cdbb18c4032e2c80f92dbda8f3047fa8658304e1fd03ca478e9c04ab77258505b2bd9b371b9d99d1a7a24be21b7400682a7de49f18a52c7743f7defdff20a594fd7c4036e3c6fa115243a944236ee104f081f4d2ac506592aaf93dcdac7b7c89fa0f1639890a65612e63a46930b3842ca38c13bdc8d6eecb6bb4fd12ecf79bc1062718f3ca5dca6d9b8021baf944e703bbd8515ebc375a7349bad902d6f670f0202617fdcc9f08df903975e74ca9b8a607c7575c557da5ce0a627c2e47d2fb653d94a334f2150a8876cc6d1abcee27c00a0513104b6af0a9542b417a85c7327ae930cc55b792517716860ba8ae9063e96835d4e4b5d5b5f3d64ec6301a2c786a4ce1047c54e074c610f60b14ef32250f9755e422d2c9e817005d6dbe7b2c2284dee071d2a5514613ecf610d17c8ad4af68e538670a7610da1d0b9277c6ff98ddd7ceeeb4790857bd7b82c3f13eebbb141f225a82df575a420f227301d0c0ba2accf46dd793d6a914a162ff8238685806023c616336f88ee1b7ed03176eb33c64591625d6c7e47db2bb8b2075c3742221f9b3a4f8a8f5673f1d2f87ce4f475fd5f9fb20722009cb9e4af7a29e1dc5a6077f40ee350e7b2fdf9b2c48480532cdf1fac25c6bd15b375416daa9e805079b367449f6eafbe1f1121f8b5c74f68cff47dbab37dfd1e149c571405c039dc67a54b8e6cb03ebc4251174414a55668ac3103f64d5294f324bdc82deb464c81509e211720929f6909149a59c2ea7244575c33a240a180ea823199e8aa228e6bef55b195129260bf836ab966c2e52549aedc5604f9ba8584bfe24bc628b6845e73e713b50e3d0a6521631115853c50cab5ed0bc544770b0276ca34bf983b409a1799ed24d171463616c80d5e243056df48cf797c15d8773ab9630bc6fd301d29a32460e5f6ed0a91ff7f0b17593f72c0f46f893a11b9f11145f5b01da35ba8f99ad03ad0785e06e3be4cf1b59f02a3087352070a8f4dbfb4d641e22c69b8cfe6ae4829b73d0d62e1f26d35cfbaf080781a3fedadc65910cb4491591cad79b825d16d6aa5789439459953ac697c1aa48f790c2c5b40fc1c26edfeab8e576762a2915d394d69a1ba1e17b3f866233a6e58bcdf95c597d75b511fca969392796b16d8e86d71bf61d9434fbe6c62bd31f1d65c68d1480c520e8b92a1f37004dee31baf443ff39d3ba737e888f55699cdfb86ad0568aa8237a1704080571e75b871cc875b8a55247677d4194c2afb46b89910fb2428241d7dd273436143589e609d651081546f8b5cb5fa7375e1c774ca0093f8b8eb155910f76b5f316fcbb42e15be948d453be012befe78d348d568f116e2a641f51d480d061a27e4c4b8e9038d6142161182991f0a9c16b011b5b3829687b7ba7b6e55b8e99e2c20249571b3037acb70fdaa78a85339f2c34aba5bf65a4a6cce2e97f2e83fe5087e03ad9b560a6b2b542828360156d8fa70fa0e2738695800b80137f3324f504b0cebd3c335a34f5a37557e98dc9db7f6b6688857654e18a88bb6bcfcdc6d3074cb22e84142f6d9a9647235f3b220c53cc8b4d0df1a481f1f0dacbc3107be8be8f29a0fef8670f70d7f7951f20be4b5b3c9c1009ca0b9e7696396e95cb8c3fd80d6641e639ed0054db5c9d5d6f458e1f59e8532a12403775a4df5c5909f5f729c0b3879066de22a89306a8b8736ac01c3a7877767652eadcd7fc012820644f2b59d7c83eee080b1fa29635fe5779f6482600c0ad14ad4b0fc238cc607923d21a77bc1945a21f8002f26b4a0d31abea3b8f7c02fea81690a746049a244302b3b81f2f6fab6cc25ed0a2b3ee217b7d937fa3f2b1409710b60462bf243b816320eea60f86731213b2bf168db3f11d65e2e3f47582676a28e77287c90899230d0710e884d7acf70b407921384a3954144abe9e158fbcba73b49e49ef8ed2e4b6a669d2c18ade3764eb3879d45946b19af76ac15ecb2e9b761f05c9e02eab28537f06427b4833b5242f1e167d83275b067fd1f2915997b5bc0b24f34396c7a0c9b87bd132ad13cd18ff762682c9b7f7912926eea6749da4127b711e6d2283c13266708087e3d3c122999ebc7dc0eaa9241de43197bfde95ecc12a6468aa1d647b19fb3c75ec609183094fc659f641f6b40a4f818d0410424e8cc0b2fe5ee4fbb53e65c54ad2df8b97cccc040eb0086b2cba712fb53b7d95a70c1f8424191fcd695e46662cead204fd4a40efbe3186d159d959b59964f4d52c86e22e12ed1f1e04f0abeebfdbcd6bdb5f480f6e3674ef8921b7b8dc4771664b541f2e8d47ef9e43c7fa2e3d4b724cf0a9684493ab1075f24279bc40d2509982f31eb248ecd4e29b173d640a0c72a8e27c6985ac4357633f7d8964177e157636f82cb8cb4a2c10954ee252e3d640464d2d0f13f7a343bfe66aedc0ead7b71c4d3c9b8746d0af4e88f40138964caa960cf4811aeee3c6abe0e511701e4e85d8316305080fdca52d01e09875507bccf746f1040ed7cbbef37f004958c4918921a669fc82eec773f07e4ad0312b006af26c1a129eea0495949bc55352f021d544dc7806ae883e516f13534025756ac9e3416025c694230d875a46b2ceca822027b302aa6528e61dce6783b56544221cd41e332286266e2ac087d344181e643d2a02237fa82ffcfcd0e5beacdc4d7051cbc36a8b369acdf92398a99e6098b088b967cd2e47881082e2390443bc902226f021c6ce0c1858f88efb28cf0f37ff9cec801b8063a91dd052d210e49f2cbbc8ec45fbfa029538425ba6d6e6ef08708e0b8c9570e20a2fb01ff173fe8180108cac42154b3706b7b47546ab15c30972d45740106b6ef65ba033e4242342630594bc90d970ea3f310c91b6a8226fbc0bc604c4a8b64bc7761797ea39fba7f09cd52871c1595095f9d2517e554a12ee3768091030d3c2061630de61af4300b92db86ad19e643818e185a426aeeac41cb6107c7c8b75815f182aae4c5fe8489050227cb855db28399217783e618e2471ae165b4a071ddf270203539a6cf60b60916b2c0259806d600ff6c2842c76a60e38c92c96bf99c0d42de077a126e15bdbcff21fa14938c9b34e0d6dcdd9682fbaa66d7289ba10e538bbeb1d7ef0b6741f7c534a1cb53c27e1f9f6626947cc9fc19ceaa7cd8e937827b8568d349abf1c78a843f2bf534f6d6439fb4d92fe9685d774ffd4b3c677a3fd013972d5cc404cdb83805549c080f39e2cfc6434b29ef85b6033262a9941ae437f1d1dddc3042f59009f0ebad52a2dcc79f0471b3dfc6558651b946ba5540af5830ea3756fabdec045eda95510c83bba9a3e452e61c8243e9c8fde3746abd8ca0cf13434027a5f72fc5f8a0574c296e1b26f935e1acb0362325e6274dd5be69bbd5d023e6a2c038ef8f897806a6bf1ca8e15ea3db02a23d62757d5afa922721e1d26ee5937d5afcc8598192bfd3b498f5aa9d4099bd1d79a26c8e79a341a5e8f2744e96df24896ce837e2dce154b26a8f7c3b31425ff95949d0dbc6a65e5c2f75e57458da6ede9ead139fc6b1e716faaa0f268f4aefb1eed32fbdef6baf9c3c49d23d130b6b7e52d20dd89ef973e10344cbbdcb89aae634aa49b8c6424eec45149618e12db1ccc949d9a9626c4df8000bbbbd1f94cca1de7ae2214ac2e100e91baec793698814fd2a0507f93cdf905f09bfc8471c6617c804ef3348b5a5eba8b7e46e5c56ecc9e1b577a5d8a74eac6674922f61222e43919e9e618478020db1bdebf9070e76213f4866d7faa9965a5955dd81d592e782e515e6956f0ca46de963a25767fc49f648285fac2224b7d39e3fa9a118cf1dab12a919e7274a56b4212b4a18a1b17f9598ded70c25b18f052b3ff4edd186ecc373dd548a027fdb64c4a055361988b0f7135032d1e6e9b46424653858e22425c29693becfdd2b98a8dd54c7391b652d1062ed9dd5101ba2f7850cdd7dd5a853374ae9a360706921f989d2e18bd07ae186206c09a8ac136f448b15241e375cdae30b2c4d3f5649124e586e4127f32ace143c562f879640ca6abba81278e03c23246e18ee2846cefde8e04c5b8cef6ae93a79e5721e3710b96200cbd2a641caed25379eae688d05b5b95f0039d02390234fc47588559522d02f957767a01e20d3bb607151ff6760864a6710cda36e7ebceaf614208ab30910299d9783ef88d2ba35f9945888270ba57806460d45c980cc53ef4683a2f5cc114dbf883a30f8c366573c9880437e746ed3dd924b346829bf073a056f9b26ea32cfedfbbd0e9726f079b68a88d35a31c89e3f48a4c92e68aa004c31a10e086c14620e5455e46f65a27ecf5395cdfdf0330247ebf4827a0f6d80f8f65ea0c755b1d23ced59cec2a0e13eee678370dfb071b3c8d27b81fe164810255429f56dab4933bc9cf5d422ce4d94460747dae76dff3369c13e3357d08b52a393a5d4bb6d745497c3bb2c76c0b3054e17a2df8504f7b5cd56d8f504da862a5d2befd68b714fd825eb51d982431639706bc47e471b0f1d106bb35ac733635bebcb0129e4afdcc1b35ec4e7b33dc73a71ef7e0c4354ee12405c1b27ae3e879a0d3bd92b5acdbf43b11d80016caefe3d7f99492f65e014ed2498760fa3c7a6054f74f91b20b0456664763fff67c635ef234f5f728bbc89589474de4e877b7a94fff1d60485b66a0af0484710fdb8f13a786f00ab62666af5fcd0a4805ab47ad18c4de58054be9a40eab53c2cfa404570269a3cbbd2ce579ec76a57af0e29debc8f7c7a9b2c34ebf61d0f940dd524b82a4aff040852b76f300456657b894895d8071f3f7bb323e4a8b86e176cd420c28a9840cee5aa603d6a2342a40ddf895a2f7554517568054256c8edb394af280174be14dc809e0ff73da7570305cfea7da58cec43de465c19c928c8cef9ab0c29064617cd38fd2b7b051e2b2171da33f1ca2880cf8fb239dfab0bfe2046a32190b49a16bfc2c22441f873e2b82cbf1be0c3c6d5687a40117cce893e59e6dc700fdc191a132ef0bfcebe1ec90dd27bf76240e8c2506fb69497ba5f4fb2ec7183cf08d91de5cf4a82d708a75602270f695ae0b112dfb7bccd3bee651edfa2701995df62184dabfe4bf5cf6f4460d6fef8318c5b2eb5ddb1d70a983219360eb47742da268d02dffbfc73188f201bd42d83950edca83eaae4d2af4dbddf6def41035347745b9cb61fa2b8432e6102c6db3d1155827f674ac02dc43f1bc8d2e88380aea2a97402df10db37b567d5891b53b71c42d88fc2ae76a2a149d0e2d39c48191f1f74086f4e32305366999bec112d7d3327e32115f315bd2e40daea438eb47bbdf9004505db03841b1fd9efe7e3b4eba67ae03876d8d49ba7cfc51e39d18b396d765a68a999d93ed851a01a93f4a6a76deac8afa026226f2fce698e24dc1f16e80e6626dbc8a0faefff3f0c749ab58692123710b43810383782ed07a6388a52470b521e1c24668ce67cc0a3fd7275c9f0b80b1db9261588a0e44b7e522d24f026964b9f26d3e90478254262d2709dfa60391c5a379375d203433280d41eb5fc2afd4442f88cd8d0d6909c66ba1fda0a151061b80cdf7c0a6d9ce918957e1c51c3ab60a5f133e7e0b090362fb2f0cf95459a508fb4bf48812d11ebf24d313bdfad2898f856f645d04c13ec1fa2855e514b451711b930cadd0a04e12fdc6adf4ec18fc949a14e7e1caf442b4c5c19dba7d3b86d667c07ecae023ea430def14b61a82bbba1d46a971cbdfc88e344d389935f7664c5acac1fa42c8925417807e30724dd499be26ab11be39306eb978829d12cbb0bc5318206601c470b61a654e9770aa0be3681790a064d595c677e330cd1b538bbb609d9d952e0e5000752bd08e61e6d89a5a20e6f19f3282954849cec258d1e779b42206d4bfb252392901545a6a9fafa009d9b463644273c858d3e410117259a250582a09b85f8cec53b58cf20586139a6f7b17dc67f826af3eebd91e14ab81e28aef21a3bdb67e4a9d4d81e6c6a79045d897d9030b9211c50d14c7b4940d7a3f04af3767ad297278325ebc8635472a0c053c78d94d5c235cec6506945fcdc403151c395d61e65576fc90928e56dd7dcd69294aefe4c5d2068bbdcb09a0963c48a8e8e945c51a3a1036c413dd069470ffed2d9d6d073856f6b3d82dcee2ccac60f69b3f6892500a57a57f21a6db4a97000b8940bc79d49dc0d069f289de685f18b7ca39f9d88695242b5c53ec45227e225c2e3aef577edeaf1cf7288246b094ebe5ac574dc03fa53360757bd669b1556439eb2adfc9b164840c2673edde7fedfbf6dd2765a1153a7bdef8263adc62c75850e7003f5d3bd3c4a7c7530e1476ef08652d4ed90d8bc888ee16c960ed5578b30308193ff7515a1fe9997b033542b88d719476155ad5261267f02e15fc448304a1f3aac6f7f39485014f94fd5bce5cf18b9d46801a5c5850702ce1005840060f16323825475d754df76ff587faa4300bdedcce2f5388b19f0c1d905d2a60951fbba5d02b8be1a7f77e75da70484005afa7edeb0180df47d2a5607238cb38f883da97112e978eee64a3b640635abcf0827b5a65a1749ccf41a2eea0cccf386c36880a5df447368a4cc3ed7761dd9913c486102288f06d7bfd7d41a869f24790971f89891bc83a7ff17dc08d6a9af28d8d03dd80afb116b8945a567995d282431089e2144887890f5228492cee7eb576b104638c059ec8249e1e00064f99a04f2431c2769aeaad3e9b51f041c5b57f5c4f820dff75484564d2b8bd8f36be23180c2e658486e916d189574e3b93a0c24b4d90c2cb208f8ca721d3240dffc731941ac594e47cd8266ad11137afdf477e64632f252c7eb6e101303b504d040468e4ebc04672075ff95fd19b50b9a18c4ea4f94669ca8bd89eff90787e301e2b427e5cc984ea7ece1468e9bef6b1fbdb779a8b01c642089c3eb5f4604f8628b7b02ef9146168ecb8466bb485c581358c14afec392f788e6a4fdefe979cc3927a0e5596861f5a6eafc5cccf1f0eee4b7138537f099c60bee6f282045b894c018871bb4552537aaeaf8b77114a42161216714762db112e7ce0e884b5fca88f3edb0e2bb6357d49f42c9e27242a4ba8f5cd440482296cba021fc26b3a8ba04b540beb5f97d331610eec7270889c2441c6d31ae24f50b60804b8cfa2c5414585727d9c8951ab8b7700fcd363fcd0fd083be9beefcab2171fe819ed13a5a2b6bda9d095f17523d25d2d1da45d631629f95e5184ad4353d1978d144a311742fa683fa57631f1c5f159272e7c2ef250a5643ff9b790d5fc6a02e365b4beffb4c06e7fefe753a6335c5e2133b51a056bcdf80ae577e60efad6782667f0c85175680189cb2d4db52812c3745f666158f505515a8cf29f46c67b8598e376d5516f89c4c5a59b4aab001da2fee0726a87f402a6486f41388388ba60a0375a063936e5accb06d3352b09ce5dbc4a2590994f614b3b89ee7dbc47fc694dc4757a8b9dcd2b61a02476c28a41cef022f053d8aea5c883944545353ca3d3af756c3e849540d92732f1d50ca89c728e30f8794d6b505fe41567dce8c9821cb50e336b869dea8e2eb03bcf32a77e2575b29cbf2859ea5729eeb3dcd9e14bc6af75f71692a90624ad739e63ebf05aa5cd5ea90d448a6e8ee4d93e0215bc69da1a28206ac30d448db92bef1aad810da41ae4030bce2cd5b48b47f9d5dda34244df0b3950f3197662c41be3b38947438887edf654764519d056e1835686047ccbaeb71199335165c2b0ecbf2f45f68cdcb05e1e86965ba40e931a1c72f9afdc744864dbac83056ac870317f5aa3e7baaa229b1a0f658b9406ec0b1a31a046b3266ac04624f36f80fccf474b6e8a0671c4f3827962925e20d116675ea68ee0aaf5f70c9f59b274cbb7d8556d75a9db8a543eed49b725fbf5010fed2d4ccdb69117d6fab7309756079aafb2f38c6d8546412dd1e48de2618754019c4c355a1ab5caacbb09a29bc01555a7770c1667d89834fa5361041477ff30c9506fcbb3088f66c720bc736afcb0ba6853c2a44b280f346c31de93be23d4876ab251a93d21e530ab8353dd524606d8889985f1b7a7d4f59f2fdb9885092566fa1d8d064ac1d7c09490b11026c56595e604c02d900c05924401ee167ea2e76b44d1f939772f267695682dd65d9646dc1654904a7dbf00bd81bd7a105d71f9bba395bd97c1047cccd653d7af917160691cb1be5b513a30d08217a550c44fbf70be45c517c19fe8d37c3227d27e6c58e4084cc92b14750e8197e275b55146f552b4b29f14ba9170090110bdb4b3f67586d21b468bf078352c4d244371e910827643a328f95ba4efbf5b0433a1591e4b81d6df7682f745aa53db55a2652ffa3f1b261c5d2228e781b4a8cdb86a1f07155e1d2831ea74a5e5b8254bff64b5b61edd3e8ca9dbbdbc30b21233bd641a9de2195be133842ad948c4f7a6db2fd10ca326224ef0d5464199e8fbce6832f714793587ea601d644aa034aa599fd3688b1f0b22e1ac7a4f7d1ae9f206e177b1d115794fe92a5e0f9c4a5087e78aa789926334aff929e7deea0eaf2322e892c542ef1bdc58cd20cae5f9654901873f033a0397e24038301bf7d8771780a769aa81515a6c343c10040f78cd629c9b888031a6a52335c487f4be574a66ce3cd73451497efc771b8ce7641f99a25ee89c821015c6b42d86c8379f0fe20e54d8aebdae8f67f72f10c03792e190be17e3e31b74ef39b2c534664f3bdc7ea19b69e496a6c1caf07db1b5501b2d9a0a6954cac07ba77ea8d3e875e56b1be223483ee624d36c89a3a2c642b6976c90345710f058a7c5808923a300d88272648c59fa75277dd83fda3098cb79ec4d3348aa75e7677cc6d0bf3844d6f3a7bdd80e84ae2680608335b40e9674353aa9fa67a5193db11b5042ce9074b328b7aa92e708a51b0e599c0cd6c9716b81b367017e58ec882ea4673c1d05253a4bb608965e051887eb4dbe6973471c4c63de26aa4c0590f9093e3c2e3a25cb0e43390521aaf15ac96612bbd770419be41155c39d7f5ad4175a2e63a15ea92072812f1ab2ac302ecd0ef03f18c3e7ddff6f29416654f4966c57c984c29488a7f83a6d7bcf69bff9e8685b19ef3fbd1209f5fe7452fe10fc98358672c326dd248e67609866c97046bc5348fbd78c1ef5e943198cf391cb7bfb408ad6b383e5711a5b2abeb7df547d8080d37143c0a047102eca4f5199e8a5ca633ab020439a35b794910bbd194a04201655099994fb2814b020fd12330a140329a94d989937701f2c20c2c1fbd300323d38963cd721b795890954007de3ba3103cb0397ecd3112244b071e63b0efba20faec6ec712637294c8eb8892e31846255f557c2bb7093a5850ca93439d2abc216287f300d8e24acb2da6f2d0cac1d6198c61c928d2014555792a25b1a7d1b2299732461d62727efbe2edc16572f9c50d268e94d2d6bf1fe983c92937be5c845a3ce12f705fb673f62d4e7a4d2ead438d53113ede615bb695ebd6f0ff9b412cd535f8a16b5977d5097ed6ea9eb357785eef4de2c8ae3211661dff23886c6db84bdd7251af9b99e9f6cbf892f93019e17c924a3c1cd80bb4ac3244895b12b4c0474b09d4d958e705a3c17f236098e5ac84dcc51337ce4f4cd824cfb2dc1c088c62c1168decc69d6ee72f496fb94a4282af4ab1d5a7865f238baa212d1067cffc4ad17f5a8e52ab38028f5c00ed7560e80615d35293137c86c00f345340f158a80e08f3828c3657e7af41d13b86a11a1e9e7c7c36ba95f10b380be62e209b5a019826af31d21855671fd52da91627449ce4f8b86168b169b49c12dd2b4abea84b564928af9e1352d930755be6c0707bc3b8b10ac8fd91a2d689781f6ac221554ee24e4535f344a28923694d3927eaad74a328b5026b9d136d1f6660c173622674a631e97fe6946f9b790e14b94e7bcda5798a52a096b20c0dcbc25f5edcd804bbf346d405296658c3b372ed180af3738129b73b0acf71de9b966881e963d9481eb74998b547770b6aa1cfd238c4a9c7b2967e5a7ee5ead9c57f742c814aee4b1a7cd88db202ce855b7ab5f44202cf04c699d36b89a5f5355a03321a2354a67c4894f342c6a17ca34a9b8a09aa782d50a857ad969897f0d495d5af9f26bcdec6dea7b72e5dccd3dfee02c2d805e7e330caf11a5388b3faa03b499cae1c2fd5c4ea345137ce14121493d4100d7c37bd2ef426e4589c04037f6bf93ce10bcd6ae3405d9731e6f8453f5761277f503e221f230f30b5b6a6cc663171cb8e16fe768559f8fa80ba61a26873449401f495513dc2b12be7d2ece16dcfdce3d7e03387a05a5a02abf0cbd1b6b66b96cbbb2194843325bdbd4915254df0ddcaf7a1424c84944d0acf07f702f7a8771136296752fe465784f30fe8c6416090899ab83d5d9db9f20736ffe07283238a62f85311cd3f669186b0955e9272918816d091f69181e20a8091a73b2a93d23bc79ae35ec6d8c877f5651c62192bb313fb334e3ec9f47bb1aa6552c3cdf22bde2786138b6204eb069045fba203204db96ab242bc78551cad50bb3691c5caeb39c40e82e4ae6118d04a4125545f9c99836411f005a693a2f137f50fc3bb0115a750ecc03530f7ef0eafb13e0dc304fa4a5ee28c0e35f831b9b1b12e2035c5074678d6b86351091865acf2e44c8505eccabd9b77700f1ede078aefd5a4987a045dcc7cd61d900ecafde09ac9905620751c1401513db6a5b80c6a615a1f657c9af8877b1edffd9b8c16c4ec6e040c0ee27f9b1814fd8c59e1f0805b9c703916740ae0fd07da11ec85b77064374debcb8547803d91387c891725c789caf5c7dba1a6bcf6a3413b6add5cd34169ee3eef28a4eab3bf89a670b4ab3ff942e321e038ab710227cff93aa12975805ee965d4df64f6b6b6dc1e0f6b9fa27aa505e24b7a2f41d1393983eeb4e3df61309ba33984f84fcce6176b6dfe9a2c372d5930559561083ecebbc409e8622226b4b5b709274555f8c0b2cd0806b47ddf5a0ee2db1af4c4984be2ac31f15e8af0f014873f47c7da9cfaf2097972a90131a6efa099758c403bb92dbb1fcd058d1a49d9e21b2dca42ad77803069b45b30d08e907fa37e67c2aab305e02895261da8dd73e1b1844433cc911bc19b8007fcb9a63ee38eef4cfba178883e4f1ece46f03d0618c8eeaa103fc97a02d3596a6d7ce5395c36fce852337a603248395d5bb438eb172bce7c61891acd29c3028f5c7ef57ff3d7dc2f2b218ae5225e6aaeccb7a3a36195d329a560ec73a0ff56b171faf2b6cc2a4e6ae311bdd1128aa4df6e2bd3a00c3c19500462cb4adcee6ed2c3b9c1926766b4538e18f40fcb698e8aad46ed23849c3c6be53195d413600098666ed694dd672eba0027d441282c62881c3c770112cc8742c152ed93579d48792a7fbeaef75e5c26f60d2e08c4a7d4ea7e3f4d3d1e47efc2c1965c747cfac1f1b961ec1d2861cc653738613196a9066b2457a75a2e53c10600fcd6b49dbf5d8abd8d76c36db3f7af766a849fc3cd824dffa7852b4229543cd9e42b2fc17e6db2a003d564db8ef94f8302a37bbddc631f2d3a81a852a290ffc678e4d62703f5e33a377166086420c02fe1af01556912cc15c74a65949d0893263bacf151f9f3de23ea4d52fe55e304c7000fcbda7e4da05a36d0959d61d2b5523ba425279698c07a52f7e7805c745be30460d20c56bb57c0a3e35bf3a6e2849f7fa3a84f0a3dcf07224dbdf1803585e84936328596ce4b4b4e11c2939e9a3502087548e8ca4c4e5b3a715c3eee3885befaa5c5bab1c48c66f2068d8f57420aab39de7e791f86fb8f77dd73083572e5e0f7f48171c9d07dc84ad8709e0aef9e67c01bda5146b23e67e3080a46e31ddecdf0ae8b3e61028018a177c9151074eb0cc8e30d6d822a8b79b6688cf5ea521cc08826fc32cfb01dac6f55e9db53394579a1c5642716fe94f7c48041ada2838bae4233c444a9337eaa8824500230ce82c2de94f553b4f20e92df229fa9a78ad2c456025acd8dd981bdebb7311b0a2536ce1a53818cc16173b9ff1de8b48218174d0f3b14d21a4cb08696bfba84bdb255c4bab7a2f5a358924f27285b74513d7374212a77a6803a7318b863251b547d33ac3e1a3b5a92b0632e0adf6b330117c47421c9ad60d24c1b9a6c1fae12702792873ab914726f91085cb88530a815db4a00700b420abe6ab6493968a2d9cd1d12ceb578d44268ebaeab3f891e586f6b42d2f4ebcd3783cc08f514791059b8a617eb6c8a9c9397026e561dd4f7caeafb56c5f5aa7906ca2dc15c416d26abb1253468f48ff38a2d17323debad884aaaaaebaadbb2844ae47fcfba5871f1025eef282857be48af88b2da9bd5ff9eb9b490d385a830146e886036a68a6071e2279d4eb3540b54068320171c2b133076e0eeb0592143dabb08a72b70fc39b96014102f00608da599c252c5a754c3a1d603d2ced59269a0672607738326b1f62311f8361d40b2b6fb3a6e06564c07525e5d9390e745f26df1299161a521dbf43b3604c0feb025b6cd86b56b97835f22c97f4f55ddd18ab573ff955199de677e4a09ab05f01a0ed7ea2db74e9268f2d54d63b94440e467f50ca7cb191581d50d1cb3455881dd19fd0f9ac649a8237a9ba0d586a5b7bb2aa006f0836f20a17b2756144fce4fcf99a8c82c76285c5d724477900443ce98c8590c82ce8d0f60de73c28fe324213b238f138139565eb55950e7f91dd163ef2d4179bad65e311b2dbbda64d9de25fde27fdebe7825ecae7978688b98e75b9f92cebe7e7097cf2a497e1bb3081932415e835f13c4cf96b3c9879f33b4729a8b8f2e734465b55301d4a5a023758565ea9f77e12e57efdaf9b7957102d28ac2b50cd7cfcbad3e429d3e79437fc0bc6177c8719a2756e801c09c0f7fd2d83c9894032cd321ff4a8c397aef75a1bea45398b9c79fc4ff53eeeaec7a1d436c6f61f8f546f70169821b10fa91feae5ab505fa377529bf0f51d0b1ec80231568d07df75add1b1c2efdd1e8b0932f147826efbb4699ce72478737a41316dcb0397f6f0541e4b85233675a855e150c914e7eeb2eceae47ef6316a946f45dd7452b0955ecbde24797e1570ed69eee1318023153512b09323637b941742df1d444906a5858ab2c0be4722f029a787813d8d7cf15df4044cc84069a1bdfdc28f62912071e984982ab7974f6cbc02f5ef897370bb3eb625979ce754c78f2ac0af27144a98ffef9a572668b5d30ca1f14513340721db423012f67e4ecb094f5b3dded3f18956285e2d26f715e0cea5ddfa3341fed4cda5279b0622f5264d959c8e0b7e0b48930d2d0e1b5a33cb533b04dcd3bee6711589c3caca29f54b6b361bc2ae32f941486aa2af79232c8bef2e4cd1268956dbac2936a15a5c715d7df2a8a55216e9343bec598a2f132a9f3d458a2bd5a08a203280e2598d9277007b48890e69e695dd41c2d8fd9f628b837765387da55fe85d472b8e768b2b5b3e028d6d13421ac1b78fa5ea317c708af8853e97c53dd479c9ac8866d97f9fbc34cfb86f11e01f4b422ffa4eb8cde0423c058b08886a92c9cd001a620bc8a9c8bfae44b29870e685ae94b3f5ef9e782caa2782ea328d3948331205d7f03eb19e2b9d41610cc587245487e6f651c2d019be0afe5d44aa8ce78088987752a25da835a11bcfc68abe8edb1d25d6a8c3595bdadf7c8e680b2e0edb8f51aeb7c46b7adc5b295ba7f4b1ce74d93ac89bcea8c463458bb9a0e8e177317461ae3ef3a118c6c4a30e3496022db2353d7cd460356f0f9755d5e9d4575f71ec11508a64f5846ca9452481e1575feabd8bdaf5773d45c0ea2e0debc38c6ea3aa8781b3bb8e945157d91bf9c7212386e63ac6cf7dbb51deb2b30e1b3d1c9fbb0c2339183672010f7689030c07a856e2b9925cba50d963ba41a86f9619590b0186a9384f9ff02be4614573a9c10bd76f6788b1188d1ad0a6bde34ff82531bb1de34a586df87a8bc587565af931db24c179df2f8d1a9aec090a25288ae55d0d5ad06fd040fdc3d25a2a74574435df0ff65154a0af2bd054e984fe51db481d2fdf61e64c92df1214ffdf48dfc0c10809a14bb30917c4b22c57312fc88d319b54c9e3f9d609e775d77b6871b3ab5edc6c452c124e204712ba2ac1de82bec10b736dbd655664820963076cb4a4feb38a8a655c7882f9b7e9061d87a295fc143d96ed53a283f03abd423c66470f21b5e1a89a466069940dab89077ab81e291a9743b5cb41edbbe28d63c7a5b4fcc1fb91e8c6ecf54ad1f910197e788a22d909a185d4d8edf28f6abd7bb2bbd4632959b09f30669c7f7688633992d7232d9c3acff123e83ee8a26cc5e2a95592c0f90426a8fea994fde4d2b83003fcc8886b334b02d6255d8459bc114f7ce5a8d4cf672188f54c78d13314c0c4fb4a182445e88ea281b9067c8ede378a30a4904a4d9cdd59087f80aedd1c35782c6db6c68c5870b3935c230132be3b1bd0914c8bd3efa4f52bc072e4057174bd8aa2a0f7c2d3d5f61b1e5a41a38e1430370cb5d10786801959f7edef0e5936022c92e3c1467f3908aa49977a018cc6735e7239db00b1baa270dcfd02dd2414f5dd18a3dd0962b6e82d4035015af9f6169248c6244387151f7950a1b290b64e40763377f9bd191ca04553c2b9f5a13a33d4969c570c5391d12f41cb09e0ce19a9aa6ec21eba1c81fe8790b82a15fb8fa5174489909e082a8bd645d53bdd7f48561e9076f5b6ff1d65af4095f556608a9edf634a9e7a2f48c9bbf897ea1ab954af6d8f5bb946f741f3919af64f572d895fd5b86aaf7b75110a2a558e17b8d2e8f3ae9ddb52cd7d9b4fb25b1a6c44e4cb3846bea9a1675707aeceffbfaed7f75ed5728230e49b973dba6cfe27e2326446b951f5e99083ac8ff4322a2512d5db476ccc7015b482d4f87221c5193912f2d7d1f8fb1a38ae48a187e8fd85e8b6905e270edb18e94b3e5055387c36d8ff5b585eea9dca2527f8b55cc559af2468557f6b9a1190555507942d6c0940258e15610bc626f2b641c1aa335d954f2ba0073e803d261f1bf826bd2b53b6a0bdfa98a618b31994f5a3fe8901f2cc7f2aec363bf33879686b34887cb94b395258a329982f9c32d49de7783c90477d580f1d1081e5e26907e28728e7d55c491aee47004f34e567fba2f14b01c39dc9bed839561732e0b9105b32bb899477a0f731e49d826d17d1ce6878af86b2793422a4c864ac660585ba8c433f00db63ec5fadef93e52a9361a6b8dcee0085e4ebd63b828835279fc7e193c43e17840e7d858ed7f886377874c52fa00f2a76ee0bd21ef1c33c45b8fcf1f1c7b0f5c6ce71c2b45596f43a771699c16639a7c4efcbc4bcfb326b54d9bc4f10107233e849f2c6733c0992709fcb441f5f210fcfdd8b9016a75d649fc554b957894d9b4303d261ee7baf831882fd49eec6eeda24b7bf2c1858a19ecbe9448ead963ee781900b7c52f589b032e411d3dfee90efe1b1c01c89c6236510a5cc0ba5c550445ac0db28484d695cca3aa8ebe744774648581660f085eea386ba870634c0d30ffa8ae4a1df3999b3cafe181764cb7a573cae6119fe8e49bb24cd7a6c5cfe86aa6ac7ec0a5228955dfeb938c806b311df90aa8e2749af334aa836c9e08dccc2ca23b45523831c3f2b0207b8554c24cdc93444ea2bf2931329bac86bf9546181625037b7f9b5adc421845843773d044cc93acf6cb54c101e8440e2191039e47cfc56b3ba0a67af4e0821285310c085ee9f4827b69d5d05f27fd81ef147f8490ae6053ef2bef7db75ad7dd42d2757687cf93873b0e3999c147145fa26078ebd4688f29a4a9d83f4304a0480389592012f2c127ea247da89fede43bf0ba4795c3582e5208b825d9c64e557fc7146f504294b14e4c25dd7d1b263599bb282244691e74d8734e6f30508b040500f66b914fe1f646ac22239b3e5c7308a9d4ec6112fa3524eeb9425bbb44eabede22acd4c4bd9b93390e7579c72b3973a063ef5e43824e04025695341df35b3f9350bb7a0c27e01dd7272446507f145df824124c301f178eb88f90acda4b6d20e3e30dfacb5130f9a94b9ca909d464b48ac958844291c8124086c55baa2aa4977550d3639ae802982e429fa84f98155c0cdaca4eb3694aa8f4e180158d57882f74fd2015ac93fc63e42420fdc555193bed61b7c1853b1b0ef19be44aa1fddae70353c55a88a2546630bcf8b91feccb3eb2a593cf3a8bd7e0e42d4f5fb196e7c95838013305783779889cc0f186fa09d2faaacc84f6e30b1635ef3c40f9355f31fd0f332d9cc066502beb764b22088f1c392d4ec84f05cb71647f91126df68fa8e977d647ce7eb3e92f532b2975e408b5278da109902cfbf3034601ca8d872508c00af33020a779ac3a351074ba5d475fb044b641b74e3694e34014ffe3d0707828f23210fe8f28fb1d925a5c748d6c078fee7d809b1ad4f071167ceabe022fd1440dc4edf7b5c1a6a28202af6ac9946f732ecaf47f8ff40826bcaeacfa9dab0181d0e14a40edad000bc234609d5f93b20b487e371a08b89866b448f0379c3b13cd3e8e34e1ed8946ed387c1d536906748f1fb2de0207b1bb7af06ad351429b9c07e40c789d38449de9b783ff820270865ce912cc1fd0adb9c907a9cba3b6c1c8d913d179ccd81d712e632e099820a07938662034f8765c91eb128afa177bd7a6c81595d0a7411d83a756a8c996ebe2e99922edd3c4d40b038c4e28435d7b0d260066484579851132a4352231d1639aed239fa73279446607c98f4be3673e3639c918e00748f22e52ef06d210e3908c23c28b0684467fc390d4281959d5f95b37c4ac8217461a355d647ced32d4d55cc62ae71457a755636b3d9b36c804f841d261cacfa7edc774a741a081d37f16d3235f1080bb0f95bd45bc3fcdd284cca3d8a75feed6d2b2bff410b3ed47184a2e150c836032c5bf9a0986258b2e7bb58b16c36ccf58630f5ce466829f90fff426664fcac38c78c8994bf2b69f68bdd9c24f2a4b0f3e2c69d5c79a73c7953abc97ffe4a593e898f113bc15160ac562d6af81448129c8f2b156d5dfe3fbd952a33849b096a9bf8a851b34cfea2b318e69af823f128c17da73811534ff08daf2c0494db61a85308b7a3c97f0c31bed5c65f5a64d718563c11382ee462fe17262679ee0b2da744d09401dd64bbbce88b6f8a0a9daebe5d07f50a92fb4dafd005ca1072a8d9125e51732a0654ccec65d9a0a5afa80521200986fc41800c6d3d387fd3e4e92eb94f1f9ed251ac780e446e8bc3f1055d8c2c9704c33a789a37f936b97b54956a071fa415a9b5875cd55cba47f417797bbd525a58bd71c4783142c86143ac122903f4de3add26efe57d8904459d361ef0407e9df7a8d411869d27bb27f0dd1f9f001c61c7beb0f1f53d09a4361734ea4761a212cc1a3a8a27fcddbd46b5144b7d9463579ae19d4885ae15284a96df6631ba7ca5178a297574c2c2064710eee43218ead857110d92acbe3844a2a0c3e95d6c4505fa00a831c7c9e0c243794707fec97307189e4fa7197bb16754e425df3e3b3d7fee2810c9a081cd3066746df59ed4bae4931dd8f5909b44c12ca00f536c123c302e9d6e915c280b7dc202528c183c3cb8b93b8806edb3c3910950dc78ec385b253539b4984675187619ece8c7eea63bc7ca7bd36ba71f99620ded688dc8087c386a77ebd1c6a8b04893505f9193e4d19a77141a095f6cbdb48c672336b9554748079fc95aa6a2a89f08592f42ed15cc1f1a1b4361e6a66c87c5883f510277298b0c5156cbdf7660e9262a18fc6193cdc76d612fe647eb596c53a16b758a22a833f9d91669ca5f0cc61b821b5898a0e3840a64b09ff288b6607bf2203712e97a1ddde146c5954da0cf63069c3952a540c998d40eeed513b38e5098ddb7b8b0365d0e9fa1c5fff5a68df74245e91707d6768fd208abe010878e591a07ddea517efd464c638587115f44bd19edf904b8107ce7f1559ad48f086fe783cbaa90c515665567dedb915d3ecc104a580184770391208658285d8b2ab33392c64ed4848ee9e17182116ca5b3578138e7b1858811be5ac083a324cfdeccfae4bb51be5d6a3fb99e442625fef62ee15570f9344a19ea5e37d7ce45f0482b87cd0728947871bc69a7b857a1bd0d405a6c8a660f59f6a5e3ac036f311eee07a00e695aa79e81fe7b3071ac83495005133b00a6046308389329d8f8cd07b0d6ff811d31044598ed69452d56d375ce6f4e465c529412113b458e2bc2f2a6c037b647d215de97a121d62f8935acb9336c0ece604125da5a34124450142b056f607e1882b17eaf7cddc6daadebf3c6b8ea6e2448f4001a490542a09b136bbcb518a4bf50824c32c9105710992f688cae2bf948c33892b99eef96a86399312b19f59d5f65a2072e33517229f03205ca42a61d556298fbe3c194d437f12386ae99ef28c7062dbab9068865d97d10159dae2d2733e202c90ae1d1e956f4f5c7958d6190b9d8f2fdf2cf45bb663f00f1500c8933252152d152a6eca9c849f4d0b0b3c2d58295b4324e8708605550774e0a346a628f34ac37108eedd1996237a295ba7cd9fb399f07567936fc260b34bf345f855eca0d8bc586d73fe3d0b9a0360ea37de040791bcae54bbfdaf533323e9046909ecc140cf0ec71421aebb4254a2fff6bdcc4026664032da2f7b273e5e6c0b3e7bfe73a80e84142e8a11e616248be1b5db33835b8faab4527b7767ce5cb923534bae371019cb96767eac3f43934dff965d40e3ed629416099d3ffbddf01785668e3a526c7ff5576b12c8247e6a2437cc7f0b40212e9fef4736c11ea7f5366fad2caaf2998a1d29d2c8637ab7ca1fc7c6211c33c96cd445976211a093e084ab5ba427df5be3853f8c5b80b834c255f653ac853ed085c7995f46ad188770f3cec7e273faed62f5fb7b8b594f6e1074c1e42d34e1822509aa5d7b55dfd3f447994826d201acd8c83a9c7823f78f4cbe75ffc404aa59cd6f9935257999508aba700d781d0e59cd8c1d9a2a0c1305a92b0abdb6d39d9b0cf13f2f61c422e4e38cf6ef5c889917c392f996349bddff185c3b35b2ab58a89f2f2ec88481a579853477a5f0e4406939c1292cc9c7225eb3f20a04a42e9b1f6d9ec87a3bfdd8bb56ced179a1b502545fa90d1a7e21284968652581cd0ff3b4fc305833adae2cbfa7da18588e4ec411a698f1feeee58ca6af5757412b19d605a6b09274266839b1d84591c90bd6a09715734cd870f0fb455d2cfeb370d8a01e8774987951db5ef5c91da18145273c94abb1f9d67a512d29252945526ea33c51d88df67d7f0ba7f259c4de023f0a6cc326aae11743fe0298e9fe9012dc20f1182a1ee2d6104bd9a23b11548091d4520863ef993af15eb4133179ac73b77e2b65519b080fc440d888d7e8f152febdb798fd152ea894b4362da96bc458d0bc2ccb737d3ad639c9de11b6f5e731d037ca30dd9a029821465281fa09bc4bd9da3c86337f079831e10e5a0347f04f6da6af50eb361ffe3735e2315e09f226faddc5071275dc83f5978e5ee6f62272772c60cc6160039e69200a7a1f3b8d86833ee02f6fa2f6c4afd7123b2ca4f12e06f38ede2710aa7fd923c51d4be96b7053a0ab73341f1c4fc6f8409211eaef721c77d89704929d8fd7c64878a760b029557adaed0740062694b43fd52cbc4bfa8cc2fdc5a7e294ffc09978aa667deac95f4dfbefce60378ea403d308a2ef5a066fe5ba0f442c7e59fa9cbfe39886c0ad18b6b519a3d1428dddd114b1a4488ee77dd740c0201507ff31bbe0316b53e69aef300a1dbfb363256e049420b771abe3f7c69bd270bdb02f5a2d789d453b906c4d3558452f54d17180f334d33935b822c5de42e1ab342776a8ad7e616f344546791e46555c7c1a4e73546cbf3fe045437ae529f157610db505d5437e4a4bee594ced9cf30c48195f33fcc8254fd92df73078970316e63a7a56b884e28e4affb4917493dbc3c8e6ebfea579379036afc45801a228196867ae28b2532ab97a2fc97c81d8172946c4b872a44250339c61ea92ea48949e58866680e1f19964ae9eb48abf103d18c20c8f62a4321153171ba8dc68aaf296a538b88c7b8fbbbce1c8b7304679436567e0b9a6d190cdfcc673425b9805c21ba7f7169c77a605de2af08a7774b076483c06f044046a68ac5cffe1d11705dd5c395284befe4744c4ebcc16554c220174f65ea05561144261af8c020b9d1ad5572d23b05a7a1a2add56ee80e51ef2ff8e22c561d4f7f3dc949f03989b46ae500b0ba104aedf75863af73fe4265ca3b773f339fff3b0514d78698c10df06a761d2b29cc96dbd34038b879ef0d92e11449cf12d937ebd62abd6b09610e429df1dcdf09a692915bffa0c3168ffdb616cc8cd868ee0c87ba64a55453df46d9ca97880424daecf5f3bf323dd44244d58aaeb798a220dcf087805f7fac95b8298df2e3d46ba7b76f0744fc0fc14d2cb975bd4babc7321e8dd0123dfb18daa6d7934ef21bb91491b10db2ff691dc578107885becb926d70e6e77dda508c81e6c8745da108d6d4a571b20289ed7252903d79550fce87e31a5869a0d7a04c9c7ba3d4964769d0da1427ff67fbdaafd8c4a48802555b3acfa8941cc47db23659ce48058d3e73e1f05ba5f1102c965997cbe841644a3347da24bb4b684c44ebfc889d9fa6aa6b29295fd28703c4c51e291228eb424c94821d3ca3b1bb826828541fb0254e2860fa02a32ffc15d65faaff9ecee88d35657e332957d209a1a93127b2c40ffdffa8863448f26c608ed5f2ac3d83ad9ab563349ed00a4286be06eccf2e467b92e38ca35cd06f39ad2f2656e04524a5dc61e018c59feae0cf16ed3bf7d45fd75598e77531a4c29cb47d9c3d1c88caaba4c98c972d1d1662acc20be3fb8e0f03bf6360bec0e3bfb57f134f8451b9783fff0a4272eb74cc88ced38cd7d2be9f733fd82ee532e9808dbc5c18b4b6b7f12348c12e7ef37696cd93ab4fdd7c0638326484dd38807f5014b4a21689e83d088e4f5a83fac542967c2e48af237e759233409864130fd68faf2b9fc7eee9c80a5eb16c851f9463c129a1cc8cdc44caf6d0a4279943a8d4ed0683b4a6fca8d9e36f4688023c7bb6c22ad9d5cc2426177dab56ba8426038a6a8cb2c9dc99e4c19b998259a252ad0f44a694c79387bb04c83d13dfa81223ae8d22b6d8b5e1298c00d50d9666c93d614bfc2a57b1855e3026f46eca18875a7921a74263d2dd0b19ae350340547d09145440e38aa30c6a170241f4a1edd9ac3ad6b21128c0453443e65f08ce0562652d2c18a8085df85e688a18b1aa70db7c1bb11a54c63fe8ea3f7479797ebe0540f54e7b96b4bebb7d935255dfe0b75e82766b8d96ab379a8a2af582ed76d8b765765d238791f3f7198bd361eeb98102f55e72fa1e83b434ac9f6a149ad6c8d0b2b9d9462e987e98cc74d27e92d45ff3665e7ea9a6b32c3d3b7a5af8aea4e6776f4a472c8773c265ddf96a40596e29b1dee06c2b5b5ea1b9afe203093e4f070931cfa734e52885c11045f8b8e07f4255036169bd92d2aaa08d2a7219c99e6ca84d7b4ebc3a1b009fd7044b181934bfa9fca9c1869e29c8d7d927724121c221949c32edb2aa3e90bfa3107a6af3656f039ae1bfd84eeff7ff06eb09513a5b25af64280bd65ce2ead2bb97c71e705872ff7a61dce8c84a7eb6f84070c8563d1bf956bd116dd5719ba385190d0c07d70020b1fc4b7d3ae392f270e64341a54bc832de61258026c2ca689571cba16e930db4c0054b6604d65724d70f4c68c5cd96c90e54364246b62d0299be40971420686f904e1866b97f86543509beed9f0ab53719acef07692703e0de081f68592189a206f3b129e05f69ea4abd5e8d6423003a9869e1c406365ecaea6c6a89d9e0913a122537bd373aa239bbe5091906d6c3c887bd1787635f04191034009ad0f49d76f6970f104cea4dac96765fb68cd58658c0eebc5ff192601454e2fad08db4d15cf3dc9605f411d3e806d8c266fa787e750510c35b1108af28a4cc6263d938c0e4aafa08ecc82535368606ecdc1afd16f443dfb21276020e4c3835fc329072d1115ec768a82a2d163ccb60144dbc5173f5bde5f2adfdbc750792f7cd9f8c95e482c0425ce2f9228dec65715a886c51572e65943077412ebfedbfbcf65ff498635600bd600a0abac2ca0b0f97faa701ace7cad863a8f7773addcc3f2f50a97aee390e78cbd9ce41625d8259a4ad9ebd1309a58ac6e75f8f2b00c1a8d8b8b18a6c43123158c88cd69ce703bc3dd6538cb770e60b3536741c016180c12f61b8328b8d7f2c7a27a89099cfc13bcc3ab8c37cdb4d91e34c0f46ef197a5be76ab8307be0fcfbf41e9ef5ea388673a056e22b8ccc6be7e1a61f47b3f838460f8ea91f3e07b10decc3fc587dedcfe57805a9d7bb72a4dfc32a3a705782c671b370ffc655c142cb688d34564450442c400022f62ed2ad1b8b4a6e60b933afb92e513c900cbda434368ab6c037cd32dea218e52278d8548ecff661842ad3c72583ae2d09e1cc20655d5aba5d1f4918c41b3eeb772ab3824fe7337a79203131f80b97caac367646f4e2370aea6aa33d63ba66f8544d315608e0595f2dd908553f2715dd498d7c56848fff02aa418ed9bfe12ac492b1df13a6d081edc94d744f7e9d9dd3f70c37c2dc6d2b8faf5e79153b0ee181c9ab05ae0c21d0d77952ca4bfb2007fe6e7dcd685edd95db20aa7b105d598003f75d8bec95969ce80399afd9c8ff926078a0e05a669be41cb2e611c83bdd1e21318991b75dc58d2e1d9689a5c1a4941068168695a6d455be1de0b587849d84a9b5968385538849192cf7d4363bb318405016588e0988ed0ee18db7d2ce9d64a802a4e4899f84d25b47cedbe99bbe0fed4005437f951bac3ee3e72ca3c98e1820659d34243c840530617d2369d4833d0a6f258c4ba598454d2df184af9581e160b68790b12ddd4201fb4b1b2e4a50bcaa2b3a77dcd98143dfbf2aacd594b64dc30fbfee24a0b1c4b2da12647a38381307c7520be765bd700979ac8776b2dfbb3bf6185ad6c9b64bbc24386a153283ffce19912a63cd8eb3395fe44fee934913dac5a0fa0786496ff3bcb2aefb69bbf883e99e340aaaefe4bf4a2357d3b15ca2d07ba29c66dd6ced67d05fab5535165d6b240ea5908d847eeadbe8ec59c0a276bcb7dc137920a151a10066c7130cffeb062e183bd8575c2a595765ed5fa5c1636172fa486d4ad9b4f435abcd1fcf26fb81ee0a89e090868d00900974a8c9d14d2a21d623e5ebe9e2aea06f9f2fa254e8986a6b26d7165e89f65f65a18017220b4d45d0a5d5a8571bda5bfd2e7f3f36c8db2b249af4017db8418e8f5c997df52a021dbba49f99b306868a85a346e7d46cce54ee173a81aa8787b6c0eaf935648d5cc3310c74965fbc4b06d96ebe4e93c72b00d40339c3b19984323685252748b5f16c6cf2564257fcbf6553cb1a30c51dbd4b4b530613341a3e4f8f90dc2642dc88985fe3cdee700790439dac74c43f8f74f28626d8abcd10a808a0c595a85b305d86659fca31e45f7225c108c36dd76aaf364215cb4c15c918009d679afcb8bb8bb3dd2005ef8146c68189fb54d811dc47b9e5f27fb1dbe505e29ec93a257acb57703477c97a7bfe8ae0ba21ae7b14f863f50037edc5668661b88cae50d087caf0397aeb28e50a8f7196e79b38befef799143942c8f281423061dd5149d9d47a51f24fc7a05c03457a2e983d222ef0ba2f248528641276c0ee1e2795bb8b7692c5de479e2246350f5b4589bb0236ca75ac826e37d80f6b3b8ce46d0c07bca4cab3f10f3ddc4eb21e5a057dfed0648f7b99d7bde03122d5b3af103384b7fe8c55ff8a2eef40033d14fd497f5282b975dfff4005aebf71dda5c90c62de621173bee05c84f681dd8ecd904947516cee83eef0188fec253102e47a348867480aaa8bf56c55534b88e5822e28034a621445311162d904ae170f22c2496615151c70b63b0e8b0fd9e0c864ec51a4891108278da51917053741e458b3ef120d047306108d06ec20d0288e91be977f0e0efba95be1d73ba039292a29099a579d6d082b34652911fe2e091e88c2f8e670b8b3b321b37bfda32d84785f0c0881cc24045dee8376bc4fc19217aada02928e1a7ee5076b7d105107ecc5431e3411e292a7b144dd2b70b8019bccea25083067dd419d3af2d18b2b7133f3a2480f321be39fc4585a541fd9d9e4980a57cfc76c11a65834131d1e8f42723b300f14543401f25bc115806f672a8ed022d08d28536bc9d214436835f1ca0a50103639a3f9eb88ed5c3176c6c86004ec348a326d0e19eef7283da1c5aa174b92623b71145efc69997851816f2ce2ba91827d6c652e2535c222da3b56c095f0b159cc05530d09f2b740ca1a769c09721c3fbc80ae37e30c672387f6065a05decbbd6542fb37ecc8f097ab3d35a021c450ac07794a71deaf2ace2733a069328f36a02244b52fb31dabbf89e33d97b2b2108143956d040c31fec0110ddf74ded5261ca322eda45021181ff94c9cf821a92b89ac9baabf92a1e0ef74f4951038f264b11480474a0f50ce3ddfe9ba0412c956c810c2e960efe4965eb1cc8c0339afc0c64c796bec74ce30312230de0158cc3907f5acf8e69a56919442804c8dace0f2c0da5082249626ab9fb76be4836c049c8434a2f6a9e1280dfdd5da81344ac1a1744a2e6d0b563b4505aeeca0f67b234a3e5016840e28f014667721b8d0c07123881e93c0055857c25eecefbde19831bce7e19e934aa7e10b4af69685ee9eeb87040087382eff2f20d767d88357dbc2ea94269c969e79084ba4c7946d2c104d3d2eae8ac44c15c5b6c1b22b29098213e49222db00640f9bf84c79e356c2bec664fa4f1a2d137dd921cb660fd24ff8a132858fefc8da2801fc1d2b50dc1483cb742e52c64acae79ee1e45abf2b690aa74a31739d9d2a319cc7b67f06e20462d2c2e95090c4fea9ee366dd538b29bf3ab40f9218b5e24e77603646054a07d150209408b3289b3c71012c15c97b3fc3941c75ea5b73c01d87852a0cf5152cf1014200f247f353057c022bd52b2a547f40cccb0e271793a47bbf5b2127f5ef02a5f1ba6cb988cf07b9117a0fdbd892f3ec0d9f8ecea24e87cf42396b1c16014a9ecda7af5e989c7b71ff939f7ea6a5feca5fd9f1f2d4f76841b411d9d1ab4b7f4892970747654da29a9a617196ae95abad82f9afc2e0e2930b56200ca8b62cbef5b6ea3f507a56d9da5cc5eef719826ceb2024f8758e58f9e7bb7cfc526dd02e297a30f47611f25de04df13d6cce1907b76b78a6e6eb3cbed32944338d71c0f58c642b1d7ce1ab9fc2c7e317845f81ee8c8454c2a335d5dc2e107fb5ef39725bbb1aee3d1ebb4549bf2cacda07b3359b3ab590dc7b36350e324a6dfbc6a73d265c61338b5dfca97405e29397b133864fd866a9553233e65866a98c67b17cc3232374a09f8233d90c444dec0e2a6551653811b1032fa8b50788cf2dab73826ed78d79306eaee8352f9d14c418b6e09b1ded289aaa39ebb8e845afcc8478cbdbbb735e8ce7d52090ecdbeaa943b9ac1cffea1cceb76cfb89fd39c411b31bc6bdf6cec1e547b561d7038aa1735059c0ed1d796b2ebff9ecd173362fe782a87d82bec2966dcbe05a29c5b95ae5496bfdf579d19fa573b406b3de3cc319f492250454223914d09c1bd9e691b37e4232be8ab8ca90fe44974eaeb0cec84bcce3c006852617d03c582404bc967b65880be50e6659369ecf113f9eee667c5eda7dcce256e5890ac740424f8ead7a573563515ab7809cf2aa23a910dd42ef80a27f7d58e76924a0a95db2daa7ebb136cd1c4ce8a785094206f2d32ba9b41545e8be5c66051f2735b6ab9ee8a18899c1bddaee0d73d91da71ae5e184e9f0885704d9ba15f70466b7e10c47bc93bedede2e01d5b64c6a4885d79b884a25068f3a5ce98f99fb25d21a6765476255b55fd35ea2dd3afe280fb725103d084d217aa65b98ebb413eab5e2d8db03e36b152433e4b7ebad89c62c98a2906348c56bef5f531da28f1bbe337090380ebe2135780b2efa71c55c059809346b31a9b0bc756aea0c99db7743cd42e6757206f06ae83136804b980343cfe0cab05089c6bb87263add4820f21877b2b8859a8a9350b43a07190cbf3fa6037c6fe83b29449fadfdd87b32c6e19eb53c794fc12a15e0bc193219f327ba0749d1dc16ec19167881e824f3d5dc84dd5b0aef21f3258cdb86cab0b3c5158e6c7ea3418a7fc7aa2ba691a46157a21c51b61439e1982652deba4503e47d4377eb3faa5caa97be6a5eb0dce86cc3400d249c5046e6dda64b815b6106ad4c21d3401c0e3184206f7603d1d98a8113a61f6264748de5572abc76eea0f0ad4f6ee86c25c11662ec697ba503e6e110a2ca185ce9b587ef2f766ba0811057620c0c5bc2276cbcb0ef4cb00e4569517b63feb25aac9253106b43e1c8785e5605203f55c34c4ba86a0304725246cd18aa7abc113ec2f5c141848adb31e8741febca6234e6bc83f3541cde2102be70c6cf9414e8a952d75afa007db6cabca8d7ff2cf06a6e36a0cb26080c58e15ed6beef65fa046c69140cc40c3ecbab805799e1efbb969979d14ed0f5bf26e173bce22f1806083aa4f9ea1202f6949c6db4f852e1c8892549419e37c0fa5431346c0e3835783b1731862d1e8dd57a8174ebbd95af98da1d6fc246e738bbfa62dfe5e331db25553f5aecca2028bc9acb4732962dd018db2b25e443d2b4e0d992e0733310ecea7359db4c4de5629fd721a52209995422264a651807b80fa7184b8adb072a000cce3eeb9da96764ab4c97b7562da485b2cb817d6a3109db4a0bab693c97e568c739eb5ed73f32b41224b35344b96baf3fcbaf28a35373ffd34cc2f05cedb41e88853b5500796fb6f846971d6896874107e54f1dba375bf26e55efd6d6b87e04301cdf68dae44d009a60543fd6017e2f189dbe64c22f2618564090e422023122ffe2158aafd8ed0a15273c486f93977cd4dee95db7932f0d3fe6138c5b94f9a39747f7d3f36a2a0053bb8e33093c4c4f7fe52d9ea39e1e06f0aed06acaf6bde6b1bcd902a1f12d3984f1e5ce05bfb927c67986205656536c721edc70114eff0116a6e40c985cce9f8c51db6eeb9b5a987d0654a14e7a09b941e700574e512fd708314c0fb08c02cbf67e3060700af3f5ceaf7ee12bdb909ea749830c496106cd2f47227df31b9319149ec6df35dd643ce2aec059e482c24a7a8ede1aff0651ed599d4ee96b5cb7c7db8c23b13961f8c91af0e40ee77dca8d10563ad50a1ab0d9510b60b3a7cc425ca34f504a20ece68eb10858c9934ea9bd3fd4bc1fd1a2965d2bdb375f1e55b5c52100d828050621e21a05e0dc6c076df76bf5c7ee506f946b6eba62acb062e64789b063348b6bdec3570ba528a5e67564307412fa4eca5d1b264e419aaa4eddb1fc731dede1a83e85b5f11e719fa22bdfda3486786629595fa6e851fa26390b864c85bc40ab7c2087691787fa8d78608626114631f153cf038439fc142c44e762be5b888d2b89fa1e4bddd1f883a4c89ac4d3c90b77b5530843b440be99a8d86175feb2416982330393ea1b8ae1eadfd5cdf292a93bf3560f81a7d7c3c5ea340dbbad979489c5d4e5dfb2f29a49059087667755e12cdf2a3e562535e9e78344f45806c6afef82ea5253b3e152b837252ea8d0aa98720d7fdab30db31971631b681af5614816e69a1051827a206c5dab2cfe54f4b30cf689aa29c4b455fb94a66795c7370802d67bd27e9b05072d9791c8f699dd86783f25db4c3926552b15cedbee1f714fa028e4a3e95e687cae47f3b4c094eae0689ba6f96ac072efac0975dff5981a98a50218e6996a0f4a16251ef0f93b380fc07309997460a684cd3013470b410850225fe969fa8146771e2b7fed08239d9ffbb2a624c2200fd30636758fdcb969a4e863004ca473d95fe1c4a1a6b46ffb2c1e66c12eb8aacb79fdefac1523b03cbfb360480fd5350eb93fb7a3009a77b81420d9b4e94cdbbb025f0241ca3508ae54ff53de26fc71fa8dbf54bc454682ad28c9953e150663c7d3002d74b668b90b802c35d88b8b980568d9f05807fcbe18e83222f519eb458c0aa1d9dd97efe948c3d465798611d336287e0155019491027ac01d5d5e30d4596d0e01f3b39390166a867feb4a831bae7082b23ccaf30f7f6cc0a6d71a1e559a92fc5607e295c73f98e8751b435e6b1ebe33f80773e00140fc5cd122227e50bc9dd7eb9fd669acdb88cd600322a6664bbf98edee5eb9a594494a19a5059a058d0561f99ad92f1b96e27d9d762dfdc58d728424535a6adabe9b6fdff09650b4885dd895697c1b6bea019e197474d84107890e0f36e804e9f4d009e224e7889c217460984df0e005414620d184105e5000268e8aeccce07303239ee44821c4c646cb4110201091226be2030a4da43809c20621463f7c78e518c1480628e7882172946042b22842ce500c9613b445960d1d393b392e1b54d88022664329c7861c20452a3869c6b9e98874ee8e934ad5ce7a33262695721b6a147d1af305ed6a9df3e64e93712ae579f7ed73df8c7bfdddb5bef6695cc7a933ea5b6ae97c7f9ce9da7793bf6b391b3aac695da7755ad7c29f8c4e86092de6bdda48ba0b352f7fd7cd39e79c4cb1ad3da594525a6badb5fa05b2b57777b7495bd3de5a7b87b6f6f762ad0b658ad0813245387ddfb3b0bfd3e77d0a451676f7fecd40e1a3adfd49eb2a532862a1ad697eb435d18572afe0b0ed37de017532a695ea9bea0b96d354568ef6f1a03d594ec4c89e33e64af69c6537e43435774274b1da52819806380693a67e27c4acc13ccc568dd51a0cab2d1a4c183398307e9830b4af8f9f601fb00c700f7808c7a01bf2175d899d6018e0269807bc036682611346aaec865418a67a71b5315919a02abb72d74a6badb3e29305fde5459c06afc18db80d7ec491b890dfe038781257a281bec473701dc01d170d70585d80b657a0235181ae03761d5cc85f77a9d2d46fcaa91f8489188989fe5a6d0fef4c6609dd82edfa1d4bcd3cb4aed8022c96c5b13879a652d96a47dd58157274324a86fd703c944c135ab43b04d2f627cea455fb70f436375add5eac6da78baf7d17b67dd2f9d7a7228d5dcbda9251428b79e3bf4cb5d6aa8955683325c5dcdd2b90a498b5f6de3b044406c69427c9bdd364a4686dca48d1da8b59cb0e33436461d3b7198786dabb719e160b37aaa35a03d62854cc39e79ccb9bd5b6612d6bcbb9271d56a234e53018c7508de3515a379c535b4ca5eed53a67b76e2f0be38f02185ffcf97f29cc4dc3bebf757c1fe3ef5015d83c6f74c318873033361736128c3f8d10d3eaf67e5e7731fdbc4ed3344d83d19e060e81b48b995fa394525a816fe38fc56aadeeee6ea9b5f60edd8b290f0fd6c479743484ebee220bf4b7195c38551bff8d4aa5daa1839549d3346dbbc0beb055efc9acac35ab3d9bea9292bb6a698283aafdc9c07ff3db4351867dfab4babd58cb1bd779df09a555565852aa550bcbe54594714398d9e28631b3055dc14286a8d2d42fca46485769d7175bb569565b4b95299489428bb7cee84c23824c136df78cd988dd6043075baaa001bd67cc46941f5a8aee41c76028b271da3366a3889575156f6e1debdcd831328144d20c8448e9810d36b8a1081ba01cd1f483c242f36612078e91828b074a3872846307135188880209531296d0a961e44d373a24369a669324933152e8c192ce331f3dd098f2ac86ac072078e588d500c283da3356230819d9b645160b2568191fdded19abf1e408cc8900a0223685d1f7c8d8d02c92a0b5580d2dd3a345960c0ecd0acb9c735e6166b326f73c1a607d2b5643677f7bc65c4c5b646d917575c8182163848c11f6e7a4148533838639cc3833c26ae45aea9c05576c4ed3b6ac71d66e59b39fb5bbaa76739462ebb0ed1bbf8fc6b3e5d67958cd6a769d9767bea5dbcfef6e8d5b6e53dc1a0eaed82726a7a98fe2897dbeff376b2cdb14bb9e9862a799d35496d78aa8bea8467545362d2d292921216d916556a344d922cbccdb9465c6b2c4c2546baeff74d76c41573cd7bb5c51a5a95c2c565b5c51799aa15cb546bce5aeb3a513d3a989de12a7657b58cbdaa2bf9a2155191d68ea17b6336cc7a82d94fbfea49f61978705f95dfb1c5a18f5ea96893dda2b5c1837d223743033e6dfc7992f74281ca7b4569f612bbdb1537cc1c2dc67b96fdbadf7de7b6bce33706e0a64f67dafd4f5879371ec5f7b4370b6b81f0e86b180f6f831a03dd6d9f087735fd8da8763e7cc1bc771ddb6718e01edf15f400bb595c28ccd586c6b01bd04dda8b68e5c40fcfad1abe73eb5ffa77b179065ff8ff72ee04a920ba832e4026aca03a2f6ff68fd2ee069ff8f56bde8e5ae2d9f774b28b2b05b1efc360b6c5989f7e6bee67f1d497426a614a568615676c74bde99885f2536b282c3ecbd5487263f2caaded1402ba9b5fd45c0943f1255ea5fe158388ee3388ed34a34dd5a9f3c96f057668ceaa44a780abd900b3548b72be128f5a08f6aa7610ae7d34f068adcba7e26f5ee42f1c31c3ad385b5eced9d74d249279d149d64da229eedba855b526d256991c3b309637b7ab9d7a6b44239a516978adc797fae355cd875a10eda526dd23d55b64d45ee18354615557e498fc0619bc6ed9e8916efd0879375d8f9c5ecc4aea2d3f014a3ca08a14596d36bb39479c861643e792daeab84eafe32023d63468eb6e84da73af40c4f6063f34b72b69999f91cac9d7998107acc92c86ca8028920f00f5286209a018fd110780409810492d8314508456ad0c413d48725749e904d4c3e58f24403e64f10104006262a928ee0f041068aa4053e20424c062f084290a206cc9f1f90793929f1b52eb2527bc676a03ceea85769aabfbbbfbbd7c744689135536b18f032b0bb9df36badf5de7aebad76d2ea028a4c0e1650ac92ac8cdb7db6dc455d7bea3cd5c66cf98b5e63d62cb953cae3ae0983862bf605bae395c964b2cb535b3e6b6e0e1bb346cb315b1a4fad3cfe421b9dc63f67ad592cd7b4cad35930ff05edbd57b6bdc66cd1511bb5511bb5f12fd058af2cbb4ca691e37677d7467fe1b5965e8985a439ce88565141a15028146ab45905a9d2f847c9485a89b5f42d4769a46ae35045565bfe325168cbe4444e18da3b0fcfd7c3bebf8754bfd193d51afceedbbef8056d6ffa25969246aa9c91e83564a8d0163661b0a0bea271cc66590310152146ddced13e4115effe98fafeddb4b677169f68e8a15bead3da13cc0ceb815d69ddc1b46383f43d633b3e7674a0746599aaaf17cb0a49aae82943c92841d7b2d67c220bdb1ad1ebcd69afadda5fb0b07f32acd5d43f198eafb767f6ee490b3df5415a4c61dc719752ee93e127cf4e1876b6d8be1bba73eeb2a77d37745b963d5fdf1084698b2ca528742cc9f8f0c4ce8c8513478881120fbaee19d329820e1339db9e311d2a62370701032939d43024e7070e3478c8e0890d4376906248998f36fad384039b2439a653ead480884e2c697dd59993968e77ca6066bcb03becd107423f100f849e34ace555eae68c88cb5d2dadd6edb5f7d64a5414bb4625d3526d55d136318937c75eac5923afcdc6888a62a2352a352ddb8dbbb6eb3a2a5a221648d7759efd6e88c82424a5a4a5d948ceb6761ecff1e1a9ad0f47f4a05d3fe5a3caaa545ea9aafa131faaadcad96bafcb64a0d0a2ad166fdd875a49ad5c60588033294fc59381a2558d7214a56aa46625bac9934ae4a268cfafaf5ad3bde84053cda93eb21a349fbea0e358341a8d514624aab4e7539206d51794244252232455423679b26756d24baca69c3d9f8e1da835f8a3bc5145614f136a599e509f7b51cbce0539b2a85b58a7a251a7cfbb4d4512912449a6c6a0711c4716bc02833581c16030972bc7e572b94c00597440269391a3e7799ee7b9486d172e5c742edb50a7cfbbd496bd63218948273b925c1983461fbb71f43818ac090c0683c15a0860e67a0eb26c3a8ee338925dd7755dd781d3947d53e64d994fd9e663469d3ecf55b2b669928824c98decc631681cc771943992cb5ce63297b9cc0004a059d994244992dcb66ddbb6314a46d2e338e64a6a9fe71d4ac379234922922449721c83c6711cc703b450d97456498f9224496a33fc79de6d279c39cb912411499224e9c23b80270385d6bcfaaaf5f50a4d60adb5d65a3a5b12a948317d719f9dd9995deaec6cb3b36c679a9d613bbbb7438087800424400127780af86e4e58c0026a6abcd29a7c8299b1e7a3762d5bff2c96d6f5ebcbb3667d6b73e12d4d6043d1f34231b5c55b062e6de362462599374fa394523a354aeddcc62022bbbe07e4ab7f7aa12c0ae595a2c6daaa4fc6888a62a4ca48559238aa7d358d49b5545b55d5a462a2aa99b8ca71a966f425644489d0ab09ec45bfa3dff632b65f1dad8c56515647abd2ae9056321bae4a174f8e0f8f2b6874d5567d5aabbbb520dd9bf566f6b6162f893dbb9f4f8ff4d893a35054287b7e25278cad1239b12750913961a0bc3cf152838b918b0ecb498b143f7d1e0d61a0ecfad86364ee2f4fecfa97cb7efae91ff71e178a14f552c3ae79db4e9fb7752e46bbbe0d5d74e8764dd3deeb38cd594e76fd8a31c618b748a13725cb596b16ab9624499224398ee3388ebb7e4a9692a56429594a969269959515169654fe2ea55ad9d5ca2b5d651c832db6378605889524ac1851314265e7765d7d71d95a6b9d05889524ecfa78c548553142654797f525041b22632f92244992dcf575a94b5dea5297ba9c53a5f2e66ab67c387463bcc2f349f7ae81dae1b4c429e8b3013db2eb5beef33aab6becfabef9e791a81d76fd9ab3d771d94f4bec7abd8ef353d067836f1c8190b1f24896a49aa966aa996aa69aa9c66ffcc66ffcc66ff45eba27ba1a38230ac5e694f4a0ecfa3a676badddba27767d5457c3ae4f3923ee45c6ca235992ab7cbd5eafd78b7b712feec5bd582e9b880d86cc4325ca99733ada8d885dffa4e930871b0cbbbecb96c3ccc3aed94547d8906b55aeca55b92a57e5ca955dd9955dd9955d1a935db1120eb4eb532def29d398e01c5a6b6d8895c049332617e571b95c2e170cc3300cc3300caf68196a69d2f2a465a805d642d442ceb0250925708c2c2667ad59ac8f91ed6ac39b04ac05e62f6c32a963acb205d60283c1603018cc63c61bc68ce08e166fccb8eb74f7ebf2ebf2ebf2bb42054c4aa8208130b13842143a2c15796289ce41e3a06f10c578746e34591895551fbd927676411f2dce12f4017da498fbc64391ee4fc6cfa0b5c7af55e0bebf10ed4f63b8dbbf367c0153eae38b7c912f22a330b21777b1acd90e522f4f7f4e181aab65e5e384519fbecbf2d323db9febbcef84d22a2edfb1ba57cb7639d23dd650c46c152298bd02b4fd55402fa75f51c205f52d2c4c58bb7b6d95efb60cf379c3bc84175c6d1756cb4a0556d2c7d982de9572b660e15cb3c5cbb07dea5f522c2ba0c81141c549c4a64544ea4485e23db8fa75c6fd5b762f543961e4ee35819b7271b2ebf27108bab50fbb2c1399e82339f3fe6f8d12d02914971d257dd43c894d5f8c81a9e04b055db05741968f2d2f5e0557fbe61a5e1787e4ba268cef2f0d3fd0c26805ace75ede1a27d86ce1ae12e59a2d88683185e25cdb3f554e18dfdffc812bfb65f6f29a2d54af0fa245d56bfbcbbc268c3bc405e9a75cfeaa8de25e66db7f03c59722db3f55722e95ccccf274b3135f90f958c9197da1ba15de0463be08a456c0bcd493b802162f2e2c3f892dc8b05a562a7b1259f0f724ba00e293d882503b892ed81d00f00df389befdc1c6388591797d717771cbf2eb339c30d59ed4c27099a9d8f4538831898a2c8c6a3633269c80c22492f9681c85e8a5eab3bee5a2d6c4cc987042ec46d1e839962a69713c31bb3d33cc13bb21db338a384bed46d18dd8a6af73ec06d1a6af01d17d0cb4d6544abd04f6c2f209756b78652fbc42a75068e8d6306bae0fb355ffafd050d7bd907be0749afb980be76cb1ddb71b883f839552ae5a219aa6695abef8decede146bc76cf6da6bafdd421b66d013d2737b9875a0faaaf2a22b39c10d1b2666050b192197f7135a44133675c06c51faa20640e84361389d26e68059e342e4ac5984a25e118aac98507c98506c81a01f3169ea3fe8429834f57d28566bbcac2ec4acf122dc5720de5ec4f423660d1066cdea6160a84661ee7ef115b47eb4027d7bb902ebf6b2ae40bafd88290406ccb9803915c0f273a2302702c4964d7f453bc1fc0a5c81da061f269cb385ea5d54eff22d2ad5fc54e10c3ee0116207d18d273c4c720c11eab14366e8f107a4c042ca10214362c8c17bc68624d1d19e99992137765cc8149e3a0aa1420a1b437418e9999911b2848d191c84fca047480e4621443b3338582133214c68419d0b5a2946a489fe9c093245102474202748108218f504417a6263b3430d3989364ec141c64821480e36020f2dced208fa86fed155e81f4d79cf1890a651e91485167534a83f4dda900ba1f68c0101b22d101e20ae4ddfbb19d83596a0655b641141ffc0c18d1f47d0c1c4616393834d921b6c922cc188e3b049b284209d4d92028c3f828cf44002595ec0c7e8053f4c71324415554061ab98e273d824096d926432460a402441809d6d90007f6767adab13053d501f60d330d796097b7e6bfb87f3e2d57f1d1e586b68f6b4ef81ed5e1d09a5945a4b2db5bf4363428bd020f403079bfe8d6ebe8ec65bcc3124fd18da1405cf8b11da62cc0f205b9cd9626edae2099b073f52fc30c57e78f04314030e2097186cdc60b148f2e1840f24807cfcc0c70e7c903e603e68f011830f1f1f36828c1074147483a01804d110e4236807a80aa0258400f1a007500f40458082807c62a0218617c04cc145e30e4f00c1d3c30e4c1b88f1308320437c202d594205bcb9759c7366421ff9e18105c34f929f1f440afefc267abebb7bdd6ca51ad8b316a142ae5e2fc678083a7ca85062ecb331c618bf0a18d400c63232d001038b27a260d1942483447b51747c9e50e1c324061f21abe3c896618b2e9678243475b0ee5a434d451a29f07dedafe0be4abde10eadbf534a594e0373437776981bba2b4aa47b6adf0cea72d5ad4d2dd717bc5a269d09f4e765af95e64361e71b60531740ade56cc025ee773680035dd810e686dbfe303037bebdeeb93930c733c1fd13e4ad7d477396e0bc042fb125a053b6a7acbdbdd67200fad19355a980756a416e732e5842ffde4f86ffb6d459e06c41b7dd811c981da4b3850dbfdb59af59c3743ba160e3b0db9fab7643472904688bcef0e2400126e9034465cfd8cf4e126a0f25ef11c5b238b927214cbfd37afce41e3d1b3785c35374a726bc4ef6a536e8c2d8c3b8448f33a88c3c7c8a58bc2929fa9d2ac62389d569cf188f225a7804c18af1f8c165db33c6a3c90b0f181e3d2b52ac60b1e3a806329f93472101371942d59eb11d3d00f0aa9871410a00ab4800dfa6df0dc09ba00b3a6ffaad136ea27b19681a7ac67c78f674316dfa49b11c47b11c472b1851523e8e262168e8c1090f4b7682fc00fae10739482c01e20843a995e6e8c1ae6f6b2cc711bbc67238c9a18495435737ee52d0b7ddd1595ba71cd0ad6766e667a7c7007a240148003d946e04e00129c0a0070e9c000140684728030eb0c78fcff7e8e991998283c5143b2b9ad81123cb015314f4d20390cbb8c48715e271861d2d238f71251334e698e2937282258971a5881d2a41f8e81f70a09af49c78c810c3c7a3c78727c54f97c483ab818fcd898e8c8487b643861ebca3c7c7adc2c72205f1222095f53a68a083d4b4988e18683338d88d8c9142ec87c8cf8f5d120087e7f9ea02a9abad39a9bb6a93e7b8ab3651f7292a8b8ccaa22847b15aab57aff6620d6b79ab79e3baca75de57bdfa11417945153c15cd479515d41f0ead2af555895423f5558954251588d24c6969a6d4c494f4847c42443e298a0d8d3e34888ed48712a14028cf8c726712add5ddda4babbbb5f7627b31d6b49c372d6f1bc7759dc7759ef77da7138a9e3c8aa2da84951596544a65420b28ba60f12a9872018a26ece9151451d8f32b0d2b938b2538a5b452eaeeee4e2b128fc461b7be236133f348eead210f4d7f529a821c44b601f68ce15082bdd4d942b9f1c35e303ac5f54774cf0cc76b6f3fc67a88ba0e44d1f79a6cef5b8cc47a82b67f6eb29d47c9f60f750a4fdf9dbed3ff81a2cacf8780cb7f2750fffc2840b7cbe9f5e93bef4fdda36054de0b45181c3a65eb295b87620be546bdd842b9bd9fbb8552c5e53ffd28ad02ae70612b5c58073bbdd79d3a9487ca1c8acbcffd116fdbbc188e28311c306fdbb66da3bfc57a72f6f69da712fae8d3ab9cde3f869fc015f0eb6df3f4bbf7daf3be172f0c7661620b650a680bf580d0cd1971c5b82b757bfd62adb42e9e1c1f1e57d0e8fa70547b5aace5ede21697b557cb1bd7755e6987572f6d55b6049a93a8b46d37072d7423040000f316000028140c0844224910a461a005f914000b637c445e5638980aa4a128c78124043114c8184088310418030c42668acca0004ab7ced8010bff9a4052c0dbfdc0fa2220784c1832b7ee6391aa5513929d7b50afa4daaabf5bb28e4c8f62c0f180b7421e800c02bfafc9733b6f4740529486c964dda792128771af94fdb7617bdc93b1bff6ca42b12b3340642d19473150b26a173ae2976954c686719c74fd32bd7e38341cecbccc1d4a27cd11e6b85a041aba5d2b65b532b8a88d3f76a4a92a7dc2bff4e13eef1612f7125da1ca9a8ad0a5ec18c546f123fa97b0f17bd9dbef5d1f069a7235232927d876542294c30716e958eea4b0f02d278998c3967f24f9e301ca729c807c28c14e4c706a3cabb8d9f6aa9e18b92d5340c65ab2453e7c1e1182fc9746ad6ed9c0ad383c0c4da134f7c0f0f73a61f2b92708acc38441f6ab34ad84c3a7900df00a2b2936c871d49a15492298012f3b13480c4ab4a7ecf69152866f5c3f669613ad53436651709c111615fff0e7c1db1d24bfaaa77bd7b3addb073a2a0f1b140cca3b02eb6e8b4d6e6dc5961c5485ca54b964c72efe608d8889d11b6a78947503862dca87afcfd0e6460c8155c8c25822f513b84409b830f021b1e04c50cf13711a1aaadf472eb8daa739d3603d350b94d42577d5ae06d64ded544fceb76c2cb77c09c1efad74d6e4033eed9f9dcbd97d9a9e8c7e0d1efd9242688bb8617baae257ef90932124d4162ee4d99b1e3f1848efb072637ecb72f2036e4329359de27b7ac337a271351d7874379202d14be50d4e682b3cd78033384d879d8f4d84271105e6751c754d0808904c771c6ebd7f2265c67d6740e12222e10978d29cf9008d91e2fbe9e1373d919cde6f7691a0fed162ada385177cefb513fd6b84e2f4e09670f971d1931524dcb62692c43773f30711fbbac51d75a14c5fc6f3cb184b59a9b0e6a316a60a869232f1c518eb165580cc57b2de92b5ec6bf28e4a812d31b46fb1e857716b479d05e4f1f608f10ce12d5e6bbdce58bf66650a5167ec4b6be85bea3bfb904f6eb6b832407d6df648b073817e596aad120021c85ed66761973282dc0701b85e0fa038e15f8733a3680b03ab033036f3f635c11f1a970204951581ea73878c27b010db0044bdb5ba6cb701b13d4804c2453705866e29a4f51514203c3937b2237ef6c8f10fa0743fc9ff4ed74dd7d730f84ac5dcc3f9369d2dbd9ebd66463bb327841d678496330eb0c04be651f915c7c60a4a19c59902ac1d062112748e50e022bce39d30cf2bdcc7c02c0dbdd46422f899e973e580a5810f2a72b6d4f31d9b53ff1b43ff77805b2474040a64a92274f8f6c42001e0f06c98de68e5f220a66a95839ed5dd1ec458ad74d04be5dae158ab150f7aaadc1cc4acbe3ab5095c4cd0394c4fe53e21464690557b350c843c9a7cdb465fbe6d199f6fc157549a4c2dac2e495531581d56a9cacae3a08ec7cebdb4cdf8e54122cf5eebe76ba4baf5659f28b16339f8fe8a6a3d4990886db41883052d2de43adc8d97826fb129d536575e960deaaa55525378d19c5a5ed0f15348557fde7c894404f960d855dab1b0a24aae109eb919fea4173a865d9368d939b004fcd34f34aff0950ddc06ccf18a079710a35511ac4a3ad1077d4ab0f23707b767b3baecc34cff87a3d51feb64f70f6e5336a788bbedc6eca671361720b8bd902845bc477698ea17ba86cd911397b0d11f1c379e1c8392ba0a079254e2396e24fa09ef2bbe5d8f572dc1535b55cad8094365ea478226ff097cfc199d98fdca762f1366dd967e316a8ff8d7e8afa230a3fb70bc06a0b7cdf186a68d51da637dfc665833be1e2b5115586280234a8ff5d95c4b44f019782044b46033fc7854579275bddee3eb5677db11a4b4cec8029504f09be5cbbdc15dfca5fbbd645d6c68a877b5315f42784d4d902f25a65716df084335ff15ae485188c1690dc85eb00108b429ded2329f4fd274f5914825cacc895ffafa37b9d4761f76e1d7fbd828b44ae6e906e281873293f1df5c761d8ef7e89c6d01d7b86a801b6a227e8342e623e1ac7c9929e08876fda10dddebd1c8fbe660d3173861a770733bd040975ed221b56438ff3dde9cb93bf43c6db2ae0e547836b03887f1f07baf88bbcea6484574c2c3124219283bdcc5acad2bd705db03d48bad94346974cdafd23d2c1a3eae1c2924f60eff56b13c92eb5d658ce141e37e28f61d965e50335ae34c213dc53a4f8166a5df6cd4b9fb0e3c3ee10301490c1fb29a2494602955be47331945ff836f6fd6b673a7b979cfd8fb830e74843cba54e96e665f0f52b52b5f69dbb29ee22adf44a144b508a8e1140ff1b80f782dee11fe1154a7159e06f0fd521fb39310c25d29bf3539ffbd05b920057cdf823c18e869f51615a87f30547e596e28e6a5d5244f33f46a18527d8282cdf3a6d3f7a520fd6415724eccc107a9ebd97f5b944790475e4f043c2eeb7938cf8427a381b038ba7ababb9cfc305dd3a0cbeb24440c92356ee014af977eebf67239b76546c06c0ab57c451a561a138b82debdbfddff9b53185644355b10a34a35a7e642e4fa2274a9dccbfcec3839f768c1051bb45c690db1c270dea18119f00616ce471918ec8f4ea7d499899cdc1b5671754da1185aa7e4a810848b65b407e337588ef0f123c96644ee011824863be6dad57e17c5ffe5d9f363b42fbb8d60ae83684550d6bca6f38e6c9e006a662ba668bda468b6dcfbdda9c43be759a2e9d60aa6e01c261954cd34f628c940ada93b6ff55b78cd83dad93d818466b42e9ac0f61bda2b54b45729c586c142e20cc582c077cd4c053a6249eb429a43248c11db771280d482e1ff3a0f2a6a1f04e233522942f19e36f4c7da3f8de4c7c32c9d3c59ae8731c0c85343ba1bab7d18fce7332b5c899eb575e79590d6c7a73636b17367ff850a4c40a159707ecb40d27fb11f52f2b48a6557610ee885eb214b71be5a1a791530e1e00cdfe0ffd029ad828e07f4531ef9cb69e7e85a4dcae694cee8f49a30da5e1a2c42812e3102f1cb977806fe31ba979e74437cc77a799507d1dcc72a5c8c504261bd6556e1db6d0bee156008b15bdc92892fa8c6a3a4c5118e3d8533f1f3b3581352849d033bd76cb5309a4a0315d76acc564648dcf28a824b7aacf0079d08ebd384ead37a52c61bed0e7e1de0360995f28e62a8f3163d8d625f3132a927176dc14a4496e83cb0d2ade88e3e8687299d115e41ef6c38492be48aae3370a50de13bdac6c3906c85378c66c2db59693ce68e8791c445fd0f1023f913332900fdddf4c668019c95bee31f37df823b8b0d9db8941a8540170398cd782e4815b2076499b41c5157749c81977088afd1191386842bbc437f33604b6d0597680c135ec211dfa0e73c2ca92be08a867330a536c4f7e82d1e0ea92b7a434b366414067172c2232bf3ed9a0c40d23aa56025e8995807174e8b75e9ee5af33fb6f36118115927d830f548d44320c578cebd6f9ea43a63448ab163d85f0504f2d005ed1057a3878e456e9126065d587cc5e43ea3fc37808227c60c4c3df2e7a2a903760262b2b9e06b3f6d546b52170d551328df7a4a3b828a3308ec9666862ae13d70669c0d7391cc98484c8552d34781378c7e79cf22ecb1083d9e7a12d48b54142a2c6409e19180c89a2fe4a235f0102bd4230263d6be9a8956c0826d704f08145fbb3221b20e07db807b26005a6b6ea35e63e37e6424a6be44d4ef7863f214e2e28cd4d402088be6ab60c881e179877f9a90e9d152b04b67129490a49f49b1e3b1ca77bf3ea9f5bfe0afa509c34344f3a93500e4e66938206be034662329cf15068aed3edb49d40d6c3823aef611f166e83ce7f05eeab99d9c948f9bef909af9be25bcc4a5e4e4cf712834f32e39305401115349405a36693bb62804b41bcaa4e04ad6111f1060fffb963cf7baa666671725e8753a515fc023ecb4c73eb50fe42aa573017fc1f2416c06bbdad893d34639595594d779bd73c66d9b45fe3db9abb9df5e56603375270ba38a9fd7b0ed53c2a4c42683adfac9f858005dc26bc386608193568de48bf42707ee5dd3c7460a88dd5aa72cbb73b47e18dba0b0a90adccc4ed5650dc5f99ed63637bed7587fda4681e21c7497abc73a90425abffa0b67adfe4c1d21a1a72b93ac27971ed6e379abfe44611fec1aa1f0094a1528fc957c320e156da2aa00432b3f5a2fc295260ac450a626a02545ac6588fa8172175313408190d32ad6fe40598b6909a4221766c9603fac8f52643aa852c4e53f06cc2555ce0147e4fbd863f4639773435e67c625a539f5514c706e5caaee19f5e59a1f1a64edc420f71e804b1adeb6c37be5a4d1ea3e70c0e4e3fd85aec0fc9eb34d6979f5f656704985c33d07b05bd2a799b5bbec089bc4da2d6922ac092e3c47c5fdfe75dc567ee0986649881af92dc3a1e7eea06207bf8905a721ed26fd1eabeb937616ab064d9e0999938c8a3ebfcc2437faa6c898729f4c36f108d3fb6cdfd4ecfa6b0c09c22f2b4d8753cc4c25bf6e8cb66cc084de35d794dad5260b24bddac6b76fc55fdafcd329f9a007ac566002db6f9df0547e107a52228f6675ec2364036e17e3bb839b7deb50e4b3fd2ce4927a39792d28d1b4182eb460059f6de2683e09a4335f0201502deb4e5f3bc3b92397138ac0b5b99ce11a3dbb7a0171642e7e12433374a608e7079a1176ba78b9e6d4745a0690d0dd12a0401d58f80c8616b2088bcc427507d038650b9f4110a3612d993c7a41ee76900b200d219888163270782ef1ebf819cd560a9f61aaef016157549048c123e68dca95097d6636a938c6f25dbd38ed683c55ae86f8738c88fa00fb84c1d15e52d7de204e197ec5d078ea718fac2997ff0744c39595fc7eb43e5c5bc67f0d80dbd9658509abec2262055d2031ed21a431ddee52a23e20f272a042e9e543dce5e020913fcce381fb62bc01b5345e46e1334c210aed40ec3c20d8d2cd2fc4c028eec910f180686609d3d0bbf7733f6c90c099d3e6aed211ed099fa1f84b3b1c814d0006ec30593dcc12ae38667c7fe9a504678591e89f0282bc08f1006a688d338af9b0830f5f1c3fe31752e032fde279ddf765a3046b86f62dd217d704dec670918875a0e90d2601c66f55e2db4ed8db2c21f6d1bf24409d069ab17ef9dc984e787a2f09ab6a1fd3480be9a5b52ecff70c866de9a238156442684d1261ad120547c8840bad5695c561a2c1494f11cd4c9d7847c383ed5aaef96ace485a283da649284f67217f49b7384f1a1cb0d34e53f4f3b1ce242a86b33855811eea3815fe651bb3f01a3c5016069cc3f00100dd3285a7e8dbaa602f071e485507e1fc01db97ca478606076fe13635b639c43ae78e797e65de14ca7bde09aa40363da457f970acaf58569e996be91ec65fd7708185c30b8f3c6a6ce006773f32aa645b865cfa7c80bf76f6293b9cf0bc4669a0f8867f7ec83fad6a8f8b1a6be6376c092c43a3aee590db871b64bedb267d2c5035fee3ed7fa8ef6df2dbb93c7e68384cdb29fc51b366bef3ce8f5f627f0a44be9c378d63148aade5b7e9f62d003326231a9321853f8984751d41d47f8f757b888283858fbf2d0d2a551834ba2b5e6a3c19cbeebfe672202f86695b947e7f3c765de6037628e74c285b0be0382e3b88a323cbae685b25ee5ebfb03f00f5e27b362a368a659c07cba2844124ab067b6dc0663a4576ef94fe964350f83cde7326115c4fdc19706b58985f9f41072414c9d1b23a506290a068fe8ddea276cc508327083c8fed3e739e3a473fea635819e0e4f6f4635d9309388986fc20c4a6e436341f64d6cb04f34618c97c1a251b3570c347ac3436466ee3aadd8b2dac30ff15aa9e31532b97ff56fdbceb021d2e1b0b4c6ed05627a8852893c93948e45896dc83b1180bf65a02939da9a6743a436d173c6f9446bc21fc8d8db1bb7823d61e83c7630eece62214f53920f2ab0f7e86255d402aabb5c293e5ded2146443a152fb20c6109a81195f7be2f800153454352f2cceda3f3b00cec1b1011df26e232c910a16843cb4c849103346620a15ce585688d39925f78deba36c1e0cf8ed51909e994332e8d1b38664fd3ebebb4f79a8b7b260c9d8a95de0a1cdf309b54bd3c802b18d8d29bcea2b4ffaf3dc605e5f1e838f6d89b655adc36cfb2d22db722e2b7e2dcceb9e9ea2201d58c5564bed57dd0592fe19750cafca2044e0efe13b4eb0d280870583b27e963776f9ac64d70c6059a88dbbaf0e5f6528d0f56006dd346e81152427d6d3d80ab0cfb5a71461a4eb699f807f47a32a1b6e5527fb08e12340b6d57228cc2e8cdb93ff003b7b9eb56bab1655b5d2d3a0c734417a0813126883a695980ec61e0bc5185f58981d79f8c12216e45ab65249342fce6ab7060b6c4b20389ca29c930d1117151fe3bfdb2cd05036ec82d9043420d3f103cf6202f77948e6a6687a4be8bc1c5d3e7e6a7229197c91a47670ffd7e72fb690ed0f9a4d12be02b436711c370d146462f4529ab7b72f71ac2678f4a3535f8f9e86240afe1d6d8a1a1c58eded0cfb00725c2d7a6bc10ac0dbd05631d9c4b039d0be0d8d5ccf6527eb18ceeed9533e6a34a81c8543436410d63cd056a474798ebf74198600390c18991bcc5f6a42a559eea223cf31032ba3bedc5aa5d7834906a3f7d8c8b1fad72bda679d5990db18a6d5d81f6c7e7df65f6431822c087dac33e5fc67a9965f26fd6d4e27eb023ecac6262ec7098ac34ecf84664bb47a983c330c80427a00186ed2761901d0750b386d252c74dc29f7608d6121feb7234f5599caf39a04199ec0e7962cf685f0e6b0840fa290752515eb6eeada76b2110ff660c562d3bd112e4752486fe76fbea14e9b8e5e53d1f1686f22d871ead2a3802edc0131c4ce5bad6da9e7d66df3197d6a650973e98a5aa06f79b44467c0918295d90f44d6b58fae42643e30636e445525aa8d0dbb02e691553127de63efa9bc63d769e5ae0dc3a3c2b83a7a18456a5108a24c2de44cb3c2a03f34af283fa005a45310927780020f0025290c0a711c1d491f1ee8933618f1f32a3a263c4123c8f6fba83a266ec55640d5419caa779570c4215ca15004c744d67fe826a1b2183f9a5a5be15092b7948c2f0d16400dbe2f11599da9708a5362f080b287404f7879811c14a7e09da1245dc3708bf4251138a71a3d99db7e19f8d682da4e777995f4ecd8af2e8ba2d80732e00c2f2909469849a3212946e5652ee0d0a2997b2297f9812d6a70a63bda821d1e78d47b544d626ba21bbe8293f05aae26361186766ce634f5a672478ae00ed18d2fe4f0cbccfcb305353b79801a87e3b83984d5e5a3b09733e849b5ab7d5174b2f2d85e117d0251d11cfb71573e3f6df91c35b2474943ec6276d65b9d66bc5b74663beefde055ac2515b37e56e91d04d5b12ee95d10b2adddb60e9f3b5cf9291d501f3c2f97ecd6494fdc0632803c0d222922852cc81250c12e776f0002baaba2992a2f68fb6a0b22c0a7d70e0e6ded4b52941fb9d99324fce942ef4390c51372d94880404f58718da2d5b302a14a109f566f0bd7c132f5fc17e3b92acf59f2a426e3130ba215b4c0c8d7b29239ea20256eaaf32d495c73b0f5cdd283210a1b933395c85cc9f00477932d8ed3566418629a334db4b11c2bb189c8e3a4fe5d595b1475093f35c6917cef31fd6c4a42a6000eb6a3a029b1651bc60fbb87cf355bf1f5ed1fd1f73284578cd34d68a47e40fd143e0933ac2043e2b00ce0ce22abe566232f8486ee118991c1093c11cc130de7e28dbebd975711a46790471c4f2bc742f64913d5c9d2e7ae45e8bad0f3976ff71d7debb383149acae52b9157dd168f9bceb6004111ce93bfea0d077d5b0220968f647e17ade162e5bb88dd954cf891a0e82e82f4482bd1c42c4a21a722898f968678ae336b33052e8f0c029f990d0b1a536a394e10c7255c15ab42c9314591ebca40aa9cbe49e459df680d29378e763fd4be4f2428dd00b2211c26c7e94802f89105f4e5601f737b8cbe31f6207120459bdc52eb6fc03a3235bb34695fcd123974a41a9ab1f627621a3779d3918a4e5f9f125891487f22895913881d92c72b53c4aabdac99b44599bd803a77eab170d03209a9af5d78157d95c7bb6954959e5d8fb6367551d9aeafcd2bd670b71a0d648e95a30cf1da7587482926f5d132921a532a09120b603c605d03f0046f248d028eaf4589cc2fc30b5a9a01f15787c3c4b7b0537cbebade159050210ce14ff4fec0142ca57c2db141e21a347b242dfd4713a964b7fd31485603123cfc55d22fa4a5fb8b2a12d6186154dd86fd48026c5d85b7284677c1b1e8239ef852cce30e9e550079692c3d59e0d77ee09aaa7df1a9448f58f970d6a6b29b246fb7620163bd49a294bc75ae390f31773fe6ff43addf7e1e641de50b941df5ff8e19455ab72cdc04e516f25ea63745757e497920684ce94e598b63b21dba0514d8ccbaf5183740a92b0b87ff56f4e66274060c7374ee3fbd16aac3c94b234c889731cdffa7eaa925416c69514114963036f3f49fff850758ca62a20616952b879112a73c7dce2720eda548dfe340b93e0ededc2b3ee2a6ad935525f4168550cb347eb8965cd100f946db56de8062c1fbfa677c509e113d69705c13916bca1e81e7beca8b853e1d0b203011d571e168760938ae37700c9e7ad387b4dfb45a2c676a498d48cd5e4e73e1ddd61ba0ab8028f3c6e816519786e93366aa580416032a66ac7130416cbfeb71b66e3f54ce4ef4370517589228df1f99ac95f375cc1a1fbeaaef2e0f3ac6aa8358a139ec282932f254239f578beb6bb5040e1c6e523f2f4e28d27b58b1c41dbd78f1cb515aaea82ad4f8f056a11012ce5f4e961888b0ff18c710b7f4538f2bd8d9a7896dd502d871d74a9eac89fed12d469fcc6786cdfce8cacce9af76f54c118e9998237d36ca10467a0c38f510f27f834e902c83c7a67ba49ccc436185c2bfc82069b86240f0240136987669eaa5e546ac61496081345e1495db91bea09348b9468b311da2d3f7e79ab9cc7589c6a5f3b489354d26e4d81730c07f368e6f06b4b14ffa18bd8fd6f0b765e1671242305fcb95117907c1e008deb9e311bc6a4a335f500dcc1eec51c6b034da31c139ab726326a116bbf9b9a07e6d4cc0090d6514da985a43ec225f678a2c06f43a944be8e7db68c4690449594db606d1b8247c2e4e4970377afa475513c803c5602801b39a22c2cef67897edfe6e5037f37c02b58442f1ca89ccf8d7d8e49fe9e5cf35ff05224f5cdc27158361bb49d07f94124fdc0414ed6a5f9d990a4f105cbc4fd497b9b61c3af876fd9c76409f12d161a0c43774456d2a213bb823f1ad3eb825cd05f0ff21911f896f01d9b3024a0c60c5ab20478636133643111621de385167cec8f19021eeafb292a895c661645ce61bdef52224b238879fa65bd96ac937233fdcccf93ed92aa795cc168a3e65c7ba3a08ade89fdf7de723a8ed9a4536f77ae5e1cd1d8648dbc292ca07e200676f3820961093c15c05b794cace1691274c85773c475d8404c57b05ee7820ef75b9ab431377d4cfa7fc415e95efeca766712b67d82c1197a7774d71061046219a06da74f9280521bd6b4f58a4450022a7d98ff6d89ebe48c210dfff389bfea59a77a7953f201434c998cf42c3f01b323e9bbf9c44e50d7778848a2ff1aab3b6acc060bbd289529b23b423aeef234e599711f65619760efa01d980a15ea9c5b36b6401f4ed12bdc2aadc495c328048b81058ca2faba0b5964f385fa70bb137f81150d243febf1cbc0f43e9a104e6e30a833f840a0f90eff361834c2090a8ee31a3959912d6155d48e7826862d19320167992aedecafac46eee89262a816c3f87f0650b24522fd7d9ad1393077d0cf5b57075f88355d9480880aab2bb28f1cd04fd4f539103a7c463924eaf50230bcc7f822e0e25c18956d06f159575f58601d45824ad58101f4512362b529f28ccccdcad126851a5e3d818c04003042c9bc3a543650d31b612b110400ff88fdf45063bcf3a13566b4df59b191aba5a3c36c58be5f8629ab6a35290ab36777d623ac79cf8add5f2ce9ee51d3f69ba6b74576f944c5c200e087efd1fb3f0ddf72cf511e79f9c5b175cdcee05175f9133cf2b265016e841396c1356ba0e68ff0eb2edb05e3e712bf777ab7b1663ff312d47e7ee7b5db50d48a4d164a1e0bca7fca4a9d1809077370d803d4ef735a62b8255f77c0e047b14221d5f76331cd807569bf96aaceb9b3cdfd72c952a939bf1835702c76fb3139a1ea189e88f0ae874233d421e5b43340a8227ece8df8c3d548b8bd9a4b06f4fd5dc587b13f0d999a7330b582b3a616aed52eca5e633962a9495785bdd7be6c3dbfc9212508a9686392a5a395eb6964bb0ebcc0d360a6159aa8f23219a817e28fe976380c248b41152d7920a8a85df8428f06012da4610e28f3c1622796bd5d0a5865714dd1e2d22da15f020eaa3caf559a3348dc975bb56c5703494b972cf22ca50ff5cc628f1991e644af819e4ba3f16f52dde2ad07ba47e3237cd39a8df54f986e93d90e2b09b094b2a0072f0bce9115824ddc6b240add35ed202bd481a85215c94c985b868841553e7bce231282070ea206a41431af2bd5c903cb12d8e389faeda3fab735e5bd87831dec516e9c708b5a288892840b095149be9e2b5591a08500c2306d98bf00715f623a55c9cf30493c0bdf8380d8bf7e0655a9821f895d4695b90d46e41791470a994047e12f6a7f2f3ab28b1b1cf9358e713df38388043c46fadbbb585da03663c67cf192f3a289c63d5b86dd23484a87d97b3adbb801befc2a9bd0b92440c2f240e6edfbdf39fd10810c1e581f00a73ffd2154a9440973ab0f1d6dfe79ad923257d888c3b6a9fe39c71087bed332198800fdd92066b529a37bbb4d51923bfdffee2203305019c0780563d5101a16b8a4d2ca0d5371f00c67aff71a30596caf20c807c16c25cf665c82a6353b7963432e85459d5c69778ff656ffa28f4c5e2a9286eca5bd40f128d2d310d79b2d3a80cd63b260305c33b5bac39b6ded4c64aff0b45994cc223b229a71f28afbea23c9310e3365a2c2f5ab034dfcbdbe7edbe00559cf66c4ab0f4e29427dbd8ce0f0c5fc1b451944817c1918bc9ce7359f2b38bba7fd9d9365ba6addcb170c812b686da911aa2c928f450eb4525b0655988600bb4f2edb939c34c52d94d20fb8b9fa9be0c5d747f108676f5521d080c01aafd775755c54771a6689b6813134bb479de439fd7ab2d8f3f38b81ad193ca6c7c857e07ab47eb70dcc627c74a2bd16e82af6bc9743f6a2576be24f128614d377fe422c85bcb0548219fb2356d25a1e1076ab3bad5a45e3e7665d68b24baa847abac27f668d9af6bc3b18d06294e2010b2065d8b7f07b0115c5a08aa3d20d41a8e1f292f41f867b948881bf3670a907b822aff051b03aecf4fdfe72b2b33c68ba8cf40499583c8ec3a66495cae10dd7323ed7950a1b881e2512b636282bb9ba60895562767e83335147b4e28c12af9b1f2b1b24c3d119d05d2275c5d0f14b184ef9695746144a15b6ddbfc9147ae4da576cf550b0a6ddd3851da9bb81d2c0de87ac9a7da17f78f6cb6a9022fba9c3b36c3d711bbb0400d6c9174c884921e471daf8e1ecb1fb1e0362220666a3a911cc814a85780384b521205c1daace2412745ee0025b3eb46a2d0926b5096cc7488950768dd7599a530f0ed3660e15a3031dc93488344221b787aff52b58bcdf710a6f637944eb493aeae2f0133e6062a9ce0f19b515af906ade8122670adaaa49aad55cc17c819c13e57d9a8da136041c2b5367ccb5af7c5d2d5103e49af33b0fc10117fe99b8b7e57b10518a92b5d783ffaedce10a70e3fb84aef2e14d95fcbe0fec66bec5f53e4787dddb95864024c89e49a980f5c7a6b42f23489b8ffb2a4eec2017f7c62b935ee56836c6807d8f1eceb6f3561745f43cd128a7ae18129fa0c374d96a5b45fa10485a90324f0eeae8e26f0c044c16505f88389c047edc512b0432d251f00d16b20df37dc29a36de966f24ff48a6bfd6e77aec7c470a3e7ef740579c33031ff37905ea5225f00756fa5e9dcb09219709a21a4bf6eb90dc0058109f5d4a6c6f8ffe2f5a6436c7c4bfaa472cb69e166c977ace548d356a62855a58f3bee671e8fcf0a1f3f8f8e38a8076c294fec914876113e8c08a3f613aca40d51a3ec817e97cdbf45c9c5de934cc21535c7a995ceaa8c6f0fe752671a3988c38fa9d51c6a17cc81d719e45c6f4b7e7288756445b0c4f3994bf218385038c9432675fcdad0037d98a3f4c6263c9c01ed4439ecd2fe398331e451d3ad9cb5dab68f5912f1101e68b9ce52f94c330ad318caad1709d7aae929da3d313c052525513e00faaf0faa630bdc150fce85772d6f5d2508840b71daf11690080a5118475148bc4409859f66757c5a02e7a7b727fbdfc3beabe9ee9725d4322c01f821e77cb44f5c4229751c023258ebb9825fa4d04b528c5baaba456779345c3560bfeae9c53f415f54d3e2df547c9aca86170db6612a5d9a8a26d4fb60a7c3aeee7d98b4349fe652191521ea5e5436539689b3820f5d38b0380de9621bd79f9cd15bfb7e53e3cf4c01cdb0e6a0b78e165a9449cb5511c27ee790a9b9c2d58f2df9d907bb1d54d0adafc3ea303305b4e653a450d763e57caf32d4dfd765de0560c0ece524c687d519340d9aad7ed2a030fef9fac69ae3dba600ce0395d44b6a52ae867444e6dd6d9b78d0888b7680c9dca0c1325fe904175c4be84e02edc0f4dd1c2cc4f9180f4516399378690813010203bc8c4d4bf8d474e7d6ea9b970846c841df56d704639cbc6ae20fcc1a64d659dae5380aae6a6cd82d03e71d09e100ba27a7eb3ed9363e4da909afa290e97c5148c5236b1ef579f47237954009c3898c3ebd34ba35f2728b07acaf0cfdb848d3dbd47f7bacfb33b1346700e0dcb2f6281e7f0a4797dc53b66278224ae09c7fb4dd9f73afe5cdbfd05f0eceaaf82905fc9e4058c9b85f6a447be517b72a5c0d02b99e03bfe1a9a3700fdc9ce32a72597d2fba67d122621e709f26d649a391dc11be6514a819af43cf81ce4691026100f273fd20671cc7f8dc560d398aa3ebc789823d87e7742335768ef69cf18e1a21065426e0d6682485e3b89f3c9350f6d3ad708cf9d30f589e551d730c82455fcf9825b574f2e282e05e74485990671d218883a39cc477c7037a6b966f000489246115d29126a79a7bec207a5618a23e5267544a280e8f22674fbd5959dab1cafc8d1dd3e50a5aa7610e4e28cf0a17d14757e1ac67a6c73fac10fb8ccfceb4971fd0d46a3a9e1a2556eed69bd076988633a2e2c187c5a2b5fd35be1cd7426873b96bae245c4848939ba6547f41dd7bd79a33062a761261faeb75cd11bd5ac770284b5002e92b8301def5495434320e9c7c286835da906d2ea560c2e7e7e38313bf625c2f5e508e5b090775ecbfb195486ddaf91372338022568d61801499da36adc6327ef262fcb4db6ac94214aa693a82138549c408fcd8ea8743ef6f3c4ffceceeac9fead96151d11ae9242b8999cb50e9fc1c0e47428829514b6e6542a7070e2fc53cb61ced240a6033198dadd4d8efbcecae9e1bea2910ed5a16a35ebbb21f7a6ce16b92305b60bb04a864d9acc5b1e086a8568526b7cd3666efdddac1c9ad7c8bef3a20bebe597cd9a8127c1da3be49feb9fd1516fb9c3fce067998458252c34f42f9e1de2692dc0d47e38223ff0973ed0f983bc9127903f3a5a40dc478144ab86653f4a5126e80040dd1ca806ff51c30bd8062930fb1c9249a0e50ad6508721628e84d4ec5bf7c3f4312ae728d248b2452b7218a5b140479c04c7352fe13e970ed1b7f770472fdc54c97cb769c0b17c79d781fbccaba94563c10f6169816acbb33720556a95a1cada9e58c64c769a2729857e6078b041b1577510929741933c442a71ec43924a4415489e019c264345e2ee175f8b5ee0972e97dedadd1653c024e3f5acf9d834345321fca89ecb161d457082e91091d61ea624ba2498b7971206296be0db772128596de61027fcb9ee1693a4100150fd4b584ee5cbb3b3c94ae30f73d5860425b525aa45ab1c2c4016f8072b200c182b91e4725377ea0187c0e1378112828db3a77c3d4952df3f55f2dbc07d7b01d5556a4b96c3a2d44e505e0f17b4d5ed8e4ce8033966ddd49ec08267aaa49998bf1e79b4491c798e523c9c8c5f44d99a062d3f2b43e8c2c624efe1980ea3e3b33035e5e33043a477bff3583c3742801498ae54b45568099094efd526861dbee043dfcb493340c8358c3b0287ddcc0cc3e0d9c8d47d0fca31267cc2709f762fd17e618c3216080e289c5a592faeb38d94f244a00ed0e6220aff53fe5267597b75deb2b6a021d2b7bf77a2a50bc9f01064edd7579dd07733912a6b4c7e50be9172c0be06c0f18ffec3a7d8bb3dce0a2c7d5ed3097ecd35c41c204e032627f39f4ba7176006f80da20039c0ce750ef0233f2c9159d1e8be467b2602dbafa6c983b462e0ddb796cd17029dd78a27f075f92f0152e12ec60ab273c4d02f9f043bd2db6b9e1353be60059411527297f36de1dbc322d5a7b8323c7af62e19f50425a1453687194f23a7da214b0c2495aee664112b4cd52314824637630a270b48c1864468c1217013dae338ea35d28f497f7906bca5961957a963e4c3184e6b8460a802da5e849e6c3d77778472fdec3816bb9444c83d0186a0d42d980a1794eef0638e02703dba5c7ea9a1555787fd50befdd3a0349eb77058ce4c179a52000064ec8a8739cd83e43153003bd29cc2b2019138208cc83be4e7ea05a65c84be4f941ef81e17b39664db80a75e731f53ed76854748260428bc6c6a6ca73025ab8bc6b7a4c113bcb7a9c8a26a787a367375d11d1989bb367395d57686ae0142f08a0056fbc10f491b5eec7f8696931ba540ee7293119f0cd3a2d4ae8aa5f3481b83acfcc4f66e5e42abe3480f1b7ba31b8ba695c29a57129f12410291a72c8557d7389a537c35d9dd92bdd88555136b342807354f087d4e5e3b0ae1953b652e8099135e32616c46a5005469152549cb2cdfe0b2bfa9b39a793feae16f51e6c126169bfd896bb019c998d4595eb54ab99c67a2a4033802fcb8527a08abd06e2d5fd82fae914c545975959e27c62446dc99c6b3217cb583ee428e0c106e00c1841a6835e9298c4c9d6339c4c76b62400a161273bb204e51dd10562d63eb147efd31332e53c67e11c76793a1595981b18b746a9c3ec8b192f33e70bfdcd57439f5f7404f9c8844c64be485800cc7860463dc571a244f09aefad2d87977255c4c7512ed7e412b90021172aa61b93b0662c35f9b5c3aa2f9198142c75a96bc4f4a36c46eefdf1166dfe46923d57a80cd2a273120773ff0e8dc6a850eb667afd7463e350cc3da1b5664b05326efd1f4ca26cdacc8f115df2faf31207b1eecd7c2251131216f1a9a58f787f8c690cbb19d2fc3a47ec3c455896c75febb07a8b4a90478c8e14f7873fc53570a1f9762cba61ae9ef8e059ec15b8a75dd2c15c275bd948d7be950b5d99f6821f3d857288f1e95d91b9eb249587ab1ea1c7848cb67c601cf57ca75ac16c7254513d48fa4513c24683db0b19be207032212ebc2571b54c926eddeb3c417126c98ec96dd7e129e33821be120b61163910fb5aa6b4df98f52115f41a55ca331a53ec2461a11dd6e34d3138705150bfda8a601ca5e43506d8268a1cf4fc6b648884e22292714fc1ae27b403d888cc9d9685dae4c0a8a38c16019f282e22123d0577ab2dc16c8949e721904785d1a598e9e963a42e2546e27393c50cd90b7c7307a95832a2ce6e28a7be48425b7c6eaa088cf0493b81695f7ce76a63037febb083cc1700259843e62614a5778fc2405c8617f890ee1ea5f66c3e11f4d39c7126c1351d08c10ff0e8aee0438207b01033d66e4c14e399fc14c3ba4831db0c9eef6b55517426bf4e79cc6884999b098204c8c493b4f189ec134a7202b9000bb9a97f4b80415fd134e71b74001e22a1fecdf0f2362eba136a457bc18ea7e042e197a4340e3965c2dce3306b97d346ed1107415f5237a9363c8ad8a426eafcc302228eed190ff90425fbada05cbe6b221bbae0ae183a9a1585f025059ceee10131a7b1361bd8359a9de3362467ffe7231e9f46b3342733a3c74a30a2eef950970a7c1dd0e7ed9e3f30af00b565bf6d7c8666d13f899b76ba209eb3190c76e6d7d0742336d56748699773ef7144bba6b9ff606b4743a54978afdf023e344bfd905575ec97fa0a4872eb04719bbd85fcf7ef81570bb612da784098554e69dbb829902b1a46a9acf2463b05822ee13c31c0b46400d4a25a1ad4a395a6136996ae46911ffba8800c2e4fe8a639ad7c114302c6e2d8186c8d9b41e53d6037cf570afec06c27a25a89671b88362d40c7cd9f51510b4b5ff801924a237143c44dc8310ae390e8a457704459c24914c419c536ec2d5db5b7999182b0bbaddd4b60e8cb4f42a3438cbb6e43e0fe209539990866b55505d3816d8ae43848221f1537b73022fa755c45a15b0fd9a17b8d2097ac274052549a34d31e253a6b7ce600fc7860ca24ce1f2987307b8c0ba57114cb362422488584d1a870e7f64c1375a13efc507f17e6c2c21d0ccd5c6cdcd29fb9661176c5ad9c6747b68ec01278510291e1a523a3f554ce76c20a2aedb49c3bc1c5d8fc8fe815fb00b4d5ec1b34d7d198c0faaccb0a9494c63759c0601922f299c97c80bfdaca8737b053c94e9febf937314fdfd7a671bd7ce2a7ef125a462554a0d30754d0618c503a22e078c20560949d4c2676a2a89696b09b7f20859ade0202153b2ff9762d877a0f5b81830990247a58c2255c48f4bef9d1961f5dc145c04c7f3a3b7fe80079a4fdb99c205751c698a1d52cacc8923f9927d6abcb958a8455eea418d6af50291e61b2b479332a86a0f4fd080cf45f88148f635a5ea379c1b025065dd6521cb32a22492c97af9447917c689e51052897a2a5e70432e1423323a3d13c40cc7f432cb635c84d9e17c41e9a67e880118bbb82639ac87bc645f3067e340bee1ab8bf4748d4653f8c41f3e6a2296d6db0110e4102d9bc5c3e98cd915d97adca9027f3d51aa3cfe2af8264e0ce7734b7cd9bf1c67988d5e48823a24df65ae76bd60c3ee7c123d91d90f3553d8e463c425b83233468d9d8a273a64c8e86d0e2ad1c04cd7fa2b996821e41a719ee8282ea41bd2fdd0ab15bd970d051d659c6dcf65495fa766711007840e8a9d44c0d3192b576754c455b2a30189dd55b4f917f05ed81dfd3ab3e215eee6bae71073890a61d35ec9155af3c6d6a3da7131f4a3c4707e1d4d233cb27379eba3a4a055bcf2f653cc9ee29147c14a8c18749b5f6c7cbe05d5218070a0706db5461f8ca8c6341e9c861ea731aaec20d193993eddd5c2941ff3fa28f80b66d059bd0a161154c8f5840a026f25023d0fc58bf2ab4b2c4693e65a7c149a9482e15440300fe4ccae334605b9aaac02b2e9ffad967ead569a50efa5f3e767a2ee6b4d6b7ec5e4cbd0ae9183e137189cf4c695006e5cfaa9c0b8e845fe970309f3dedd18f97b502b9f86ec869fd7b8ea3e644edde43307c23db7d3159ce6b3465ddc509d11b2d844c0f15913ac18f3747cbdba8e389404b7d775f4cfc23343ab403d6a04a926e214f91714f816823af111fd100fc7a482d8bde6df2a3a4598aadea9f19d7ce74e75620c3a06c93a058be5c6dd91969bb7634a54a90abf1094484567b4d410d8b4adab2c98fb0f6d4cca10c2a9668deb239cea1be1282c1114b095846442900efea2ad6cc26840850b81765129b03b3d100aa883f95add18192cca9770d798451e018c9f5312cd9f58ecfc10a0f55e0f450667dbabe2a3df3c3863d4f6a717d3306e086086884958d71ad204cf5bc35028280d8bdc80e53742e02da5df5f085e044cb0ad583093fd49ecde2d078ec7a48568b8849ef49cb484d67af115be27aa5cc9d9c6fe18d3777ccb7c6d7e95393ca189a2b7cab6077ab0cf0e659d4cfbc328ccf3e48c24ed9893766120cf81310afe4e1e20670fd603651f0f705765c49e05b3552fb6c502d21fde82a58c08eaafdd1a4b45c4f35b954849ae898d5893ddaf561c3c16835cb0532175dbb83cce58b42c1b3a35cbbb6c64f6e2e5841839926066f0c28912712189b500dff2390953a3379c07b323dc23579933bffa170de01967a0707fa0e02f0773020f0b060def055e7f0fd4910b43e75eeae1c1b281e2e01cf4b18a2193c8ee8e7a1cde358fdd31cf16a391ad8c7acbf1565f2c4ad5cbd19388bd48dce1fc82ef11494bab7958bd2898fa948c040034a825c8630358cb94257ecf31b79a3fb9c2dfe8b25275babff7c2f050adba935ee9dfe26fda8066380eff31a632968ee9a7167c513c977aa646684ba8ef2ba47048c732cdd58473d56219f5063bbc8891bf9ecd50e4201698491dd5ae6c8d400f90decd5a89e89e99cd39c98e58bce688885cb50ff23725a62dd940771c6fb0deda66af87a1a2c428160b7551ae01c232c96d87a7827e7b21a764ee9c6ab149747bc7654e495ccb029404511acc9e269781bb20d2940e1cd97e2b7a918fd8c2be21edca1749b578df85aa7f7102680087a8143438b7bf1275c438a608d3052f86fa00f4ae8a9da845dbfa05f134bde005574ab894fd96822e7a425aae33a13b5fb5d2fdec58d259d1f4d04e7d78baa921f915db8dd73f4c68d7d23e1334cb3c6204ed11b6db31749f5b865024dca1ca6fc5d036a59a3100e0c342e8956a067551db5a208118ffca43f83edbc6e5c446b24a638e2e39849e8b176514da229fe3c96096e6a0f8d39d6a9c4a80b6506f73e086c890afa1b3166f3424c44f97b224d347ca697d046066618a20237f492e7e28399caa1340f8d2107638cd3feafb4a9f0945e1e2db6615b8adc0d8b61b6ebeb9e0c6c441f4171424411e5ae4f35395ec5fd85bd36afd0f371d765b8310fca28ceacbe50d19e2fc814ac42a3b28c62098436ba80d45df17c6c8c7896baca8e4ebbd02cb000f889f76b2e9ee8821ce47d54050e6e7f0b610414644ba81a43f62052f10bde7fbc01ceac9e6a1db4b3233bcb8961a5809a3e26f955f06d4a0fc5b5d45a436c9d4c5f8249d562ccbacbf415d0d41aa32cba9a5f02afc9803a9d5f75071bc8b6ab75a9907dee94d739ab60a306050b30ab23114999803b0abcad6fe1688a9eed20a3a3aaa3f1018f3d439315d429ccaa6cd4d7533c3fe5fb6a6a44f32979f2bf65c7ae0d7ec5ef41db142d37a9b2a5f6b08094974a811f8d3ff2b9d8b780c050418613c8a6733368476b3d5d9f1bcbab4d70bb0bf74e31f0417285f11d98508889d62bb955664242df6a893301154dbcf870537cbfbab0b52926232f96a61403663060f48636197ee256a6ec6443b9c0a63a13f75455fca84467f096afd8980106208dc5b1ac889e89078d7b540d54d3f43e964159b7ebd97106a0bb0ac314758605c9d6aa5370a0d78047bea45d46ac937ea1ef845a711af590c4de4828a336342e1245730014eb943d081fa5db481604995dcf8843157d9e26e16b52ecd5300c8163bfce1aadc0e43c7e3f170b087533ee490cb71ac6ebd786213af4c41e5e49faf8b204706b7b72017b48177f4c90eae059167d78959d5586b252c984dce0c93c40ed523aa81668de06c044ac8e6c160091ff4f3e51b52c8ed5c922efd374abe3afbe78582a6f7e1bf3266f0439bde90685ead7bd35be413573754de211e00c8f542f5c977d74708b1339acba65c0736d43334f7888ee055bf1db5eaf1b590ef045296e29d55e3e1da935ef82739e7fcb573393cb06864a351f3fa011ced6cd37d3227c89e4e518abe157bd3a318fa7a78815d2c66056f3a39350a22d00328a57fe5e2fb5e22bc0213a48f3b130234b1b91070d94ea7c906b994efdfb61d42656553bd0d053b896bdbcc7700ddf18d026f6c11e5de47d95f620594dc6061423791ce98d27f346c8d4db2bfca2092c6e7319c3eec3bf4994c72b1227ce67a852d4941a6e54c771c3ae873004312c39f1a8a887ec784a414b7c1b33b97cac26851bb39e2bb885b9ce5a50d658686683a626af0d6930f00bfe8898a57cbff94045010307916fa9bf20219761bc0429e2d013c23d0c36d33c77feeb6860297f88f9638234ce3686650a022414e1ab437e9f0001ddaf08bcad8d73d312c86966144b32445f499a8e4316a43965fd331c0fa2ceb673febf410edca525e019060792fe43920997fe846ee47718b26942fcdccbf47107bd4bd32aec5096d566d8d282120352edc4b1e04de506904d83b9fae8a26b4f574e346d176cb9368f8215a87c150bc5e7fc90620313b843aa1c4d698fe45f7fdf36bc1bae8f3e78b371d2545c1cbd8c0d63976f10ab1780c683e93a1301a8112f05525819031dece94f371f67de5a36c27796a6ee25405bed84a7082002dbf00ba8bef55dc1e58b57a9f763ddc41f61c1e583e8c9d79c342532773090c10efe7a8b8c423e54d3698f32f7903a04b2957f6768f56eaa412347be60d0cdbd1efd7ea3a1f99da5e64d158de3a932e733b863a402bb3c9715304cc8aad6eab5cb63acc4c090e0f7538e78f4a17d26d3ae8fa423d814b847b10517dfa43759ea2f617a8ffdd2df33951dab8938896c34b5d8e7c561be658d5dc040e48b73e79110fefec0b65a7defaab4f979b944897c24e818502dede5af43764c497e572ff56fbe03df48c7b3122e6d7e4c88f157ae310289919986a20b9d289e40e47be9bda3f959befe0c0dfa2686719497ce27b06c667392cbe0568a23e9e61af9fef8b7ff4d7052cc2e6dcde9d3c313d54848f2e4113865eaea163b2231d8d9ed970819e2638696228af9192a752b32408d7ff0b7e9abaca9d9e67241d49b099bad8e92fd87751a577185c94262f5d577ba6b4ae93100dc02672b229c62dab8e92491b8a36b93ee0cabce2573b0ed1df6797488428ad81097fdf649ec79a5b1721ab907b6701732b8580ae0c5bee4f24a4100aa5af640449d6f1a9e207077ad188535e63e65f5d3b2174bdba42d659ebcf5084154ae6ad55262f736e9367d159ef558cf5d6b01796bad9cea0c398a6eeb1dcd5ba44d4e7dfb685c8fddf9f19685bbe787e4c882419dcc37e0c00cdc6abb14f773405c35c96beac45cef7bf37a6cf11a224b46d6616116a7bc645304a47604ae2484200e57105876b6397c43fa2758b7dcff24db1f475e95f727cea6e82b6bf2557ed21f81c7977a366baad2f4ae09ea67b15b33506acf1cb7fa684b8d9e724b6316f6d501e7098455a7007b1127f88ae419592f2d2d6d22a5945206d00d8d0d980e5053505350534978504fe49d4f4a145152487db025eec4a3f027eec4a3f0a79289cdcb25368711c104c93de64efca94c82c4b8e31fb8415893292aa8292aaac09a80b02510d6e4638dbbc34b30b0262016fd1c8a3f71626c7e5b091c3e293340a61c8be6e1537c8a63e1531c0bc7523e9144bee767caa7ce904f51c1a97895bc13722bdc0a834c9f197362f2a8fc92824bf1282e45def1b8d4dd3cc462a9c4e6b127651324f75caa7c227114f2cea7c42dc93b3127f8e6333fa925aa38538e8563c93b576a892a7814624ef00dde6fc698624e523686342fc7041a318ee3085bdacf62b138cd711e873b8c398e7bd8128c098c89d323c678c41cc771781c47ae6c49d134deb7589f72254eafeaf492f0604d3cec799ee7c19a785da93f8f251148ee5310aa078cb308f6beb502ae0c02f7696b05a7f79ae378d3f8ba84717255acd27c00798370eaff5210aa070caec4af4b3084823a3def639c45a2ae4f8cd3fb1d756bbcc7a5975ff9e5b5a24eefc36d82d3fb0feaf49e5ac415c498f663ef09068ae7714ae27b668ab117638a398935e118115eccc96339b9a72b79e7b927adf2ce9355e41dcfc4552496bc93c50a177352e5e4be140299722927f7579489f23aac65ac5c2194a6e19ef352928b71a69c52ca3d9d9ccb94690aa13ed24c63b4cc14066a89eae45e2c5dac6e0df73251618c337c6da631c25026eae464ac4eee4b2890dcebd06199ba08e1e41e4cc9aa939399c0c9714a8f85a500adf5c39660df6ab538219e67eeee535e7576fb614d3cef614b30269e37f2f0604bb0267c7b1d8735d11ab61403eac4499044bae7e492bca394779e64927738eff1b7b2904b2453dec19e575a91a5159972568c12324aacd20391208413875251314d9a063f59deb1078cd37b1db90648701125e5a2a469b0187e1aa344cbd3ad91513af1975220f1a7ad2c678c93cb528b122e4c2e4c70c298604d386ec6801a731802bd3f2c9f4822dc0688385d9c570a2acbc9cfef78f7dd632567871f6f215bec78d7c598624e624d7be4d1ed9107e7b814c7986eacc9c331a66ebf074a954320f5a73c2ad61473824508a3d65ab338ffccb17206732c0a4b14c567e59c59224b8f59fc112ae624e624e6849332f28e73167f96c87da0c86289ac8731813d115ba228fe08e25618bec81a4730d5e338beab244d90e32f8a9a158a3f8e22ac09ac09ac09ac491785dc2c168bc5378bc5bd6775b1a658d3b3b46b6fd666b94a22adaeeb58efeadec5fa3617d12b5aadef5ccf4a39f966ca2a49391973d22a634ef00d2be624e624e6a4853b05584941452105d58494069ab6abd56ab55cad16ccd58231c19ac09a68f25b2ed892eb614c5cb027ad568b6c3de972b55cff6d3e63c8f7344fcb93ae161669adc55d9c94b3f524ac09ac09ac09ac09ac492b774ad063a7bf8331199524e901098cc9f8a4ebbeaeeb7e8fe30863eac6714cdbed8d3f7e0c1776df5fcf4cdbfd617975d7992c7314c5b06b95660a9aed3e3f58931671ccdd5506987c521a5892ca00155d8c884e49922ec61423a28b45e9ba18538c88d893aeeb322045069e781c179a5f1773d222724180e2b1a68ef31813ff1811bcebba58d3176bea3a0d75a6350e34f557d33127312731277b084e283541756e185314a49c90caa287dfd33026d0937242cac9c279a59c60f2bcf7348febaf7679bfa21cf9d2d96aa5a38bd4ed6ef757821f9a5fda6e5813581358136db630b1320744d4b95d3c2625c69a4eef0c59628c09fc1529c7184b3937e64b3180a30f198e39ff5853dee178c97a5e7aff9532ffa2cccfa15cfc6de1f297854bcc1cc7711ec7b92745cfcbfc4721e07bdcb7f9cbde0b9ea4ce9d399fc09973ce22fe4c19381f7d701f87cd14e6dcdc4c639052b8292a49f27d1f2382ff178bd2c3c9f18b98f83122d2d893ef850923e604c7bee73887118a1f6b62f1297f4a399416cf85b83c9c3f5fba3e309e9b9ff8e1a75c0c2167cac4c0e28f30df227f86f3e7fc634cdcc788c031fe9c0efdc59acefc32a538fae0321fe6189897996fc1e17bfcc1d107fe8f64e23fc39fe4dfe23f720f67cf9392296394641464547eedd721f97bcf63449cfcbff76094ac7f518a2f53de73a62499cad48b31e5177f28cd037a2e4c0e0563b6305f4c17b3c5646172a8d68a98130e9bae07ab340fc9947a3055e70e97ceedca2b4a19ef3f229deb5397cb94f19ebff8a499629249f3702a4db3df23613892290d97c4128a4381cf2af9d2e8430c7f8f42c4537c4ea579b81097063f3501cafebb87d8351e73c22a8939c13731a698131cbbb1a693944246915ffb3b52cab9492931272e51e795a16406bb48821255ce3fafd4d3d4124f4e9cf34a2971e57c8a4aa203524d28c1a24e4faa0929a92698a498a89262428a141358604c2d4e27f7a128bed8e225e56667a6781c63004f3cfa60791777ddc398c29147b7471e1e06bfa524bf2bc10f4b16ce3b2e1c86ad0ef684c8f83d9cf8b2084358abd585deebc81d0baff5a337b61ec67476db0cc30e631c9a445a3fbe16b3e7811eecc999829f3bef332cf43e4c61449c292824cd277e0fd6e44318d309fe7b79bffe9c3bdc82cbd687a68c4bd77dd73d6c29efe4f71ec604c7dab0fb1496c298c8d107eb3b9348f7e3b7462162ee1efcec3de8bd980f3e116ff43e6d4dc0f33a3083b0cea555b6b274187c1893b37b0e2c31f9bac5b3b8276c89a3aac2a30f18676b02439c9c958be51adf8559787c16ac89a7bfc3df3da08543d333530c25c29a8c5f2b6d4de0e4ac5a652b862ff1250c758adfa27c29af1ebf6b714f961bead6b4964e0feaec604d5e7c18ac490b4bab8afce21e0b777a26ac09bee9ccdbe244e6164408f186c218e35b756eab9cb38f2e4bb1d25ae7282b2cb5f9c6d2c403f3cd4373e99d7a233afc5d4ae4e43db8d2add9e60b6da69bea96fa6a8d35145772b2c01925854409a490601ab3c69743c299392c39831b288f288f288fb0e1094a004df7d6008537874f0412bfb8746b06f046a8c01324feca11518a60400a8ef282d739802f82ce184331e269a969090a7016a8d25df672f62c40cac0cbf90567ce9ec702a9282ec82f1545ea29ebcc398ebb22d33bf5444e1d610583086405c8239031948c30224a9413c2149f19e43ad378b7a65c00991f5fcd77bacb93e39fc4bdebdc7b73f87c61639c5cccc9c19c5c8b971c67f87de0cec94dcfe50cb9dfbb273c3177e27d627db670863a67ac41167e1363009cde0aa7777a324ef3bc2c38c350eb8c31c6f886e009ce6eec019e9e97b98f6fef766a332bd9999b0294298c70824202285050948002058a13280d80b224857102e93405250524c050a0321425341428509c3400ca1205385dd95e15272af0e734756205701dc73931c1808fe3388ee3388ee39a40a637ca0941704ae0388ee3bc2b0ad830cf711cc7711cc7711cc7711cc7711cc71941a6376a0832caa9044e1f38531c255ced95b847f380f771c6b1efc717cb254b9cd09df7bdf825fef94a7c6bce2eff886510ffe384114f97aed32bbf94715ff9c792854b935fbce1b934f985df7fb957ee5b837dba9b5ffcfbf17eba9fd013c392fb093f312cf94f088a61b97fc2500c4bfd138a9d08b2b872e7578b378a9e788ea5fe0941712cf34f18e29bc3cddaac964c83f3c863d4f98e9b3596e08f08238e1e2b6c8524be99dcacfde01996640e4fae0576df8af34e60c579a58c68825d52c8406439af1414ab33dde785f2032839f0f40f5540a18202830d054af85751a0a238e1284c51989c57ea88289c29795e249cf8c523ac8eb0725ea923a838d3f208171c21c5114f1cf17444d3114b9833228b5e8228848e5b493d160db2680415e79532428af3be115118b1011ca72a8c782a82afce1d257c2930819d9c4e29272627059c579a73c256c205ae7017004277011d0071012ace2b750129cef34a5de00317803aef059cce745fc0c9897f7f5e97a1081f0ad7f3800f11885ac113454c01c40d380004114b8082892c4080e0024a33847786fe22c8944f9da0d278b3de9b871e5badf76ecdfecd7bbc3c73e7978f7b5faefbba7fb996fcbadffa16796bf68b3cca5b73c7214b129080b107063ff4446ee4f18161f87d200d3d9a667f088ebbf56128e29186d687a238d6d06ab9bef5e0d8033c5d661157cbbb35de08fe1d491ac891c738d6e0699a4b92ad273f1c7b8067cb0c45320cc56fec11825e07ba7e85cb34d3db499ab7f5ded96299e6538024a2438f39fdcedb83634e811e08ef8cd405cba9a58a78e2bc521688ca39af9405989ca4130c52d209fc2764d7b9385d9f0ef4e1d4df95ada95bc37de01ee76070ea0739be2a82afcc94fb706633cbc490efd99aba35ba05924e53fbb50efd91ddd599722f134347e44cbff7ce4f2606229dc9954e1dd9dc2e58b81e844f01726b8ee3658acfcb317622c4388a33f7107566ce79e6fcf5d64c1e2b799ed7799de7799de7795ee77959f3cef33caff33a6f73aedb5ce77dde0786de150e86e2088abc4cf313918b232bc54b78c95ac2cb16e71ee7978aec74a9d054f9496ee2e433b0cca8e275250a389f39cef1d7487014780a2418320c67e6f8eb1f98091fa2231391ad2869aa72af28714a95309d19e7acf5de1c67adf7e69cdb9ce3bacef3becefb3e100c43110c45711c59ac96d77165da8315aed512399273b9446e85d7f132c5e12e2e227f7911790baff3cab4072ba757b2b072e60f59e89cfc5bacbc32a5e1c345f4ca14c7c9ffa5072c67f61e9f5ed79d5eda43d5ebe43d4839f3e738096f7e824411588ab03aaf54115467113028420a1b62c078312313e302a6c58b4b0b5785c50a17b9a3b458a318829fa7a3b8829974b265db6ccf440d5c2044a8832814f0a404529e4031e1c9124f905892021f3479c2e44905a010a5024a28a202572a1084043c29a209f86afd596bac9d7c31a284a002320d490e156ed3c5aa8a53de79612a018795c0b1e417cd335324a3d209190329c1c967f740f9955f27bf8440827ff798c37d29e1eedcfb12d34b95ab90a00e99535234537202a7d40996a94e16928492ea2ed5993b161dbe3b247f8ecb00d157cfe0ce2c54649313b77466fd59b74ad2a97c3af3e7a07948a81d72029705f9e4cc9fa59cf9f336c9a65b93f5a721d339c38ac45138477d4e68a98a89caa515b7c199bbdf503b0b894f1b982d516015bbc427c70456c1a7e0f9293fe5a7fce43af386325baa6298ac480ce3dc664b941499ba3c71514c674e5d9ece9cb698a0f5746b704c142f42118a5004169fe5952b18637c45e72b58b068cde92b7a5fd19a5fd1dc15127f79a5f332ce3cbc07dcfb7a894fc3fd599280ab6952f113c07acea469c4e7e18d340871b29e0b7169c40fb98cefd69c2fdd1ad68fe61d4b22902c53e6146f0f4e6bad9b5aa2c8e2ceae6c7dcb4c3954c79ddd2f5d9ff1c5189e79457389e3cf41fd9f48d57dee3eecba07c7ceecc17d778abce9fa74277e2fdf1ab08a0231a61853cc49ac89832df19c39d79ce332d73a73adb5ce1cc735af82f2be459e1cf959f4be9134bfd18737f337bf38d7b1308c8813bff885252982b0a5fc7d99c7079622ac09bec127ffde4bbb15aef2fbf4756a0c6be20501c6945f50dc0da6f874987e2f6ed667d6832c33c5dd1803788e2637fa18dffb30c6147332e6b16c21f30be6f5e5f8c132bff03db3d70909bbcec928243f3e73cc09be618a3909c11478cce60502b9cd5853163187828f58d3bd316e4dfecb9f6e4dfef203641ac38a3bcb1090f8b9c99d5642d6e8840f1867188658c996c259658833fe01b35ef21e6a0a0932ad7202b18054805538c6a4c405a7a8a0029fa4604c008600dc8013efa1bf2bc12af22b7359b0e45708402c7c29c738f3043a8e841a428326b8945f5ca72da8136ce2209393834d27bf3fd8e34a200882e012c88449f38ccf3fa8eb033e27f97325be24ef749c49def99effcfd53cfbc1d7de09823f9622c81f14cbb10ce27f9c0843ee7e806903e4fe2b258a2829a4a698a282aa4a9515ab2b58aac812859813a62628727ffec9cf9f9af0781479074b21957764f0df730a3e95772e1554a68f7b721cbf72cf7dbfefc3e5f6b609621aa50a3c9de579a5985802030682268c297b804c3b2eec3a2d8aa258a6e0771ef85f8d2f3d57f2cda3f20f664a0e90e90ce65fabba3e31ce6c02f2535e1a81ccf9f3e7cf3fa51d10f2259d39cf7809d604b6b4a1ae0f0cd81213618cc9444ad592989318538c29d684b92551a6b414698d7bce39e7b8e4387cc31f97f97989f1632467c69ce3fc4e1c20424a54bb614c604b18c604822820804012b2755e29102c094115103c21d3a37bc89e118837c36d6f86db1c97358c0dc894530921881529ddc1905f3a67c93b3af24bdf3377268e9cab4a20909987a422a9c23208e4de55ec2d43f7697e8ecbbafb34c82fc1c83ff3dc67f365a43da7961153965e39639637c8d94adec955aaf895bc73450f46c9471e3066666666b89818cf8381c34f34539e72aaf04111cf74618867c8f8cdf46115a9c4a95e9ab00c20f365c878d39cf16658c5a9b64b150648d6cbd2a9597c8c54cbbf34bd3c79717a89f2b234be1e5f967a706819e6efbdb7143cb3b74b958b95bcb35daee49db2f52e4b552455dea99277665e3f59455ac93bdc6ba553eb97b0ca94f1e603c978d37c199d0934e365bc0c33898c9fb15b9f924a2e4bb74637cd946415b28ab4925f592c3577a9ba3ef9f5bb58691e192dfec27caacf97bfda05e65fcc3d33f361277ed9fd1d673c8c61e40c43cf9438f24b7f8f8c5226bff9327e46294383f9325e269b40e6cb90019aa1c28c0aa5a769bc9f515eb31cb7d9935f1a83324ad04ad3e837cbab6964fe1b799055f24bff3792542020534ee5e2bf91870b2a4da33f863c636262669ea4f2b0997aa40703c6bf78f1e1c8e305c7753f1303c780f11d8cdf658a74c2781d1a46b9e25f94ae07471e2bbc9f29d3d7e9c994296f5a7251c2942917c24988943bbd708b45529dfac7b0a4eacc119fe1b73ffd6d16d75d294ead659c6264f34a973f20f9938692c2a3f863f15b9f80f1593c38919f07f15bdf8dcf021a9f65863bb7809ee73d07331412e7e9a95d2aed6de40a55f8192f525ea4bc48c13354f82fc720ad5cae285cfe970ff45faaf0ff33fe5daa5a1acb7c2a33d574c7214b54f8191f9656c8143f719f43f9323e877f9307278066bcf93ca860cae897f1e5cb781e6698329c49838c2f5f469b4032ccab69b259ca00fdbf697edc8778e4c1974a29a4ceb9a5e4cc2df153a453dc597caafcda5f62807cf91729ab73b3f8982c2dff22f5328526ad5c7ebb5819d5febfeffbf4f7180a3f9177c4ff1e47015b8235f99e2aefa4d7aa4adef9ace41d18bf5dfe95ae4f7e989799125f7bbf45fdff4a7eb236656828ff1fa8fc379338a13fc97f699a40e6975f9a49ca374d253f59b7f8d415f54ab766c33c57ca4cc9502143955f55f2eba9be4af394bf53ef7cf1a93e635ccc7ccc176a1146a939ee7bef75a9e41cbfd7a145d328941246e91f902b3e94727df2ef0fa36eca41855547dcd7fe177ff70e76ca61e9699af0cbb247173e3ee26ecc1486bf9f45fe8b32d5e78cc9417127993225cf9854a64cb9134c8b32fd2ae7fe967245998ae492abc44b8490a44a16dcca4c5561e9017935cd53699a7da7f20ec8f4456a7d91e2f9bfe5e5be2cc54c936fa6c18f9fba1729a817a917a917a917a917a90e3f6129580a3781a1f013380a1c85a5e0f08b148cf3957a40fe977baa2cffcbab6972d5b95f290764fa22f522f5426595773caffc5ea698a222efe497aa172bf7ae32e84f3fd32b8540a62e555c66eaa9ae0f77c5f1ef7545ad40f4a74952fcb4df15955d5159c3c438f37faea8f345eadce9dbe0dc8f39f3a9ca2a64ea52756e972a2c79277f9e8b15ab2b2e55b864718942dec9a7e821e5d796a182aa8a8c1519ab97b99277b459cbaffda6517eed159fa90ceed19dd994999281ccd4b99f1bf563a5bcf3c67bb3b80fbb7d2fc69bc5ed6b75ee37ca3bf76747a1549ac92b1cc142c7a4afd2a50c739427458254a77eb15c7ce4b1e2c35d9278245d2ed7f72b340ec19d7108ee7c5dcf471eae0ff993cf4bd2e55b1ec8c56c31815898370ccd22f82ae54b52c8bc439613832bfe8e78d7f8d2b9827f2ec132453af9f7aeb2f5503a74884556c95f21b8330e4bf301e0ce188b39f3e04f70a8fcc25f8280c42987c25d874bf3015a344193ff36b9337bff8925584566f108e1fe52084f00398e97df73faea6b6eb1b422c9c7297540e238f7938fa3d302334323ef9c7adf281d253f5885013205abce4fc3a6a5fc2da9a6f089b7a4ad2c7521f81dc650f8091c056602ab402ba01578e5033955152b4a61130ebb4f027e68a65e577aaf4b0ebf99824228814b4e275513a7e255f2ab8a5bc9af5cfa8004ab402b2c67ce72e65069f4813d29648aa14e6fe9c4f8f1ebd0f949d2c90322bc33ae5469f5230723a05990213a08953c203b3315cb2a12df9df1d50b48cda3e4c7e34c20ee93989fa9e487bb20973820d32bc54b1c9046196896777490213a08edfd9886b9757e63e932df4128e323bfce7f5f06bf92f39a6c367bbca09273ce3953d15434154d4553d15434159ea96c2a9bcaa6b2a96c2a5ca6c2a9702a9c0aa7d2652a1c158e0a47c5cb543a2a1d952f53f1a89054c69c7bf4c04f285b50b6a06c41d982b205534c3145d903923f17f3c497cc14e69b7aa2e24e4fdce9e9039fc0a76cee254d939fb7a072ce535ab02c5d9f98d207640a4ac91e28a515a5793813535393530a4ad12d4d502dab96554bd3add1ffa014ab536f50caa9bfaa25288d650152a4200529e01fc6ec0e37f1ff4a7cc678dff9f0cc7407abb3fbee36d5c49d143065ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953a64c993265ca94294e2820c11741d7872e30dfa255ba78b1cce3f82f519ed8e2892d2e3eb33e8fdf6a6a7d7e917c1765ca6ab9688dad175dfcf8ad569661fd38b2d27407ab73fc7bee6075e667b9203fbb3089bc7c8d379d638d37b9bc68befcfd162cc6179715cf7f34d316162c56c8b0e2c35fb1a2f5a3b8a2258ea3cbe572ed9c7398c31005a4f732311011f3f8f8479188f8e0877904a2235ff1c12f53f13308be388edf2ac76fb53ef54e5de34d672a7e0692cffc383f68a6622b67b3a5c72773ce653ecb1390ac4f79d3c99b4ed1042fd964d5e4d4040f48f1c0d20890f0a48c62f24414e7f74d4875a06a64bdd89aeac0545407a03830c501a990f5228bc97204a4f8ad17bff5a4f8a1c812b9175b666a96236099f76cbdcb25b242f15be248926419f5449627a6e880d308ca119423e0502f586c0248117cd5035f3db93d6d24c6895bdd7da0ab69eef3cdcf22f8ea6e9d3167f1a55b73df477eede3fea8aad24c58b064adb5d67aefbdf7e69c73ce711cd7759de791a02441d6a6d6630f9e41204a119451e4dc2aa13031c618639753e79c73ce9dd65a737befcd39e7fb3ec7e9120ab25542418e3e30906c9a1c086772a5ad77d62614c75d1342f104f5e34d66eef9f8714f910b71822f96ae677d37cad0e07ad603b94c20d20c3b16f7fcc5d1044b292468a6dfe3ef4b90b7989a4e2dc4a9bf87ad04cc1a082113d41352a0624db1a6bd6344c49c4c51712aa0aa3a1073d20132ffddde12206fda797fbf530e638231edfb95edde1ac6e4dc8f614db814fea46978149a46bfd4a93f255b604dc827c8fc777be014bf0aef0cdec49ff025cdc3c2309e277a4bdc138744882d4e909a430543f28378df4ce3ee0be106e85ba2005f1d29c81a73787778c4ba2967cf47e31e8d73de9fc5ef8539c61dcece89818333c87919638c3b8c7d70ce38d01cfef2d646b0996f18eb1afc85197b1dce3a328c0c23bfd0575fdcc25cce78dca4ded945ce19737813e16f060e79c61cb3786432902efc321ef2c42e631ab087b1ce78e31ff84586e5991ce62e73ac71c619fbe01739ccddc69a6b8c79b0c62ffc6111631cc33032a83bec6d9c31f6c1987bc92d7867cc3786e510eb0c036b9df3ce1bc372c63119c41ff676c618fbe01719ec34dedec618f33c8669c1c3a101c0b1c61fde30f8fb7cc202c8c0c03236ce99cb5dc7a40b4ef803e38c33c6b8e67617e9124009c6320023dc1f0014aba9019456aee080f6200302e041d5052a6f706d8002836e03fa825b0394282c5043a90aa1014a8a6508aaa3230814184af881cee0c0a0c0dcc05016133c3c1867f09420dee10196c28ed055113b3f856b2304051835424f994615122a8dc76901004e348e1043e8c518df62c5756261802bc487b8bf81b857df7b2f007e0801371dae0ed904122a633b519fc98650580fcfce0d1d1b357270ae0ef70e21492076b5415b741634b6b48c2681d26e80d20ec2b5f0b85b820f24124a9c8bdd0a37f06143c9d92dc4284c700b50da41be1770060608a56f009b001a46d872a2d7c3ebe1401d8301790b943c294a2d3af8f0f1680b2441dc8112bf52e2620c0d94c4d62481d207c3ca5d8cdf7022965c421712f86133516a95ad52d7b86e3c18d7d50f1c005e4f8743b7340e2f8a929621e78603b9269474c8c56c1a618ec65bdc34c01e1c00dd00b8180ee452b1456cf960be976e005a0a3f70311aea072ea5a442ba8f3e488517db476c71ae8d758ddeb187882db8dce1d0c97433701716e642cdb7a83dfd81335b7702e856b48680ae8eebb0eeb6cebed9d873a1657cf862702694584df8e0e2b68c07c30f7b073f98417fafa610041b50c1606a0552b7221b8660e2f1f3820b3caaed0846b861816c795d01082064862b17501183180ec06992800e0aeca0062f50410940a081246e6c5670726b1dc0ae4b4002962a33a0628a0794f470001d08908390197cf48801a3c54b145028d140067ae021e8c58c6a8bc1da810e8a1c295d4da1094cd0a1002d5e5c3550410a4c5002107c60030e682244d001068083901980bcc00529a03282a61f38b8c10b5430a5042440220a0312000412b0d46006252041141c58a2d4674078b8462c3fb0b283154c8142044f28314403fa2ce8003a140007203c623e34aef1052e5881052a30c4923e3b400080f4e011bb3fb0f20217b020055088e0890d28f180264b0c1000202ec47c7874726856b8f6bdfa81151db06005299802850836a0c4038668d280253d0832800e2fdcd844010a416268b17230c3c4840139e080634403189084c489ef4a4f214b8143213fc163622f9195c849e01a3947e3609bb0460340ff4b8c3c8365ba18ed02c3ec16f8e563b1628526774b6491638ce8229c015d5fe7715de638ce35bedc1250851628755ff76d96b7d37dfa8508e4c30ca6f7e240af678b2dbc452e681fd1a3766d2a2028a0c4b172f76d1ae38b9e0c28813788b34d83e543d691e102d898c37102251782c0e002226f7007a1698212107e6861ca07cc7d5c3174f890778cae41c2650e0e801928715c8c214b5c5a3f09d03e7c5080928b0f07b1456cd9a1870b92c7824c50c2d17e3e841e40769f1e39912d04131fbccde25ee0960d1f8260c4d7020d96785924c0ca21d7e1ea603b865e00a81f58f017d8035c81d361b7d0c17e0801141f3f2ce180171267c9280bb2002994c21b510580186bb4f00d333ad6b9d8f101ec601ce8b1340f101ffa05d883094a600764b4c1fb21c3a307f8fd106d98e10881528b4d6307e47c588c1c18f2300f808412e8fd8031c40025ae498e391a3890c7b81672fc84b78f05ef0707762e4618be197b86af45cbcc0a312f2d780088a186157c003d9bcec6688307c8904edc5d0cf7d13b9fb859781dddd781fb86c7b07b74602ea34bfe82f379320de31183f1c0978fc7871d33843ade6bcfd833b825945a606d183800388c6fc69e69e5e8173f28d9dc604da46bb6e608300f000112a8360d64602a0a4a034b445980121e90b04488ba4ce8003a1020871b0460c3902001f8e1d363e3b5820a327ea760cad511ae04e1851c2a98312e3a272a532481040d3c5ef079e122869c145188c089a724a21c01c5c9020278b1706353010a00d97015852a8608700423942048753dc00134a21c31b07b1a8289e7b30195124f3eb09d162d21e875333220f8800e7d2664860000e9c1c347278766858b35ee229a08a18015553746a0810c2ca104871b7876605a360ca69470430e1776be8edb401022e080114e20c000045ca088221c2064861c3116440c05fd849c6563792364ab1d84cc035e856f906b9069f0cd40a422c320bf20479137a0359089ec14cfc031bc177c6674915b6417dce262c157641726372b871ccc9fe7e5aee379638d3177c19d7b6f0c0932f5da10dada682bd24d9fa9329aedf6e25eacc1d95d5b16d4b997a53d98c96f0ae487e55ea12fb2d1bad191a7791770fccb051c6fa315f521f23b01f98980fc88203f21849e487d9a7ffdf7198db5d19ea57d4bfb58d28aaea891ec51dab7494306b0b1b129c04cc6ddc0b997df60f21897fcf665571bdbdadb1645ba595b160097f44ce03561a3b56c9ffdb7aaedd9aece9ee6d565eb4d65bd261e923bb3f5167d96f47298d93ae9ade0b5bc515b64ebb52752bfcb6835f6579568455bf67b910d5defbd30eefd5aee27d36f6bdbd91a4ad4a5605bdd7b67bc16eebd34f7ded70c3c0458cee7f875bdc95a80c17a603cb01dd80d980ecc06ac062c07860383f5f4f4f0f4ecf4dce8d1e9b1d153a327a707a707c6d3c3c3c3b3c373834787c7064f0d9e1c1e1c1ed84ecf0ecfcecece8d1d9d1d1b3b35767276707660377a6ef0dcd8b971e386ce0d1b376adcc8b9817303a6d3a3c3a3b3a373434747c7864e0d9d1c1d1c1d988d1e1b3c36766cdcb0a163c3868d1a36726ce0d880d5e8a9c15363a7c68d1a3a356cd4a85123a7064e0d584e4f0e4fce4ece8d1c9d1c1b3935727272707260383d383c383b38377074706ce0d4c0c9c1c1c1a1dd7b652ec90dc1ae3647371b121c038034c0d78b87e701a40122e09fc623e0ffffefbd2cdc7b57b8f7aa70efdd33b820efc3bdde4788e348fe042bfe822b24f43e200d21a1f769897aed1f14a2698d8a68eb7f4bd46b2fa1f76151b61bc95af4c885d20517b813c995ee7d96d6de86fe595a376adf879dd96eead013a9dfded4bff7ca30496e001d9e060b2c7c8bfeac1391d16c2812d72980cfbded4d86555d571e47d475557fb8bef7dad8b447447d5565db05e456c17e72691e078ecf797db7a93308bd4da5b548422e4bee9a3b44abb5ab3a84ee997baf0ea48edadebd48a2702f0e967b5b2bf7ae3a50dd6bd3414f71ef35efbdf9923aea5e73e8deeb722f8b7b2f907bb76beb7bef012e99a958712f79ef6ddd7b5957bcf786f75ef0defbe1d8dcb0c9a9b921cac1c1b991830e0dd5a831e3c921daa95169366c6fd1556693b4b62cada8af376ad18aca6c6e925adaad08daf6a31b76edac006e3c1b9988dbd26a48ec0bb5a8d08a4b66a37b6ba8538b4be6d7bdb7e592b9e5bab076d646e347b015bbdaccd4a31b593742e2293e70ef7db92476baf7da7aed717c1ffa59eda61ab14ff32cedf548facc46fb6e443dea6b10127a84bdf7d6b81717e0deebe292b8bdf7b2ab8dcc96c47afd56438dbcd0baf2107a1bfa36f585685e48e87ac476f3f1696b37b6d720f4b35eaba1b27befdf9b87eebd3097c424bbdab44744ddbd175feeaeeabaf6b7a13febb6f5d6f6b5b5f5a35e433aa27d4b43d7f68b6cb4b6458f5695e8d1065cec807b6fcc25afd0bd77bce475c0bdd7e592778759afd150a2677b9b34f44fa4be4da5b5e827adea513f62579b2cde7b672e7961eebdae4b5e9d7bef11b546b47623ea27b534198a84cad8d546d68d041d41d71bd9cadec8d45a0dbd495ad1758856bbf772bdefbdd98b4202e18d52523aaff64a2083303419600ae15d4ff32449d2437efd3de0df9fc489244b96fe87fff7fc7bf01ee4cc2441fc0f3793f4c03d682efd8ffecfecc133f977660f9cc94dfdf77be0b02d3417b0cd06681eb1bc3fe158e6174bfce3a8c5ef5b22fef865312c47991edd73443a3389a4fc9c994492fe177058e6fc60f821172ed91f8a7f471aee8ff83af22e97f0003efe6bf2e00410f8f879d84ac03288177ef487e59225fca33f88177ef6df71fc4afc93f3f64c25fd581ccbfbf3954bbe5ffa9f3088ff095f044d25bd04081e7ad01f9a4afac30fcd254bff337e1e0930963cf4a0ff3395f4e7cf9f5f8f407a4806cb25fc03fe572ee19fefc37249102ffc80bf847fc20f73393e2ec5df230f191af68f4f00fde27be5120f07253fa3899f07f04b1ec2c71ff7f8c70c822c72af4ece24924452fe2492f69343f2e351868621fb5f678e89d05c22f30d43223c8f3cb8796f8d56a2710ce12da279cd5bf2830ff9f3d67b630f8457899292084ebbf78ae8f3db7befef3b6f77dfd6baeb3efd9f6712d17befad754ec27d8fb9df498ce4e7ad7efe9a6b9ec4e366ab03a0e4ec7e9744b849845392e6c7443ab388e6ca2249ce7df913e1c538bf4ebdff3e7f18f2ef2f10ddeee78ce4e79eefb208cc49a44892f3fb5c16813939b3d53ff0e9696c1649727626118e7bbdcd22f7bc31b4ce9c4f909796f692a56d068183c041ec254b4e1479e1c41fc4369d28f2c2a9ff469dfa71086f8e01e3c58c4c8c0b98162f2e2d2c56b848289c7c30055309ea6e29b87bfd5d797fb832dd1bc03a37c1f8a46e8d144d4d4d4d5e0eb89307c582ababababababababababababababababababababababababababababababababababababdb3d1fe262cc3d670af37f2917e2eeccd28f3799b9d7795e578e2f7e02c207c7171f68144da0d0343fd0fbbdf14f1905924399a0945b63322193f8ca2ab886fcf33dee32c7c10c0d90af170d1c1dcea3ae4f77c2ec522c0199722b6c7ab8c442a6afd7ebf57a35410765139aa67040094d5130225872e21765086f0e411521c012822b2e512f4c5c0a67d1d874faf019e6ccb3688f335f34b338854d781eb9393e532e1536c1af4849494949499d227f3af7e613d8307cc9bc517807b52174485d919ea53d6a5bbb11b54886b7e9435fabd18e7c526d88c6b22ad277a396bda96b2fb2a1339a4f52db5f55da8a3443fb5a64a3a16fa3fdcb767b96f62ccd08c826a98634248a7b2f8ba4b6438408c9723b29a408213fd89676d43ecd463b6d5adacffaaada54a323ec8d458d84b498214ab5b1b4efab50502782b64244d0366986ceb0d48f68684d46ce80736d58f6f6e8ad485f3b0e32404106246418827443d596c6d3587b8bd69eb5d1d0239547902c344247b21c66b66e83506f89d4d7da8f3cdb7b8f20528e74dbaf37f5d5762da21d914192dc8bd6100408194315d7a656436568cf25638012031432861c66b79a8ca677dbaa0ebdbea5b14036670c3dd7a6b575f68c61df6b23c38e1cde863e91ca23002708407baf8d4da5b5b66e64ededcd861ec9682d7aa4b637d486be51d14d5d8d5af4bb1150007680549140985c1b219aa73103f2345e427dbdb5465023db8de86654443b8a09d56ae80ea1476733db8d04d2f3c3ea0753ed562469e867bded45b3dbd1ed8886043dfa6ed4ae9da5fdb8e1c7b549aad56e442cdb65321635b29975232cadc8ac1ba175595f3f69ed371a481f52f7da20a16b6b4365680de948b5c18713d2878ea7a9edcf3a1292bace9e458f18c9d09fa146a78f96a416e9a8b7b6cef6a0baf7e670c91e4af7ae9d88e836d4652812fb44ea1391a1b5475924d468ed43dec6467b1a9b6e437b7dbfb12cedd76ed4aadf8f54f659f408508fd7aa1215d1fada8da82ced6d32340097e43175efedfd68555b94d6d2663414e956a4af403c4070efc5e1923c84eebd362dedd5b6c8466b6feafa44ea27a1479ea525d56ae8da6dbde869b0e8911f97e441dacc7adb57a4b5b736daf7a157dbefb521a1ef466d370282c1ca068696ed9de857b426ebb3553592d9d09abeee802107595fbf1b01c1706d6caa3a7bb57d239676e493ba514b53aba1afb71d51bb1110b983ea5e9b221b6d66eb3ba0c81d42363432ecc8e189d4ff595f696c9fd17e4542d2bf0fb5349b229bfefa59676fb66e8456f4dd0868c7cbc6a67efbdd0888fca1626f7fa4ae44ffe8b3a8d1b7b4ef321b8d05fa61baf7dacc6c3795a8c846eb466dab1ef5f54ff20787884cad11a9ffb51aad65d76ed47e676fa8ac0ffdac7799ecc6feedbb11d0cfbd366b6f6b3422f6cfa85f55a2a3deb6e8db7a1ffa241b7af4aa0a449e4bd7463b5a7bdb67b26759f86e0474efc571c913069b596fd76ec446b3a1b29ff519cd88ba22bd90503702cad1d28e68418272d0bc701cc972c8711ec972c8810389fa53c3c6eda8b7b4a0de89d81c396a3574470e36c98667d107c281e3489643cbf6590e1c48d49fa415a5c96844ddd6875ec80273c917a86c0c20d4db9bac23e92f38b5b51b4ad467e40b462ff4bce05d3287d4ed43b455c60edd58db2d4753bbaa48bdd6db1c46473224415db6aa44397ecc6c9d25738036061062dbceb268d0da898282667d885001be771b7a6ae41ca1395824a80c4f83a6a746ceed69ac9d46446b6d7d0664c7accf6c37f5875dfbd18db5a9b2b5db8ea86b2722536beada67ed4ded47b4b6a6aa43dd08ad95a1412c2d074dcfed69f4dc5e4944b456b5b5680d9db5a9486c5f7304a1b5b59b0cb3be76da7a14d48792d0a37b2f103e5c1287152502dc7bfb2571d46e0d1b1b39363835b623ea3a64c4a246387efc2071e028b2d1d6d6862024b61fa1b61d3e3e466ad8b8e5085a3b1212f468ada1adda0621418f72e040821ef5a0cea243396ad8b8e140821ea936a0239f18dc7bd73e84f5f109829f8045b9adacafab2afb56b5b1ff44b48e84a43f4bfb6e04f431a1a0550d129a75239666a311fdda6735daed875d6dd89676a4a487ab12d980d4d0b268105a4bb301d98156436db41e321a6ba3ad2d121e493524a493458d86ac7d08bbda18b1a891edd68f68adedb6f6dcd003d4a3e30abd8fd0b7e8f7166d916eebaaee0863481e2bf7c678da596fd96e0b5a7b4b0b3a5257a2205947626f64dd084f0ef7dedb7aaf4da5b16bbf815d6d6ae84d0df5217700706d6c6c58687b8d468bf6b5e85b7586b761bf86a2b59bac86cadea8a51df9221b6d66bbf9d4ba915e0bf2b9b36e64ed6cafa1f7b5878ca51df9f8b0b64e446d7d7cd85b8bb63674990dada13f462c6a748302edaa1ab1afaaad4f67d76ea4af6f03c2ae36462c6a74c326a1437a270a6293502496456b321d09a844362049abdaa2331b2a430d5d3b92901a7ab4aa33b02c5adb61246b7d7cda554542bab141fd085d89d82474488e594742a2ad2deb73c4a24770a833b07d0015586185c77917ca6f3b4b44a4f2155658e15dc8f1335be73c37dcbba1b8db89ad80bd63ffc0dcbbcfad43d6686255d91bb206d305a2821aad7b736417f77b719e05f75dc8f1b65e0b6a897a2d68565371706c1060f3847b8d58f4878d861ae5c8810387acdf60838f4fa7ad6d10128bb6e88c1684b6280c46362045ec110c2d1ad4da3a3b8311152908097a3443bbd18fa0201adc0c3f6e18f1f1415b1486596f591abbf62137c48084cad0fb0af4a312d980d46aea8eb51bb5428a683faa0aa4ce50abdd7a04f5559505b5ea0c25525391fa916a43b7a93300a12d0ac30ced3f66683722b2a2476b6fd123414847ab510d1b37db11751634eb2cdb65ea8a94a3cfd41d37e0b0a9b4a023dd9663fd51435b9bba036d558d72082068b6a247906e33203d371cb27e838f8fac1bf1f199b56c10128bb6e88cc6053708e94886240995f559d01a14d48f6e6c5f91d47556c3c66d56538dd8be1ab5412c5adbc9b905b5ec4a23aaa9ea50cbd290f420b686da8a686c6beb34249aacaf39687a74a423590e4f63062232b5f683b6e80c6dfb51503f5afbccd6d957ec5eb64643db0e437b1332eb335b47626f36101162035264a3d5866836f8f81cc990d86845b455080bbce7a099f5a2196d1d3a9fc60c08baa2435e3864fd065616443392b528124b9b19b1e80f1f9f19da8d8264458e828a1ccdfa0e34b6868d5b918d66a3a1477dbdf70ae0de0b84e4de6b830a26e06133eb6d4b3b3a526558870d11193aa4aedf875ad4a87d94b5a16bfbb68ea4be3a031354d8f7ced06e34a409e5256748dd0b857b2f0b979cb17459b0b15d9d7dabaaebf72274555b1645aa5972491955b0abcd4d506fd119ad861ab1693b4b6b6948faf350800ca11a681072ef9de1de2b43907bef0dc2c80e3fdc7b6f973411c0ae36335b27224387823a6d6d8f6a549b056ceebd3b1429a782fa4cb5b1dd08ada51dd156a49b1ab321a21e1dd84d4e0d1487c7864c6766c3864e0f4ee7a9e92dbab6ecd08dbd570997e7de9b8432c8acd3d6f6fe30e2a1b849bee5de9a1bf6668748c69333c3b9c9d9c941897278746ce810d5a8710376a3e6866d6f2a11593792ddb4b422192e196304f796ec90b7f57ea4ed43df59b4af321bed936a6b1f3abad99e884cad0dfddf1b58c5c0e1a3070f1876dc7b672ed125612cb9bd363444b3612a12868e7bdfa7cf54d9f7da106abbfdacbf4f0db5adbd45c1255fb437c986b6b6be762222daecd1ef4650a357db6767bddbde4846333af2345e6d6db419aad666bd95ddd696b5a9329666833e916ac4de3e69e8fbfa7de85bd5f6365476effdb9f79e2d476d8b3edaa2b36793d02335f4679da519b53fb3a16fc4a246df67aa0d15eab71a7a838fcfacdb8e08e9b3221bcd4886cabeafe8771c5ec8a1839cd101e9464455736c786ad8e0d40ccd6a3a6d6dc999d825676e5c7206876b6d9d1d3afb4c9575188854751d72ef8df1403a5a7fd4bacd861aed60d9be16d980201dad3fda19da7fc88ac850e488b6b66caf618676a353f5d167e85a84248056add950436768afe1deeb03bbf726adad8dc70ced3518c95af488a5c9d0aa6a0d36f4166d6d28b2d18a5096ed32b4aa118b84dad8a0dea22d1b9484d6faeae373d45b36890db2d1502319baa2487d079a0dfdd66f3418c95024960643125aeb351401032caacce0052384f083153cd90047015c38259e074097075e30c443b143b629e1033309f08114155a090832819269ac11010b3cf1444d12609cc0b860064ac0d0430c8016e0820eb87befcdbdb9451ec0bd37e8923130b46811cd08aa7350653fe9665a76f62eb8f0342f5bafd9c856f649ced710d53afb2eb8f04636bd68d6b3d3bdb7009784c932536d030002b2e31c72ee781c8f6446c348f75ea14bc214adadaddf20a14737bdafedd00d6b5369adacd76aaaec060727679673a3f7a19e1b376ef4211b38443928ce2c07b603d3c191d5c081e5f49ed3331be2b991b5ec6dbdb9b7bc57c685492fd9c229a91309aaa13215897baf0e13f7ded9255b883a3639363935359bbad28cd8ba8d591ffaa4da10dade8e3e6986f6b5860a696d3755167464ed46d499adafbdb5ddd41dbd081d32ebec2d086d511890f4990d482f4287b44645b48e43bff55b9120a4a35950db6b35142988bdd56e4737590dbdcd684668331b2d08097a84b6280c4534229bbae3de9b83734d70ef955dd20506ec6a33abd16e309b1a352a918d36ebb6221acb1ab5280ea40b128e8d03d4781b6ad43ecbf65a920d7db61fad287b536946fa3a041fe0de7b74c9162cad0c453a5265376c766c6cd4c8fa4c95d5f41a2a636b925ada8a22b970c996a77befac17f918abae7d872fb2d1926a36f56768afbdda3edbd286beb5759a8c464474637fd65b229a117b2f0d5b11ad86f61d686c7b5393d020178b92d0ed8ebabbef7601dfce09cfb80b77b785f90b6661afc6e6b99a880da3cb9ec7b7c6f8b6c836375f4cc37e01df2ec66f8bc31763ccb94e0ef3c518ebfc03e30e678c35b743c61977f9a5068c39dcdd8c471b9d39ee053ede396f26bc31ce205e42c6dfe57867dd314e33c6d9134096c938733b6322648cb98c69c02d30d6d94301d71d0bbf608c718665174f630be08cb98c71d641386ff0d3c922cee1613e43bb80bb9c778e0673c634ad1d8c809d13f6d043f2dd3763006ffdda3c637d7904700ff0cd9724c98b2fde386323602fb78071e6396b8c6de01bec6131e79cb91d98859c77c638da2674e1ad80c7153159029867177807a3c1a8b4edb2a6450c32846804040400000000e31400203818108b45a3c16018a661a0c90714800b87a45c644616480325894114640c348619620000088000cccc4c1b00bb7340f5420a763e0761c2e0aea74af3801bdba9045d2e97aa20799fb730943528238ea10035cd3dddb5852c04866533fe6ea8eb83b7d4913ac5a7a402f705c209930684c7992c9161049a59f175da2b497f3a06324c0bfd4562328f369832fdde22a7adba95c4ea0d595d543195ec5517fe85169b26e8071694010fa2f3e2a6e161021ed6feccf98290e6bd884df28e2b1f3e40f20ea27397225b00017b81f6cfe45f32919e3ae1dc62b61723ae02d8ab79d54d0bfe7644c6ce7251c21c76db7e5602290d2a59b9f2851ddd1d57ccaecebc1333dd560740b78dba2dfee485e7a936bd50be41cbed05880542426e3567b677dbbc5855be599c988f2319796d193678a16adc6e5481fb5003573be42afdc5ec34ad1736e142e64b86b66be6fa70ebca829cecc33d9918c33ba37fa6f013cc893c4ab8f6ccd73abb2c3795650f4f095909117ca0532279dd191c9d5744f7620c852421d642202e9d0de63749629dea5a38cb5ab388d58b7606b9ec1341897f48de004d3b9b1aa41931e00624f77a30b8bad39dc0748a52429299ea432b1d259f0814481c7815bd4d519b0a858710f83ec8777a30c6c8951e0f993add3c0a32918bd91e760aff54c6c8f9511e49b38132c70a78fb253a07532304e329a8ca3e000a84fcb31be31c1a82336a5aaa54938a100ac6b028c3326785c55fc95d5b4161624e8be2db8c8b7fa5d79ac15e0acc9c155a113f8b4d23a08713bb304cce6ce9c4c14832fff857db92954abe83a6f64e15e70b4ea471e5602e60c2e27f906196e90f24c2f4367222f2c361dc7d928c4f2c74d78d050bef3326e2131bac4790596d7ca9cc9a034f0baefd459c0fe61cb81470927cf46c5821eff72dfa2478741a5da3a96900049e425bd16057f5097b4c76a91271117edb0c1438044d3561dac079cf35efe7ed55c064956afb4024fc295d0990d12e1cc8be01a26fb407cfe69e20e0255b6e8d9bce6040a8f2770ce1609167208bcae517549dc3cb1c0c46f388437e0bc888fa879d1498857064688572ce40eb9b89f8e7492816f6827ee8e4946927c77aebf7cf633151b75c5c08ea21ff888fecfda58c7912e9036e053e4d45bdd135219ab002f3816a78f5b9ec2e8cc0d4c8c2c9026e8fefe659ef9d05816f8ec5759f1445327e7921ef053160f4dc701fa9a2d554e7296da6ab0a0e9a01b2b9dbd5beb4315ee7f87ec42028bb19e4a278d07511a554672e7482e36d5c8d5862230fc613b8204443b63f481afbae146116d707918a3a4f6c3e44731c5f870ed851558393bff02256d425aeb74a03d1a35e21d3886b4a109b08d2f61570e6bb8b224fe04dc20a6e607ec5ce760f73d73410dc78af2bf4b8bc40dc3d85cbeced91ecdb87e18859671a100f22d220293b8d9a693035594ce79f3849b37a5c64cb1f7d9836b6b3ccc33503641a47acab6e145c2b262c370bf863d74f804cc5283c53c56ae5a1bf1c268132792b2eac694194e2060067edd6c726368c0416275b2ce624527e1715692df1fc4cd7992d05876d93d4d65920c4cfa1c4addc582ff82649f99039f0087ca610fe59a047ea958879767568438fdea297659715955856772355323fba713bf2096411bdf11cb1864c2dbf41b46794f7ae3e06c36dc14a0790ebeed2f489e5000e477b15e4f3a490ec51e35d401ca75ccfa7da1e8b4f1e03d16e079575e4a7055a0c2d838509ae98282346cb7ff44b9e0d63b38716857ed09eedf79ccdd1a4676252bd235403e5befe8744569e2be141278d082f94efbb2bbe2a337a1e6221ae737715c544c0f33512d8d94d0d3613c1afc8724c66a6fbd06bfd3daf62373ee8149db65fab8b2450986ae9a33645911213d7f0f5a6adad67d91f772da428e4ae4144ae63a987849312f331c139490c655523a5776e3479c45b265b583d0a576ce7286a8cb46eab64b5e3fae11793bb4327669bed1b8855795384bb1af6a099bb1b33c5ac34baeb077a29c766c9944d8fd4c1128801c92fd36dd775e5ae036b91ba1b51ccddcc5bee74e77f7069b9a2d57f1b16e3ef1c9c6ff2df4011be581cf499cf7b8ec9ccd09a6e9b758b10bf9fbb8c8b4d9d936bc451be5b1db1d607d99a9639125049bbb341408d91b06c902e2de5cdfdc22c135fd79c11d54d43c3e7222782c48e5ec5e8fccaeeab944e1ac50dc342aa9551bc12ece3b9cbfc7aa4cf08518e57973a009736692992e55c60a94c1db716db7c304d596f9cb8ba2c42b993123067d5438f34f23565a1940f179aaf73e8ef10ac7a446cc52f9657cf78287746a31f3507b4bcf893d33e868a16c638bc3b19bb34ea7cb4c696f5777dc6706e58aebc338be367d6dfc33968b72454524fa8162f932eee1d3134d1ac6f30398c3df62a10cdc365ed9143d2699e1feb1a2d7223f67e3293f5092c736d7ddf6dbcbfc9745446a7209b37f6cd29f5c6f2cb3949cf5711a3e4069399dda06ae6a197991d98977e0a6cdc8653b5ecc3706104ad914603a49048d6fc13eea2c67f9525541715c40894deee39a32eca43ea4e28b4c485d2f399ce3a2d2b00a2cd0fbcf6e939ddd382e594dd436edc10df5f3d0730ca5c7b6460a4026279a1d7010cf3b3fd73c3ac0f35943f6e0adc6960e9fd896a15b7ae0bdda169bde7fe572e7b7f15516519aa9afd3acb65ae9f2d3ae55d3a6165aeeac5129fdde7c00a4c1f71fe79a1a4d7086646a470b1ccf9694e62828b6948b6274b860183442c9e3008db11bc48553fc4b2c3beccf2d37226b874644de30cf10ac28f073364b314da045b4c8bc02937b0830bd0b4537fb1542ceabf210daa335a6bf141a2de146d3b5c112c8102c4e1dbea0c13ae6fb2d6c49c704b95bff2b4a5311087b7b444b370b793bb8eff2136f5b3b8cae00d0dee713db88f719d719ca29181b85c3c3ae9a018b13a96f8328b70599079164fd03a9ccb9830c061d194ae7c9c7a26802ef36bcbefdde1636d9cff717fc1de7d349fba23f0d9bf44cb7869f3fbf5c60c5a9997d6c67704c65de4e32fea1fd9744609c5cb3108f292a15fecf0f51acf649df1b7fc326d736facef4037a901363ea25ff914fcc98e6c681c0aa4b80676393961c42edc9c7f0436f124215cb177b02c88fdfde50880fa1c581b9cf9ba3728ed054ace44e362a5b492bd29432246b0f5d6cc0d087b7e09fe5a953ccfe09e3d5400cfbf04e58f73fe6cb2f553df501acd9ea07c76481b7699482dbec0c8d7e4b69e69047e85bea51e187720484468c0f9e42541f5cce927c914d0db9adcf178529343059f52a6af35f1f35e2df4cc353833d7e631e9bfee4c913683ae0c109d81fa7d0b688ef6aa71a3255fd17f9f7377db12fb49facdaba1fbd21ed67d3ea92670c37853d71b8081c449f1289ce381ed28666a404ef7b84320e24e118b069923b5b4998b81a30efc1778262a86ab7a52d33a9394c0a50de7d42fe9091db0d734e6bf078bbbaa3867ad1ec5d1f8487d4bc07ba7f8458fa64a737f17796e4a70029284bf9acd7b2ebd5bf41530683e5c191eb16362a2b90f2a7fb741706b2736fd9533b4dfc1c2d24c3cc7a258a7c8bce4e9a423c02cfd0741b29bc537c2810253993f393cc8d4370a10b037d41ba8898b9d31e61a1e5fe72fc008120ae7a0a040ccab88484c985929509e82b81205dcf795323ae4bfd72a6f97560647253e3e5cc3ba7017ac3bd2d31e2c791b681ed88ffc9ea92e683ce800c53307d93ea0f55fee580df25862158a5a47efd0cb35b0ed96af3748ff4395aa75e92eeb190be8154cb5ee4ed0866c5430bc789fa2b72eb5a28880de4bb1e1de4e6129e66e4809bd2ad844baa051f5b30f41767fcfff8b2db8f779e38884e0fa759711f8c36a5dbf56383f81d23fb561a38f423faeeebb0cacfef46a4cd10f931ee6fa8ed469c04fbe7adbfc79b95dc9a80fb8b92894f62e36fa6e82d8a83e77ad1d4330edc871a920403e9f439fc0103a8ff977e5853890d3d67434c50be817870b1086bb0a62ffb91e7f7141eb689ce8776dfd805690ac458a287076dcfc77a66f42ddb446749793db3362f9750e82e2093739bb614d9ab951a9073f83cd5329b70959b72faca7d9241c321b98e7538d4006fe03a00dc92c1d4b99bf567a30ee9d6af2753780697fd688a1cff10ab637c36e8755c6cf1f81235eab1bdbe768127a14b93325a59685304cbd474e047efc8df2d4bdb4abea32dba3d95f9b7a3478df76f448dc2bfd813dca7a2025acf87f529353f3b6e1892fc0d911d9d6ca6fdd77ddd83d30a18be68cc28fe27bf74331f9211e58713a9046cb065d113f3eb091b1b0e7707cec4e1eb10cfa617d6e88ec58fa882d5819815b91b6900f5c753a32fe476985b26e47c19e1181fbb0d6d40e0d974f372d88f26fa78c7f21f921b8d3accc67fb77f39a0eea40e7a6bb11548e85d1d8e34454ab63fba898188dd4bc9228905688e3bd1e9c50d4475982ee0b3e1cf78cde3d2f0772cd94b4b531f5bd564e72c9e3f136c8a789f3351bd09dde08f28a10ca1a9cb4b6dee3601cfef2a75c01cc3566c25eacaa0e5ccd5856d90e3cebbfda1e94a0269325beb37a0cab5187f0d9b9b91185b0f4b5992fce0c3fef16f5f23a06446e2acdbae8a23f84235071106fd7ac5100773183879367c399aa29a6ba052f02205c46d6cee31a3f9037a0b0323390936c47c81d96a13a7848664dc6d7c13d49e93b5446677b0bdbfba041264a77aef79a72ce2736cfced3b3c4e676f2771418c8493fc6ddb4015ca71888bb6b2e178549f4be6640f03d7c161494d9ac6771f452bf7399796925317036287a681223b0702f5320f092c6e4bd34b3def278c07b2df4d1efb1085a5b245f628272b23f2befe3feeb5411a3d70e4546dd67e5b45d76bb25dc42b4288315741cac9b3e03a97291b1a738b849e9e76f378e446223e3dd09881324386bb65a0636b75d3b33a0fe3aa81475240a42634e57755562b6a45ccfbe9e4a9f4165bdb708b3839af1a7f37b632b24ecc5ce316707acf3ef2d42d2061c35f8be63092ad232baf3e7c7e013637044ee9be46c1bca3dd8b1b02fb4cf0808612b7c4d089a582a84c92e6d3a983a6612973a1c9b639689922cf51fa98f2259fd712feefcb5072b3aa3b11e571f17aab0aee9eed0a93bb4be5d7a3bb8b72b1830c1f6403a79bb765e0ecca4974871478a23eb0c9ed4e506a8b89d4167384238afe4bb35e1bccca4d3a8e200c1002611588f5a142a611d0108f7567fd44701d6e29011da8e62871ec5c26fa04e29aa2ba09dafe7da2d23aaf200668cb25137f0929f7d5d17fee671040d438adb6ef01efd440ba4787e8f2ebb306aedf299c7b077642bd4c4fe3f12d18381026627ae30058072655ef487b16fdcf8535205cf90067412e1f4f5f10244089b7121eb54f7191d9a2ff3c9e8236bd6206c9e3ea9c184545fadd4856b41acff9aa902755182417d9404c23b84e0205b1c7cf043ffb283a637c2023161b80aea2cb74d76559fde81dd1031268ff39c4d6b4a239ccbfe86062ac653e12cd5fdac504874bc87a5a5ff1ace79345ef8932be1d847ad6f64bd9f5adecb7ebfb5df96d93eb5bf20e173e7e5f2737171f37070f2f3f2f9b9f1f879f870f939f9dcf9cc371c8aaca6476ac5065719ffc68817891d3e9ceffd8ce712c86a12882c00487a351781f01284dc4db3df97c455d98327a950e94f196a541ef3c5268d573bf8586a010902d5aecd41adcae3587415689dc927ca56ef873792eb8e4a7616a404f1cdf695cfebf38dee754512007cbdeafdb946b64064dc21a2864373ee3301ca560606bac21629ee9a081c799f1d75a7523bc81d751b5e1b501c774fa126e0d773d239052d805fdd6977ea75d300b9138c506a0ce4e51a170b809c12b37f96479e3593c45da214f471959845100a0675d70e438eba5ce26b045b4c057d2156232e71ab53375390b65eb983bf959d31dd270427ebf4ca995a60326fbc756f94a3cee86b4adf2d4bcf74f0af06bb2f71c7e1e80611254ac7830c7f03e7cabac8489db7dadd49c35b77cfc94cff44e4557965a70508cf239620fb31b1050a1e710c93bb97b314a515759d94da7b2dbe61bc7fbe492310b62bd591ddcab867954d55532a895d9afa1cdb23eb9b1284e34fc7af0a1daf2d68a69defbb215b4e6f86af3acddaade0deea6a2a203c4b1469759b0c051f2585642642903add17f6a25186160c82ed089b4cf8c65637eee6f1a2b5ba8876d5349d7fc54baf80ea751f69bd15b43fdb8ebc276cc58385ba38cffc44010d8b893f81947d4063c474c5b73ff2bc98738098524022db14ba436169d6b3ccc61169e3d38c8f83f4f857aea6025632745c570ab4421555d74d40a5188c3dd8d982733f0c7e73889526869ca1f67f790ac51845101e3879e09168c6fd679040b36a7322df6d7ef3a1cb1ab89ad9016691017fe677de9c44c871e21eb4c22f19892d558331ae78d4204069665e8f8a94348fb7d02326047f3b89889863365b0f80f9de7840e24928926c341d1699b5628a5b604eca707bce12b13c84deecc05137f80c6ee2991204c897d2c58cc3a36f0eb3459218bedf2753fddc01b5b7a50f4f36a3f8383f0834ba0c64bd6a347acb9a1c9b23bf8d6f93214d545e80a72b136d071b00f2412d895069edff37f96fcea891d92200f8a706448327c91c1d7af5222eee80de12ecb3b48b6d6d5f8dd906a52b03e8d70f00455430914459158955112330abd0ac7b84f03c8d868faaf9dff034724525934e4b1000f0a12718d6fdcecf3c05bb36d900914d149824891715959bfa51124faf2c675d2a1284566b22994c72bcede9f39a58b1a1352b8fd523c23e4656395d430cbd2a174afbf2ca6146365fab8f97765a83c79b6b27d5c9f7944f238c6365d1bbc0c6c9352fd190204efc4868e0619d1dd77fd8b307033c3f6c1062eb3a5039f8a6a0c4683c4f8299f707a1aefe6ccaee2e0356c659952692ec2a4a4206f02327296314130563d4b3b86a0978ab703ebbfcb801eded9d1bc5cf3c69e513710df971f743a491a26d0a04a0f2bb325f29deea3e3d82daf1137fb3dd18e2dc584ace591c557ad49f36fde614b6fff5a5d25d6c60e89a9294add86f823052186e1937b95f25145680a7d920ca02adc223caa15c9ee801e71aae9e501fe4b3d087fee6aff3ff6123ca5f12c42408a73c2f9078cdecc834f395991debdfdd959d52f98814cabc4425556a1f47183e4a5129560264bc5559b73c568d5ec19994325dc3f9f7867189292b0ab22fb0d593258e0c5136aea5cfa533ffb8d45c52a45e6f52c31441afddb8ccd5a12b10905a1e206f710b06f7f031ee78914452cbab760e1421eb70d5158e2425fac8367bf3e377839b5350d5697f1e403056c2bd34a136c59079dc932ce62f7484cdcef09696b9e381786f2a334393b3bb16eabc5c166d11d5ae8961b7a6026261f41451c80a48eb7306d832aa29bdf4d64502b0926df3d903ac349e7b340b37b534328c2204814896739192c8d8e041b88307fce416134c48e0e2eb38a48ec17f558edabac66e6c0e130ee474d7180cbd209f58e6c26864deb325004e102216f36b356ee81d599424bfa62990840a06b64ac12bc964e0dec40c6ee2df00a173097ea02364e4aade1ccf624e5fe7982b0f28929e92da18d6320107e5bd7e8769784385a40ee70b6fd43598dc14ff53d44312f6863034885980d3225fba644b27b060c4dc80f49c14265d8213730ed0591d2542ae8a88cf40d461f6d958297126af9155ac5d1ea355ca7adb108a68b2ea7e15a077f646dc5c27763f7ac65f840c6e479b4777fcda744c75926c8465f2d365aa41ef8640a685ff5c13d58569b6abc697ca43d832f9c7cbc5cc2a824467943943b286200c557717ce4b0baff107a157fd2a9dbcf3d1dfb07f7562773239367dc35b97167717505b4d162eb3a6de56cf7b007dec2e80b863222e3c15b5bb8033866adf11a32e16afef2eacbc30ba0376f96d7741db2fe42573adf8ed2e80fc67bf27bb2cfbdd85da23c1eef19daca8509023a1132c805cd1d5cacf5a9be05b95ff7d86869df2a531692bc35625f807498c10515812fcb1295d510faae3f86f9c2745b1ea056a1e924423acc081a04134ebecae237ec8f4fc08b7dea89223a5e79b027c8454717c2ca5545205707da5e9f2d8996e3f087d96810d13a30cd6865e45ba2abef79f5ac1006697de009b9b609d0f207254bd104fa15cdb649ef8b560c92f0e9527efe03c581b923b17832246e55c404f277788a9b225a265e6cd158b138fcde9bb0de7ee74065bde5c09fed695e9cec502109b9977470239882f7277bc9dd5e8670c4001c075619cb56cf8c7bf90878830b5613614f4b3a008ebb70a5fd61a68dc409deea6ee94db8beb2904bdebab430fc583ee92540e94797f1eea7beebdba818e2a32f8ae45b990fee7200d9d5f1ba84241ca6e68b2070be6886ca3a8d4286c8a666a805149a0a5465f386558925ffc92abc1ca06ecb78a17b5978fcdd4a3e885d8637305c86e898dee8a38c19e3def4ebd6dbb97066e66783553e0fda5565cf7085d2cce3173b1a5f77eca408b72f36b5f4e567d2a851e8531d583108af31bdf7e579038dfee0f66e7cd76fdb08f58fb8287d407359e4d27d489297c6bb788380857a54db74b77a47d2987601fd3007f4574f5fe86f948d45357ff2d3c71e37c144cd802ff67e9b77bc499ca0612834dbbd94de0f7864140ca3b75d3b65fd45ecdceb041e914c22f1aacfe562a01fb36763019e8107ed9fcc917a65f21c45ca81dd9af1eeb1e3bb5a400f10b3fa6f8a5b213e2ed050565cecf35d74efd330696bdbefde9809abbaf13547a7cedf8bf3a550421edbff67c43864ca309d88948f39d4833ffcfb48442174cb6e19835447e87f2d531adb8685fa0df388beef89a047e6219a1b7c84aa1c0aaaa7c0104b7afa74f48a6d08e6addc413714189f9b0e2020565fb8fa7f321cd2af878028c48d3806b7ae099ad3e0321bead00c05cb548e4fc5f878c4caf6ca8bf71c9a8ab725d00b7e00f59c21590c357214b0dcd234b316220656e63b80d76aca7969c9ede4f55090fba87f5c1b2a8f8311351df08e6c24e72f37ce14ecd8e57a92a2808031c8c99e0cbedf5d139b16978045939f693e27490c0b61a0ba2a609f702d1babf7bfbdac0360781807c687af7d897b236c4ed56fcc2982581c349992fe03b893be3551024ffa5fb95ff79ee5b3d98dc9f83550ebc187e99efec1e4fc697ea9e70072292f5691255e28f56246eed28e3a8baafcaa41715007fdd91520946386765857e6df7e49b5ca51e91a246531192423aa8d7062af4ce7b64bf67c4067436945e05f8ccc1d7d05f956c0311e35fa2f48618fb636b22fef34e590efa67e2f48f7a688e79c8dbd198049d4bd31672314d0d8bd30a97419eebd5d2a8b24c210ba3c2a0faafda68cd10c0a1d1b5ffae836b80cce68c792ab3ed9be8b26c32bcbc01af57a1b46cdf85f5ed023c420ea592bbff4425edb3cd0da46e02cf11dbbd226668f66eadd061f80747659ebb07822a793990ffc51d49e7bb314a52c9664105ea5e0832425569de74706b7c6ba161515a8df311656242eeec34d2f49384b2787271c104af74502d6210140e7c887dafd38f6d8261d1f6fbc18e08164cfee674e429d0a69fd89c29e04decc6e36900dc3282ba5a82c2444c89b9156d6e12edead51bd8040a9d44456ea2fbb831d5b909688753f24344c1009b040229cf8a1389138d65f0d0ecf39517d4b05e4c0cc448fbf72ddd29692bb8df8a876921c4b8c386975bc1f9dfb3b0227921e74a982a8584cbcf5ec4b78853300d5b2bb61bb574980ac697869d1f15e2a107b32098d20c0721c58ebf062bd8443fbc4c00b2336297d116d7594d12725882b6274c6127f00a9ece51bc510a9412700efb78a377feeac123dd4850ecb699972ecccccbeb2e1a4267295f76f47c791c7e69c1201e8a29f4d5faf2a888a545c1fbd5dededb89887affba56416c024994d4f24676ab5c993b46c52df3b455fe851a059f473534e5f81f0b34f8c0639b9f0d64154d05e01993e1c517060e02a79a49ec6d9bdfabdc365af7a2c25fe2f57f127edf5503bf34779fd01a94e728f0e4203b149a5cf84900178f8efce35162a44d25931871f1707c17ca22808760fab93ef9c5252ca853bff3ba014deb6366ee6359f1a62426dde8bfea8b6f304f2c211daacf0ce11564c1d18ce35a4037f9077ddd89f03f911cd1583fbd68de187efbc852fabd37d683e46de97b2df351de5b71d03959af61fbc327eb9ae5da8ef8ab404b4fa7919c1cbc8874160acdfa39952cbbb22d4c949467aae4de5ae7e5c129d3d5900d167254a683daf3e0b27bea16487e5b19314afa63efcb8eeffd65a57c80cce878239992dd8eefe826ad10f717507ba54f681b2d876c96bb08898c248032083c806c13ec081cae6dd26d4233aecdcf834ffd190232e51cc047aca9fbbe916a5de87dd7404a18a3a506dbda4b309f8cb70943f522f08c6a419748ce61363aa0bd2b49989ac4713b8620929b742c19da81ad2aa10551b0c8502254a7c2d74e45335b8eb0d35850c166b5ecc33246710911f5b799656c8d237a707125bff28165482cbab3c51c749875ad1b9c1ec7f99fba16c3543ed652c25729947205068e59365a71d0891c03f139786ae5e1ca11270df875b7fafed3f15458a383c3c1719c1725ddf2f975a109a2013fee01f1cf5203cfab6d695c2136679b87afeb4a41dab2055ad562db7868937633cf632bc9a074d811119756f61af3683ab4b97b95d0f4c87e321ac8fafc7e0b38147bbd6831201d66077f9bf0df5f0e8e6a002457371c1df4058a607c88380c603f3745aa72d31b3da7030650a8196a75f6fb4beee0ef4fc63f364c6540d9725bddf46f9ddbcdecfe56dd2621aa03fdc6c88688c5558739187b5421a5b9adc20503ae434ff9572221bd4adc0a6884bee835bc22a15c685272071d8d8a7c6800f2ff8317f076177a9a37d112ee1406baacf231d54be56a39349ea5caedd0293f2b0989b800474a277511c5d5628e8340ba42ecb3e7a36c7751a76e10d2a07e01c44e0507f158c3fdc98c669ba7fdcd1eea5d4b7043b1bb75509ef46aa6f8e5d9f8d3d0bfc525c18210d9e5524e8d8ab6719728831deb1974edf7c948ecadeaf1ad002198689fed4154a6f72ab5a5c97b956164fc6b7883311c23b97f3b6ddccfb5f96d84522ce69bca49ef48367e7391fb282069e2a9e215e8eb6b609512ea6a3f697f9c424fdea5870861ce65276c249b3426df7654747041adba18f9aba526f0962e6fbc6a322f831f010b63acb6bbea300fffe47ab8b4e333b5021472b3faa6fbf6df040640e1b34fd0b3b7db87fc2478c948a6591e35122acb5caaeaa1b7352ca430273518fd6cd64c419b007cd70be4a3b7a5563272e542dbc832171986749db0be851850421faa0f1bcb5cb00f80ab86d1011e24119bdd67d804d36fef25961f42c063f9490acbe65c6ab5379f5d22d5cf065a7bab55203019343eb0acd252cc39a21b0e8e679609dad04d062fad6ea2e30a100298e4444f2d83bb4cec1aa022446d0b57a633288803425f0b2cdbf6ab0e47b09d2c2589962a65151a89c57eed2610b1d2e6553a9fe2189c864fc77a47b2a49c6a267587d5bf7b006468db354c8f812d44ef0eb7e47f03861a2e87f6b860ac5b3d14758a475df722006424901210cc963bf37210a87ea87d7a018bbc81499a6f7ac9ba288b379071cd9929718f20d176464132aca973a2f60d9a9d08c75a67605a369975baee6115e2321684ec68119cbb177d5d9ea1fbdd05fb293ea4785af28ce71673b885dafd64004b3e566c38771a32a137c59273134ae87e18260ba67c3123f5ae8297e41fb6895aa878c48c6c08dad8248ca43f0bd67d399dd03d0f89eaae6a714dfd22fed26f1885a899f2b38669bc23bf7dc8448f84e7c8ed3cefaedc31f885d903aceb485fbfe818a43ca60b0e394df48b79cd6669f38f03cf2c6e5d1eb39c621491b02a28217734c27c6933de214565436ea83b6c22f5da4f6ce0c499fd6d085f9c594b49571b0e7013ded7b6236d0bfab892f084eb374bd13e384a80e7f939b83b72cc9891b59215e36932968f3f90c305139e7e3a6256ed4b6e7a70ac507cd4fe143706b80b60ce25d32ede939fa588c3502f5d2f70181feea93cdbdf68cc2f1f9593d1e218dc598072210085fcd086582a8481dd79cf0f1b0983ffd1499ad165407ee8d9e14b259ee71723e6e7bd595efac3f1b2a700ef98a636500ee88a97474b389a81b8283d29673f6be983ab3593a59fe06d89f66a63d101965edc4a989339599d0508b0be2f1dc8bd459c3d988d2a4b607f305beeb74626ffe14a3ac8d581ea2039d1069e6bef044719ced356406716fa496ccf4fdecf628023691bcda4302057e319f360aa3286c81e4c13afdfa6677b30899a540dd35ba12569efdc7ae825292cf0aba9dae0323ccd7c2f106207fdea3dbe31481e8066099f269650b1d509d353e111a03d67cbb276861a344fcd5c8045b2bb5c506a67f2559d624e13ae026012c68ded12ce6981d4398a1e5418b4ff2b9bf6680c21d34ec8197b68a042c12505ddf374d320bd4d28e250f64eec86bc6333e0de14f43b31619bdeafad0ffa847a64c999c7e431796b5076b2fadb81cd56b4c9950d24d8e43246c9255741d123cfe7e7048d60c8b873cafef77bf6c4cd79056adcb1750e8ace9973604fb79f1fbf61cf93da465c1f4d3ff0fcd711c5625f395225c7c7d9173f44f1f0b3637b593bad3830261b65fc0fe3dbfa5388d2478ccd93bfd1a9e0b0e136b319b8f189d08f6c14d31bb6ff870fec8d3c9a93a59cd98f6e5800177451b7f1c742b31ce2f9674e7c85ea7f1d962b08c5683e6d84daec0f2e33a94605854345924930adef14b372aa4be90e86c3fc9322eb2a3ea72945ba050fe129e32db3d6193d4f13785a4eaa6a76dda2bbd6de7d40315d4b072eb15afe7fbcb267a1575be9f5655a09304f90262e90ac96c02215234d084858bdc2292eecfb9056aba8a42250cb64dbfc0598c02419155bb395a351ccd39a7d287bdb31718603b3413aa1af4d6e98e04096188370699d4724ecc3363bb3aa6ea85a3c3ddb2a6fdaea1fe6063712b5e29ad21829a4bbf10ed7ec8cfef770350b3940cac2690542554b9f14d3cf72be8640c3e650a38ce17f883cf3f433edc181171abb228ef824ef0279f8e6e163aa106714b8903c14285a1d69b8841a8b882fa7592f2f8347ed74cb6a91b7fc9756f6afd4cbbca27c556b8346f55f252136502bd726a8897e177079085c111a4a8d078642cfc885336cb3b38b9204870eb9b920008e44e1119a4dfc3fae2432b5aa9a72d26dc5d097a4ffd853574a56b1064bb913d34329a93cd2b181d01ce2d9ec2f2bbdb3435bbec0052540afaa2647817bc9dd06126c67d3b76d328db6b4d34dad314a16ed2d34a394f17462f4aeca61fda9e87d220210dc03d61fb15adcc489ce94b8c2e0f8f4be2b53514d4af695134501c96707d68049c81b1bb9044a5f55e836cc21de248a313376c9560ef80095f7f47982b44a0d153c2a1f82f06f679194a118a9da099e0cb13288eac74193c378ce8c772f61ac54e33220344340b949cd3f2aaa2dd3cd46c4398787ef336e553017f2e80c7a29a02d3051c3fad3664e0bd275db1f6bd2c9a41125ca9910456db6d0e6743c2540a069023645e82a67b67b5db2e1346b7ad1ac870db4b41fdbac43ae04e39a38110b8158d5ed75ae2d0794a77b017c97514ac859fee173368b91c1701dce88cdf43acc7024cf415eb4858de3585812f8e732cb7b632d4890a2798864c2982c78bbdb67cec1a7c06e9a7d36c2702e25448842c4b7d76710756cadeea7df66cda389a122c5588606354d9e914724eb724fc9b73f63c0f181564147844aeafca52488175b0181ec034efe769ef4ba853460cba0640c2eab9405491eed75a967c922a2e05abb97fdbb0b5f1667590e17f4bde34f022ab52604dbb57e098fec4b4eaef861e88ee35dcbd0d76a6f6f7859ded71e954725d6645e9c376f38613125b4338095bc57e5d5fab1b294021fedc91f4a6718166a3f47e3c7fd3932891db5197848a9e47b34abf489e72b7baa2e8ef388e70f39d45c9232d8cfc338675b6bec023cc84809a9c3609d5286847e2f49932a2226748d68e9a526903c3e8fd585cd2af02c9ea0209212050fd29503b5183cbb064ebd0e2e380011f7b1ab072795bffdec69412a791346445a9dbd67fd89ae7306d3beb452cfe0fdcf85ecde80e7e9c95bff991f7ddbbeda42c02baafc03f1f022e5aa20171589f7105d781d0a00d07c2a4dcb07c43d4aa70e32ca5c383c711c18f2e37c84ee4af56eaa91414ed93fe4e0ff210d0afc2c9975d08812bb7b64829fe3f93e9b7688869b76e21181821eba7b19479cd7fef3b76edc160528f3fc91e78ff75d88af9aad1f76e1f8ea7b65a8caac00fa77bea03630a1dfe7e639b1afba8d202685cd8d430c932474f15c59e8c427d87114b329d5899a8508db692e9f3ea77f71f2b2a3ae36a3222e559e5a658721a075d0cd83ffce78263eabe559df8c293d26dd0e3498a3770603f399d619e98670e22d46e8bd5f94de405723b216d6186e7a76a65fc46ec50f9926a646a19eefb09cb5bb9e953b910881aad26f45620a6b53315dfb255fed4a1a89e555ac95a34ed1f3298a3edf2bea9bc34350094ad7e4980f29c78f7bcdff4791db296c210d015ba492f4ad1d39a9458a57556ef92fdcdd84f0b92afa43a5969b3b14529eed2ba46d7941f1e74f5af62bae97b01768e1e4cb9c864419eae896113e6718c4876a478fd7447bded5baad88e213bfe9311a6ffa0422fe4c2b1fee0ac2aa164db48f4c42087744be7f85fb6cc2753f2e99af2482ef1ba1344dea9b1e812263a7390c72d3c224a6da03aaad319c30106cfac49c9442c45c1c4dccea59cfc80ade7012eae471893e231774a5ef895e2df3fb3ebed95203c42532d04e097f9cc8e3ec377cb059749e056a0f42f8336f227f800360dbcf0594cf7ca1ec1e7956ac041916eba9098c073fa412f25016f412c040b6ae56ada980f046b0b58b3085a39631d76cbb990ebc897fc063eb9ebc225e16bf3207e3d804658a64aca9099281dbcdd2ba3135df5f56d1c8cb59162d5f35a2d5fa183df6006eee59dd5c5542e8ced9e75633e721a0e44370cd0ffe7b39ff22a0c9ae0fed4df0d2662d2958d380076d544c3979057add8db8044a3e74569396ce578b78aff19805de3fbe9784e5b3af3950721a7407f83ec4fd00980985c34be8e21178d9c3225f4a8487f3690a1f248f6602b1bee47c5584e390b88178c420f5c587f326d40144dd6e45f93414945efb034284bd923cacfd7841c18a0cc684ad95f15ef2ee3a21901bd159612d9207b7bfdae1c0eb174ee49b28f89068258689b55225a6c603cf50c0fd66c235b5cf8c8e508a23c038b5df2acddb053cae16761281c51aa0453485bb5af73850badbf0664d5d9f2b228c8e8c45b5e663dea3e62b6d24f25f3c327416eef0ae714cee67d153308b083449794a3b766181cbfdf58a67ca9dc8cd9b03e689f061dbc645a5bffbc3925a49f69513a510a98c9a7f1974e0ea9ef971ed4453cb35012aa9036f72d2419b8348090501fd680dcf3f2be0d8bd3f4bf9c7955a0533cde2817d602e97f0af8d483a720889af22afeac9df076a28a8950263000f9abdc5ec964ba3f453a3ffdb45011f49c96a3eb2ba1a924c477bca1349e8afb794f06442df8d44ba958d874e3c949d4f301b39d0b196fc6817aadee5d666dfaae2e8a2d5810b44144926c784e9f817ac2e45a94687d10ee0ae1013f7a0d85b881fdc82dbc2086d46a918162de71a0eb8e69b4ee7f468df6705a9d965fd5e907e6cfdb30a8bde0a6083c3278949ca51ccc30b4876c5e5eabed0d6ecb9eceb33b66a467f1443d2ec4e6f9641c56185f208ad0623c6eb0aacf8b6ee6cb0e7e9f92225787cc02085afda598b4097f2326c1482b605019af3695896fe90988c85abcb7b8abeb430576dadacdf75967586669bc4141d359542dddbcaddb894cc2521e84946fc7f211c71462a8059e97cefa9c27dc39ee9bcd934ce52bb458a57853e865c00d15c2dca85b617467fac115c1760431dc4900ea3b00a3b978f12e2a30f6f89b085c9b41160972db152f4f7264a4a7fbde9f6e3eb1d0c01d2b7053def702c655c8ca5e7808c75bed2c68da3c7b656864e690404278cf0913461b70acae7659c4ffcb835397b22e36db067e6551c43371e28f9717add2887ab741f45f1587d7a9b3ec830ebbfe87c0dc42944616ec30ad139aa9b83e245869d299371101940086e5ee8b634de89126c66bce94e312bcf010296fe9bd8fd31ea36ea6ce86f7d44d38848451c20c5c19a97c93222afa5d2d3f1defe33a4b701b238b5b26837b8480872696332d624c8b4e873a954737b2cbfa1e9a9739b59a4a24da9d8fcd1b98788ba701263fea83d2a6d7a9742257369739268c1706588428efe959112d84ec2d1d1c8fae69dc8b51c4afd8612d29774b1a882970ec8a51ef07f147a0baa58d5171aed398af8ec00976f5696dac4793244aed6c4f817ccf9bbcce17d51c1eee2a138b601bd9a53c79450b7000d6bba867f448d27e094adb5bf3c8cebdec1b08cff921e4e31ef9739f6e2e2f4b5b3318f0069c7bf65c767c8f7cd8cb5b0f08bc371e4404228c62c27cdad4a70b80c13f631afcdc83c3d1a195d9c225c4a4318abd12ff85808212261569a2100f87bf5fbe522665831f05459113d7866e69b0779b5def231401a0e3dacc079231e7844b9a232bc7ef37d7e3bffffd4365e1a4f02cfe00d52dc8a8149e689faa7f8ce210e0c0850205bccfcbf1e1bfe8423e6e9d5fbbff3e2eee39b47d133c9b38a7f0bcc5fc6e8157fbd84d7b35b2f5d499dd81c4970d0ed0a0d79c4e19b282c654855382edb7a20c24c73fabc56129bcd35af37a5437f1cb69be86a367de297bd0085c0761431afffb7a8ec190851c141358ac3103fa9c01f920ad12bceef64c7fd6c207c1a69b06e95d4cda1b6d5eb7e39e2c1822348078292c50e331915b0d8e0dbd2fdcc4d9da5694bb5924129112dbedfa49ff42568ba50b7bfc82ccbe18bad23342c39a097673e4d6517f61de4342b26161751d663837752ca903ef7b9adc6f762478da7587ac4c5eb165f6ac263f70e2a089bb85807d02d68b46b5ee44d6b0f25b210f66f184701f6d153892f11575b1dd1f010f3bd8f927b1abd00d5ab59b9d4dd6fd62e48facb078456a63b52733235210e1db8b7ef547a84a64570e8a5bbae08a6ff6f99e447f36e009484df2af5c30a0eefb186b1d7d37c2d81d13e1fcb7c7b1e597b1b57d3f133461631e2f6e5b85beada83e6a8fb013480ec7c97943503759de35da8d10ef8958ebba64c47635038c29cbab640afa77171aa4937afff6d00ea144f3cafdaa5d334b1d01b03915ffacdb177c0f274345982da4f0ffbaf025110e3e4ac76421a762b7127bab3f1514ad0874733080501ef8e3c4f283668787781eb1f4615e87b91021371f0c9766099a3c9fb04039ffb06c8b3c6aa6e83fb40abbfbba57877c7a4ff0b80c48e7717b4b7c033346ea8890234f89cf0a20741ce56d03a838f055415cc2800f261bc49e77239a6552b64ec08c08b21fe831682c014d19e6d02202a1908d8520b00a5d67e93ac138146bfed55e2e8a6b03be98e36f8c47fb452cb9c35876936405a9e7a76fd645db32eb1535198d28f03e706c91a89161c7f4d59584a1628ae67d3cf9079649566dbdd1d4915dc9b1676c972b1a2577df99e75eda36de74644cbd4a05a6e77647e93f77e9f9e8d49aada434426bd93b8dd49ca12275e81504c57070eebf3405a91e7f9200b626f5e165973ff8f4f9140928e563ec4e72f779902a0814ec36622103ebb23b49fc24e80234e9b2c0b04dc96d9fa26c62fe0d8ef93c48cf2f0b28137bc80137bf9eff3c41333ebeb4c944fc7fc5d4f8f65970110e6bba622cb7b7ffc54ea020eff3649beb97379c680536f279912810b32b9eefd0e8ff975981d1d4f8ff844592a8db9086e5bbfdb4c240227a9f8e65ffe725af489ceaf0b5ca0d4dfc8f6ce177e31243e5582d4b7b313795582fe775e40191843ef859b4e7bb991b9bd131742b3ff058e5075708f8171a0656ce03c7af3815368b0115ca55f8a4f7d4ebe48fecec0fcddc24141a5e42756d2c62850ceb15130909b16e8c8c7cdd011cf326f7fafe400e2c1766f92cd395c843d5b2065d4d2db226f1fa3b1cab6bc01ebb47679ed4bd0b7162862ffb6e64c8555863c14d4b9c780927fa2c4ecc4c35b80b680713647f34f9cb7bf1bd2f64dd745dc54ddca35d550c0723c7215572812ac865778c11958e4e7c794c45d7e108354ae8941efac1b7d577d42cec4bad06e19a1441b3ae37cb0c5652786ef01afef59215f91cbd698e2fffeeb43f8e4e409510fa40fa4bca7c1a875e774b737102e2f36a30cbe0f10f6b80a573de21f89ef9fc4037060b8c4679f0209242455f7598e771fcf0bde4523959d451b1d34ec0d50427c3ee49754bdc1b0af7b68d19b511e44b23a1221cb01a1d7a9fedde935e24bccdd674ede2e35992d9e2cc37ae9726414cb7564938717e51630418926a89ded3661eb5497f0c306ab8e8cba6a00bd933e4eca0d2190f5b06532c40ee0eb8ef78465d8e6a56bc006f95dfb8420f654cfb05d6b7eb9060b76f6faea941b363ee1653b1b768044ba9e1e361a14a7448ccfa605a7aed5cc176e7df81116bbd33a4c33f8c3d9e98707cddf243748c2ff9d259b1dabfeaa3b78feb231db9ca3cd0cc192e707800f7142db04e674b7539abae2184b8fe0b37fb9babb89b94e1335733a79999b03095b6e150e8f8348f88636c6ecb5cb16283a0b872e81a0b1e7e0b49a55e3ff5b02406bb8a5b65bf6c98ac74d30c619a2e52e1978c954fc9b0e77eedd949337277ce7d99449387d74b0b960c45bab53794a674d475df66bef3d4db415f2d6c70a9024dff4b4042a8a5675df02dd092644f1a44c4a28ade09bcfa85867bd5d31d52ec8e0c92afe63cc65f934dbdca25f11178d8a53810e3e1d5fc9ea5dbadc3f003ef7265515c210fc844f2836109be7ca139aae9188446e1a3af6bb223085839646e349f7b97dc03e3267fc24059af283a466890505d617171e3be8f0db93742a900fe1dbc645f01109cd75453c1c375fc5dd816cb0da9ec364a1b2dd16fc41e163efe95278c371f03e1a66ad434387e736268dd66a2c176784150fe4b3d5d84c7cc620a1e0d60a1375776b7b821f96eab6d114446fe9631988c33003e034427988ca6b6047c1c191554588907f23233b775778e2f8ac463e30f79b19bf49cd1c7e90440ece461ce4e41bc09d7ead471cf8b5ae116502be6c2437d97ceda880c4be493f37c2206ca0403b196f436c3f881523e2ba97b55e333cc850e95a1de7e1aa804263b1fa15093f12bdcc83fe27a38b33e220ad9047fa9504218eb93921f257c381dbc2d09243d998e842dbf8aa78bf41c6ee99848463ff8a4b0a70d14936fb3d88c83dbdb3ce9bc0d9d4d40e108c18352d30f05b11e057b53f13fa682bda1b218e948a04abb63b12fa3b8e7206259a03b921b9539b6b705360b9ccd1e1f0686049928a58bbebe79ac5924c8d3b07085a394fef88b4a32cbd540ae9f9f612265065caff071d3aed08138794e6e96c3b020746ac025b1b6e9dd66cef7a1e3062ecaa726734ab67ee361ef62898e2308424fff44f40300e82951c1b738c9d873d436052d079ad8dc60aba415a601d2a32a63858fc4ab63d9f722ca2d18b3fac7928503a363fdcf0a66250275ad54c71844e8708e29b912d09503e0cbb14070de44271ec7226dc01e109615d83b312573113f32c3154c20b8a80cd0e60f8a509ad1487a9b4030f22114bbd3147290e93f6658114eff8a39f16a2a92d612e5848d69816e3a48fe0a41a288d671d48946d5e290e8fe5bf0dc3d4fae40de5ca78c5e286758dcefc40adf1bcae88f024af889d68c86f860944497174b85f7d928a8b43a1ffb4d0ca597c620869c5c049d93888860a4a1c52970ccd6054d4a4e8ab228071a64b697361e13d04717f46339ec8127a090980161556a119bc01dcbed00a2f47de998b987b8778766057cde0e4b1e41db9c07fecb93ba89f301406d25ff534ae6d1233f2e0a3458b411c6bd14a7c27e2d5b4c2451aa916b79387cfd201077a1f095abf6a207d8703a0ed9458059883ddb233b4e691f022bdbc6ffc20ca5ce9dd86c14fa092679292affbfff8fd84794098b04d98e16cd1fd8cf8f925799bc2eb5340b15886a0e5d5b43669f0560ac0493b057f1818f729c3dc92043db340290bcab0fcf2792b36bdb866fdc93786d031491d63803efd1fc12e74d51f2c1f7dee14475e69a69fec8e84ee94c94f45604eac3a6c550d4deb157082fc3f9cf856ef8e014ee54ddf724560e164525a13f4e8d41f936f84c3e8df7b8338875660ee9b193f925a5ebff7b42d0f3f86130c946fc935c0f038bcdf8269bb92fa81c592709cdf982ba014077a91d816760b867e4353c50d82e1d6451b91901fc89f20d7cb894bfda3826398878f80c78a8c04520215599c72527f619315290f5284aacf2a4e0863196bd862a3fb0d2a7908b2ee1e0cd903dc50c04a3a140bacecf41c8b6830020a4ae1669f949035ed5f3cb74ea2aa78dd462bb13f697b9f4e6e5a0b4b1e393924fde3a3d2f242f6e93199719d479f21d14ee9112880c1a47bc625d5ed918cfed68bd3dacf1ed020820a49745c4fcc67877bc4606ced709c85827b6644afeb1bf834f4e06e6d59e61a0f3218470b5f363d6203313447c24d2b870d406ad5c4624b9a1593c55442d237f49cc46c318a4df6f36919d6f699f19354ef61bf046f7890a4f2411a5e504fc1e9ea3addc7cae5198db9f04a01907ca56950856c7819f6d961d6e068a53265190a95858cab086526d220225192d2e8a52c26b579c7b89fa32c57c194a4a81d5376eb1778a87039a438e526b1f8c2299911b0e85ebdae83c4fa47d83ac19458af1e3cb66dc6a51b5ae0ff55f80c90a93227c3edcd6764992dfd49707bc62762d1372c647e5d2916a17355a0108e2f9e339a456c295862f37446ff2d2ec99f51f2bab416a7c956fcad52f5f8213582979ebf3bebe8ba9792a788b13dd4044ebe9ef2b9a69ce969adfd2bf0cb00f56ff5ea9aa4e72c244b49fff25dc40e782e7ca1e3dab11c683f4f937281d0479091f11c6856cec24befc0bb00150fc17c77afb341df7e00cae4d6496dfb9a754a549f7ff988ce920994cdb6abb813e918e131f3345bb12df4d00dc6a299f5eb68bd787c651a527b364df7f9402b5db4bc70d8960972703c80d378e8399382a269e715f1f453cd66789c5f6663fbf1e5878663434eefe6788f574e12ad1e69371a3b87dd64ded6919a0294cf7ce7dc0480e5069e5d376c331bfc6cbc73848944ad6f778601be6f1010ae7753ebb779f2f2aa1482b9d3c57edaefe53999214eff2ac3420e71f00177cae68db05bcdf98e42f1312e6184ce06307e3307cb16f5dd108442ecf995f3b786049bcf5ea234a2edbffa675a411f847b5523f06a3473b016ddeb03cfa9d7a8c5b01de31a48029995b01519b0fc4150ee3baf93becb9d5b02690fc3553446cc4e60165d5b0198d6556204a8be032883f5348219158a0c13f4624076de857512d301da398adeabf0c4748fe13b004f17211fdd73a28aa4a02743613a5c3ca8be7723d8302beecf2c655d04fffc8e3e5ac2b5d75102db83600f9918bf1afa8a2bd3651af67a8af5d71bac024bef19fab0ff0a34d019d8cc5fcba6e7daf56bb1a6c197c14040a49f57f40bd3595c1a9c82193e9bf653e82d9f3e9ce15e0908f5d613733b6460221d64024e38f37e4f3dcb224143b2304692b76f484e2dcc0fb785426fa22ef2393a71bf132059ff267d8b2801b0d37e041be8851f1bd5661f90d91b27db7d3e75f1449e93110ccd21c90c0f72592d7c2037cf51f929317c79dc32c1888ffd77e126abc5e8675c74e9c99b518b02141e84e7447ccd1eb05deb94cead9a49e6fe9e4dfaf70c9379fcecad184cd8e394bd3639458148325a677203f54c25fd34e1fb292f7ae86f4b6a2d1a08d965a277360669a79f02e90673d1e5b49783715c359cba0987a8029562f1159a510468e60b5464ab0c413416ef35a375956d2d5e99b58d2ca2ffc4bab550ca4557269ffb6b988d5bcb8e31f868953124049d8b239b1dd846ece3daed1a3b96f55ec8d4e71ecf63e0611480345ad4280fd16c5c4f18340bd9b6168c518c6e7bec25d06f5d133621787e7c6f7e1c95a30b83931381e1a9619632cc0ade0b15ebf2d7e9292eed80ca0612c23c4a801c3a02c2275350d2098708f5b68093202663a08fe90f77659c89906ad6eb9bc272db492c586c3064e7db871cbe7d9fef5487f0dde63c96d929fed91f0ab7afca623b9669172dce705ba4aa6b300e22b82d5a7815c89c60a6a7ee3e7d815afc27da129d01b7c9210290ed7f9782e32d43c9ec09be8d8ab7fde490ba825ece4c191840b987dfc812870f74dc181386c08f0fbdb4c5f268e41192c7d91629f75b8bdc183b7dc8bda0c7b2ae0ed3665b48f75a7dbd31887e305e0f1c973eb34aed150b747e40b1d4b2d40413ec995dafc71dc67603999189cdedcb1b19ae3861d703d7fa0e61777092598b208c070cf3749ebb6a28cbae60c7fffe5cc89e7f45e87d5b08ae54fa8d58bf06ffdb4245767f8b7f0250ebbd6f8b570eb94cb4b1631190b851277de15e6ced3155f995fd253b06ea860284b74543a35a57214969e5d6fe9c0a13d2849459e2731bdde83e09fe1736dd0125ddf8e643b4b2017668460c1e014942c7798a5f034c1526a09e70d11be089e10cd7e2582f78f076959900be3b1d999f5c6521bcf0ef60307409a053e72a51007d3ef9232210709fe6bb80e83b5dc26c8ca1d4c9e5b3b7834271f0f23854b2f0726e604d27b2c75706b30b96d94ca741b8e50b1a13102d7da86e7cc0891d60b12720584df881c7168e7c093b220a7656bb864ca87730df5dd8b2add49828a2fb2d5819aab2f679e5caf5981740c23cdda08775b0e61b959930bf27a942e77e8b96f7dcd15c42da11077b99bb34f49b70139705b60057d310e1158f48fdd4e08298a3a0202de7a654a9c1f9e188330526ca2cf9429eb9a00523162fc5483e7e3ebbe77fbcf36b26c11c3a99672d9dd37b9741972d1bd84776e9188bf55628bfdd62708cacf11bcc866291b0a010da0f6128c915077e074c075eacb5eafa3dfd8ea8588b3adaea64c57548e1bf2eede2cf3632ce4e2f012ab75d8cc1ef02a9afdcf32d96d580838118e4384ce75b88a12bf8c5e6a574d48b14057d9af2adafe7a817d670a6c93bef1c60bc59dba18d8bea1f688e982dfce985a97f1e08745816f9b8824738dea27176706f06e97eb435451c3879680d5605e657b56d01e0084372e1d5dfb3858d906bcec8f326787881142a3539586a3bebe5159b7c120d588d2f5ae05fef162d85874aefe9e747ff683239fb738b2e3a58fb14ee46cb398d1128ad123a1f4de7c1885d1d7172e80704a6b6facf2d0cdc38cbf288638b851d93ad95a62a4456ae42ea63269c64e6843512653ef4a1c26153aa38ed9652e167f18d3d8679856d70117bf4010e99c9a3fa184284b47b38e652cf42188dfdafe2231493224d54a6169102c12979b5cd90f152bfdc186d01d482b13a0141ded152f4d60097922a75fac07f59fd127eadace2919984967e8ac351570beef48ae2cc27be260b6309385a3000c106f06c01ea3f129d888674f2e4d311aac872a0326997ba64239910aa353928585dca85870772a7776d3c6f17fd55e6394aa4c13fb16fb1cf1403cab88c0e5e8bd2b030c9b580cd9cfe01433d9df9c438258b7905af462d455877021b8335aac32d5b75c55b98272e387ca21a69ea4caab0d67963173c4480bfb563876ff90e677397e36fa69b011243144aaa12796169d75f587406b9fb809e069e97e5101fc8c0d2b7289ca195b5f7b7177d46c28206f4e5cac7dc162f751606c0ca1d3a25ca074b18f9d54b3ca0ea21dd7182be7e38ace8b49d0063485bcf3e1b6c8bc2a3a8341c18991461afb35214a65ae245188f21c7ec300e9f369c7c2e7bc20bb8a08c1887617215751f9fc5e9d9f195bbc41c713f6f11983182a8959ddb5a98a9d1ca68da3799878a9d472600024b8b37f621518fc7771190bda49d7d43b9ff6d5fcd595ecb04ac5c6fc3f770aba351b1bfefad8d8dadfe1a5647834008b07538e0c802af34ce8dd31f99eb75c41205a123f9f26d1bb277cd540fe8b46292ab3fa2ff9cea7c0952697e3c6c9e5df9efee660e6fde46d10b71988bbec026f852a4907c5e5d7cec8239fe66f6c97a3192e24fbe6d5737b7c527d502eafa711cbe45483ac4507e97aea094967b2bf6d86268df757e4808ffdb2abcad9f66b1f0204ca61f3af1d8fe06f62168ca905facc2193288d99c0a274faa8452f9aa3ed12a47e5625b677af42a926b627e9334e793d4e6a2b7538dd3a299bd384f5b09d954e11a728d3434ce6e82090c3ee925067324433897a03d3fc22caaf7d7a226a2f938155dd1c255e6cf1300a3cc8082457c58b3862c62c9d21afd571b509c38125acad2ff0998de18d017c23e71e9bfc3dd63e401ac7d54f2aee136ff0a69d057ed9b41ea69d0522e96d1b848d740cac608b783b4451f7bf3584fe1c5453fd344e322e08261b11f931d8525d7d4cac79955c91243bf095d496af4327b168b408848a36bb6094ebe37275bae205820eb39669f5a7c1c31fd52a71754c4c0395066df079b29a84cd7d2fb7ea366d27c65267d62e7a930717fefc4dc59bba3a101ae4deb6e6f6826fdc911460a66e4afd32886e9549fae7b1a7ad085962022e1432fc64d3e327dd0fd073b3095413a81c86cd93d9a8b1f2595993e844da5478de93bb104560b3bcf8ffff9df5a74de0c2f8b75d01704069f16ee8697aa58893ddafa56d8b29a24ca0e8f590c8a5e12e245dc7b01675a6881a81f36b081e0a295a14987f0b48914c10f26251248abeb89091665063b83c90b396f515c1c382d53acd216d43290032a26f17c6c95891cc29a39de1d088808a44dc6843573b7dc31cdebf559dcefdd504c241ed7612d9d5b5a4ccf5dab66b45842fe4fc433c1b437c70e0e5b303f61c3ad61331ca903b1a473f03b2893c3850ea03d2f3024d9660295bbc74e05d61003954163dc95b55ec166e8b4fbc2c51cc3bb2c63a74603668f3334ed7d3862ade0320c6f66d0ea1db6cd013d3a737a595ed989019ff1a727beb65da81d39b849df680920956fdf58b7f14b3dc4a123e47ce61f88407b97aa784bcaeed050e56423147473f677a13c3cfc712e847a2b3d6116031b6bc4a0c69f276ca89242810cf1281b2c17f86671fff795eb41bae3467524c4e1a2493c6e64b45f3b2eb824211c91285a01ee4b64932091fff24acba46e0f11b73e041c9a5a0aefa46404f965678ef6dee82da0c32b90de059af03c259a357c19601838bdd3dd1cf9c31eb3bc2658926ae5d249bd12f1132886d26ea56b7512b831677e72138aa5f51d23fbe25258196e4f1d28d2450a2fd6d836f0ea371c2c23cc11da7f0573729704fbaa70f9bfd08aa191ba77508002f88e28e9b1839766b0102ba99a5050f93c9bc9a2bd85581a458835ac9c4f6f65a06c382cfd0123e24eb6db141429bd8d1a5448b1ea42ccb8dc31870ae73d2cf2427ce696af644081793cecd899a98f5c2897c9e0420c293cf2c6429c80e11abb983c7ddec976ae281e0154974588e5068558e5b0e03b0d2e6461e70a46e020575bb887139d8710f77a73d19b53aedb342cba59f9d0146a80e97329dbf853b7e0808fbd55531906b1d4b8d35ec5790c053185099fd4bd8741dc5f4b326b0806718782d1317241abb6202ed4f7b3e1baef6647b414b2aa7b7c66c7e8e023f6f1c2e6bc32f403ab74c330158dc186bb5bc381ecf76c5d366ed29d1220c683714d56e614b3decce700772db697d0e29d2ab5bc5fda7df8d6faa46c9988abdc023b7104de3e45a70b71975da965d91e1e12ca2d9e0bfa55c14edea1745c01c13dd386f7c3bc2b0a2dad6ac10e2d14094fb16b672d6245359556a24bf4e1b70d6db3b662c6eb33c221dc18a32928bb9fa2ffac0f170a9f2a5c262440408095057c37cd1e3b9129f42510cff714b8ce094e8056ecd0ed3479f772f4058bb295aed55f3edee01bccb4e8bfee03313a749c35c879d8370809194f3471008886225aad23cdcbd9b7882cf0147769c79a0be1132ded50746e2c22dac618ca77158f14788fc8c2edc11f50fcace72bdde93c837ef730824af9ef28030c34cac3b3bfd01eb5900abfb64e0d0d7e14dadc3bb4e2e426046377c471a3f6c99d2259079d28ca9a39178f28ea8e9629a7d9adae46d7e58459d472bbacfa553f61627d4bc58c438f1c1e06252915a07edc1d61a233af300211995ed0f0743e409c46d19c0362fab969d703d8f8518e61216219a5c30e8aa5affc5c2b55e3349f10e958035b4ff5ecd241276aea5f1f3eff2735b26a88d37c47c1cba6cda71d3ea6942dbc8c5870dc6c2bf65fa7b70af757b1233717ae5dd1d46973b5f863ada317148fb6996034a754245823055a290d5da9836eebb66075a585dc7e47bcd92b8a82af44e9a715e89a0154ccb8d4af42a0aa7c3d1143c8c437f91c5696d345bf2d48a2c7fc591d02444fc96774e4440655251cb97dbc0a787ac72f8f60857ae58a226e342a2603a49f2b11b224cd950cd97b323d54234a0747b6880b87ce406ac1b0e3bcdab2bebaafdf54e42b975e52469c89ae6577d96d3b65a447e12de64d487d49b25a648104d3f2aab02283c4e2fcd8eaff9411cab05e414083fa080191a0a0c4e15790d1a15d4d909d2b09c8d46321feae2589191331df3642ee918e82b0b6b99ce41d4215734c4d2a20d7c390cb4a025e0f940498b6ed73041c45eee141655cefc6f334827ce24ce961f8489f516dd6ea93d54e93437569bbad10d4fa9b851738532bd7fe9ef2df57a5c2e2f8059e359f877332f6c200f27ba9cdd4c3bb396d1734fa439a03cb0a9812de4ff09bfbceb8933b224ee8fa9e8519669d015f5f275834a06de0830a8bf0d1aa2b7f97aa4990faa574fb78a80d2f233f8d1ecc0a82139cb1510cce7883406a5df6a59ff197cb2af9928f4622e84e386a2b17936e52be1266e3ddc8442fd5869acbc7dad7603d55e973d8dbfa0d1fea4d959b8cf82877f97143f6e0ea8308e396b9d481503a69467c94bfb24998f2c4e15eb02a44db66ddabee46955e1ec63a0aae5d14a66a0dcf2fb7af95d25c677679a37ba4efb55aa251029f5a2aec29b18f5a34df59d29db8747f8e828767040b923e089fa3da7ab18a038654a21381fdc228a15258445d240483240ff750ad07237778e0c1049c3e6b0edbb92780d82712f05f3fcafbb5192ef69a4964a053488f916bee0e556be3ff81f43194b2543dadbcea2e13790ffb40703e4aaca05eacb72712a526ec43b7ae5860304c64edd96967a35531ad902b8e1750c24dded95f47e420c4b246a3b1c6b6b7620b93cb060a9b8d941d0d29a3ea992b61200845cb3e55fbdb5a172df51b5de345df28981c1ad0fda7c02e7c56de83560b17a06d8932ccfe0efa2951985ef0a276c86de35e6ba2342864502bc98ec3255389439a7413716cf41b6476dbb1e4b24c01d63dfe6dfa5c5ec1eb02e1ccd397d9ca2a583d00e0f023ab20f456e0e8a487e8765a296180bbd0029bcd37f63f9ee5a8a8c867d0c1b235ca8f1b1c4c05a8a5e1372f38a323686b906e13c6c5cc1c32219049565db24704d5a049a83fa964686c30e0e1a340bdeae8e2c5c4fdb7fcd3194210a28ec57e99941bc2feaaaa77b3f3f0ce8b837af79c8ae8b99803a0d9213a8fa0a4f02ef0a3e86364ec48a1fd9a01e23a54f0b7d89f0e45f66728b5b58887a2bf1df9692f3df213f381e567b43d44204df38c4cd161c93b051577d541d3500addd2d8728604717f312878385c7c3d177ac757fc9d37e14f8ee84b6903b009a33ebcc5a07a144b78f7ff153f912a472d04ccb15d4f6c9a6953ca9ce52d7f0511c2cc014a84a6a2cd79f7d91bcecae6d43dab15a18c8a5b08efdc61120f8a02ea78c021d30678a6dc31dd90ecc22e40d09240b0d999ceea5956eccf6ff79b24886e2aff4fb835f98d9218562f300dd7c8155307237547924770e4ab1aec7f8e06825e8c0fac83dea8483c3dc9baf0579ec2170963ac53ea7baf4819b1dec2c7f357dbfa624f450c72e05d890472ca3152aee954fc2058e605de05f70223bade29f593a69c9990bbc32fe8ddd7b17b8ff27a1eec6f1ca4bdd6f4628d4ff31f63e95381c0a29c979736279f00d01e80a7e20987db9a6756e3ddddf3744520254d5e37be2216dc597e0cdc978fd663df23a71760f697bc131fa00c03cae25fd92923b9bc8293c1f6413e5b4d847f0a669437f1c854411645f6294c2b1d77e210ad9c35f38d634a0a126753782b4fc49e9fe26643bf591d793b4858ae2259c72a64b0e9862c1cbc456446ca094dc803e5eaa9ff55dd8890337da58104152e4ea108780e156e41789d3f8dabbb906b1ec44d10e00e3c54113bf57fcd2bf4711d7a142aacc556947b10a7d3949d119d37022e8aa092ec4ba9f23544dd809e0f680025b4020b175b6d96273c1c3a7bb20804a4166759ab77068ff9e836b08907609db559760877d34c8e48fc95625ed7c9d42b7476075f09c9cd615b6b0d5cc6a4dedf7530115431f54a36fac8a43e753e402c8259e54916be7eace597fa4a318865960ce7a15a4e653235d0992785ea597b9e3d9a1f370311d2a0ea0a941d056b7c316ca1ea0a07cf4696aeabc8a998bf12b8d646f05a3a73eb21a28fa5ee01ba045c5a4a322c19dcf20022aa571f20a33da1fd14e5b112587901b00fbeefc01554dd8f9223869151721c1a114b5aac7abecbc8e76ffdbb4cbfd36685e0a564f895c3fc5914371152fd817050d9a1fa77af2fb8f4568af0c5b022b45fd74176857326f6b0635983db6ed3be1911bbc88418493084182158a87dcd10d1efe154d0ab527b4a9f4398db724faff3812b1288c3ab5fb45ba00726f5c2667eff15d96292d2592f587b7015b9c38e12a11e4e0b8885100cd828fb241cff8f2c86c048b80868e41236953c3c2480386676cdaf41954fe152c652553792df0a9954119e12bc5a14704a55eda12af092a69c2e47ccba0d79a4f8ed76e5787b5a24b21b3035b42554a3ed2c9fd21ae00324a308fb8860f310a48d493da4d821720ed834b2311fa01f6f046df9c353220924dc27150d77bb21e8095cde71644d3e4f0bc22642a87f49bce677b14b850d3134da4fd10ba63e08a2a834585bb8f18004d95b4deb82201970253fb5a6447c90b1618a0e5705552cb80f6443dcd22a89b4f1e390ccd6615cdbde816c3f0672748860da8ba7bde0238720974c4fe3fbf658b3c821426e7b663e3c4aa0dc0a22de29c0fd59ffb05a170f044e7392feaf9c6318055a85cddd18787db0f89a0f18c9536ecc245cd9f2bc1c5ca300c5c277170962e622c482cc08b3ebab766cc9ccf59127a4b8fd11cb8cbb937ddb988116abb0ed3078b316c44b52f531cd2063a286ebb0b4ccaac52e66ba6712a337f09930a8c5b19c61b6a3209b119836434b681ca5beb286dbc4a0fd69d38c71d2985e77abedaf1797ed5e9002fece35f2009d872fa66cf0190282dc5bb0e83f10abf0d9581f6b8163a68f8f29e0991f215e1f0520ff848a19a3abe438d4956eb620309170518f097227000f9f60929287fe86afe4fd05136fa2c9247fee74b77d247290a82361ec897ee7703fd96799c6a819a308be4faa700df8f7d19110e73aaa176ed19112c0223fa6547954ca93e1b143eb05c1ed0003c22145b777883796b1c00aa1daa742b471719f2e8b1afb02005847aca09543ee1dae984b467b08aece3fd0697eeafb31fe64750c3276ec415616cc5e4bcc11bcbb25253e1fbfb38d9524a4966ccfdeffe988e4bdd2e3defba6a72399fbc875766611c6c0e58f1c13ca4cff7ab3ca9a3fdcb38055462d7f3db76dbc9861195c4b18e5fd150ca2fbe39a4d2251688fb844173df8a45e93fbb055c176b07279ec6c803875c23ddca5012c85c3ec0d33fbca58d3f5bae4be7b48b0b1a68e68e2c7997e0234f28f58375cc7257886756769c87316644f7fb080bd0d6295ea1f1dfc75c072807fdbdf272657f96ea33d02863ffad7fd35b1a2caaf0aff0540bfc82ff419b1fbb150e4a31dd5b58bd09098b4b79ad2bf10529a5ca6ecc7259d4799d5fda93539e345e48ba3479927027bc0bc37831bd4b9593ff441ca83ddd384bc5ac2471d7b4373a26321225bf172d4c5ad4afc4ae8a477a1d28f4544048eee2aeaa0affd82d6b481584195f1f6a851eb473c1e844ef10f75cfd8cd1cc4deab39fb3ca790d8070776415a1723531303af9f66ad1c44916b7d7f47e850326a1bf734b5b272880db310b6611369b6b5bd91fd7eea792ff3fdd67c5b6cc827883d856580638f3a1f61b9fa6ec1961f98735e2d7095f91e6bbe4ff9f40c7dc6f5dbd195c6c1c062c7c5e36361602fdee1b32233b8c6cb09d71de13077dfdfd0583a20872ce06547530a94679e2513bc539414e10428375803102049939eb4017869568ce2495221939649910142dc5a6f5ad40df27ea886d3fd51ece29e593d961bf4fc913e55b7d263b015f6410f64a9cd9f3abfefdd4113fd064deac64130f8cc912c751ae79027b17bf1f975cfd48b98cec8138b01254af629997cc36ec37a6ace9426b1a74d7f055bb121188c75cfd370bd545bd8badd5c3dbada82fff3747af68d31a974b3c40ed973168418dceb816bac704e3f3db28d25f25569d34d11639627f17548f2201e7ae6e8e1275d34e6d8d1ab86656cef040e8784ab0e51106849dc1c00edc691f1256fd02d4e7216c500a50fe11797db0ed5e250edf6d32d0c6d71e916d9518ad99d4256dc4c5523f5e11ed0e78dc280770305b3dddddd5ddb02ec1941c529ecb383786709b69602370e650e700f42c87bba29ab113ae4e6cbd4a6945228e86844332e954a24da003a9664dd798adf8ad9d2fbe2931601006df8c02282083ab2f753d1e29bf55f4cf882d5e22f774838c6469b161032dc31ff23c31d2244e174a4ab18821c446871d774acaf69b53959e88f25ccde7920d53cebdef9af9a671d820e92224240838f63b54006d85023081b60e31404f443e83d7e58e23d7e50c27bfcf0b2430e2837f0f05ca136bc9221cc92da7cda4fd214483d24704f153e0000820f413c960788bba740fad5dddd7305d00fc6d3be660da2cbecd159e30ed7a61524d3d9422f7c5118c47bacbef69bed30d1cb421a108f8abbf3f0187133431383e3327344894f098b918cc78aaf78e4a6246f1d5d764a96fd37e68f1657227fa3cfb134cf1b9bd4d94264ef906c2cfe50ff8b095f9d47975d7e18b2d8e02f695c503f539226911d561c1bfb49309dd1880c77c85049922ce218fd656affc36411c7e4dce0dce282fa19d4cf58fbd6b2a07ee65385bb8f0ea201197adff075e82602d7b0ace4971a7fd76b9f246fa94475126a85f6772e0cb59aec5423a351898907df5efa422d5d65a8f53a3bfb244bba442dfd1be7fbc3be4a6a5f7c92640e53b4bea37d959d67cc1cc3b2f3ccce33d7744712ea6172c6d12e295c8dfce0ee8483ca28ed400b42d80feb587ecac4b9095f6734d238dbb77f8485ba3b0e0eda41901de4d000ba2ba514f5987cadebcd68145ef3f19b8ed8b77f0acfece2b2ffc6fe36ebbe395f348ef91845e342d6c7b1ffa6fd53eb18eb8206e9eebef1eba031c4dd2df2c44f4b66fe134e0ebc606d5cafa95d62c6b1ba58d4b4508f7fa75accafc197fe9953f4b575e614cd9bda7a2b195e5d41fa271caac9df3136564e28d231ac4ff5e754b21aa156c9fc925231ef5423d432afca4b0cbd79eb522a74198d704a54cc37d4325fbc5b9b17865a9a855afbb536e16bc77cda7906c7bcce95d979e675ae0c36cf963ca359febed8f1cc49f0115b5b6ed5a9f848367f09be4692d8daf2fa088e8139529367665059e6719eb9d939dba0aa0d391ae9bdf3a391a708cf0f7732dc49ed3bd66d662339e19f5c4c93944343c20162e6b0bc270d64064ff06c851855f850f5b43f6c9ee0c6972c6309652c415f3248a82f092ae30d771de414fe26736881e7695f539020235dee7da2bb9af475fdb1a447d837df64bae6364f9dabf18b232775457d584520415e5cc8504949864a6ecc3cde109fd9c59e37e6912ce29892ac5b3f7971a8ca8d1033c38c6375f911ace3585d46231eeccd4846a34fbffdf05b7b4fdf2deb57ead1481c5f9bd9345fbffeccbcebcaf521ae5be318aaf23ad99efad3666adff1eef35bd9f87548a3d14a7847f0ac294b968c331af9a0bad26a9e2c42aa79d6b7d9e5c1543562636672cc8cdaffeddbc4ca0faa8265674529816fce58cd8cef872f696672bfd6af9ba8e4b75349d28fe0995ff6e784777f3b957c9d6bdaa9248c99aff91bc7587c8b7c99dadf4e25c97067eb4c7ebbaee07c311d2164a86434ca74ecaf9c7425429ef87382b4644c01840c24c6b2ac64f070b7a808d4b02cae2298c2128112961098ba521b8227e5784f281a02227adf5336cb31eaf0906e9d4f639c31c68ebb951af5cd336310719a67c4b003c4a77971c45082bb47c041625061d2bc2f4a5f5a03e611a425791223748706811aeedfb7c38a1f044e7cbfb63904414c1863b052a0cabf48c952797749a5f42f7e25fa2fb2fc8bdf58ef367ffc17bfadcf266cfd175784fcc3c4bcf8e17cf53986f89677ef54d2e20c8651a3eb1706fdc0a8633f186cecfa23185fb8bbb5158c935b4d4aafc1f0bed7c9e4f7599cc16beff7450dbe2869aa539f63afd50f7ee1d98abf00a17ec68b3a72135eb0e1eeeec513cb8b29324853a117445c7b0184bb7b1d6ee14a77c66a5c241ff8e203a7fde3f801cfad0ff0701fc16a3e1e4f1d1cd3851c5d3cb1d7e21aca74b1e35d785df0e0028e8f0c77b820838b9367352971e171771b534d0fa8e18129dcddf2400a35e2a2c4033c7c0b393c53232e4ab650439f5b6061514d6b8d111b22146f516e41c42dfe2dbca60373b8bbad2d1d2082656bcb49d75307a8c5f5f4271c276eb85bbaa29c6061512748502de4707737b3885fcc5ac0c0dd1d478bed5693d2f7e1d53167b2a8c332e2a2248b2664f1c49b30a1465c946461451638ee4d9850157b29134cacac3f953107b000e28009a8ae5fea3733d69f4ad9b4fe4855a80e880354702054fa910253a8fd1f275d4f291b90630364b8bb6f00096b5f2a5e5acaa1291d712dfdd184afa62c1be061d94c52160d3c7177ab3c4f4bcd4cf5be1a98c23570da79ab01224e35e06e69fa3a252de607b11a19988266a0e46ebaf477d6c900129e012084b07f315004df59c7e257498d667d5b49aa2b4ae7f1c96b969f1df349d7d3ca68b4b21223e4c380e73e628047d5d7623147d6c1820dab49e94b2cc67077f2ab3a97d9acd19faa16ff4ac5e683e41bd9f8c96c6434c241658c458bd66f5acb92a32b4e8eae7be50a36a8be573cb9020b77b9e2747305c8ad4ac7f1ac16bf09f5f84d7a81333c47d7ad296a1c6b788192bc7bdfb7b94048d75d29ceaf4f9a3765b9000fb7ec5fd1c50a37744dc20a1578a54fd6991c5d71ac08b95bc1c3fc2dd62ae4a8e20cf72a9c54d1c4ca8acdd7fc72e5c93a23e4d68c46a97dc7b1ba58c00d0b3cb1c014ee96055268c654c8e1d63e51e12453513299f55291627f675c53012fb8459a5934bfdc67d51550039f1570e2f8acc0e977c61538c2c9fb66f9ad60d9b9f2c384af09df71ac2e533cce4f663dc5c9ad293cf7d334050f8b850265507de9aea73d621a0a94dc41ba89c0971ea1ffe25b37ce210580c898450a36f6a7a84a9e014981855b79676c448a1a2952dc3233c52670875bfac79b994ca1a9c7e3585d26404645996f4d57b34ca084039a002865be357314725875d7289eb847a1474a512fd29c37ce49d7d3caca0a8e1033c36cfdd7cc1f146e38144fa0d8b93e2868ac26a5bbc793fc743dadac08d9f8e6f2c98b83ff84fa37c5279e38164f9cac273c7cc9275220ddcf92aa23c5c6935459539ebb9502c2b23b5ad8f942e791ee33536cc257854451797c90ee53e7138a65070977f02dca0ecf57a79e1ed49744b100a5a44c597c4f9359a965710e5fa3786cfd3785eac0a1f385f5e34d5187885b3ff4bf58c441671deed7be1952155d5163ddf97ce29e770ab5e78e0379b36c019d9efb8fa7fd53a87528cbc90366b331565435added7ded3893bee2fdcdded9889d8319f76e92d3b65ac77e3cf77b8f5277e6dba279af33621d16ab85b25bd538d94769e6a3aa3b9b0c6f1e6a46a19046765ccffa6f8a11e6b4ff3d8357cb37cfb9970ecfaf6fbcc27a7b9b35f9b355693928dc909b38cd6da5447186daaa3f86f8a4e3c81aee8d10847c84e6ef9741d6be8c4a93a81c438d6cf097a87fbaee057bab1abce35df7eba964fdc4ffba2ca1db75e62ec0ca84c71b7c84b3511fbd2ac5fd3d417297958548ed4e7d8e416a43e87e6193167b3d4a92f321ae59d1c0133a31e93d914f3fef013102edd594038c5dd2a7d68669892fe7d82d7dc57d713e66159520db74a6626bf2091f871ad65492141403e34f35887fba886353a41fdcc781a3d77543ded11e496fd9c39dcddca51239f50394edcddedfd4a34a72687c78859404da0d104174d10b14a256a3f05d25289e64d4ba5d47ef36efcb844314b1340b865e4d6e1ee4ed637555cc9cbc69b8fba4edc204e6c6831d347bdf8385333531520e2f81a08ce66c6d4329f3c72c2c2ddcae283f444c4dd1d1429bef4c423e78e2a3b63131c95e68d6392c29462c23795cd4a4b54d753786aaaf7259fa6c6b19efa08b54cf85a5c75ee28de81af11910da73427ace0385617910c77b7a8be20b1c6ddad7a3af1d4ccd4dd3707892077b7a8fd5d6f987f0e770b7f4eddcfc66341f3cc2b01027a906b7d49f34b8a4dd79ee1ee164dd57d75ae8e796a9475e26e6154c6392f31d49ef4e37d51200b84ee37997563f304bfdfd5f4e3688463fe7eb29ab5c6c68c4638f6866cf836eb0ec9d871ab49295482aaa71d86421e6e35297d7294e10e3af1308f205872d0b39a94405095c37dbf56e392d5897b2dcd13ac4450f55481b07f47090eb79a944a6594b0b09a94c60f710d4b4a5ce78ef52bff734aa1f29ef4f7c9718a6f7e65b8597f0c3f275fe94b6573ebb79fe764fdfd81be5378e60d92c0144eaa22c4e643fc5bdf1d12cebabe59cdbd43d263d5c9665956f0c397d426bea4ada9b12ccf4f5ff39ff8d7f89fc8a6f8e9abc74adef0ed93158f192453fae52dce58f18f8fef88634eba12c1c9228ec922be5f1325657dd3f32640d8f22cbdcde1a8c4a40ef790ea8a6261c2867f59d613058233c53420265fb8fb48310b13244ce6595213be0f52329bd9fc278060101377b8f5fbea5c9239a44070c67fdaf686f7bc61c20464c5f44f4c4cc144c83cdfa2f238865f8296d4e17f022df1006889122f999996ccec328e35bc24eb4f3bace6def9f156188d3b535f6485fc7ddfe67025f545529fa3539f039e7a893ade54cbafac7ffaf66b3676aef866b9c417df12a5efd74bd4b8d5a4946356f2cd25a8d5a4a4bf7de6d3bea86f010e5272c738de1c254a70df4fdaf8757e05a7ccfb753d95baeefa5277b5e2db68f3439c7135491fe23c331ae1ac8c46389f1d739239e8e37cc7b23c539f43ed988f486dfba7705f946ec2c4fc6c4fcd0413fa279c24673461c204136ae5e4bce9d6671334db535396241ac8f6bca17fdafa24a9f916ff0deaf10a8e109146c6e6136a27b78c630d930081cf3bac26255dbf6c4f8d040eab4929f539df7e8d8406d99efa65eb375dbbcff2a42b9193ae2b44ccb7f54f4d4258132ca3477827133b6fb18d6139a28295b19e3bace677d29508192ab157ff8bdc861139e97a32e19baae5d6391cc71a7a27cd68b4f5ef3a8e4664b8f3640ef799cd6c9a2432546266d37c1b63ef7723c70d0b6e90dcb85bfbccd49a99aaec1adeb13c2dad775faa62bece6313bef5419aaa363cb0c9b10122026c80227046805af6ed3f7e90e66ca2a93cf8e003007e701cdc7bf4e0a180571eed95e77ae541e2954709af3c4878e5d1bcf234c02b0f01bcf2f0e095c7bdf23178e559f0cae1f0ca95e095e7c02b5781573e02affc035eb9069c066d2c792206774f18dcfd06cf17aa2535d5125578ea70f780e10b1e834a493956317350418e2a091a1e2f7caa2420075221e10208920578b873c92b63be0e8d577124c7fdfcd309202569cdbf5a2781a301d7a92f62710cea6752e6ebe450df1724f64d36bb60d99117fc327a1c59cc27af59f382abce8f6fe3b27526a2c79becb2ffc6de17326f7dbae82a63ef0b8bd6a112325492fa22a3aea71af36b427c668c597e2caf899371ec9193ae44f4def99924256912d1668631dfa2f2cc87f8dee098920c95c48c75679c17eb8dae797b4df375684af2c51a80c60e93e60a7444e3021254345358742404cef75b6892d0c8d0511470b80e66ac674965440c7a1c5d0c23a3bba7f64708993bdcbd92c142e6e4746443636343a2420821844c036486a86478c8b87fe67f2a41e8c87e10fda97c559138e89021438ae0a0c809e8685ffb1f19ee544aa4a152620e25a2502971c68f6fac74b4775e858ef035713e3f2841c42790fa222693a548f62aa6080f22c4e3fca259b23d6f6cea8bd86bcf9b8ac80f888841b33db33d35110758a9cf29d980606ee0eee941179eb8fa41fda6c7491206c8f6d430a50b81b59183bb7b02e250a389bb3b0352c420dcdd07408024624552a94640f86864c77b0a47ee1e37dc3d47708f11dc3d4538db700f1186e05aebdf19099937aea79a4fc78c1b3faea4f935e3585d5e2a1736b8bb36bfa654a2e65722f4c6ff428da8295c351dfa405af0a9e9d0152034d3b17274add4c299aac4e499ad6b0d8e719432545c1ceefe649db1427077935723125448a8c1e5b46f128bfa990a892e2a24be42a287fb4e35629979871586a41acbcc2f2d2c4b7dce8f1f296236826ae4ef3bfec9cc622ac45f665496c93bd5c8913cb3f30c8e31df9a3422cd3e696e66f458f34c054f7dc7bbcf20a972b499148285ef1bdeb1dc21092112a3594cf88eb79a3842dcc96cc2d48caff33265c641e5716441f1c11136d511715447e4c09d8ee8aef4c79fa9cf4939620777ba6bdd79ac4d4b1fc0ab118cbbe4541c5208c33254b5b1313b6f710d62e67742e511c1cb813786d391fe4b55e848df11d5ba969527bad650751070f72015e7c4dd63be4f088fe783a2c327672cdd3dc7de8cc4fc71ac2e34f87548d5c6c44bfb2c4bd5e6f1c759c53e8ca60377ffe195c685eb8b55e893f9c6ccf6aca6bbbb7bb6e78db3b857f364d93ba46a9e2ceeee3bd881bb4707ee1e3472e0eec181e706675c209439dcdd73f170ff8077480e83153cb005774759a2b461011306d08631b8fb0d4f48a0821a01e4808dcedd3d10d882091a271818030d77f768800b0cf861e2208405eefe912141000b1a204203667077140268e1c617bcf8028d24b87b0e617471876709233620e1ee9f2b90a10351a8c10b2b74ee7e03084a3a8071224213537077cf1240ec074c38e04414dc6bcc405112aab181bb7b6ae07557bbf3588d58a552deb449a9c4047d7d845a2afa96c4186abd995dac1b9a325fa764c550cbba25cb385617abf40f93719294ce729fff6216f1b55e54d1ba8eb764a9c13fee9df3962c1f622ba686c52a89997e12969945faa75275a196994593a9e258f777adba54d2e6a9e9e7549262b3fe98734973b20eddd9b764a9e6c96255f3acb4bc276d66ad3f7c4c636a58a8655dbdab4a6aace6c942771eb5a5e92d2b2d95acbca959752c186a6d7df55fb12c59e82d5992d058b7ac541433d5a92f62ddb2de502328aa9a5649926171b9c1bf6b88b30db54cb8e489fb2c5177ab5e9d72e769ea735ee724a8fdd75ead81f26a8d92576b10717710105e2d61015e29410c5e29010daf94d085574a80c22b2530e195125abc52420f5e25610b5e258109463811b47327c0f85543848450c31a426c808efec52fef6f5742e0b8d391fdfe4522bc12c287d3511631adc39d8ee819158dc29d8e74ea7328113a323fc7cca84f1473457d80838e3403c8a0235dbd6280e65e31c0e928082e741504133adaf5ab167047b50035dc9d8eaa056cc09d8eaa05a4540a50c33f1370f793570a20928029e88c47dfcea3a679efb3c497dadaa24d2b887d0be46dc64080b404d9f8c9328faff32f4174985f3e32dcd98f75de7e9ff9d7342b5821e00e77a72fd4dd4fe00104d853b82be9456a97e403c1e3ade63e62ac17670a92a719d27a965fdef87e960a1ce83f6dd2acf4753268e698b779a6e5e5af89432daea311489ea68bbb1be1ee31c178aba86f699f64e95f878847a58020439b96992b2052e6a80cf0c43dac0ca0bd0e555405c0816bd3d2b644f587e3c8e2ee3a64a47eb82a02b44108b597f48820046388f142850704377886044362ffd69a7f184be75dde3b96642d956c499e204da9e41b6a95cabbf55ff3ef69d73c73c40f23e811ff30b4086a04fd17bf143a8496777ffbc7237e9477a784630dbf2134b57f34330c0d1284aa6c7d9aa552895af44ffb1c41aaf2a3bc9b669c4281a446b38e97c4a70964e36c964ab43ea971369577d35a3758d22995a879731ea2bc9b8ef5dce6d51982fe3ef32e8d95a674c772dff124e9bf485968556d808ef699adbb57958cbb0fc0abca733aca2754b580aae2e1ee2a7484afe97ed8fc5d565b3f2d82602ad04a05a274943755a123329b623da1a80d6692a4f42a00a530dc3d60b87bbe70f778e1eef980bba70b77bfc1c385bbc703ee9e2d3c1d1080bb4be1150036a0df64bf54da0fba47cb9c543cd0543f9ce1ee9611b46463be4ce1a4bec87f4e2d7d3897f47ed32934eb6b9a322bbea0bef484dae5e7bc8e9947b0ea6bc36b710cb574ea7334115ad3247f9af944f5dff09219e7f047f3eda6967ead535f24cfa4be88ad7858c3dd77367736909cf07770eceb5aa3ff615211b815c6c87e9359716e70f4e7549cd73636879fb2295b8f6cfc372c950e5d543a587f8b5f573904b1660edfc62665ebdb985f6399d9888b123a56308f4950cbacf884a1560ad737d5ada92642d74a772d61d9492d54c63939777c14b5c44c49d2cc28aaf1d699a4e3f828aa2b55b1faccd7ac3a8f92c9a1561163a898a9f5631c2bddf53a53a8fdb2ace6362fb5cc5b4bfaa3a475b80da3d8e7d4112c42ddddd23bcfe4845966eb7f989b8dca323779c6d696daf236a95d92a41fc1bbcd7ff911acf8c89be7782b8cc57f73840c772a4752798dbb7e4b803580e140d4e005351c410d59a8e10af7524987964a34d4fa5144112954534db538030c648451850bb87baca8c2dd6381272bde794b85bba70253b87b5c28f079a498c05837aea8d7b926774f14503cf1c4d529cf8e07e5eed121c39daddfba7b4ed7ee9eede65fedee31dd3d31ee1e27ca1b3cd943da5b4b7ca4de9125bc650e6f9971f6dfbccd46f43fccfe9b1fc1fa39619679338f559baf73f111b3fee8629e2d9947049581874ba185670b3254e15425cfa4a00530b0630e772098747712df4ab3690c9a3bbed554a93e0287aed09d4a8e018831f4200637dcfd470a1deba9437fa4508bbe181c10063384e10ade4618c4c0d9086148f11da48e24e8d389d72b42526059ff3442f1b87b3caec60e7cf0594113d6ced67f6e5ccd6aa2b4cc794cb2030f96b64fe9ae303bf0a02bcaace429c40f62918e55061f336ec6289a3555799d0c569aaaa3c746a1e241f10809c2dd73e39e0278e10973e8c0dd731a6f158d24e1fe438e83bc3000d7a6d5051ab8d31cbecda6c7247eb689c7ba7b42770f58dd3da5cfd3c4becea38b7dd919897d2edcc1053762ac4ac5accbf14fe435cb1f2930855a661569d65453cb846f366124d45261a13a359a9594338efd9d919870369398f0d5fa1ac93374344187103a7e583f52a8fe9182fa196d5a7be7ff9a7b8e1da7bf2fca11e6c841081a4514d43e1db242a38882fe48d1d7fa3745fb363f8eb708ea67ce1b2d6c5af8e1869405347c1cab4b8db7dddc58e6eb4af73df3a6f87e062b45659c53a96553dbfc2160bc4deb21a8b7dddc50fbdb5a442441c117eb73b20ebebaee6a333de94ac43e3ecd926efd76cc292435422d4b9fba8274a41f40a9f5ba9e4a8af33d95cad4696711ef8ca978e98f14fa7aac30d42a61d959a2fad25289ee7a9a3854d791964ad6d679d4e769d3bcf33887176f14156fe9c7ce5b1ca39252a25fa6f48bf914ee17c5ac2faea7f0c9b09afbafb9a97e9d1fef1802d927d31da90eefd6771c5984ecbcc595a6c0d76f966fa6505acbb21aa1a5151c21a5d3be28d2d637af988198e8ce7827b7500b08beb43e713545926b761d457ce9eb8b8aa11635c9dfd432dfaca50ab5ca93ae44a8552addd01f9a085d5632855abaac4654cc3fed37e54df7598ef507be9a5a2f31753cc3bbcd5adacfe62fc179c6e505e7991d669c988ca3edff0c92f0cb9b27eb4cf8e58de3708227e8b8bb8e87c989ac9ae69916c4f1010c5c11c78ec3144709144792385ae240220e08b89799fe70400a0d427f3880521507d05199a98a03680aa523154d9b301147050533d0d18f945a6673e3ffaab9f11de19846faeac79fc4ffeb0479827509611381cb1384fb19dc7d8983e03843257128021c3be6efeb9129a284278688bbdbec6295fe898b24d788d77c1d9a37ea51a50fe712c597e2dffb9a66c5979e42aa5fc7fc1b5a56d2fef8a6f96fecb8f90693373ca754858e5227381ae98d1fe792cc476cec1fb1312d56c6bec537d46ff33646c69b7acd5dcbb7c147acce325b9f2ff651d962d212bcb0041d2c4174c719c7eaa2c55d2996d9a9462cf26efdd4e2a7423cce74ebfa23dd16eb5491562a8eaf5fe8e8f11d2999f7ce2dd4bad43cf79b68d6a43e730ac750cbcc3b7c1d7a935fa8999b284f8abfcca31c7d4d8a5179579a35cdd67c9d476522d4fe97cd7fe27bf30c5fe35b7a91fee929aea14a36ff8922cc22c4182a048d0d69099d612182436d48382c249b2428a985e2dc1c3142adf23f87e64d2d3d432d8b556e740ab3504bdf1ad2938e48383433d44a8d38974ab452fdfa2ca5cc6a6e9cc3b7579b701e6ba944b58a16c5fcb69a5b3f9943aa6f0b2d95f458cfbc042d954a740294d65d5fa88a8d51a12a3701e75863c77b72498d9826f5454258ea8ba0c468dcce5b8c652844506048282fee282eee285ccb0d4e8f1bb41e3718c0bd091424dc3125ee281058710f80c69090e18ecd90684f49a78453b229d194644a30259792379f88c6c03cb660197779233bde24ee28a2df175ff15fdc513c94ce3ecd3872f6c74da4194716144dbba364f814dd51302cdc512eb737260cfd7e33c4d9c51d2508ce33fbb5ce74462332dcb1b00c0877a9784668a96a9a2cee2845a0fc70b78faff8161fd158a6331a6199ce6884e9643a2b59c4311abf8c99f12557f0cb3c596776aa91272baebbda15f3c1d1c8fcf2d464c66fc98cb5d676bc495684848f049fa2e52e6f9bb5266573cb366b69635236b7acac6099102c3bb235ce2e54c53b8578d8757a67ea7334eeb417cb4e3560810d6a50920316d2605174c001a3e4c0230b990a0d251a64d020139a2cee0e812b5aa4a0001667a862071e2f77a8c1f3052f789ea0030f1ad51d32665882bb084220c6152c56ac6cf31a6971aff8d22330ea008a7fc43f6e65f0b46985af53063bdc05304801c389168ec4bd060264d0c1319d6f94c40e15d801023b32e0fe838e526c7d53e34ef1cd319ce10c1f89be258bbe65c5d9844bf28a210da5c6417dda066210556148c385e8b7195761002289953a38e038fb6fea98c22b004514604871af5b7fd6e05ff8c63f86e75e4003fa4d4fca0b5534a186f2b7ced165b6e28c2e98c0ddbdb3ea02e8fb8a0b5cf80bb83000fc254d9e79fb4e9859d43a99dc61871d76e001d7166aed4f6df3d67d4d1465a1438c10cc01871698a4e17365218e9d2c38f15c658162410ef71d8b67508f7100c10430131595212b43e88f1d7b53b6f832231b93668b2f4329a598091474c7deef4df63f32071e39ec908348084384502370380388031055e062440538a8904435bf9aa46ddbb66ddb344dd3344dd3342dcbb22ccbb22ccb300cc3300cc330ecbaaeebbaaeebba4258080b61212c8485b01016c24258081389442291482412893ccff33ccff33cafebbaaeebbaaeeb388ee3388ee3386edbb66ddbb66ddb344dd3344dd3342dcbb22ccbb22ccb300cc3300cc330ecbaaeebbaae2b140a8542a1502814ba442291482412894422cff33ccff33ccfebbaaeebbaaeeb3a8ee3388ee3388edbb66ddbb66ddb364dd3344dd3344dcbb22ccbb22ccb320cc3300cc3300cbbaeebbaaeebba4297c8ebb84dcbb0cb0819e3ee2aeebe84bb63af9ae046353f081ace60c7fa376fd678f5c616bc7a230a5ebd5104afdee881576fa0e1d51b6578f58609bc7ae30bafded880576f44e1ee3a80ec8f79c68e99880b2a8fdf921a318dfd6c83f375ff9861ac6570ff90c1759eb1b143e6b3054f55993c63e3fe198318fc130677f780c1fd5347d53624dd9072b6d9e5f9af67686db995cc749fe0a97150d79ef4cd0a631fa36aa9cd4fd5918ed5ab35bef06a0d275ead71050f5d892421c5fdf305f78f17dc3f5df02a09ce05f7cf16e86071c308af8eb005af8ea0021806f803dc00a2236ce1d51164bc3a42e59511c4e09511d8f0ca0824f0ca0816f0ca08a35746207965041fbc2a4217dcc71a6699980fcd33dfa4f63d92674c5b5b6c6d791b7ddae66da92d3fd67d0393da57e393e26a597a8485abae0fd6f1b779415a2906f7699efb147fa0b2fe1753b5a479531cf3d182fb270bee1f2c5ca1096949cccdf7427aa17199217d36343636a48f2473e485c6c8a784c5c868b4aba996d92c6574de84f3b862aa38359f9371c6d36623de0af93bc694c715ef8c797c4d98e4d24600dc7fa4b8bbeb8ca6e7091114a04d2b057e5ad7528d347ce38a2f79cd505fab495d51341319021bfabfb1ee2a8e3983a99a9373c23fb95015217557ab4b6dbf05ee2fee1f16acc05d0ba1039f14a0c0ddf32e5366886536e666247f3a514b1afb55dbf047a3379b681ba7b131e3feb2f378a371a7de79d43b8f374130c157967534125ddb86999a094050c2dd7770df5efda00317f4b0ebd3e697e39f3cec3ac22304d51a6bb88f463fd8b4696d7c73f9d9dfb962fdcaf0ee274ffb9a2cd9fc25a9962357e7be6016f30cc3fc014118eea36992c23c8e2c342eee1f30bcf01b2b7ce0ee00f0414a2d83a4f6175e68f3b73e6d28697a4d4fbb96741c5946a31ee034c0ac7830851bba1408e13e00771c6650f1c047a58609c84843c90e82d004cb762004b761447430870ee670f76f27d404136ed80256c7109830c2961f981c4021062510604889086f44e109100cd102199050838b1070318227581ed046146c505860e920d4831345c082902c5a60f230471a63fc60053cd60003058cf8f00430ec600c2b36da491c43cc2f36608690aaa1520ac102a4cd650eec08e436220c449678d1e1075a0d1c9c50894119643840b780211e2384f1031488910402380354b441a6648328403138c1217ce2a12100304ec0848c1f9a18ad30e00bc302dc1978b0040634a15e210912d0e00107a800a01c002874012cc47104140a50325468ec0a8d1baa1cd051b3e98c46269daae35b8cca76cc39fcccd3479ef8fb6cc6b2f3065300f3d8422243252e5876da98b7d965343ae307efe21e175467a47c1c60c619668cc08c29dc9d0e1142e9a854a25bd752c7d6151b84c10219a86c50aa6a2087bb5735f8820c95d811b3fcef9b8f16fec98203fed121876a0675b05433206306356ed1ca320320dcddd227288327582c3b651002773fe2950c6274a52a58fc947e3153cd42fe8e217fc7904efb26713985bbb6c4600d778fc103302498e542f2366598658060d003b7b67e93e9d42afa6760a0051b3cec3a437d8dfcc3e817b4b8bb7d7dee6ac237955fe7ca542e700245022dc882fb0d2158a1650d3fd463121216a8e1fec90006aecbba8084af338e95d4ee342c5871ff91f28d4664b8b3538dd4d30ec9a273b887810402f0accb0a01d1380351011115f8a05fe650d37d13bece97531f95533f0906b0707972ee3cb3f30c0f25b055a852b0c649d72da460c7ddeb970215d7261474c14914b4c0b23719051e0a7cb0c06cd21330e104157077ff2c3d8e576413667c2237a9b09a5e46dbffbe199a981b1b12928f94048b0d0dcecdf78dfe74e2e27334c221d964118351822c4ab0e9182520e2ee5b08c1011288c0dd713de94a640437b8bbae5f158232aa10701184ca08404fc993f21ce141c2f3630c323c6479971502b273363f52b87f2610c518da1829343ca070ff3ce1fe49b97f76dc3f28afc4b84225061c1f1df7cf49e343174aa5cf76ff68f78fe9fe71c2fd53ba7fb2fb07bb7f48f7cfe8fec971ff34e1feb9ee9f93fbc7e4fe11dd3feffeb1ee9fd0fd037e4aee9fcffd2301f74f13f70f13f70f13ee9f251f25ee9f24ee1f241f1cf7cf8dfbc7c6fd1301f74f0dcd12f72620085ae0275d4b1000110618dcad8d3f8cd3de60d2df8cb7c2804106307ee0ee3b63232e4a6a92509df5c842ad52c92c95c637eb78373e6959c954dd9aea3fe1d09d4aeaf09215a76cd657df8aaa3b67903e90b74754faa7deb26de350d934514d9e49a8552abd892bcea89dc5fc4170aed9d5f4a6c954a9ad2d64a8840c95d8da82c3851dee54e553068a132849a0c070c185111725403ed499f91cf9f4a02bea880751b0c00194bb7b608df16a6ae13b4a622666c686258936e1bb3392b1bea9d6e8d417d93b3f63661891466f5d65348b4e7d1133c3e82d6820532f922da6f02d641ccb6c8c697d1d886246b368d372a2869313d091c5372787dab4f468546951871010d0a2d48249160a70a7232d8070775d6501c79f6c165eb87bc50128b87b78daf09ab20c071af0f9a701ee9f213ef4833f3507274d92e410e4966718662adad7670e4458269c4d147d32df504b83a73e85b89a2d39a0a047101f06dc30861f299fbe427c8270ff2c80870e34295c6dc64ab87f14e0fe49c00701ee9f037c80f016541850e2ee6f33ae39c48ffa1911f8f00a030ac077c417090eb080c31d0b27d69f4860e261a9ae98c3cbb8c204ae5356575c7f5d6f8870ff80a1bac00fdc815c00c72fa072011e56b0610516dcdd8a94bbbba571fe113cb38519c1abf16b5a73cc8cd2a7c68f5fe75348cd332f412db39665a5b6882250df422d5dda27efaebbbeb058568a8a29ac37616c8aa9e659a950828a14f7109fe6a62a3b15a0a354cae63fa1afceb5e65b4f112984e06f32ebc9a502a10aa4548007f76f8a34a61801ada690c0142cee671e8d28b00405d65051a0c5dda98a36ad91aee629c514a64a0a1e7e9257c0021a3e064843147780a93154d6adc9bb6bdc3f5514e50d9e1e9810071420289e702b7c9bc399287ea4e4e44f5feb87a651fcf8a88a4e794014542525f5395f0afc3e0b2507438650f30c51eac67f63cd1aeafbc202934abdf5edd7f4ff865aa51215b30e290bb5fe85fe69671725f851bb9ece138ad2375f5bd432e14be6105faa43aacddf62d5d4e26a6b1ec1ac2b4a57336f32d3acc7ba4b96c97aaa62c2d73c85f5f5d5f744f7eb7ba29b083c56f3c93f9597a4f586a7cd66d9a45462e2c97c53a2faaa686b6614d517b3500b02f49350eb3fdc6f35299598403d163390541d475cf3db1c3621bdd0b88cbe717cd468546a269a30318e57a502c9a693ead7b926166ad96cc7bfa2c5267c4f3bcfd89d6758769ea9bbbea45aecd768920815f9c44bd47c343e010080bb1a9f1f645870666896c4d8d010a1252347663e52122c37372423df8b0d4b929a239f121623a59914b87bf0e723836a0455395e701f8d46a32a27c5dd8580c07e53a96ac20d21f0053f9f4f0f1e1c54570dee217eadff13c03dc3d2b79a2f31c8810d4a509decd0a6b55fefc003ce59535da9c53414b39c8cf0ca842bd358999454221a6716eeae6df1777c78f8ece0fee1e1fed1c1fd9383fb0707af3e8aeacbcf0dee1f94cfc73f9c318e7fd40897d004bed5aca54e9765d7d529bd86b0548520b7c8df31d9fc2522be1ad4aa4a0332b4a83e3baa2ff421870abf5718c72b4cc42b6c8457b8f20af7e0156906afc82b18c087347ee0a0345ee0a03444e0a03436e0a034761c94c6e8a0349838280d9283d2d07af8d00513afba50c2ab2e5ebceac2f3aa0b1501807af0506dc1010eda420f076de1e3203ad0e0203ae670101d5070101d4870101d3d70101d3170101d4f7af0601182572c6678c542068b131e4f90f0ea49e7d593205e3d19c2ab2705f0ea09c8dd7fe811802138f06a080bbc1af285574332e0d5100a783504e5d590ecd510265e0d49c2ab219b57437c783544005e0db9c12b217604c0003d08006aa3060e6a43050e6a230c07b5a18583dad871501b390e6a630907b501e3a0362e07b5d1801c0cd083e6550f96573d08e1550f3c78c5031b76f061071e3d0000071d76009921030799a1020799118683ccc8c2416658e12033a2709019da4166880e3243020e3203c74166c438c80cce4166a438c88c201c64c6011c6486001c64860f0e32c31d64033338c8065e70771f04e00888421b0e8a820e1c14851538280a1c705014b483a260dd1d8759ed405127dab8d3be28cd074e12a92fd25da2ecd201a9665d18f2b80edb3e1437504483f4628859abbdb88157fdce2ee1c90149247a5ec5aeecbbac7eb5220e48dc25128121f00aeba68997f7372071d5669788619816b2f531ee0c92b885d873997661a1f0b19077ea2e7cbfdff532c3f3384dd46dd97575da967d564519267621b6691a262ae2b10189ebae2b1472e215b2dd676295f1d480148a56dcba2bac5b280bbd9779684002b98bab98176a55ebba50148644607866400abda87a9866af6c134591d79dba2b8bd8b22cebf3be4bc366967c9e0f7864400a6dd78944111672a217bac4eed45d30363ebc154f0c4821f1eda6715908c42e9013c132489db8795848eb3c4cf4ae0c065828d33c2d74751cc685b64dc46ddd25aa56bc30d05ee17ba2bc453e7092f06159e15bf16d2ccbfabed035b3e4f39cc0f30292e871157bac03b770c3ead6b980e48930d1652f0dcbb6d0f52f6adccc92af89a7056208dcc010b6591baa2028aa1e16902e4fd465dd755dda9569da555740c2c40d034391e80a711bf8b5f3a88054ebc561afd5ab6a950b85b227a4cc8621efb3ba65a14cd4aecd930292170a61a276891e66c3ad8aaeea414107da0ceb429957b94e0bb75377695c57923753c273021258451ea8799bbd42ec453134010913853a11e3429ad669a1c8cbb492a704a4d087ae90a77959b8896a77792420659a68bbb41ae2b25026bac24ce34640d2b86b1379a290bb3411137118192451146da2e8392f64c12b048a8014b29da77d15c510d33011278680b45d59e68942a130bcb64b0b3beeca3ecf1824ec31cec3b0ee31b1d35e9495e511314899e6799bc872b55a4e045af0ee3c11f3515946021e109042a1087b51c671222b8ab24d3c6259d9fc2770c696459e989b59f2819e3048f531cd8644d6b376cb3c0ddc3c6090aeae13dfcb6c8785761355ed136d9e2f48222e0b31b16e5d287c0d03c55377a11e67e6df98fbe6ba3a73eb4ce4f1828461bf7d76fdc5699cc8fe931ffeb1bb52650eb7cb6ea70f1c1fe076fa1061eff90029c330518485b430bc30243c5d903051a88a5f35db7118662b885f6bf170410ac14cbbb46b0b43510cb1edf2004903b350e8d2ea25da362be2b27ada8284795aa7612191b85d5a075ea1243c1d2089f612b90ef46c683fe465db656eed7142126935ecba10dcc2af9cc75de6d65a901eac224e94893a9013b34eb33983dacc928f88270b92680b85214cd336d10331f1129dba6beb3b862ecec30152a861e0831b87bd1772226fd31b20652ffa50080bc150f42af6daa60192d5ec5b6ef344ee02c30e14b50c90321004c34bdb425b3d8e13af0c03a4abbbb4ef382c04dab762a8c3b02065a1b0e3449a56bdcabdd77118c9730549f330bbd57a5d9d0533ecc7f2dcd7d5792e40baba0db3a1cdf36a48bb429dd55690b45a35cbbd280b89b4dfbc2cab8294652f6e19e8d56bcbb22bb461162075d85750d32ae685ae5a31edfb38cc430569e330cc6a1de6715dc67198e7a90009d36ae75d61dd32d1631f7665797aa62085de8a9d26e2ea5531cfdbae5377edfce9331f95c7efa2002974896cf53810ab21a6699c76eaaedf158b342948a257c5eb6d2812659f85df691320852151c86e2f6696e3429728d2a22069da066e9dad5df81af8dc9fbacbd632b3a020655a28141275e287be729a684fdd85c13c41cab8b06622edc2c4d740af864edda5b3d5aecddc9a4b91bc8a89bc4c044111b358cd8eec901e7b6ce3440dacdd26eaba2b098a14d22e8ce3448fcb32bb6556d32169a0e82f2fbb382ee4eaf5a29354b34bbc6a67c34e0c89c26e4bb24935b421ccd3b6d086c44e1bab69fa5a6297f95be4697b759d278a15ab61a7bde69dbacbc3aef3dba4e825619240f0af10b685b84c7485a1ab7ad8957d4e6060f6a0c771de67a20c7beed45d1a777eafcd5a6a1779e26ca62481a0c8ebb80dcb44a096791ab7f5951165d2771b58afbf44e2b55d97e8edf73cac5511c4b2ca892c16f2eca9bb52e6c6bf998f71cc119264ff45150c8117976519068a424246d2735b0545d996659abd3c0bfe589e38a11c926841cebbaa967160b86ddd76ea2e6e4813244de4619d26669b9879a0edeca9bbb69bebf23629669714be0d5d9988f3ae2ed4402f63b1b5c6b2b4c7cd2cf94c27d20562da956d5a0d699a48bbc4ece2decc2166227db6855ed4c44dfb50663b4eb388b699259f1231b4d9af16abdec671db63dacc92af3e49e44210ecb610f334d111d67a19d6d510e789bced122f9a90847159165e18d6596dbb7e0b9dbaebd32029dbc090bd3a10db425a16bab253776d2a9504765c1581a130c36a068a42cfe28bc267c69f779548d662a29675a1e8d2b8ae82d9569237033f52d6d5cbd64d0c69a09689dac7488064afb0865b0d751cc7695856639a903a9b615727da0b1345dab5d52ce298f0e25a63595937b3e4139990ac785950f3acc885368ce3ac09df1c51880952f79a8761a1e7b450a4892197aa63a9afa62d21692078892ef06dc86ea2b05ed9c5614b9044f0411b12816116863ec33f7e1cb66d2f4a4859e5ae901612435a0d33cc6ea7eed317bb4449489d56339166abc8bd17aa9b78ea2ece7ed5346d1776754a2021855ce5c4faa2a8e3324cdc3bff7d5c3d6198eecc7a0ab59b23a490136d9a26b2db066262c8d58c9b59f231c1216df5ebdb1077bd56431c075ad6387e18e266967c4bdc903c70b35d7869d8557feb6a78ea2e7bbf2f53bbf38193848f1466b1ac14ae385c36b3e423d990b0afde87ea160afd8bea83a7eeda36293e2002a11765a1d0f69dc803455757b1ec244f9c6d52d4a92189b6bbb86a39d1bbae5a4375c7c69870b5b12ccbd265feae6e66c967694897d5344d0cd96dd332ab5d6012335b976d1776795cd7852e2f14eab2ed3d51b562a86661c8623e7092f0e199bf635c2ccbfe2d736859da82b1f181852e73979e121821550ed34499d8592f0bc1d066a7eefa1067d1879806c3709e2ef348869459ab611a67435e16aaf5cd0cd6ad01454816c4b84c24e24051a85951b6653e7092f021a65acc2c9a4ef05fc692bc1d673ac1b7db26c5ac548213b9108881a167b1aedace5e4ac488d873550cbdd0da0ebbbc7aeaae4c8648ed40cf82a00686e2f562edb0ab48121d066edf6d22ce7697a77598e8b281f9ce769dc53e7469a2ce5edda9bb6cc621859bf862d66de155bd902662d6e69b17cf721ef89c67eb679e480c61372ea4d016fa8e0bb73013bbd07581a7ee1a4bf27ef6cd7ad25ed7a26d1cd87521711341d18275c3b0232c24d1db442fab9bf8e225d2baeba4bb8b43820b69212ebb321126da34edca42a1ebca2a188ad863a18ce3ba6dcb3299cdf2c2702040e2424febba176559877d17fea9bbca6cda2bb442eab49018729766b52d14692176eaaef075bebc336c08a913372e03312cecb0adebfe4fddf5388fe117de5db7c6ae6d66c9770921899d16d2bc2d241261212672e0a9b32ccbcab6244790444ddb44a028133fcc6ad53a51cc9f486644b2220fc3302f846dd876759c889471997765dc96611c6743a18d8bf14857e8ad068699e75da2d865a153777dd9757157f83a194d47aabf590b5afbb67e1872f6d45d5f68562c0b714a6b2f1c09b39ae65d99f5406ecb3a4f3c75d7875ddc26c58cdb4816b3dc76615db761db26c2bc537785aeb7196bdb75b16864cedf68cdefdb2123712008727f811ef799c8bbc453776dd343022389bcef426287759df89f6da253777d9d7791b65048146198b689bae7441f3a759777752152c68944301479a20cf3b8da854edd85caa6e9132f2c08c972a19879d8c585ba7a89b53b7597b9b545ca426bab1565af75b6560e3b75d72645d11120a41731eb851a8679a2ee1279d8a9bb3e8b6bb617d62da142faecf2bc906813b30fd5c7c453779df4597e661639161f2e3e707ce0c8f8081f09aada88ae6e9b59f2c91841d234cf825b266a1a088a445176ea2eb39ec22ff4fb9a49744de223849d3ef649fa80b1f1e10347c6c717da66967c498ad0425788eb3a4c745d5ab7853c8ef32c52671c2d1267bdf04560d76957dd388db336295ad69b39ecb2d20fd2756da1c73de86d9ce781da9fbacb074e123efe89ab4f1f38323e3e7c39ccdc65f6660eb599259f90944f9fe6f72180088d5bc00376326a07e1006ec3a80fec32e17bd2f5441b60ffe336ec038b18220b0941044d61404a102a0b2042014524208480efc7012810431860a7920c28c0f5e5f133e16b32e5f10004b8c82006a000016066037a7c0ea8303287df9bdf77e5701b5686af3bd095fabe060460080078e23e17f0c3f5fde9fb427d4905f840440ffa003c6019013be484151cc75c040f5bdf44800e41e4707d6f3a000e9756c00d9724730a0a36c427019eebdb7905f8105c30400b5d789eacf806066881083ef4e06ca4d102169427de60c21294900424b871042314a10d220c41086c0401083f58c3073de0c10e7480460e70708333ccb0410d68300319c4e053c607062f20818384d4e1a0213e3881c2450fce061a5fb0388e14137047894209eece0365e78322e58171941d4741a1e8f45040f9821e099882a39cdbdd7b24c00747d1eece03c57413de55e7d4fd8df5003507d0ae1e4098a00701547a0ca0ec210029f8d7a3871d3da8e02a39946389d851c8d11d25a7896dd6d21de5f2a8bb5a77949329f5458a7047113ff539ee2828d51d252433e6dc518c303fe7e26c645f7ce4a4eb9bd905df1cee1b439ea42439cc61b6b1f8b7fe24ee28608e9961522dee2856c9532dee289f049a30e90100379870775c4f386f66235bd797d92c26cc8737234999a7ae6fe26c967f19eb0daf3d9518f535bdcc58c38b4fe1e3902e3e52c9aacf2229cc82e9e05bc47c7d9a5f9eee284bdc5196a0f67e28497ce7b77d7cc41da5081266b28863dc5190b8a31c41c17147118de339631fc71de5c62602ee28356013253d7a30d2a387981e3dbc380a0dca8cbb63e378c2b8a37046dcfd062727acfb26cfa014b163fd973cb343b2e399933c59cb6ae2943ba49c71f43f8c09df99276f1d5db2898f6c33974fdc1b4db26326f22358f38c3b8a1219671c4f181b73e323f6f11133a740a8945129f6b19c750ca111119012040083110030482c1e0e47a331b974cece011400025ca672ac4c9b4ac45992a328c48c31081843000000808890cc9008002bc72f8091d40908775b2732debaee49b677d0dd676eb8abe7cfe195f434d1e92411ba9ba55eb4be00b34039eca532ea8061a3af4134185ae967d2f9809630f424fcdffadc27e50315f2f1c912db6e7adaf1e233441e361ce684bf750a810fa49ed336827affeccfa28bf5fd998a82643d750d9777d3a2c8152a01f4f60a5fb1102ec4d6c6c4b984442f987c0871143b845fd69d08afe00cde9ec473006dff928c027adff0f268fa4ae929a492b88426e8804a1e1534a131ff0e3968ac0b3b541ac43062987895a7341f1ea842b80b1f578860ff69a3dc8a214f8ba6ef7a764488f332e85fcebe3947ac09dd0bc8f6438e7ac2b39e8601f4430d4bd2832dbc8507b339947bf7d20c2bcb714d69c51f32838170025e1c4c30193873692daf86635d27c3f2c74febd0d60e6e34938125e71948f3146942f3f70270d5f83b24cf2669a883edc6604d10240a06be8d0dd509f409c02f667f46003df18534dc2a408f57dba09173eb81a30b614bec74f42dca8a0fef1deed30eab989fbc5278e3410dfd9e8117d5454ada34586c18c49f5bb43408e42b11d00544f8ea1eb34504f535e4a436dd0836b38a863067668e97d72e96b7421cfe4b01bc4c903c29f39c800603b6470939e162f1fdca39d04e8d7dae6d42355c7d8da9f7301bc70de56246389030b82fb73aab3eb1693f1424d3621c60ec6110c686f58bc9c15810cb4c80edec8b6060e024eefc8d8ad00b1cbc4d123214d910c31cd93cad203194d7633b9dbb8d473921a903e384e6cb85c55113669d3f3a232039f5925e1a60e6935d28ebdc9d6db6be7f8c8d7d54b5f129a678d59926bd2c62ef498e3ace96b85fdceda36bebc706146dba625468fc5fa1efc0494c35019ec552bad6213ab1c3473d5f2403a985af543a35f5b8e429f3591684b0c785e0c40e8cbb2f3cd272b9d6f7e42d36050f839cd2905f8ae05f869393d8772089ff532294597df6071b22d88b5f568e72de52f47812411cd19bc5e897eb33811183d78a76ffa4d10896695e784411465f403693a2b188f269ff0fbb4ebe2427f8502a3606b623fe7c88fee488859cdadfc374be1e44285e794156b6e1235e5ace566568ee0c973e20a3c52781c9f247b03d0065395826d6058b9588abef2f7a5310e85f1858add8db1683822bccdf676deeb6b05ba87d55315b468ea79c9ed243e19056f2e5c6894d19ede391a8ecda96eb2f6eb176fe8e3209f0a19201c4c1cf2b1a0a9a9f5c6ed8b159c18fe24afa7115e7894518e100b6940e6fc15efa6669243b9d4e74c0ad8059bc0483024ae1944cab420f9a213265a6a7ec10a2204b1bc58c81409c8d6b9cfdbed1af1e1a291c85cfa75a777cbb627c755e6f109901fb15a545f8179345f8bac58ae5c5d2e6df3c2511ce03802087ea4e5515988ea353a3f0b7ba16de59355ebd17d9fced2868fd67490b7f341eaac223dd2678cbba6f292a6353c1fef1eee25e58794471053a46b55e463377a51d047e6519d6ef43cda33b8a67ce5e60ed6119f413f5482f7cd7cec29e1f825424253c590b2fe97fe9a12af463f57415b0de7437eb12a68901a837d7809e4fe123a49c484dc037a3fa19d20128185acd60cbec189ee110248228d0915a838f45ae29c48cea2a161942b8230ed85d8e5c9d2e92b1c37220f5533001622c10669e682700ba5ceca661790f026b3b8fad1b0a7b2bf2314084934bc69fbc33cc4bfa3e8a80493d0f095180f512b9501972a81d5da47475b14606cd3ff2124b9b21d2b3e31849c56dc52f086cb8a6225330ad0f293c4732b7c3d81e4eb3e04f914587eb027cb0ff34dba373a3de938ef98dd1ff55c6bdbe93f7da4ff8749051a5f1778d18056c230285df3e840e1a2582e85cdb0172e99d298ba3289cd9e6b94496902150f985a48e81298f6efc6499f079cff48ff41848e13045924d6b5b378d25c78e795c1f0d670f2dff25e476a115032d5d11d07eadaf7de686bda0962d4180608305dec7304a22ff401d543e413862350384153c96ea9199f062767bd3ef3812c24e394648f81a82ca884d1ac6072db0e102360ffd6116e083d4b5ab6c2163cee30f090d9404d61744b3375016337e84b8e586e5ca68461437e1b02fa3118f2053ec2a986fe0a9445b46447a1b98f8515a1d349aa73664350c648bae38d398a1d5c8c7de5461202d10ded268009d517d7dd3c368b59ce6769019a09fc1f1168b7897769bf7187a30e100dc574195b5d5da3349f811ae65d7f9786963f2502a0f1b91c92584188cc1687b79ea997729379f3cab1806b161c6633b58fcefa45968c7f3a9c379d7d8de1c4e7214a8860605cd2df8166754e70e0bafe618a4bfee5cfa804c27c16412a0039b62bb7079185bf0821d80516a9f5a2a77a2dde1e78387f4f8d69c5c9a1e6c54de81227a5768b9ec792225840021837d41e019c2331109b8ab57f7363ab2bb39541b70603b4e952de18760a96ed3eb2dbca87077e19f390c96cccc44c4fed3801911548b616d0c0bd28478d683737030fcd351d910a1e1f1308684cc5058ff3360380a57142fcbfed6422b5c764b6417690346abdb47c7df0d19104bf615d6f8cb96714033cab6aeb8f61ab6bbf25745f83f5397b283747c6fb687917ede5baa018ee9df61631fb03337bff0b84d77163245740dc00fa783452804447f09df306f888e9f07b4b19d619de946a7b74760b7fd44a1b8365e610faad1379a2b16034b8a806407b83cdce42cec0f93e8c21075b0748f6e33909b9f2770a78b98f9d5b13705fe6c50f2a6fd4f9988370f0c4e7fe63be444ecb86172e82e88d27c94d181947a3132766a7eded6835b9d1c7dbc9effc62341cfc8dbb927eb81be750cfec49432fca3e5c7648ffe3c0d9ef4285bdca12fa0cd2b66b4686533e6d669646c27a4a4eb2be5b6f586a7d0c33c75c8f4fa40cc864de99b46959d6e461d57019aa68fa6aa80e54c395a71411d2a118651518a05cae35dd81d81eacbef01af2d830a402064a8523775c9d49a2223ff88b8e5fbc604966a54992aa8646bcf1dac79e6a8194ae7bebf4f6961d191c1b6d730be7350cf4947bfb6fc9f1a980ba57f7ca0ab66493d591c19acd38d9993b21023661f858e852d03c9961653cf8e33a715ba1ed847a160687fa2a62c29b77b1966bb8a2ebadf78ae0bd776ac31d4a37326ac70a85969ed74a11ac1bc1b278cf4e1855ca4b0c45cd743807e64f0af4ac3b01f2e9d29d7090d91829434ff4cd83e48e0aa84ee09cffcdce442bc4b16bece84eda49079e951b14d9233f25cdf13ca3f2e9e90d849c78d8b23c6d73781fc02f4d8e04f0b690c240a17586e10b84253e7b06b7bcb4abb55000390c0f59b64af5998772e871ec3abdf387ba27542bda8d6fdfbac44bbccb24e6c7f57f0e3e70b6b5f206fad9e84dd042ca9207bed1af58bbbb5e19b2fe357130feba24900169905b9e19c559427867baaa909cdbf37e1cacbcd018792001577fbc815b40f20e3731afdcb71214dc40843fc5cbc78c5f37fdbeca2236cfb8b160faf23b867ea2e1366df47d6f83a55ae163b617093b5ff21ce231f0a2c90a74beff7743f463eb821df1b7f7810afadb95d13fc6d0d4cac1551299234bf47e2845ba279a8f875d816decd2d365a68f29bf033b7e298cc8e0c88deff156e24b89c38d9a246b80d9d5aa724c063215b9656e8dbf8df72645e93ab4d9f6d8f7bc3c08d217961e412f4e827826f76659551cc108995651cb4ce0c9007087590c8c5a444752132f90eece4e5396b7fcd30f385ce55d6ba6dd22313f84f52bf0fb7412d575ce554e3a939caae6d6fbc89aa11a57274781b76be3a5cb9e60659d972c0aabca05a282406ed569031eda1355804649c45477c5c704174e040e3fbfa1317e9773210695eba157087ae903d6b65d0f3b66fd13fb8e0ca354215e1845466f6c3d3cb5c9a5fb3be10bdcf4f369ee243bc1476ec538c8e39c5cfb88be1ec594e63763fc567c390948b14d23b6ae201a32347fa00384028078c4f066b18b38efda40c6b6607780e2ee53fe444bd396070fa56cd9f1c9683869eefcbc0def61c74b03859e0b3ef43510d78ea99440cbf760b0f15ec3078c6fa16234f932f9e17119079227d8e7adbfd335033cf4cb2644c859342dfff0a5db6e4abd0823ee9ddbe13a9a5fa4a464b03ba25d54edded3534a7fccaaac873f42eb482d9703f80c1968b7f0f3b83c4c95fc36aefbae33f7cda475dc9ad3326636feb4a368393a0ffd7a3e581bcf50dab11c6bb0f5402f0ceeafdae4f86e1c8da2ddf67d285e10e979e4a54d574d51d0619a34e3d0cd91addb9e8660d480cc30becc1e361fbd8e0dc6ed3fab1f920710fa64d635f96c07b6ed5e2adfa507a12ba9967adef8551c6e511555754ad6768e90ca1ef9a6a8bce4efcd8baa9b95a45d403fa7af60ac9ea4e040bad5cb5f9de3a26abc74a750817b9ea8c78d70b39d38aa8badd0adae73e9198e9560bae0896d44ce9384e516319589eb865d23287f44c284f3cf9605b1b0c3e0550af1d00f661c0cb81eb499690e7209833e8cae6a70ea6d84f49f1a7d4634c3a25e9e2244bbd4733ad4a4ad2a57947948fedd1ffda519ed91f1195ce5d05364ddf7c4acb19df3aa51e20f3ed26bed3c75965ed41fed307f6b346627f1bc525c391b09ef426a0fce1bde3c97a706038eecaf3255fd2b7f17069917d085139a28f874a9f9debb0a27148ebe170b808228c6dbf437ae02c79fe0accda7401d2589d585e38b47ffe7eaf7bbd2bb419d81b6499e8c425af965afebe3f85a5e3c212b68113d944e7eda7e1fbdb0bf2c0ed0dedd98d027bc899b5e378c3cd0d3d5f4e9fdad64416cd3e3770f567deb8f381d891fe63788dde347b17695c3dc8bd731fba2f5459dbe56ed1d97e6530d36e79e82bec612f036d399f2568de7f5b80b99975fffa88725d8423ee5688a4d99d70862d023a71474cee0f69f64a5b1963f44a6490866f2d98ce114f2a5ca78424d22e2b70f7f2fab099a361c91eca3064963d3a72b1ad3f31712036f9180b0bd938290d6671ac1488272113a9e30920a69a2d64bbc5d213aae55fd7c993960ae80944e3ece150429dfee9b3dfacde462017fd3fc413ece67dd36d6b010839c13bf31d9feff03e9d5361e92b5cb18d40b13dedc43cffab0bae18787dd336ab2444cf78f21f4b19b52965ecf68499a1e6f23e392aaec52dfd6a0646773f40cd141f105c0575909e91a01a67467ed34a9d9e80353511b42b2df6c23cc51b69e800017dddc1d7aa65a30ede870ba8b1beac7bfaf223263ff7cc92b506b4a78d3d93408d2c49361de0f3cafac6834cf6fbec979db079327ffa4b9f6ec05ab8e6f16d01df0319b88dfb8838c3138b1c3f5b008d14dd9681f1d0d9f7d2f72256d1ac8996f25b22a4775b1d9be00fff24e4fb019d8d4b3e10fa2015aee8b4b3dce537565cd99a522d935b878a5a2e73e31a01d951ed8e9636942a7fd0956c85eb93ee8266557414ba4f09664f0991c65d70b01f13bd03b40590c499edd0663974f05853036ac5475815bae9d219be26b728a4394d6eee72731cb825d4a8a601cf528c9c4a1e091cc7237d69455f7aba5a75bf16da526047c1aaa6e013352b38b3bffe39c4c8417702fcaa5d4093b6a728eed86f6c9dff8d9271ff2bdae31fe44036889d764ef4cfff79a3733cfa9c395fe78e71787ceef723593bc62b406139e307fcd72366e30f7039efcadb2f123b9b9c45dee9ac9f2aef3d40cbcbc2e137421df479f432f8289bdb8d3b63cbec771df6e683fae8a77eeed697ebfbdded2ed71b3e5e72e8479ba9e381375bbfe924c4a8bf6c514a618be0161828dd1f33fe02a2878f44e1305a9f2dee36c8ecace1f6a49db576cda178e8cf6dd80717bb2d53437fd5c166239fd6aead0082db59570525adff933dbba21e2c3ef6a7b096ae5ee3f663e066df68cfab43d94a9bdfe4f557723d962a5fb2b457064637a1b061fb67c2a1ccbc29a88801cb9dabfb36687af9a7d345141f7c1f17e781b89faf01a4ab77f1003b01ed0e429a07d64e28fbf900e703370fc8714ee8f9104ce1339d0b3e06408b786d7341198bd308bfd998c0a6e36d1a04068f01f75010181886ff289c33711b06f0350de844700b101d4ec59b08c6524cb7d9f10604b31f6c6b40c4b9e17640b29b17383f8099005de741cd03d5249ef97c80e301b7c6653927e4711c86f0998e053e01a749bc56a3f00cc56904dfd8447ce3f14d82f439187fd059d3e5e196ebe4f6e936266d31cae6059b48af5db4b65eb5cf53631fcffe78204e06dc3c2e8f33443c18855598391d087f0c102d046a37179699223484dedd0c910d0e6f16880e07869f0393cd901a4e8f6286080d85b33514a403c2d98fcdc3c9804f4765438486c7c31812324361fdcf80e18440ada1f264a6138112bb687c28680f84ce634df399fa0b4f872d7380ac003539047fc4a948ed10f30875089b390971771861b4743ada64183cb6bde55107e81e4dcec25c17572abc760061f9a132fa77e82b9b6c488803d3783a700b732085ab9af73a49e7829d01cef075c775998b46112b12059ec2da4cae2d0ccae7197a7879421ec19f26cc39115bc19e09af2008c367740e3921e34840085ea8adad18eee7d32384f8c79ea3acdbcce5841a199be1fb2b78ef406093af466a85971b2fe1146f8082d03cfbf9c47b7ff6cc53cf3b59550434183349e10280afd63aedeb438b9c8ab32bb7f2da68f4de00e910ed764191c74dd52f85496a729de975a86ef0a8a0c653746aace030974a7f38e96018e0df99b3ecae5234f85e03221f0f0a6fd71de3da51848a18d9bb1e5fa9bf502a61767fb50e440995f08e0afa0fb5a9d47514eac8386225ca799924300fe83520c2605da93cdbdad3a78c56b68d340880de3b9f2c236bf3992bb5905ada1ac7a647c800c5ffbedfb5a258150006c5be45d0a4b37c60e510061734040997f3db49e6dd12c3f30d10c9e820108a43eb181eea602744aef430899afcc0a533d8fb655cdfeb8d1196ae0c2f826cad33c1aeb657b14d09e8f70e152f91fcc5a7832464ecedfdb2e55eb0fcc03135d5cf19f10e3688b7e7cbdfb6a89f33938b1476e4532dc6dd0bea5434a01153915b1f4b820304fc46e4be1d6cd28275bd5f23d469a7491bff4eee5ec1123bc62977f9b2d745ada54b5b160569e78fe767515f18997ba778269938a72bdd25b2d38d1abd78f8c5a87bca24c76cd714eff995c688835f30ea9cc215d7f6a06afe4a50bce1d46bf409fa41051df976db0f26c316576827aab1e940f103fd3b899c3ce8e57b3efd9ff3ad166c97d84aecfaab2186d657cc340a96bb5a210821d9529969b4abb79423e05ca9a62a916e96169222287b90afb46c00b376a730e19c378ec58d5c8c45c09f6cd83f99e3d19ce91739216e788e04f5717ad44bab3980f0515135de5ef1554c482da00111b87fff12e7f4517fc7f337ebdf620b9ff4768fb666a3a19309be15c2b126e491e18595177fccfc7a8484b2fe10ff0821a15299383c1fd3e0562f57922886779b9579dcad0561be1525a67109ebfeaaf289dc2d486b3342f3234b8af6687c0ed73ac64097e768487d234f8533c6be0da3fb6cf8d616e755b029bc218bd8060480167bc0afc6a2f4e078644b2ccdfd457e7deb89ffba57874e2e2785be692ec57199b390d5332dd2829f85408056442e04ebca14b6238a8006ccc254e4390924fbeca32541fb942ae075a164f84f9b5c1e615ab936fb8bd872f6c211658eca68b8d3a0be9f8c08ef068d3b3935dc28944588bc5e5a32b11f0ec1b3089f8485950f11ca7bcbbd5253c9ab9e1142e905d664abc5d00fa25a6661750bc6c9aeaa8708d31480c2f72984222c31c65cc4ab4cff48915d44856a1ff5e71b351059c0fab45f3f473005bb7d6a2dafb3792c5001d0ea41cff0f233e03469210f52aab51fe5248a1182231114586c0844aad751b5ff4726e704c708737be8f29430c5a4e024e239bc7f1beaa762d3d752d4f7c5dfe82c54f996cd799e04619dff6ef43548ae37210b0fba8f5bb107b6135d80a3fb7186f68a2d2d3b24321eedbc4df583c456cff4cf42b714c991e275d77db055abd5e3db626924cf768e31f39dc2ef3c94a734f6beb08830071804262b0338731de23bddf19c849627353b45047ba9bed386f02f23f3746134858b05ca6ad1160c2d7224c6b20bc8424eb582bd0c48b19fd082075e71cc947d8b35ff0a4efac36e67df77088bcee835a02bc03fd1b842230c00e2f12bbf4fa7a00f8ceee4baa188cd0e7948c8951085f2437225860f1e1bd6e8ea1fa479b3d4c1e377cde82c2609550ff017addaab42026a129e922f062b61a344d794fded8f420cf235d4e003613444e515d378dca49a23906f78c57879e8df5c730f749104246f97e7772c5bd6d10e050f1fd9ba9976783125f8d31816a4cbe68063736330f5e3486572805e1b7eb5bc1278f40308bb348c83338fd729c49f8ad24f24f317e16d773064eed856e6aeefbcc8f4c39f9f886a2ccb21cfc1e98ab01034984ddefb9d2516a2f1da6a0b18a47739ee001a6d545092c8e7cb25c2ef35da0abd38680e616638a745fbb3dd707a85ea1d94a69861c290dc3fb843b5c971456ea93043243dfe36ffb8139dc32599ee66862ff63b529c4c86842f917950c6e6ca9dc6dad9fab31f89c8a033ed8225d7e94e4b11818c69effc5a8eb22c42050a5acdee8c25fe0998ae4683f407327cdd6f4d640e20704482fe3faad6946a66617b64a209c395cfd78bed9c01f9dbb37baff17d5f225ae72d97eba9f855d2ee3cb0bed6488f751e7eb6ed7ed3ba4310c09a1f21a06e2bd66d0b2144b26e7fe46e40da005c745b15a88d8632879a19f43f26d9d967d29541c936de18f44a51cd5f54a982ecb75c0536c44465e07535d6a197aed1c746b3f83e25f3e57f894a49dd87a1d8d04405b1dea0bc15880b3887ee5c64b91808c8b1dc5895f3444515488f82e0cf1db933e804073a71c49ce4b36d4d16bdb93c17a7e799ea3944321a40bbff05b4cbd1bb1f61c13b4ea352118cea7d092d34028a298bcdda1c1dd527146904ee0cb648ba6c1e1cfb8c863d0e730a1a2445d1783fc382cebecbad94cca99f38b671f09c78a6d1df54364ffa5d6dc0911523c2fa2b86d2feabde61a4deea755efb700ccd7f7d04711e5761a71798c4667085b316288ec46e3cefe52ed83dbeab50269ff494cd344ffd38f7d6a829284f89cf7a9f3cd513d4dd49fe67f20e6ba19ec2ae0bcef22683ce8dab47d7550b21245b14f1f91d8ab65e0c7221c646903d08a57f89796352ea71efc52f4dc0b671f16c0d42d93d14cf41f837989b8c77c57f70a2eaf310c23ec791326ff962bf8be299aae1722def931a9a388d7b5b2d5520e7873d4f4c31abfa49e6a877722352c6e3d028aa499d6262bcd7d67399afc5c324baf86dfc9707f10b84481b3aa6d128b7f959cbceb77e2be25875a229c59a3af9633fdd26335fbbccfbef66c13437f2f844023efb8d6ccb2965effc4b885c11873f4676d052d6a15bcf7cd88bf9156ed4e83cf952f3083afd310cb954dbc491e942e82a5d4bbb67952bdeaa6141a673b198c7b2de0e3d419c4584603e7821fe8ff58d795ba84107a4f9dc3f02cc1a7e5b9cf79bc62fb1ebe2be06031f949f54e02700ad3cc59e1dd8f935e4888256b36762a21034040fbf518bc77ec66b54a4ce08f075939a67897b97851682abc89131244547b0202532cf9530911e1653aae44f639043cc6749ee30a2481232213cda4d911e5f41c327149f781c3cab567089fd6f2111b7916c33040703ab103ef3417021eb9ecbbbba1b205f523d033b0cbd087b22ec12b05c601a78dc448ff1e717098e9b6854e659e89ad8c91f65d5c31ee0f0ef179f40b699165d2064fa2c893878b341faa5b8a072a16f8f91179eedeb22bcea361c18ac4905c778064e3cfe1e373722c99f5057ec7cdeecd4b2e13e5c345d6b99f68d275f80fbae8f9511be32621e830e2f532380ae3b3b6fa3ef9b5d654c63fe0ee8196b8ff4c443f9e6d817f741c382f6dc529ec4bde7cad658e75304c631063df7c80268efba3c9f3b201f19bbfa10bca20f0b237c703af5214b8f511dd233ec8f63284d5f0acfd2cb92dd89de5dca947ad9177289810f91d4f4ff1489faf3c0c1e967be434ed486370cb87c9a93203d076c643523c403987428e689adad55ea29792e0d101e5cd45e7f595a8e82ffc0e0060acb963653c46ee947b648fb978efc2ebd5c9aed5ef06f3b7a5b797c794a3a3ab1e85ea9bbeb7dbd9073db343e3fc7b989db91f8fd906f4659c052f3fb0a9bde5f2031e373b96c45536e1e2d95c358f72364bbbb3ee678e5f59a4e19ebca6a62e19d9f132c160864a2191b6913fa9f4cf427654fd4f899806476552cb9976d12a2ce872a6b6641b6238c42f35edda7d14f4d925646bc15e16ac23a671c34b0298e5da129052e19275d195b6fe1632056e0b76e5f0c94ab70e8fc8e54944768c127e2b00b6a4868484f8ecfb347a80cec237960f1143798255a72a36d8a48fb4f557cf7f70bce987cdd6f2c0b2ece0586190e75ca247d4e7502d6153db137d929a2eb84a124ea3b1a6ee2399a94bd091cc32a15542a92455804fcb5db0bef8415a944aa61e58b0ca35fbd689e5afb4f888fc7d8564272d362d3c86a0f04048cc71272280063eb50dba15bc43e5c7b26b84f8f662475ecc17e979554c145722a52c0d7264549950066f4aa1640b1c749c3a9d1364419ca777af986bad84015863e0af9d4ac5bd8a5b38214b56a80ef64645744a12e50ce28f4d9b8eafc400e14124a520c18090026c6890bb5340a41287301fec1959286e6135bad04fc318144cf3772983ab90aadcf883b08f4affff652af05bef6668ad8dc77b0979bed19e2d2a4da8a0a2f06423939f361f250ca8d4437f9c7ff2bdb4f2f8304fa8fdf5f500d6a69820a32fcef47948216597b1f1a9dcb187f855b10291fb7a85463f17f15e06ccb451ec907e9511b8946cf6f680c95ee36dc112655320668d5c1cff0dcfc1ff52f1c8b06de5355793c95ec43d223d9d9cd8cbd1d8603ef6cdceea43f7d605f5c364e3dd6fabc94019fd0e22cf9843eb654bc7ae24a76eab5bcee210d7083faca772fd6b2b8e6f31c6e303f9c9f02502195d50025d67f0438c6e58f6896448f9d22bb58f59320295fbab6225491f682a4a1b3afc9aafd03c6446d290e34cece6f7974501243f0e652c8d5bd9dae222a5c918e2da8b27e61ae66b6657a033c71b4ed5d15b3089500e19975bd294d5db161f05c171242c06f368dd76710aab1298841627acf71c49c61b0d4d1cd70589f62c4ea8b67e458987357c2a5d9e700021625cf13e7d13049375de90e47325ec0fc934e70853d5d4c1fe073777f51481a30f024add578cf565b89154afb48f9fe4a8270c379050c6fcf40a71f98461452461105cc4aa7111e30d98120e2d8fdb9e278cdf8b74990ab398bfb41bf625136cd226e37c58f22f9cbd605736630dc67135f79a620c172a0cf75dd8d432d20b4626d1b08fddad52013cf1a7cd0d41eff7b7ff684e80ebe0787f163adc38f35e43d63e55ff47c804db6e9edeafa77df389a1ffe29ad74935e8e6b698dde489bcdaaa3fddc141df3e61fb9ac041d8d3f706e82383ea4da9bf2435c400d730ebb803a2826ef4115d8bf81a8e24bdb142aa4679b2adaf39ce4ab3701b71a3fe803ea57894366233936b5b0ff96d0fdcc3d498198c90eb2c75fc9919244040d4c1e8dba7a9f59c21f394d9dcd5b2abf3e2ec539e5a520ba695332ac7f8a91b5e35fffe6503c358bf74d5c3813400ee7f58d16aa55e2b473503bfd73876d2803cb7a399e41b6f5e727a0aa488106357517c1c6744fa8f93876d155eb92a4e390b387db736ef3d00f0f8c97de83317011f3f092cc6978a4c69c7826d49fcf0f84c3595a61f17802fdb7a99a0f634b12ab0d2cd0169a48900cdfdcfeefb623fda0fcdfaa6abfb9efb79af2727e3078e347636e1b95dbbfcd0c0708bf27e4860e6a2e7573d27312a8f4b9ff315589cbdbd0a76c06f013c8c74e40d548be0ed2e26ef0518b62a6c6a744bcba2663b776179e619a6a0249e1a28dd715dc3a5e575a9ba71aa5baeab7488ec2964b1b28a1d14480abb81d29acde18f9ea1d684eb4b117f3b1036e71d3891a07de1c3bf673f2efdda1273eac4fcedd511c41107fcfe3d64d75adf2945116cb8e85b6d58f994591f73d8806d9521522fdc08c8ae3ffd70eb3f15c8cadf476d3f1768dd1b37e62fc4862f221ab562051e26c36a011972b23d85b89eccb885ae54dd4278ee1c0b8459f83f195cc6a0e98de0e43c4d636e8e52ad3df87d2f82179a09aa0af34b412b3ee0145631aec0c646baa6db70526b7bb6e1b492045c960159f32b9d4320d3eef904d281c96c7c93fa5961a6f7d0bcb34bce366a6b1aee9d716dcf643ae1796b7bd0bd92ebe29ccf65108e382cfaa8e748d8e6882975925e0f23e39be1369ce49fe6e0662efd0bab3c5a7d8667da0e476c7e3506806e2d7503b6c54d9d78d9e55986c55c1cc5a4caddfd70f606fc1463e0d72e280f4b61abe5eb77cfcbc3f503840d015efa3082a89a3ac2ff6e9419c9797006d7eeed2b9a7936737c2a88fc023d93ff67a224c06709bd4ad5d93e45b68c970fda446c564288ca1d67f9490c70b010ebfb8c97c85e129846a5c1dec19b289e44378655010b3b529fcb38425aadf1377bb3a57f667d0d6ec9662fc729d6b6c74f9d39dcc13eecc189011631997bad84c3ec8dbae1fb6972cf43363cfc245caac1691215b4c3a1403232919f13dbd70beb6e8d8ffdeb6e3051317fc2e0c633b913a632ce83e5e034e35e8386ec9b0be26153568d9a66dc2bcccd2352dfcf77e878a640a6ae4ea506ddbb04386b2beff8d618f8be8cc49c56b34fc80e520f8ed1638072a867ca5e98f1f3e50e2c26e8329a9140ea8cb5b7a8b8813bf9b0a69c3695b18564ce1efeea0a31a8969ec4587a05adeed855070657c455e766a5e880ce470530239fb6b8a3e3803f14e1b2c9cba5876d5c7a14155ec18d726e716ba7114f0faf555649b974a7ff9cd2d996ac6901c98da8a79463b4a6263ad5ce7e1f10b8293c85f913b4846da17f2bf7aaba7a27d209b8f88e187a10e46051dbceb4e124efd7e6f249c64b8f72776a254dc10b4e0c1987233597ce972646eaa1baa9e1306de88d35abf2721e0585d932cb499a344277b0b74ec46ba705459f493a627911b8ba6d8c0a18c3e4cd1ce116786d94056614fde304d3eaaccb425dccbc73b09029a4f7a2e30f24e635b163132057964f352accb130d4a2450494dd2d6e86a80c935c62836e98445cf8dc08b3075b4f31720159827c14fb68a5aec4395c52fd30aa104f0cd60385ac2153ba0cf95f04aeba32a7ed783868dcbaee07c8c4ec50343d3240a405e00e39e6cbad8b506adf565db9092b6bd058626ff6f6c471c8f507c2d7719b2388c7420c6e486a8a41981309ea7d7d189047722ab0b97a9648c41be0d0e7c44497a69d5cf55f0348511619990061dff8fb68a559d7a411a1e587672fb2bd27d1b50a2a295ed247662419b4dc9acfc31ad2437333581d84818e87856b7900c1e1bde02c548a5f29db07287f1b06051cb1f2f4ce5c22b068dcfbf5cc21e069a7499a304f32088871adb9d9acab695b6945f4b221a81439eb513df881bd7813a24196c399282fe9481eb7985ae8f2cba35148064e3f3458086b185e4753f3fe622f637a7e894dcec79177c52f02cc71292793116f4e89198c32b4f8ca3791b852b8af421954004dcde3286bc03c7a4cb913a2c5d179883fb1e76fffc7395d0d47a60cf2264413a0541f3f73691a08940e1b01420d00e4b8f129279207a3f8643f07b49dbc8ad92d9d48ca82ca2d43d8add68e309c30f7c4e4cf83f3a14ee361fb17eb5a4ed224a5b4fd0a9811d1176eb45a721f0438bf480528ae7e6cb71354400e601baec38688381d0e8d1c4c670dff73f68679ed8a2ce07154b82f5c911499e9341e2def72d00c06816ab2891299789ac0f5392bc1a7a08d9d099d3bf945c9fabd14ae4ef818afb052cba7f4a2e1dfce3f07cf0cb1007e8d1a0690296235bc612607ca3cdc0761b70ec54080a31c57a27fc7c5edd68c69901942d84f97e329b822b30d1e6772282e7ad7c1b1a535af5409f77f367b286e0e36ea26d831f0c77a0fc47e2d2989642e512814464cea41e7fd12f2132661e5037b66a05a0d708f3b484f69a43934f1f4817bbfa5561adfbc12c5f701af363d3ba6d2d4685c9ae4994478f6fa6d8b81bea1d5531f104f089b711d3fd24b9e78a8382aa9979e720949f409623869cd347644577e551de7db496bd7e477b5c3074e61856d39190decd41aed51578a32fe03d636ae5a7b9cdffb994cca32023b39f904978243e9f1af7cf4f9f7ba8206fb37780fe7b109f2691870dcdeace21fbcc10b7508dbf83bf307589a703453b3dd36b1abd5e10bba0f354e8aa989334f75818d6fe6d34fe8dafb988d1c21478cd4c3f19b34b0b80b21907dad804d2cfdbecb6f1f21442bd079f93f5e3c9391ce7df4f4eabaf2b9d04a2f6e1c96f7c3c450cddcf695123e543f40e5eccb0c78ef7db1f5f25dfe19d7c337262857ef55ba7018e2e56bb1694d663347bdc0055135ecbc860c3c21cf928c2e3df90641991c35e45b160457a7d4092d63b0fce062af928f9256a207ce49c46868f8b92f8ca365499f175492172b04b0d0f91feae027fde36a67f1a686ee48b9917cac7f56788c818749dcb1a6414620b01bd050c0f3226e72bdfcbf8e809150245008c06bfca7b5701b5fa8673fafec70bcd382a64ee885fef454efb227ca0b88b3df24ccc88dbe7fb83b169156ee162ad20af03a4dc4f68c181577c38629f329e77cb381e9921a961defe8dbec3d92ad31d2bf41baf537eb645edf2584f251e08f8f7ee90340395f13fa413cfc672a76abf9dffbe6df28cdf4d5c6c84eacfd3e6af00894ba4dad7be8d9fe50553bf840fb570703c61d545ba9e954fa1e33927cb8337d366c1a70270a7e17b969e47ab778a277e054cd0ff6e0ce39807047e806bff614cff09338433e50fd6e6890d7c7aece447a61c463950dcf80d7bf1b3e50b5624a358978c08c68f588357d46b5c2b4a635b31f89efa3a9fe94df332887f83b86a007d083ad348a2f4a05077c3b094747dc5cfb9a5121dfee7e38444a480eadc82133cf22813e611eb84677b4762f41a99b9fe173cca058f6f5580477bd15a3a66388dd21010ee491b69b419757cd6f7ba25a5391b2f85b4405252609d8ac8d0b0e17f33f753d39118a7eaa27ef9cffd3894854aaed617cf1febe9e1f8d24a68d331aedd5853959fa72693e2451b6759baf678fdd7bdbc36977a52310405fa632a7d3393a6501ffdf66207d129698d1ae0c3422ddc4431bf18b1c9c4fbd59b88c844519eb2591393086b3867455d279f8ea35c9b0da2b243a148d74f7903a1dc052ab77b438d56f01531c240094e8d1545be3efec65f6760b55137b7c80f3650ce1a739487dfe8a21d7c01ab3626b47bef9ceddf1a9d7ea2fdff1eb4bdd5924e515c8f6f6c37f38df71f4fd702b8d2a67d89e2a635646c2839c397b7ebdec8cf6bfb20543f8a5a0e19c4a5072fd9786f9c804f1bdf851d0bb1d5c4d1b46f92ede40a5012aa97ceafb69edbbf6d0a9e2cb0f578efaca70a0f1b9f05ace0b9281ffe3bf24095c095f68d78df6a8566dff656461e72368790dfa926e032c08950766b6c56d4346a1653f8a780a75d0c13e41d1d477a48d6a0ae345a0adfff4317d06201b98b6c13e770bac65a4a4af7406f7fc21592897c985ea3eda94da26fb26a58f2ce1db0bfedbc00d92f0a0ab840f61f6a76168a65387c9bc217d285fb3be223ae4d625f2633cb827b8f6232f46044234789aefa87c3cbf219f61ee334dfe1fbba37d121af949024dfe3f2357f0d162a6fc393f2bdac4b9cb0ec3a4ac5ab6324a0de3c2fd7ce38f415bea9ccf03ca59d43c3cf73afb60e91a64b0dcd2a2c4337292863ee1e733dddca8e25153b807e4cfe3735e3b62f76be6ecde799927580dbc3846b1f0a21e69dc15359bd4f227db7ec878f18f51137310933328850902a85e0b5cdd040e683fd54e721320a45c91bbb7121e13dd278d630da96d2be1e01799c69afeb91a1bba6a760816d40761cdc3ccde27965f9cecc096b2e95acaa4334df2776449d21a93edf4a9f185c5add06f9fe13923d881576341e2d58be40f650e2553206d32addf176cf8151c2d0dd42e51168f770940af6e92c0c61018fb83823475bb718d56cd97eea8a4792e1115e2e8d71ee8211dee5784f05e638560d26e061547ee00083833b5afd0b99a4610406c76f0de85f393d56d37db8cb22b22ceea187fb2499700a9c4547c622c96c857688bc8f9ff6104f702cf1a8d8f2cee7c84f3f0140e284d971e0eb58fdea82caf0f8f121eeb8a2f47ecda2ec7ea28313f9fd9c19bc8c6b6807160779465cc959dae8cfb9606c1d8c7951cf4b05ff599b6115de928dcf645bdc5be668cf64ddf71980d0ec7b933c1e2c0de22cccc3989dc3cac9642269afab2217eaa1774c0c8989bb3d6d197918cc260a8b2375b29dc6a738c31ecbb32739a029a7f56a0237d4bc91b3ed9cb8f5d2e4b8edea59d133a2547ec042563f679528bcac9c3504fd7cac53a8adbd68e56c97f0d5b49f2e03e971ff3e81d59a3463d00285f1db5654996701f07378451b70ad43bc3fc49cce3d47f68ba12337dabbe497f1ecaa0e8f59a755afafdd075fe7f8c2436524e09b7e4ed08bc8f9c38ddce47150da419ba00ef2c5241a9073ffc4169c27b2bb1e28e1dc40cd33fc9bc6879f25a44ce47bc9e33cb5080065252f367200ef509ecde401826b7d05f22f2ab560daba5c216c426565e0244aaca7e1415d35c9eab380417eefcb14659f65fb3073765870dafca0d4e9a298c8110afaa30a3741951fa6ab068ad603b68bd95e02395558b8370ac78988000be393d702cdb22712e1c068904554c54cf0c5b597b432dc2502c0aca91cde1636e792e94135b0ea1c448410d5386eb21530ece68d1844ee899552600b7acef271b32304e4e7693c574a589f7f85f65f457e40bc218c2e1d2c45f704af6a4f0a51ae14794d7e7e35a86b57e3037481f52a560acfad7901e4fd5de98319a02eb76623a8a0ee5bf797202cde1f5832c451adc2a132f23db5f621fe2f9717610b4dfd49c460483592929f037141eb8744934e6185092b422bee6ec881cb547d2b637edb45a362d038deecf04c4cfacdebfc4a84c04aa9fcddb0dd56c99550d942c15f3287d3e6911ff33d8aa604564c24b8a02b01ca73414106492d51d3850a4c8f79e69cbbd66c9b1da3bc2d94b3f7a6c1f6628b921317a2f49347f685ece356521a57fcca23b65403d0b28c81b58a4ab1eca1c1ecc680d2de12789bf6feeaeff6a4021c57bdb250ccb4e752d1db09ba03a8f288a26680c491a34409a9d25a99e9664883f53cedbf3a48fc135963890e28da2fda47c94bb072e8c15fb816f569d2d71de7912d3cbe5ae14b5bf6b5078c7d548755971d894d20d6f20e8e34cb846521a25bfb1dbd2dbc121d6137c03c4e4517a63a8a65ef427346639c730d66cbdc5ee486d9ec15ab15d78688142d1d99428fdfe3c1051ad9bc5461aea244d796ab6b5dd395395318ce39d364c608727182c2ec58b6d962a65cb754e4d9345a44de958267d8e9c84b613f2337601e78a89d44557f5e51c03855d51c00e5b1c4a3007addf82ab496a4c3e04c8df72ca7b004e6f46655cc2a79122192a5948ae804610a6fb2a34b23212d93a48d35beaba964ef706b0da295afdff9553b4bac4ae63fb4a675a82150d3c3c284416f4cb8cc99ecb0f2f75cfcbf981001d03cb135788d3a0b2db1a98209698eaa9a558c0af7ccbc0603ae798b4e5717ab01f44f4c34d4fa53a5682a70a49981e2f8bbc2324eb6335b392ca2e0e465ac86b7ab00eecac79e97289a14552062850ec272d8a6973116b36b17bf39adb6e2f666a3c4d004581433bd3720225c82985ba97d5d2d4d2f84067044677d52abea8904449b03038078e6caa1db61f3fecefb62dda380d5a968af6623cf3b923f617e3c48b51551fd91a7a52de10898f93de865aec62dd054fa38dd65e6415c5b03953d131d5a9f0f0a14a557aee8fdef428a81ffb53d2487bc41b5ae5efe188f448ab698512c80d5ef1a4026c7cd0339e4ba455cb86b35af0d3e8612c26896a2221af610aa51c1b789aaa876e4f69d1b19019ef645b60e443c80405460568140c77dfd356e79d1931307624aad4f28449f2abc7ee70235e40372d244074f2d9a37488619cd2ae5462cde0cd67ef8a3f4604a249434e6fd2430ac7fb7fb19d1f4831988d99fcbcf1fca3489091a76cd0fd4f9ebebd5cf84204d104d550851b3bf8f64ba5fa5c5df059262d52e941f0e9d5fb62438a71852e590f5a409451a40fe0dc6795c4298fc8d395a202d649d4154aa137377b0ee06d3c75ba4cf9b3101f12880a7972ddfe8b3cc56672971c3554081910e0210900cb74818221e7252cf233a8184a4b62bfecd29dbeb59d166dae7a5401e030f89d3516d97db4c83c9f23fcb8d536ccff2e0940456b767413905e29f2ae4e6dd1c0318eba17c0e8aa90b9607da90896244917ef1842b341f8830ead03f3c23cec218fbe08d5093ca6135b656256319ef5abe59726abeb0d86aa59650a49f8f9ac88fa510feaaa9c3fa7c1a7caf9d710b7f945d9efcaddd30646a0b2cb31395c4ba44bf79986ce632161f73ec64cfdac88d4dedf2fd16e8ba9150d6cc4743a71768d6938d63b5a90077152455d1ace1594428e909f013617118d1dba066c110888df047f4f6f92c044271be67ac07114141120374c9b4d863b8934f252fe71ed3f01f0ce9e664c8f2a7d6822bb420b2be5867e1ab8badbf84b990c0316be4367d1c7f2e4797f6e876c1b343702135ddb7982b8526868c12595aa55fb93f0e3f2b3bd50b658146b8efe9066cb616b9ec98b63f00dc8c2681a444fb2d177e1999cdd11fb4683a16563e365d7efb456c98c7b291f49a670a109e68154f8623e23912f3ee5c82a12eb1323004626401ac58c0c369a10fa721adc7df839f1c7cbbde4a9b4eec60ed839e77db1739abd0254febbf4d85ebce8e85c0f7db5230510cca5fd601c64d1f6175c612775d0d3999f02d037efa56232b617a53d84ec0a10a9dc6ffd192407d40bdf3e3391331fbafc07b0c4e9bdae9535697ef2a46c735cc8810da9843dc01b13fa51d52e98181327121deb50b8b5a40f13c193c1fd68a3c08bc563b2d2b84043a318ba9355bc04bcaa0c47406ffd5fe94cea6fa52061cc72918e4f01b6a5d8db4ea19d1b63826d502d339e82e45489b8d44573159a9689cc2f39320b424f69f6305e18da4cc27ecf07f117e52a56ebfccfbffafd065898ccfefcb18175d00ed920997e9adb77c6b0a56b64b07a3d3fc8b1e71a7a53fd7484150b6f1c5f548aede8bbfe545cee112f1592ba001243b8b7aaab306ca3a6803eb3b9ce679ece7666b80ba261c501bd93e7d4b2bded63a3bb26a644f21eb6357e9fde7aeed8ba0a1ee42251eb96622950378b97a517f169dd6796e071cbbce7ad6358a1ce3b03edf78226aa1626951eff8e3e3c4e0329feb05ae79345939153950b0ce4cf5cf459f622beb0e373cf479098407f50ee027cf2e94971d01334475fbd92294296d85f46306c26331bf5c0155c98c60870d6bfc94f8dbe157583954abea4c49a82a2e0e0835d40227e5da07bd90cabe02928c52f1ba0c663e5ede2e1dd19f39ac4d141c4c3da68e3158515abcf2a7470e3cedd9263f2d5176cf73ff449c0de3bcd6a0afd338403afba37367af9b6881a8205c8c5d46d3fbd39707a0e43978e442d33f5e3f10e8dd9ee3efaf04d06de497dfcdb7d76ef02680fbe08a3aebc67e6dc3cfd785b130df264923e18db8ed4f97a124600a8e8cc2ed27e71bc56b7c4679ea12000cfe4944ebff9d883806ff53095d58ceb392a60ce0364a742985e137add5883a7c5bdbf45af6db3dfeecedc68387b6eda24aff34df75bd01e951537ee11bf25ca2afef3302c4734b99fb556ef00a4034b4ce1b79f511133f7df83703de1d4400a9bce5342a86c2341703f19292a19311c7229b58b0c70776a23bfb393d73eafdd86412027d784528f64cd8846e19e20b748e3f9ced87a33b981a03989bc9641cf281fac76e571280036f8525d278dd9d89f9acad4262d2fff4a05e6317a37ff32f4d5a0f548c04823dd370c09a9736870149822f5984c422049bc2351c7048d522f3b88b1155b13e479b640e4cea96557235ae5279ec996cfcc02afe88bb78ec23a255f354412b8cdd4ceafb8f80b88f1c9880161f3a813287476e15ad023f6df1c446b1cf812eac55ef46fc9950f0fab2f81ba830a89ca28f4699eba131244a5208f9d8900803702210bb458350292f50e98dd9cd163e71cb0ba403e99870af369c9e2a19e8b989b101e5a3148158a70759c9f955b9e39bb4f4ad00e1fe38eecf9640e8dcbf013fe8e1a1f466b23ab5da346af69418672d6253dfc8efcd59e2a41a5016d3b8ea86be38b7087ae603cb887fb978f63ba45f8241a9175035f48b1a5c43f4140e5c3711328e4d57fa83530acc0169c21b4b3bcc3f11fbdff2fbf988f380fef5fb413814b3966e7176b1489efbc9bc21552c1e844de36c90e4d5fe69f269c095ba8062af0783d7d1808613f06b1ea90e117a3c0642b97439ffec89e2ff2aa8297f5e49bfc5ec6855bda66084a9278167ee52f6649bd2119a77188d74df705f6ce6b801606f5e605e9dbceb468fee175ae56acebac41fcbab56018facdaab2936e966fb21041bbb8a35c454ceb6d9840f73ceda652f673cb07898a05b800ba9f1bc40133f4db87311a70b9b95c1bf4c7762fc067bc4b51dc7eb1a643cbca38f38770da47d3abe26050eb83a8000d83820a1dd8f9c9c7f0a1b4106973b2b36b3f5660259526ad635a8a08d9205121b24edaae518c9d4d8f8b037cc5f57af279004b896fafd4313460de7482d9c91ea4a990a7bcf9c213f651eac9290080f06067d7055480328cd25ab409d1caa27cd60aa1388625f2c647d2df99fee600a31776abde2007f5d0657e23795a15048fc8581eb736fb669f61ba787aef392dc77dd76855766f6cd47088db685e2a617d5c813f065b6eeeae8a6264ba413fcc7e5972e4fe5b7a5bf8f93efc5dd802cd067e194c667619177b3afbb70ff80ddd2ea30710ba5e230a415ab248d17f2610a1464dd7cdf110455127ca7d333d50353d9a823c5c468ecc2c76f2559c1070f832b676caa76492fca0a47ecaadc8a2a8bc68364bb75f28b2244922019ae21243156593f6ab4a30e03f98be3fff64142a85716d4916c041a378c24828017768f698eafb9203ba227db6720c7488754f03f586ff2b490d5109a16c476d3601f7649be72d440f7cd5a550f2ab34123241988ecdcebfeb224dc424c11a285def4177661b2e19bb28b781fa7161a48efa28a7ac6960640a4cbda48a9a95009867269058481db7e9822502accac11513129340588978dfd3770b73890cba4a4ea4d3bd470c703283d5d189c42c7f41cb5526a9532c2fd3d0f8458d47718e89ac0aa08042376607b62fc6dff8dff7005cb97d96210f89b01d5160159a34187bb34aa91e7d1a98a1d7c39e9088619ea24e7337a96cb223de0bbc2e4deaefcb86d2c126a56cefafd28c6b51f8408cb38bbc2cfd297e5434f65cd38278df0c412172f1b1074d2607b329751d3c4e3e6085d3f1babd386fd1a44c693f507b908034b4b7f0f279647bf01066be4024ba983ebbc378dc412d965dd249e3d66087711c15845e5167ddb1bed50046ce62d952d457d9c6a1276a6292dbb63b18d7c3a25765960ca71df084f18c756a0a8e7fa734c4ed10c40c835b73ff7507ba470e806c1b554fe81fedcee34e21909d37a4125c8c868a2a18152579d037ca905771b315e22b2561cf953baefa9ddfc0e20de4c37d99fbe609671137b8b5e8b07e5b7d81df36001ddc6078bb99b13ee163490f74556aa67a68e5605b391a8d32871f458aef4ecf6fe11201f2a07ba8a7340eed6fd9f1ba56ac759828233e661c4f8cfaf0671f6a2cf306434b633d9ffe35594a070a1e3e58737446b3b86d4610c75cc91ae0503585fbb3d59838857b83c04f3412e953ab1535ef9db31703b923599b52dbe97436357344b8fbd1f756696206457a7d281578e59735d246d99de52470da3947b1f0bdca3133cfe9e298f4e63935c3e6f330e223da608159d545a58bc46f734a5ab8d36178d69f99fe88e42b167a626abefd0c35c93074df6dfaa30d7856f5fbb327de8f051721c8ef48bcfbea5c22ad72da9961b3d660e219ce7e8216a29471939a40e6994d417a6c047e626813760fc57a416549776fb155bb32b76cb29138e467c2aba68a0471be1dfa51c21340d99e81a185743c225b3534bac9a9eec24da2954934e9ededd9adfcf81fec5e104e1ed3a28d0815e8f52d0c5e5b60b6fe4b9e26e5c8791468db6e619996a1683f66bda111976b54d607dffa626e4ff1f7646647c003b78b937a6e50bf186286930951342e4d951f2ed187cd2b367757d430096c5e3f3b12fcd722a9bca7ce10f91671e73a14f9653d23cf39753a358321058618cb5fa042320ac4c801fff032060e4d0a79952ad2e093d07f14d18ef09f6cb0f554d27452d558492f12049e99fed7eb247e5d6f7bef202e3a9a84cef47b23d77ccdf800a5a2d4dbb4211925531d9403ef22c9b89c9a35bfa8ba8065f68f12ea03cceece9021dbe6e2eabdc7ece6446b2487d4d0e38c35699e41c14605009985d30d3750c8fe00c84f9d194ffcbca8618504c1fc33b4920d467a8706fb804d012cae6524e3ebf117f6e6ca4691b4e1bd4ca61db1440fc30bfc36af5483546b666e088aa43569948686d7d2202fc338f4ef1483472e41534ba2afdc6d57aee49aac55c04924b6879ca6c65d9d920b5feba63baafa241fd063d604df3812f388dd029a349b9ed26c914a5651154c283a01b5c5505e036e174575b80bc96c7b357b2ee53d55490709147c06be937c01408e947ecbd2197f23dead37e431dbf7b9c0ec214a2551c5536c40c36cd7fd2e0f7179f4f208b0377f4598b4e62f0eae4fe6e67d044bfd0fa39b2d30ea05b1e0fa77cb4d44a428b91bf46454beca6b0663b77877142ba00b75a4f4f77ce3bb1523ee35a0d7988b959866601357cdfb7220b2fb2f777dce80887d535ee68cda62c3e7dc1f1f9be6e12205a3ed956e48482cc9d46102eefc094119251688dcfcade6e60fa918074871b8dc03cf32d226f994974705379b0e94b5c6a8627b8990cf7b089b4ae22545690c02bfeaeae62571160738bc81a1a8450dde6488dd3d9f0339b7130d61691bb52729d4cd36ef0167c4427e156cd53e6a3b4a3b207c8b7d7b4e36da136ecd4d77d59a72000220e11ad804450cd3b08d35a28b36bb24e1057b082a65745e31d110a03f7e0696ba6ef67ace927c1a0472afb27426e87d23ba9f114d6ad4814bb1cceb9502e32cec9a808309de34a5ebe8b0a87d143bfb5f9ca21dbc78ee87933c9263bddea8c7e987f0e3ea6b1fb4a07cf94788c462b1d3c35ef3eb3cf870cb07a947241e419ae91a30d1556adea6aa0dfa53cf63dd94d46d3665184efc1c96d0131d39217c58280d68d8193ab6ef49d0f0d305a23315352d207d28a0eda0ca97ed8166fb90a449505a9cd8e064c8a9a63d06d1daf292d285f1cc4db290c9abee33e02a57343a65c088e1903d6138007098813b4085f43fe33c9c9e702ac5d5e4d3dc21446118b4a104418b1ca95cd8013d13ef5996c5426370fdfb2239baca00444ddb5ac05463560b8dd8dcff526b96bc02895fbbb1d12098a4dcfe055532969671ab50b91b4433250c940a5121215712db7971140c16877111bc7c0a944cd9416589892cda03ed46c1bbb9656ccb2ed0c1568b11e198b78c87c2036c85051a3376748a1db185658705d6ca8ea12ecef0201a8410e368454eb7420a30a6176923219117e14ba4bcc01feca4647eebd96bdaa5e52f476fc81befb9198fe2d47e7a06878aa30a8ae55f048e65799aa0624f5e65f61d00474508c9d11aa3406672b7fc94db458c8957ba6a51aefbbc0e9dd1609af33615feffa558231090c2c13f73ac99acad9c5a082594f2dfa8566e2ec1d494f3342cf1f2e64f24fd6986aad4bbcff91407f06dd0ed531213e0cb6b2978f15af3321eb2d67193c9a261d4c9df6a66e1c62e226389c2d0e7c41525653cb68e465fe007781d5cb70b057b3ad4c0880893ac43c12ff0f1243c7e911fa87633775f5d3077143d39fa12d1d1d0a2be6f40813f83689bf46fc9bca26ade35244baa9e981b1fae0732ddf206c90bbe9779ac3817a565fd6839304f8900b40477b70b7035094ae9d1a93ac0e0ec600634ca6f43511038fb6110b472441894253c00dd1130183fa9b7219d5b7a1671e4e9c67a87780deed72594f9320cb0b7a9742f4799962d65b0f3e47a03e9752c919b69fc0b1e449335d69a95b6d5b99f2043680b3d5c5a44745646e2cabdb76b2de347f3d7d57e2ecaca04ab42e1d9abcbc02609cf440cdec85a2b4f87587b4815bd894d1650a5a1e0361f0770a5ab860dae583d6e5d606ed5162f10177bacab73405ca6aafd057a0e97f868a8a1dcbd610011e15267ed2967ad7a2d43217ddcbcca58bd29871a5623b01e0b7da358d08197d44964889d3a55428ecb562145ff4e08de110e82f7fe637080ace72e1e7a0fec6f9e3e0686c57b33ac18eec6d39b19a9ca0a223aeb5996bd95616fef4dba702fe45352dd29c8bd2cae03dc9e7cbb67c32daf6912a91c4a3d0dc88681e2b2345526ad827b9dd30320674379ecae587bfc1dca7e2ee61e9b09f79b204665aae03bb2fab07a0c2b6fe00a20c04320101d5e6025630301600e0f47fbce7b1af9963beacf534afe3c6039023b9bfb071633c01efa4478fc99b4d81a72086d45709f9616274ae0f5f3d591a267d2ef53e0c8c35d0d7f5d26d3ff89b90c0273320e447a886a4ac42ea94d123becd766bf3d461e6f47b3f9a60a84f181c01da8fcd3e71b693ccf0f9bcebd91c75897b157c9aa1e9415fc8cbc9587f7e9d45d041872859a653fe0dfd06296d1eff6716041f2cf45d8c091eb9ddc3ac24139d5a6cc880b22b726ac2e8671203851e0ea69ce3b898e8346d20b711dd1e129c305fdfc78fa19007a20a072f5314f0446a106e2235507f5d4fe4cd99de245acd1c4357837ad5bd7b9dba78903c4d45b28d1be07854998142fe25f2239b3c275f469ecc96153366ba6cefac3992a028d4455011c27195b2d95a4e8878f549b3cb1b23321167823e88a0c8c5c8041f562b755f8d6215518a1060ded13fe9c39a1a24cd2b312b9929a40ecac78337f91e7fe05920fdb810a62bbcf373ca11feeb54d971648b727933c7045e6c996666c19c450f541b901e4a9f23e77593dc141b44aa023dfe807e2977090416ac1840b581380732ed1ce010318569ae162ce0275edbf97f0f1cdd42eba553f764cbb5bf71d4243b42c2701f0e2b6bf1c7a84cc3da52c7023d6331b546d3e4aa3c0836514e2404626ecb949c04d6c269f336e3afb0143d8b9398aa89e7340896f95d7be15ddd989c0587b3aacfaabc295159eb7b3ee8e0cd93af07edea62a879289e3ff0f74997f6b976b130db030681c10274b164f54803f81d37b0ed4e0aa530413e48374ac663ac4abbdd2b920f395c05ccf49a24dbabea74cc8098ec883d9b4dd07d373c69dc7092b0e6fc18a892642001abd404dbea2b86ff029dead429ee542755aee1926456ecc8d42a96828e2b1fa23cd980de869873d43a34f2f9e9870e06b4b55e3473e35b65fc28d50caf2c8a157ab143c4451e629c5ad53b2cb1474181b1a88c76f149baabfb7b4751474c7d11850b0b165b93c4953acd1c0b4e15b62fc1662190b5aa26496764c6accd168a2120a97ab33edd34f2e9721623b9590dec495fc9895eb6856e26f34cf415b4ab7d5f4b6b7fa9a5a0d663ff6f68669ad7fb8e02c0a68a04c6c696d4add6030dc13ac1bf88a6c568028893e5f54d5e2cf5d87520bb5ea07ac405ab2d51c89fac38394eb6941e7eaaad9632b25e298914dcbb3f4ffe2dce9f3347b0abd47d4a65d36f6a371c5cc9d8d24b00c4a305a28bd4313230aba157577413d34d16d28f28d950a613be3f0d29c681e4ef97a6855254cbd896a1539867485482a5457310b3a64dba7be6ad6ec773bd617792addf361cd57417649574599d614ba7f4a1011eecc8bf6cf4c06400983553b310f0dde1590bf0c14c632b56af83fb18d1979c375cb070f329c3860771a64bd71fb3dd02b57e1883bbc90391a1b69a2a76e848f68f1d6cdc7941c62e309078658dc719d53b43557c4c7b998f17c1b7b30b301b573e3eacc17e457f93750ccb78f114b343aa1e8e36f32adad2a309cde4050e3a14e4eaabab86d88c2445c8e8c7ec85c1fca06804d7a9d3b0a42cb5c5c690a65e87fc6d13e7a5cc967ae929dd827f30ed4643e243f484b37b79a3e18494f12657b50aa2cc859f2c06e816a4ad89ecf3128ec64b5956b101d635b27ba6dc32368ada433a10a56fb03be1e0ac2a26c6dcbceee442b5e229149aa783c41959c211a090bed009723887a1336722255a99cde68c0e52083238e172fb0aca03657e43d6240867367e4fdc911e0c6503a6007bd781380d1fd8c99778d166d71edeca8328f7cfcf793454bc8e4edf121be7648ef53e4d12f80acb821621135a2c09f2fe687327032061e120b7802f6ac5b5278a66456baa27823c08291d26e7e6d733647588ca87c0ab191971f6c604a4a2e0e4bc0f47f7856f5416b089fcda0a57add68514cc6af2996f91d72470fb2006fbcf1165a17e2144f7da4ed254455babf1d691827b19ff09ac4a6706e8b8a585b8d2b67520216e98f0adfdf176a94c0792fd4f660855c817994124bb57189d29d01c086fdc8410c5af72763c20b3f3925e92b1362018af8b3145ff5ceb4f84fa51cc6ce9fe9275ddf27949be493b08e88ebe46e46f19a438ac00285293a9bb3ecbe85f3e5bb611e3d331b8cc77ed21542d045f2f8123c6c0f3113c5c4aa4d0c02dad2fab5317d386f8076fefcd03b3e385b16f44ab20613937e022c40e07a6428bde0cd683f0858fbc9011e7942417cdf0cde2ed2f2dd4739ab926d2c60dd99ab35303076167f5473318c36cff256ececaf24f9afdf9fc79329c2e47023527339da0e41fd30cd76538df2eacb433ed806e4d70d3a3aea8b37dc454d894e0a4964b5f820547e50761ef0faa75ceec65ea18ae1080cbcbcb466f87184e71da4cf4e672496d544a02cbae9bf312f4457ec35bbcbefda46991f711e1697fa112deadb583e7e081fcc78c3fbc1d327cbde15e5db623648086ec18eb90ce848c9acad502acb6d707cf8aec6c3a873cdd44cd1830882cd6240d99fcb9409708aad11f54d046b5da2d064e2736c51a80091ce3856f4561045c8ff359671c6a584964d6731d7089059d00d790563f6b1d87ba114fa477cd55a801fcab051025fd2e114b124f64a689832a036d772e29e0c6384d0dd619192abb7c30226683a444ed592c3b78e0ab16d66b3d733f9e5101ce7e4b75223c2d8bbb64c63dad3f99e1d008880a2737b3b997551d749906ccc310128861f52c12a4f65d8f69ec0d5c151c8020e3dad873593150b2d85733d7f7c80fee01081fce3e12e811d07c872de7554267c6457ef096fba03ae962c201342db70f7a5de9b543617088a07c4cfcf4d602e66f5520943ad31f9c9ecc2b6abcf6567cd370649b5c4b936516e8725a69d48d954c936cae1d99e4f8a1cb4f22da0829c45619f31c4a5ec968e581b41e3f9edc1569f23b38cee60fa61b55ac2697ffc4befe62f4643585ed089be43373f9c5ef8fb0a819ee8190ae7e1971a55b5773f8004c5c0d2d89b6ba4e1bfa62299adcc2cb35e6652804606c25f08d574887ee59ea4901125ef51234c7328cf48731092fec547fec0207d9adbecd6c845dbf66c672e6e44aabc8127b435ca3546c6c51e90bed0914bfe2b97db7351e1d74c7bc37e8dd27a90dc628fdfc260aa8714a0adce22db5883d95f0e4025db2ad5dcba8790a431f71dfc33e171f9a1fee8adad98716f8b479f4e3a11d017a70aeb8fd8c4086b25a76249b5da4e63ece631ee7e0520ceb630ddf8dedc69b8058876ef576c2277efa58646506805e7a6c7405e024518ad4ef20f7c6928f568ca3ada6a4f502e50572bf06b46b110fcba75a774c60757f6d72dfcf14d7d3c12932bf5d86d058cc7295e02722e6bc0c200be2953726d10ca7dd7e825b14e42411a1f706beba0d17394770ba80b332279e2e62fd93e853a175d23d11b056cae6a978d19018d05ed47a735de5e845f7ab863e3f740f0dea1cf2f012c5ddda3a7ba8b299c8d89e7255dc09f1d45997f132a08b4824a5d9ca65cc278639e2f5c3b4e4220159dc18eacb0efcd8e0347415bacbbc057db1f156020719af482e52493e0dc72eda37b06d054788c51676ac370db7ff13d3aa14de300d9bcb350366611299ebb1e2e15a29c8679cbf9b9210500cce9dfaee8daa0829c0ff1093ab929788185f708158855d04b599f0f52f5695eccaa210e09ba7c6641676b2b43aafe28c9bd201061ee9b82e4e142015bc606a210b7b9e904e4d4f7a8f21ca1fd22b46c33eec8c995598330ad10b22c4852c0de4fc3b2ddd9d63393adec7442036942dd75298333c9070c75453628dc316781c6ac741eecbfc836b362ad2824527e2dd2f74c21c6bfedc4d789ce859ec67457dd0cf21f80392c2bafbe66d886ac231c341029da02a99de68c66f29d73f90fac5fd302977b4985d6c7ef68eebb4da29eebf27b93ab72dcde938d46ad14eb96d90f398016107e1810afa06a15c327ff44feecc2ac751a1f345b965203e439ef4cf29ce68a6266621b2d6619949f37535dac122177f200935239f42f1e9c4f8663607983697f6590432b3b0b6cbf92f6ca04a43d459bb6bb2d5ccfe01ff8da2c3b48e68ff12c9bdcc81401b4b2bd4895e9df5b661f076d2b783167f0ef9e6e2cad5c3ee77a6fbac18a98007d8f8057e91dfba196c77695f5beb20895747aac63bbccb6ed8dcc3de5fc3db67d1f3f0ab2cf7f60c69897eb7823a16a026c4e82e1d7473e7b00701388c6808f1016cf8fb76b605e8f3370b591da17d51e1b4e0adc2a1b3080c04aadfb3f1d95c763135c23059ad023aa17353f7419ef1737835d041d67290db070c8a70e9a974a69e3357a9aaafcdb388e66f524c91f3c323585b8bd1d269c39e54a932d690e9e29d6692b21010af5b23880869a47f4cc51befef4334314bd5327716d827acf1f458614d1eb68d6dfd49557a57a874ed14806ec92ebeb7ea0e33f0968f94e38e8456246459fbe1d8a766a375908f8f556721f84ea115fb5067ab756a6d0771fae5952d83741fa7b8b59ce072470895289094f27cb567c5c431f250bf07df2bca1761b2855897c9247672e3be936319078285bc77dab8e2d86dfcea8902e802188f247532861a65309468cc68779d0dadc8cb0c28d5d72f0b841f5eff04d375f0938550d8634018f94bcb5cb28377b44eec0fc47095da638330f6cab4ba069ce45a0a82859aad4a30848fe00e0f0604e555df82979ef2e0e4fac7d8ec2ca1ed303db95b4d8fa2c2a055ae57590b3e4cc2c03efdd400549049478be2493e62dbe361c3b251a5ff166dbbc3711568453a821dd1bed4e90c03e7876b1baeb7e4011f6d22b71a28b2117bb31592418ee7961ea3c88d19f9fb10f5d21142f70df34e74899df6994c1e2eb8d365cb7371c2808c9da9dffa304dd05a869eb1d4e606635cfb98d737f5fbad6b75eb11b4e46194fcec6a94363fcd120898283d9e0b47bba6c64b6e575a57f291e1bc63bc16acbdf1d22ca10548972e58a4ed6ce3c7dcb7389515b65e11ea21c1baf97f74569d25660fe8ea112d665dd7a3d0c6c28ac8c6247a049241575f3e85578075236c9ab585d8a12530f683b956697caa7ebc84bfa607e7ce2b5b12cee515e4fdf9e5f82010ddfd4cd6f1cd4c11616d88c9dac17cf5a3c0b481ccd27fa7bdf4a0423d077e1563edfd633d73e20d9b0a3ca8fba0d20dc33a810b54a8f78e4695e7ec7390c7624fa30ec9b30bc8a1a628056f0ffe9f252bb18b2d5fe784a1a67d7dcce327e4ecab04d42f908a1f90db38ec1410aab8096eda094e78f405689568e315fe67253172d6cd30e5aab8c85b7903d797fd695f22660704b19c4ead8289311164effaccdf34a2c81df2bd68ec0a379f645588ce096714722328244af7e6cc3ac4a35d17d12ed9015c14518f4ddd7139d8f2fea870fe2b09d9e094541566bbe29e9dcde5226e78dd8ff0dc453c4f16b909c71290ba230dbef136365ecb86f264d4d69bb328e3e3e2bf8a7872a946237715fdca89cb5cda322be236e80f2618cba21385386f29a05602994428cc5d212ff69b8bec6d98a25a7272f3660d36bd20ed4d230d783cc20c6349cbfa7409c4b9c53e86edfe9ccc49360127954096ceaf448eae681c251e82197b46c2adbd3789570af2fe1914807a1a0d30c8573d1fdf006b0d45e9efa80a212c810d5ee3c43e7d90b6c8d019aa7478d8d0fffbe78643fc759b9d9bf88442bf73b588a0263a0c72c18ecf4508848d485930a6aacd7f31d8ab7b8a23c90496e6179bea71cd38833d856de2e56984a7649de4e2273340fcdeb1504ac7e2e03f2ccd4ffc94a01d4ccd88daaf02dffe790660546f3b1eaed115e2a0a9c91164bb715b46e0cdc9854edc1e44e4009d40adede1ba50a00ca95b67388edb915290e04a76f1a7fcac5dba7ec50ddfda0b4f0f7dd7f918f0928606d7c13ddb421f18caca4d2a6fca79756e3b1cd5308a149425042ab0a66ed58a47f77bf16317e10251cfe1196f0915ec5773a33114a2d52f3b221f0678df46af4e9db881146271fd2c9abdfac68e6a7e1b02570efb0c62629d8f484b08dbfd83c0b98986f67b8a4f5156abd6feab9c10d6fdaedf32eccdc6b66b5675c106eb2bf3fce547eb5641c16e90e21840a1f6fdfe1191d5d1f2941aec5876c65453041114209f04bed9af2476afdaca9492bcb1d6013b739a6acbd59a9567cb80cd4c50627cccc70358a53a23be55ebc040a8a15a80d2a779baa9bb30617dd2cf2e296253f60d10866fa678b2bc1d101dcd374d731f83337b39898f0efe341e553ec82429b839fc724035d1b38f2ca25a7b183b498a02ea51823b7365a9b11b77d40717665b362011e9fd5aee680bf51e2a5c35a25a6312a615c4d88ba240304b527676b34f340043dfe2e2bb1bd7e6e46461bc7fa606aced50946a45a47d31fcf0065f44502a416b734cdb44b88a615de6dd2e58ce0adeabb32250cbdd7aa2701408bf8a4ddaf3ec482467e4aee1184576ae98b534432075d82973e2acc96ea816a29ac6459331dacbd0db05cc797234d9428dbf5f96cb6ed7cd1e2d7033a0e6a4af04b04c31d5fa974ad1e7cf90ab0759988b2b0988fd7410d3c90301795c9438c8cb12c17d8b3bf5702f7bdb2ec138156c5977b1b2a6d30016413dfffa09195f077627a7ac99a37caa8db266e0de651b3617d9be027fe6058f62c3dedc9d77cfbe6a508b37368135d68c48e743674a88a098047b2f5d6718e97b9af2857672ca6166e8161c13d763cfc4a464797a8ff104a1cf92e59c589d13f9818dca513bc34a2a341f6e8659904b4349adfcea93c1e088acd7244d78da1c351fdeb9aac7e33dfa238646dadd90932c8be09d820ac51bf6c1b16278e8f15c94de7b5ca0d060c2222743db24480e522a551844914f3ca5b88a91483d119c59e8e631ce3e497042e61a2afe17a25f7ce2c255319327b0e23b5b65100cc4acb7583684082995b9fa8e89b8effedef20dc3c56965003c16fcec1d585f48052317c2757ed48382d3a243c38128560833f2f1a37742320478580e37c3b2e3e6dc6cb9871270ca7ba7aecb8a32ee50c29478befc4abcb71f7e2307ab234058c909ce7c36c4ad22ffb9573a9f73b0bc9097cf4f9a9ccb4ae88243ea982559a157434b97595e49cecd72c076766e289f2e78e07fa1806de644293dd28e2cd74c7290bca4d20d6b5ba1f1d68c2c00348a602f411b9132c9f798aee354149f16081a91ca23cd81a9b37ff119bbbaf57b7167a9f1ad02cbf932636068e77bbf4d8a32d095d7db23d3a3e4f80d3a2c18128761ef5d5b8c5db6a4037103a3a54b97729c00bc587997933041d89d1dab2ccbe79ca67ef9254816a14cbf837a75da9065a2de40a89f92d1725a5607587e9bb9e91b21d03fc8ddeb0d2bca13de2cf9faf64662658f0edcc4eca233b5c16683105854917d9c6c50cc3feb0df78ec0ead0e02e44b22a9eb7695d435726554a343546e65be6c81ba56973f53987a6e868a7ed91dab46ef585ad8d1fea502f27fcc5f47e806cd73319b55cad419d90128581e79297edd9a111eb8c92cbc9cca61818d7d0b39dced9f0d75d48b9e9cf52d0aea73ef44833d82f4d9b7013cbe931bb50c284dc3cf360d218163d578bc0fa6ab613bf8fdb2d735e6fd861b457b2082f5ebee868f27c796c1658f01f56868f3f47db88953274887c7ec8839167017c161ed6b66cf8007c4bda04722862d7d40d8fc0971a249969f340500d0b35fad7d610da452b7a392f8179ab0af8cd7b4f662b4df83fb055aae49a8ad4d81bc51dbc10b15853f782c7fc7c987fff707a09a6217e279991b9668b3d5fd908bd7eb6b6525edb781b8d9eccdb0c6a0e7a3239986d07cf7a951d23a535796a997f8d8ea502f51cee795a2d9f90ede752602d0f6a00f79796a102f518cd214aa3e5b11df5bf3bf4b8b72cb57e330bb96860cd632247af3db51281aa7295c7a16e12649f42e3597ed2a3c20fb41a2f79653233bb924cc5e0dd7641e31258635ca5c2580c1d22f0f9ed0b2d7503ba2cfae2f472ad017b34c313d08a9ed136aaba61a4d3136356cb111b6a37a86633db1e9016111df0efdf28e0ef24b1b3ad41245330a9f2d5ca5343cdf4719d478ac37c53a4f729bc332cc0a4d15d168aa72dc58529f92ff172e33bd5c23ad83677aeee26a652b414ec98b0279885a8c4818abbfaf33d458ebd272a8a955985e79bb6053c33a6bfbd5edf06686d33f1bf3024d327af33da5916bb44c7a3eecc96094e95f637926762b8257ed5e7ce662a9b0d0c0a6684d7d919f3e1d14559931d6c50c550e86b7d8d9bf4b5855ffc0b2b8a444ae40407838e4bfba89c217a257a47e6c6e0732bd7493a649bd696f51ff0102da2472a559bdf1f81565ba6136e3a6c5be3db4beba93ad5db2bcde568d6ddbaaf2ed67135b63b83ca573f0ce0d9ed90c0fce76293e7c46dbc85cb84450392a5162efe188e08162ed5699b6d84820dc727169045cd174376a5c93009473ef6f3489ad1d9c08331ec38f60b1f9fff1840f74cb72720e4b238b6dc83e7f8ddb18e23b4daa23c22b9aa57cd111f6376f4c4ef97ea451aa1ef72b7246d2765857f98eb7c9997c97b8f397d28af5797bb1803b391fa4ba8a997c94140cc5e495c67c5f7ac0d9ac974f1b0b03032e1c3ac63820e9659308041bfd3c3186ce693d7371f7f7ce65a7e1ab84aac0fdf3193d0521ef65f44ed786eedac2501e9c43f165af4b5f8c18866e202f3dfa4a6aacc7a5c2ff4a62b16bc951b4889129f28747a0f8f883a23a0992ba575b3977393891c2babcdcc28d6195a194388f9756376dd82d12b2e7424aef9fe123f1a9d2c50d80e66028b105d2246d89627e08fb35f3e0db3adf6d4c0671dbb9aa12d9a60f271679456dd4f3b22ecde91b731bdca5c1e1a2c3f3fd4d2616bac9b9a9f4523072d85e7ec7d3e48f11c87ea737dbe27bc26f7eeccec589482b61bc0d129bf604cc1e005f2a343ae320c993ba5fd3c76c66fd100550ff3e270252f097333c1e22f3879c3868f08ebbe262799a30840a4c844b0c281504efb7d4e1fc7d2993044d646bb650665515f27f515e8d12dc6b9990c3caaeaf033d9d28ce33ff835030b0e8824d3dad981f6c3038c44553d9d286e3b4aaa39a2cd41e51157fc2e8b7d707778e4d3c24981f55d42dff971cb36a25915fca49b795a5f31fedc3de663d82c07a04bdf18abb15aae6b2fa6882160fbc88f008e4a4e277c0ae0c0c596e78450495c8030a5ed7ff787dca5affcf130d61edadd11303d8ab4a8286149d2048431ecb96d91f45491768138b365ad5acd4c508391c7c6e30879ee3974065fe4f6f331b1c78fbe4fefc083db2f29cfd1c1ff8c90460b07d0dc60475bfcf93fb1c2e7849305d2bbbf663e90e677b9defc67e4dc5f648725816d78658b429ac84f1d40dd6ba010c78936ce1e4a362555c8073e241492626bd8259832cd8c036ba3671581fe55cdecb18d9ad7777c22c7bbab1882e9894c0f147b22624f8531c267cc8eed2a1cfe82de619eb7a0c758648dbf6c57a635a0bc85877a896381621270afcf14f5bbfbb715bd3862c05e8b0fd722afa9a8f94cd1708117b5f16f81ec101e32197be68df415527074e6a5f86331293e3a03d5cfbd6f054e4a11be5d52c17bd4c20edeb33de0cdcbb14093def168fb9a79a399a53ed5527763a277805837a058063d52e4400282d087ab540259d3027e00200a9d11d858987efb9a2142a9e8bdf376749f9799d8606b88a9d6f41260888b0f7c1f04151d4525e7be8ea0bba960e3541046ca718207809c51892d127b071129b08852aed46202bc5cc97ac289d9ff3139f70911fad723a11ed18eda1faa36d75242b6c48c938bb0cf9641d94d6cdc6a1299f5f6eb8e023d98cf4df487ce341b192071168869f65e5cd9ee360c16f6d1b2c1da5245f74f44b52a4dc9e1d8372dc00ccf371e55a662e0b059bcded75fae3acb084d2be07b877a143efccd2237dd3e1ac8dfc26a0480326f18df706eb5e699b8dbd8da274d98c9b32f2c07fb0bcc8e31ad943b6d10c00bb9b593160f88b837468a7a30525ffe7ac4024c0c8cd0a2fc76d14354e8263deb84aa481f865765d8ba0481820322d27615188fc67bb38089772634ccde8be1e55d0cf5d5043a88398fa82b1a5358c35ea6edc6709bd7d4f09c59d0e921a01773f902b94b44bb1544fd017babd386bd14d75343a9b0820c5fafe40c5bb2901d1015c4f4fcc5da3371abc244681e9bc3f7de4dff0f257b856b1fa0afdc35427058016c15af410e2d2ea1cbc3ecc69e721f7504231b18de0de51db78b21663c87248ede816dc3b7213157d4134f94d0c1ce9f3419ca49176562982529f30e8ab5378bd688bb7565bca532181038494c9d035c0d0335e47f18388bca1c8a64f4aafc6d6a4941ed701154b5e92c27773f91cce38757aeddece45ce8a32072bbd6803729d1ca4a0aebd21fa1bc76956ba5eef55ea425a3cc792b1839ce048154ef9108f956137ed0a2fe84e9849c2bd6906262c6a657f2c340919a82465e872fd7eca721a9d45195cedcd5548cc6473c1e4297209e8ac63c027a3beae26a108dc5296ec6b02ddc9d9285cd737b9d9f4da5153d5182bf643542b6eb1903fdcdc6463b481feded872640f51a230698d8cee8e289f2765264ad21768c383c5a88f2157a166af77e1c65835a56c995fe28985508e4ad02ce7085c20d3960f26439ff0000000000000000005066a455532fe216524a191928814205c89691524a29a5943e1bfe0a31f1e9ccc4a73313bf662916b4e602960e180d5f0de5b75c8178c9f6c2621af5b5e9195620abdc9767f9b78ee15581a4e9316c121156571a1760061508a34fb34f572525f353209eb2afd9947427af488198db53c69d4ee7c14633a2406cb3906259945d9c4f043870630433a0404a3fea3cd6a9cb6e7a118617376e2c1707408004b858c0ae2960c613c8db7d6a66aa3c63943216f04571c10c2790ae92ee6bd6e734ed8c2610eedd33b75f57b80c7b7878dc3043861760e42e3281943789f7e77abf60324b2067b3386332a528819c626b964d6b995df71949205510adfd3925792ff306662081944aa6b39c548931553a02c95ffdf69208f16fa3110c7b79b171dd776f173bdf281b5bde45fbe31945206d8af7ce162e43c67e021e1e3e8308c43925b282d2928b1fef21cc1802716d64dc94567aba6132ca175bf80c2190fbf4896a8bba2b3a23e30465021e1e1e1e37ac7107338240ead7d66c5a7492b7dc8bf2b185c70d66008118ea93a531cbcbf00dbd193f20a86b66d5e8ff830d81600c0446598e3170909138c307c4986f6eda4a8936b1e90139270b3ac5070d9ee3cf318307e49c622fc61719233bdd01295593671cedb662b21b621430d84e30463360860e0823177be4f242f3e5488c1374e1e1e1375a09337240f6d81efba4dbd272c5c3c3c3e30439ca6e9c20c7e18038974ca8a8adcfd31e12e3045d9c20c72561c60d88bb99bad5e3def1531dccb001d9cda4eb65d99b68f7140b336a40f6f16cfb4ad93fd9456940d44b36bb3ddbfefb0cc8b1772c68d11ad3f1575519902be5a04fb4d3299126b52dcc880131e852971f6af2b2b85498010392b8d9357da26b6465b09e30e305a4f81e7b77647a4fc1a3335c40b4386bad0dd264dcde0af2e9b10d992bc9d456aab282fcf9f3c3550e177ece0f3631700c1c135805b1e6d5c4c9464d1f376918e82d3a54417ecf27f29290d317d4138c91230c92a920bd89cae85de9e1bf2f1e1e79c3d24880a820cff5775d3a254646a87b0a82b8faea18277a5ef7c1f1910341c00b310ea046823612a0173a4c418cfbf32b11ab2a60630b1b45011b13e0c2067f2106185e2c133a4a410e7661417dbea6cc225210f64aaf4fe33fead8a3207a9096f45d8b560d718728c8264f55d2313f2ae3cd5010ed329eaee873176b04054996eca709cd4fa6958e4f90aaa2a692a7e9f333e33784d0e10982289df456c8bc54d37cb0ad013a3a41be504925fb6c4135781a600131ca38280137c428e3a063850e4e10f4bb6c88d24e9e6326c0850d1b5d7081b60952cc51f4bbedd2e3e8d782d0a109c25d0af7cebba7d2e2f305f242011e1e1e1e27c8e1e1717b821c07858e4c90fa4fa7eef1feebfca91e746082707f2657ab4d597b2e822fca78ffa28431860496141d97206f501bd5fc96a1473d68021e1e9676850e4b9047a91caaa25ccbc8d680f64a106e33d6de6528411639dd9f534a153fe89320484f175e3a6bac7b5d1d92205950dbe67b9b37084582a04bd6949415d1713190209eb7e80f32f7e73c8f202599c23fdc9a0aed6a03caaed042872388f2bb41651da5d7526e44e2bab66a9daea595399a96da64756bce39c6089212994dcb5788238c1b1d8b20a6e798f286677baccdbe4311e42064dafc965cfaba1f6c374c5d5d8e8b00076e948e449037db9596c632697d2142afb072cfcf9dcbd0750d2f26f7a7d9193f04d9bb74e9cf1b4d6a1695dd30438721089fe2b228252fe296f6f030bb71851a3a0a41fca0395e733ae812e3079b18608cf171c38c8d31021cb8f1810e4210763f5d9d3c0b626f6932740c82e09f71e36d8636bae0c2469a20c826e36a0e274c8b1a9d4068f3267771197779adb2192d6ad40a6b1b4f7cbb830e4010a47dd60f9d62760a9708787828093c3ccc6e9892e09c0b1d7f2077bed38d5391b9e2fe60435b3f103dabd77a4fe79199e90339588c9f9a7e9f4cf57c200677f9af9c2635fedb03e9734b78c77e1af1232674e881a42c564aebb490fa191d74e481ecada9f3c7cfefa73b7820f59dee6bf7af3fcbdfc1958fafca0b53599def1ccda6e3a888b10aa11d8826c3536a3775d11f3d3cfa8661113aea400e9f3c9870953fd99f3c2c74d08174eae3f769e444e54cf50c3ae6908a2f6f96bc6f53397c3958bea4f3974e51138742cebc4b64bdd6f67236745e0e57d6dea6343810e62e6a3e697ee244e9838d04dc051736c8c0005b023ade40ee64297ee57cddfa960e3790a3c8144b54760771aba30dc43fcfb15f6f3f6d70cb051d6c207776d39bb2a99751625f42c71a483158b8cce962aedff6e3064281176478786c163ad440cc4cc22ba77d0a6975591ac8712397546ee651e8400361b5ba4357cc1e947c2d091d6720fec938f9d3b9e8157a78e821a1c30c24cfb4ab386a6478bf6520098ba2f7978495cedf410682a732734fffdf8ce3063ac640b470eddfde94b2982906f2bf29ade97277f0a485c1d1d7af8bb3d1b3525dad58b23196e3664ab20e3090d3bcdd9d4a9949b6e7e1e1e1d1374c8c05c398a087d0f105d26e9fecd339cfd6d45e2077faacd6fa31952bd9d105b29ae54ca673bc8edf1d5c209a2715279bed6947b31d010edc2041c71688412fcc26253fc60b42811766e61d5a48a3c8e9541dbd47f7c15bf066a1230bc4b520f341d433569c0de8c002d1b3ae3ef462acd9f30ac48a237306b5417fd3b28271f6c16352e3bac10fb60e444715346bbd90b3ebbc11b753dba472d142e3e8d630000109f820a330e0838cf2418c0f1d542088a7bee81b3c79673b059290fb8af321bcb46b1f6c7823e8900249682d65db39e6a922aea0230a8459d9bed09734c91182023929154a76a91c848df804b2069d7b93e9ca331a760231ab79c9efc5694c232f44e0f8828e26107737c8f451437ef8eb50d0c104e27b89c83caa2c764f642c81a0c36e655f0999ab692590b4fde7dfadac29c54f1288ea49a6e4c982a5db4ed0810492ae4d99a28677994bfa60c314741c81f87da1f3293a8d8cf5075ba1093a8c40aef77eb11cbbb3a7f483cd0e47471108b2b37a9f670e672a4420490dfa4146089dc57f3d323a8640f8d297c74ae8517be2c02104f2fd9812f29dc6a2a87cb0b505815cf9474b5f758cf2ec83cdc1e80002e133e3c632fdfbf60c087e40dc1875c4b6e6ef2e07226343d0e103b2694e42c356d8503a8ac62003c7079b083a7a401c1d7d2c830a15d7a40fb692a39c4b4b1ba38307a4f40fda3c6887860e8e086477ec80985ea1938c1b94bc13e1c8a176800e1d7cd191039257e7bf3cf23d55c73e78edb10c1b1e1e61e0f02247e1143a708016992c868daaa2fb60e3c340c70d4e1fc3c8ed86decda419183a6c40ecd0961d3c6c7acf78470d8e13693a25397ec9fae04174d08093d1e49d74d098435f07898e19149654efec570919fb603b0112c18d3170247f44870cb45859c455c6e6e07eb0dd180387a10f53b6f0f0407544470c4af1d8fa90bbd2d770bd0306c4f57879f38a9cc7f81f6cecb1c516362c60a30b2e6ce431a1e305248d1963d7269d7483700215b081001b5bd838808d09706163cbe8700129a8ef9139a58d65c662e01823011e1e62e018e31ca00b2e6cb8bfe08a5610e49e98b824367408a14107c716e8e088809711e00a5610473fce8fb6baa084f9c19676ab2077db9c38719ab48840d05c783146175ca88268d1a2b66e766ab4cd1764f81807381bc015a940c654b62c47b7bb637453a5b5aed12cf27de60cc115a82046fd4b4179ea98a5995310943e65315ceaf22c4261641739101935b8c21404d9521b2a9b2ce98281638c9436ba5800033ec8280cf0f00003c7180af0f0c8d186c611e0c08d2b38714529c849b482344fb66aba2105415552ba9e22bb3ffba32067f915993dd2aaee1205f92be7f45bf1ec94c87cb08582e09ef5cd720a6aa784408016f0f050c0036c6c6183011038c11838c04060a485e10a5090aec3b4cda6e557e59f582d09cf993d95f3a88d3d51b8b777b89c7e8aace82769e6156bda4b067878f00caee804f974fa929d9d64f2903fd8ce1738d28d138c91a36d74b1001b1e0ab0b1858d06140878788851c0b81b5cc109e2c71c4ffd76cd869d3641d02396d9d24a2b5b2b1a5ca109629c253731bb32b5fb836d8b2b3241b41d8b597e4469365583710526081b9454b3bdf9ae6c8be08a4b103d553c5776364d297eb0ad41e00a4b9065f45de911faf19f53707ce1e1910381c0c3c346170bb8e1e161630b1b7a384ad0858787878761c0c3c3c383718c1c62cc48c2159520e72cfabb9f4dcd5587c628830c1c5f981b7d37d08729468c326e8800078e2ff86c74b1001b14b0b1850d2e6c74c1850dffc311e0c00d125c4109a2e5e778b353baff7426413edfb5119df64369e3701936c0f0e2830c0f12d8782ec346a524883193d4b5bc6d9fb7fc60fbe28b62320c059c5d1109528efd69cf919a37561e010edc60c1159020978a77d0b8db98dfb7402fe28a4710b345cbe78c41c578e5e1e1e17176c314718523889a9dbb9dfafcc6f21f6c370c677045234867a92e6dec2e86b83ed86edcc001821b0d832b18412c1b5d3a66935fb1d5079bdf1531b8621124fd665fa3b16d844ceb1441ba75135e1fb468539e4410739a0deb9f46db7bb8acee866104387083035720825c191a3e0df0f0f0f0503d04295cdeb3fdb81c7f3443906ddbd2f695b210c4b859572e96cc9f6f260471f7dad4eefe3ee4fbc1e6387284d1802ec0c03186020c12c3021e1e685bb86210a4289f7b263be64bc9f6f0308804ca647c2106185ea80bae1004399cbabad8cad2ed9c0f361084e10519639461d018370c81e09082b8d8c206066c6c61e30136b6b091a30c0878788c8144304601031d1c11f0f0f0f0b0d1051736caae430957048224e684dca99862257d7eb08581beb86110096eb8691b20b02c733d53f5f01cf5ec9884259d74b5e793678e91430cfcb8e20f64fdf85f67233f10aed3773e6d23328fa90f846bd7ca8dcb39d5e10349e3951631b9f7ddec81147d837ed6349b2989f440fabf1e696e2d22e79307629693f16d2dba8bfef140faae92a7ee2b4c66ef403435426978b61b33db0ec4ad2aff313d9d82ccd681641b5267442b6b4d3a903358704d93efe1449d03e9fb3c9caaa4419a2c0752d8a0d325d3baaa36e34012a6f676225e3e427020b95d8cccd5374dfd0d44f7b04c66b262b4760349ce966eb47deb9cc23610e3b38ef2cda64c85d940b664e27f09dd35c87c154b9084a6f439abdda8b312841911ea5641e65219258817466326131e833c09825a8eebe1b9fe93f59220a78a29cb7278ed1a09628b9a7d75ff9a982041fe582a7c296d1b76f4088252959139a96839e4087255fe0ecbb441a98d20eda5775a58380d0d23081b3d4bcb4bd7a9fc22c851f3d6eca6940028a2f490f2f5994e04a9772d638ca5ff728c0862f4ccf85afbdcf01e82bcf95d25c57206a91a8224979d3296d3acc90a41d0a7353dc9a44756aa1082142f9bc6ea385942832096c9a0b369e48220794e96e7bc130892d0f39847cbdfaf0510c4905df2b2a39acaf207f27ee51876a4bfc5ee07e2a8786a3ea994edd47d205877d2caee96ccd37c2059a978cb145fcbeb3d90cd3bc5e9cb1c33d67a207654b7187b799fc479208f9b502f736a54cf7820df49f5abd821dee33b1074bb5366114a7cc576208ff651a63cb78cb875208c7f580e52cca449e9402c4d320755fdf118f53990f2761a138d2534a62e07e267ca7022836cece971206b8c4a42933ef93a1d0e8475f51835232e84d0df403675ef687ea231e6dc0de4bf58efdc31b65fe76d20b5e932a1ab8207d59c0d648dd1d2b43328e999af81fc9645565fce2fb75c0d04d7b2ff12eea25f791a08ae9984b55ba593263410538c4e55a9593e9ace40b6fecff953e9e91232033149d7f8a7eafae3a80ce4cab397837f5261476420aedc66c813cb78d118c83f629accdc4f84480c64b34d4aa7066d3986c2401cf114efe4a7c1404e9f3487f9e0b954d35f2058e932719983a966da0ba412a182da4d71bff4dd0592a6cb5c49aa2999539a0b84cfa27452f93fe754e92d9044c3ffe51bb51be4ad05b25bd659bb8693277716089a44d7e6583bffb8b140aad73399aceafedbbe024929bd1c3a8e524946db0ae4f010fbfc6b578198d592df27cfc94dd9542076e858ff9b5388337b0ac493a73732adc918664b812494792a3115c254d751209ed83c9663e47fb3860249857e323ba576c3ea2790b347a8d1691a543039819cf4ec4ea952655b6a02315ed2d3badc679ac30472acd3512753ad4d6609a478f19eb9930a9af44a20957509bd717559f349209b9a79473bb11fe3482057efc7901b9ed6e2472087329d7b53858da88d40b833cf6f969469be8b40b2eb183bc5d2ed662290526cfc5c8c87405295c3b707d73dcd0a81244a4877d5704ad841205dd468399d86b6a640207a72db4caf29fde907e4ccd2af5539adc607c411b92753fa7d56b207e48d1a33dd47e601495e4c2d21e20e48a9772ac572efa918eb80984a6557dccdd6a0e21c108309cf6935ea6cbe1807c44dde312fa8bf48d10d483a67d61a3515f3856c40d049968f189596b3a60664b18f397fe6fedc191a1074c78e573a8910cbcc80b4eb99e2d72303b2855c51f1f2a63d1e03e2857b124a77bef0e900c080ac993bf6ea5449bf03f00272dafbe4d1e25fd40e800b8827dab23a9fa8d4b81524d7cf795a1d2ee8cb0a72deec2483899ccbeb2a4819ea64d8d8d9cba40a52e5547a4b9610da92a920a6a5ac9e7295434f54907da3bbe9d2ff7ce729c85e27f5626e8c06a12908a76545cd885eb6b0142451a63d9f8cdb99430a62e55ebd6d3e35965110ed5f46d74b4cdd1305392c0921e795479c170aa26558b33c72459c070a72ebe57eba94afbded274821d72a9e0a1dd4b5f504f94c88fa1ccf42f5da4e10378e2a531f35fd297182182b3f93b2582342691344d5f2dce825d504f94c7f898732ad31d24c10e594df899b4f1a438a09f2e617b12473099266c6944e5b5c78c712a4905a5625da3653530962d6dfc8f7b6bbfd2941b0b4b6e934a7966712c4feffccadd25273910441572e6b8a572f2a91205b4ae953591851b7438298da1e444ea5f08c1f41da8c19f254cc59ee7504313547c7f8f2396dda0862a58b419fdc5ace3082142efb3f848e39f78b20c7f02dbbab9fa74b451054d2ef1aba6a6f22c8b9d1cd34be56122122c831986a6d4fe93f687a08828e0a52e3ea6e3b8620bdae28112bbb419c0a418ea5ec93bf4651fb1082d469daf7af9f171c04592df6090041904c2f8d55798c5596044020882763416bae0082243428f9f57c535bf903696d3b64acd6b1adf881e4b94bfe5d8e1e7bcf3e904367905d614f3e9032e6e041ae7592bf730fa48c4154950a6eead2a90792b2948b494696123bf3404c3b426ef4ecfb0e271ec8c1e4ecb55deeca70de8194f957648c9939cd9c76206ccc20345a8ab12fce3a1063eabb94f38c9769930e643fadbc1fc2aa7236e740d4738d9f6ebd4f25530ee494d4c728aa497e07330e2421ef712ca6148dc18403e193a8b5d06febf1cb3790d2e7d4fbd0cfb05fba81a0a3484bf12f741459b681f8f9737f5c0d7b224b36907f4ee698c6e25768b906526cca2a9652d21855aa8168e24a48351defa2956920a6ce8b9a2fc92525846838c82c1a352b740662c6c868ce98b7e3c70c84d17c31a93c1bdef365205bc7cedaf1d23f9f0c041dbaa6fad6f6d58f81142dfe9492a654548b18081f2fa7a0c34fc9ef61208555878cfd7f61713010ddee2e275951e3db5f20e55bacd7e8aaf0b51788497d8ab87875fac45d205f7e4df1f4f1b2612e905426d5a2ef41558ab740b40ae28378fdc77bb54012afecd7acb7646d168862bd592f86ecaa8a05527d8c232b67f37c7a0562bab31c569d635d12ad40929bd457778e568b580562675c98caf70ed92115881522c7badb2b63875320e8100d15d5826a6e280592527d6b9977166fc32810732e1f95cab2f7660805920eddf059348412a727903d5f92cda749870f398124f4f3eb9fd8cc176a02d13347f39ce2fba81826104b359f0a1315a3f44b2026992b6eaabd5cde2b81bcd97a44d393eeb7248130eae76fb7d2259323816461ef7499974a223f02b17ab4adefc57adc8d40d2359a3abf9455da8b40f8b5987a47a765db4420db66fbb8ee7587780864b924e632970eebb21088c162374ce618b3e22090cfd57d430808040f323427217232b63f207a74b330fbf615521f10363584ec94e7f4a50744fbcd729a7a9b2e0f087a94fc603a25a5bddc013145cd1cfd3476caeb8018f6367786f1009003f29f458b31ff9edadc010007a4505a4bdd4e46e9ec007003e28c9c510bcde947c8006003f27b95dfdb6737196400a80149b5cae8ba94526b90018006c49c92345dc9457cce3100cc80187c2fbcbb97aafa18006440eafdfcc1740c61d93100c4802c7fa14d9a16f7923100c080a092b4124ade44ec6f007801b9d393ca6e51a5b26f007001418898fc7d8d637fb15690b75472ad5c222ec68d1564d5cad5ffd6127ddb2a481f335d57cbc7886daa208d75defc769f92d7960a9294b791492f5328b1a182b4717425397aa2376ca72075b098f669195ab299826c3a8376686d19cf5a29889926479df020aeb3460a72a82ca3927c142469fa5b2cdd780eae2888b66fb9439afed86828c8bde93fcf4fe5ac111484ed52f6b1e209e9f90429e99f5139eadecc9e208e4e9f4fdfe494789d20ada96752961e5ae104c1364fdb8f7e1fad6d82bc39f97ca9aae4619926c85b3dde277ae1743241ba74f54f99bf419820c85f8b1e2b2bdd9f2e419225c306bd95e9632c414e97e3ef561662439520874fdbac1623cda604315cf3a9d5f1cee13309b2273175b952abe84882b4aeaa49cded72224118255366ded252794890f32edef378503a6c1e41d077724185adb8f11d4114f70a7fe9f266378220da1b2a35d36a4690920cd914e7a24c5e04e1f46d08e5a94b774511c4aea0435f6354f88920984ed5cd2b1b7d714490d2fae85cdb292ce910a4f0123aeec77bd3360469abd27eadd90531178238179b2e4ea5b68910a420fba756c23ae70c829844d5469f7d11b9200822f4960af3967f6e2048195e7edb398a4e0204b1622e0821672b95fa07824c9e2becae5d733f9035a87895d2c9cc64f68128e7c92c939ed60f1f489e1bc4e9b5ffcd7b2056685ba8a4b4c61cea8194c557b3a652f284f2403ca53d86e5784ce7e1811c9673cd05ffdccb1d48c22bab9f4c193e596507e27e57ce99b734ab8e5f2475c08c3a90f363ae2832854d3ac71f6c20c0f105cea00349dd05a5b69ae13303021c5ccce1d8acdbb3add12bb74ff5179329366ddcda864000021c5c888123021e1e20c0f1058e91438c197220f76e59afee8611b1991107a2cd7ef6e87d9949af33e040ee4f523b7436a1d2ae33de400ca252923f4275742f67b8412fadb40a5dbdb2311977335fcfa5aef49bca8c36102fc4f7ac527ccbe5b081bc77775ef5a7c5f49ab106c2f7a5bc6021ab42e7da83196a20a779ce5adad3b59f692085ae4fa1b339546cde4098810682904faba08498abd79d30e30ca49ca67356b575aae87dcc3003c1c2e66876c2925c746ff0604619c869574f3777fe584afee14706b28ab8919dd22ddbe81f6c4dc6d96e31630c7cdad5ed9addec85bd771ae9696b73b6cfe3071b063c3c5cc7c821c60c3190368952bf14f539b6290ca4121fcf23d393df77c040fafe939ec295de29f50a1cccf802595e4bc305cbc9f6330f0fbe612798e105a289d08ce134a5dcf27681245697ad7286d86f1685195c20b67c9259ddf34d8ebbbe05520e9fd2ce8e32193f3e430be413cba545670799a57516c8a6de84c99e1555dd99c10c2c10d594a9ed126a07e84b1142a6110924a14534941afdfbb93a02b9823ea53e46c608843ba15d72a1fd73d7221055ec5407d3331148272e3e3ac87bcb5986406a1feba016762190c663b8745b154c473108a49edf1c845c190884d73dbd19797a3fdd1f90f28af4b35115eb3ffa809c3716b77214d1314f0fc8e29a2c8ce98907a418d749e3f6a96e5877401cd5dcef18551d105fa485b678dac9aeca01a94fa69ad277e18094e2c6ee4cc2b3466937206fe77c4934e73fd89e50c306c4f3512a7cfc6c25cdaf0149c6ea4e13bfbca52d0d88dfd993de8a2e15269f013983699117ab948ae86440125756a53bbc79ef1f03925988450d327f88506140f6949e613dfb8dd29b1790cd830e6af364355c408a71545d4ef594ce7d2b48d92bfae96b9041bb8615a41e3fcb9f998db3a955103366ecf8c5c9b64bab82d8c1d74d9eeacc9d3215e48deba483d40fa2ed4205413da8131f4c9d8eea9f82dcd93fa5b7d64ca34da6209bf836e12947a35aaa1404fbf8f12da73a0b4b93829c835eb6b54b8e8214163e2f75766f2d1605613c67ce21c4180af29cbdc7fcb001054194527ba54b64ecbcf904a93af4638ca7213dbf9e2065eea0e7a48991314d2748e2aee6da52cea665e204d9c36ac84d4b1bf5d94d1cbda3fc7fc55813847375d52464bcb1bd648234e3514c10838aca23ba6f76bc7409f286ee523933ce05a55982983b7494be51aa5ce64a90628fc7a6502673cc851224a163c6943783d6aa6f12e4d7101dc4c7fc119e4982f8f16bc27383995f4a2448a7c63e68df3b0d1d840431859e9ec9c77abef608d2f8c5ac85da8ee9398e2089d451e2b7a6ed526e04f93a09dbb016c408e2c8a68c796be531d88b20f75ffdbb59dabcf0298214b6b25f5bd05f294589207d2e4bcf54273beb840852afb5f68bcd5eda4a1b681c82a4bc92d869ab2d9dae2fbe28379e40c310a4d16fed4daa46a53b3fd8c8d0f3008d42902caf4e870c2acde7d007db9a77418310842f1d7db752eaa862d12fd01804312821b57cc3d9a89c542ed0100439f5e6933dbf294cc60b340241b87c3d59fea963063920881afd94bdbfe9edd29e1468fc8168152b9d8e31877aadfc400ea354498f153e7b7834fa40eceeeff3d8f2d9479e230c2fc0e0c3e7aeb1da9976545f3cd3d80331369f0c424d58e854f9600b638c32de3340430f578c6e9da19fad7eb0211168e4419db3b1922989cfdd07db36c0238c0b78787878d4dde8e8020d3c90ad43c63c4acfd966fcc176238c62ce6c74b180062c19ae021a77209aecf88d1b2c676cfec1d62847c9510604961d0334ec40b8e821d663f963cad01668d401156e54da79b4526dd965010d3a90fe33e8d1915ba37af960531b5bd8f8e28bb2858d2d6cd8e8820b1bc68b461a7320a88f68d3fa275781861cc8499f6f859c7d31953890d47663b4bef8e942f4c176038d21c6919348a00107524c21baa11f366636bd81145a9ad40933791a16371043b77550b98a76dab380878787870f68b4817c32d3c6b2ccf0a17d361045e8c7ef8e71aba91b81c61a4825a3b965b068619955032925eddc36a6b24187692086ca79418eb68e612f1b5d2cc0868707195e43a0810652f8df8eab2db2e71b36bb614a071a67209c79abeeca6bf9583c3c3c3cca6e9819196568a061863535ef2a572fb453bf3446fac5fe24ec66f6b861758aa05106525e5ada8afacc79613290e24939eb94296bb437065230957b1adafea46d6220b90831426d7d0a59325bd8d8624f40230c24cbe499d4985433a983811cb3658cb78c6de99b031a5f2087a56016a3c6d4ede505c267f5ff05338faf731748e9df6d6d6434c49847830bc49c363322ee4ce70f22811764848112195e100f8f1bd0d802794e279ded7bd6f3a20572071d3eba9e392b9f2c9035f9cbff7726337dc10239c9f4498d103302cb11e0c08d31685c815441a9aa1ab95ce94acd011a56207a3eed116f53e155cbad0249345b8aaccb392c8306150832a65c8c85d046170bd0806a043870e3068d2910c7db8355db869ad0910271b3060bd7cda4e25a684481985932a536d129e8af684081607b619467f6bebff4049fa30c31c268801e80c6134832ab523055793206212710c59312aac3640529fa2610d7f488ab202b4c20a7cb5a398c4e2e8124fc37335384a56d4f09e4a0d4979a4a324bc75312085e52cf3d3ce5f33921819843e4dc9d3851f94c4720e65dd4fa4e9f936a8f11c81be2835cd05e4288a708e4f0e1eeb4724f8c6e88400a1f6623f6c933a76608e493d5b4759ba269d10881e0be29d793ca11ae992010735d05cf4f422010c4e65f1eddbfce96ff01e94efef3e778855bde07649395c9f54285c8f0f780983a634e4a9c8ae1b7e701e9cf6483afa8ec809c7392b3134abd875b74402eb9b92267e7f15ac901694fe917a53de5fc54c101e14a251d3467b10e4a37207b50998bdff5266c1b105c647f4c639df959af01e94dc81435d11edc741a90acfc7418916b9f4c9f01416cf824aaff5366e93464404e335ba6d52b84fa9c460c88974ade86929e71544d0306042174cce4ab85d59b69bc806441aae6ca985b352d0d17106f84ae4c7f3a5fb8db0aa2f7a7a650a934dfb9ac207cdaf4ad72a67ec65d0531452e93d6961e4dad2a4849cc6efb8513df274d0569fff2f3d5b6691e292a08aa94b87c4a8c9f79f41424cd9a75f646e99816350531d7c7282bd274eed25290aa3f8afa4e26438d48418e3985f34ca9bf6f1f05d93f89a84e394541360b9f6405cb25c3cd50107305cdf61fa5f49f090ae25d5614ddc1536f979f20e638d672b95572b5f404296e47131e16ec0439be7b90b9a3a8d68a9c206e78d39a4be8b05a711304dfadcc0bab4f25434d90c35ae636f59c63b23013a47e0ba73c78fa589ec304c9344646e6f512845d8f1eb3ea369c2c41368fa15f42e995a71284d397b6c443bd25f12841bc17dd7db216bcf493205712f6eb39a786f1244138d5176377fa9967160972b66719d935b5290712c44cfe7732642c53fc08f26750bb8afb24ed7404f16267324da27dcf2a0560d10882a578380db5dbe0498c208b4e5959b9644575d22208da36e62dff5c5204f936e9092dd757d7a444103f785afa14db6f340911e45f0f737a2f89eb9f0e41b0cfcc99419478fb932148ca4fcd969fea5d3f1582341b94ec9c6f1b2c25118254514de7de997ad5d32048ba84b7bfeca7a0eb2408c2b7489159ea3385370582604a734ac9bb435d9b00414a7ae4f526adaf1b4d7f20e65cb02054f50329cfb7c755b54ee2f581947fa14a8a8a51c407d2585cff4bfab1497b20d968f1cf177b845c0f844b794aa8b873396979209c7a7bcd1c2644090fa4d9ecf1d1a463da54ba03f182ced13ca8daf5d8813c1a6b7fb6397d4f7520f567d2553fd5a4420792852ccdb429adf33910fd63d4271331d5901cc8a9e409791916e51407b2688c8bb7deac79389056f4f80899b6d77e0339cda5c524afc2af770371b46509f9eacc496d206d7efda0416fd2776103415d9c8bef96aea5359034fd9cea4e554aa5d5404a1b7773e52a7dd24012a6c366d39b2a9fd0400c1b4dc977a97f7f06a2ce99d2b4ce578dcd4058b713351bc345b86520d5696e4d79b5df4406628de64ed69de6a4632089a7dcfe5e1934622085eda4f36652297f1a06e25afae7b9fea81f82816c5732caa6c964e37d81f817bfb388ddb6d40b2461f32f6ed65fca2e9094fad7565bdafb8c0ba4d2acbd5951459b0a6d81d89bebe53ae7e75a0b84cbf6b5ac9a43ac9405a26906d7fd4f42435820768711269eb38efc0a44d9a0cef4c82d7d1b2b9072ba12425a9852ed57812c571963964ad731542088f9303297d8fbab4c81b87ab12cc68a41fe2e05728ae241a6782db58902d9e4efa8b81c11130a24d950df244dbb63fd04727be718834ea1f2e804f27acc7872443fc5b409c4d82e97cb94f6704926904fa5f5cd49f8997c4b20e9f89f524eb283851208bec1425eac8968eb609104627c718b6bdb61631d2c90409831b7394df6374a068b2310f6fa2ec9a5dcba49060b2310647ba4a5a0c35c9e0c164520e7c8faf5f17c153c060b229032c68e5de7da5c31068b2190c2c736db341a7c34060b21906a4d6cb774081dbdc12208049576f9967347e8dd60010462d2a39ec3bb54666eb0f801d93d9b8e9d3bf454da60e1038278ab5ee6a9eabd0d163d2097d65149cb9fb2ab0d163c2065d6b02eb18a21c4068b1d903c2e59a9aa86566cb0d001f9acb3f28c98ea983558e480ac1944634c3b3d1b3558e08030c2ec4c44f5b6a2068b1b106ee772b7554e334a83850d48693742e8a88dd993068b1a10654d57a678e1318f060b1a9082a59c7f89564aa1c16206a41c4d7d62ed2f69cf602103a26cb5bc299dea9466b088012934d543ae2dda66060b1890820a1a1b9f62084d192c5e40b80a5eae496bfc4a192c5c40f851e9f468898c22f4ad20ab76babcc9bf9341cf0a628aeab9ec6288b0d1af82ec6faa726fa9d7d0795510c4f8aaeed7d9c7cea78230aa345be5287729e651416cbb4f4a67fdfdd3ff2948a7348b4e1584aefcbf2908b349330911b568fd9782602554e567961aa53f2948594b6c26399125f41f05b9f4abee6e25699ebf28084274ad7926b5ecf48782f0f1b7ced6c3c5703f28081b2e7caff72ac9f07f82a026c47bb67986cfbe27487f1a9b4c2535badeef044165547dfa38f293fb9c207d56f65039c5b07bfe26c825f4c84f49638a66be26089bc7af729bceaae267827ca28465b9b8b6b97b4c1034e7dd99d2c182d2026f20c594d267f8533e4a746e2026f969a642c7cc206a0349076141c84eae3bb38170397bba943d9e6ed1d6406ab78a7dd1b45775a981ec1e66aa9367fd9ad240cc3937b986ec14647fd0402c9199cb74e877efac0bb4380351544af162b2cbda41a9851948ae51b35b7ef88d2b9581d82173ad6c8d655a4b06e2f657502aac2c9a528e81243bc4c29407adef1f1927400f1003515329951796130662a54f1bdb7e2fa7d08381b031ec562fd8eb5afe0572c9925d429ecc6954ec81165e2085120f4d153fe7a76c17887fa6d3bf09254feac6056295dee714be5ce6fa2d10f4e6f46bb1aaafc3450bc49c4b6852b7fc055a6481589b33b6337ed856070bc44fafd7334a4de4bd5720551261dae3c9e6d4b502c92b8cb2dab4ba677115eed2cc7cfffb6617db25b4a002298b748b498ecfc54e8b29105310b2c963341daf1b2da440cc59ba938a78e89c5f14f4cc5f412f84ceb921281084ae31f9d3ef31ba69f104625599ae28fb5e0d9313502964e5dca2fd62a645138826a47b7cb1789e2d8709e4f0ffa7f492fd56ce6bb10462bd28d56a61b493ce732010b0e5400b402168a104b26ad9a5a56bf69c9f24903e3fcce63d39fa664702a93368507a435b634ecba881164720aa5510b9eb7ee9375a18a19c99b5a247946e978a8056f5cd173d4438d7c9182cff450d3b0fc117db385dcfdb0df1d03fa52d94c7182e08f198a0851008f6361b1b76c3c6aa83405c0d6273560added170824133246373163c232fb01c954c5f924323b1a231f90c7c7f2d36b4a91a39236ba5840e9428c301a7033d0a207c453af9e624691e3f5f38018365756720d4f39a7ec80b45d9e7159722d74407edfd46c3652df1c68910382c86df5890c97dfc36602e25ae0809467b45d2bfd627be7834d04050c1780163720551a39db256df3bab516f820a330a04f8c02067a043870c3015ad880e8ee31c798bf2fe9fcd323c0811b29d0a206a4a44fae549db859f9342056fa39fdae09c3bad06206a4513e22830675793f9351861899012d644010ba821ad529e5658f3ed84c804e185eb875c1850d119892c3026324603ba0450c48659ed28be564b9847c23af8c68010382d746ef943c9da7a98c162f20bb68ce34272c6d3f450b1710635e129d2a65fccde90fb61b5f7c5172780186175fdcf8c821063aad20a7d5e4e7efb3827cbd69d429bd6157c62c56c17767bdebf211591e00953102940083306087ca18013a370c2281ab827c1ec655c355e593a354102e455b52cda549bd4505a954cfbfe83515d39ca7205db757943bd363d965610a62957f2cab5dddd5c3e33804599482609d374b57d27d215313e0408087c74126c0f14e0abc73ef454f277b787878608e91438c0a64310af2b9cfe7a4db3f077167210a527ac7ca0c9941bc2c1f6c39ca0043016540200c057878dc208b50903da798e3a2098d97bc2c40410c7697a3ee8f868d73169f20a9f3d2dd3c639b749027c82d2ac750622b6b1a9d4e10e774b99992e9a149e704b97279901a2d0671bd3741102accaba6e6093969821c629d726c558c0dd24c904e7777455319d49f990526482ad867ed8f5e9eb53143c306647109525a3d770faaf38c3a5982ace1931e0b95bdc2752a41b0d97859993c894e2a2588a2465fc794cb23439e04d9624efa22339604596bf753ba999c4c5b8b90452448a6df7e15523475ad4cc80212e4a45457cfa29c06b53e82243d68886716fde1f48e2098929d4c47d96e096523483a561c39d1262388f65ed14a6555e5d316415237599abb726cefee001e1e588649c84211c4d47c39e6b4fdc49612a165df3c4df61e1a648108929f6ea9f449b46f89872029132a374a83b051161846038620cd6faa1ce139c7822c0a41d870116bdb1082783226d3b506b9f70f8218644ee6f6a0e36a5410e4d60ddb9bc4622a590a0439bc9ecc793bf7f9151004efa4a337d36db22094822cfe40186dfd2da36b1364e10762f49c54f6c85e7f6dfa40beab50b5b9829d568b0fa4d3f5f96d56a284c7f740381545d58229bd54570fc464427ada9fd9ccebac208b3c907a3db8c6a40a210b3c90f3ef854bd7f154e67407345b0c5a1676209b8cf939689071cbf73a1044ea2917bd6777b3d18170bbeb164778a87b3b077250cfb666ee39cc3b3910b6754d051977e3a5511cc86523e7448c080ec4ea0d99bfafdf40b2b50f1f730c6a43c60dc4f170f1a4e446f98adb40aa14d3b4be93d8406e9bcb1683f78fa5b606626ad7a0e947470d44b5ec7523b7c479e8d340f8fba863396af4930c1a085667a994de8a71a372067278caf9ed9f724ed1cc40769199522ced44285319483ae95437dae4bbb6460672cfc82aef4cd59bed18083fa6a6b2e69818087642841a21446120de7fe88a53295f9d080652beebcfb8963cdbc6bf404a39968d4c6af6414d2f90946ee8791fede1c4a70b248b19534c8f39bb898a0b04a135ff89cc621aed2d90e74626257e2d102d3e9b181dccd25f300b64d913f9595631fc8305d2e6e0a72b9b4e96e65d811474bf477b7f12fdb415c8b93658e7aab80ac4649a522e474605f22861e9b3a6a567a2291053149defe2c6c5b72d05c2f8bbc72ae549b97da240fc4df55031f4d78f0d05c2df578b96c9f3cbfd094451f1f8bdd809e4da8e8bf9345f2ded26904ab4c3e58a8da197630269474d9cfad19f96e525103da616ed67e9a29a5502c9a3e8ecb50a653dc224104fe8f8898ea5272646023189db2f7539bd46854720a58a7ade958d1188692ea969b6948398ab08e43ed59fe3490f2eda1181d4316fa283cab5ad6b08a4d1f964aaa0da83705108244f798d1f2c770ebe068164a23afd4e4767d580402ecdd4bd3b1b1ddef40392ac119fdcb46755da3e2068903d9533ba56e2e901496748cbed387940b67029c7e51fcfa9c41d1033eefd86c6cf29a8b00e88712c98d6cb963e3a980372065d193dffcdbc853820dcde8c74b9f306c40f79966eaea73d85362028cf7066ffd9e3abab01f1f428d1fa9f1d63386940d84ba5b657bfadf23603c267f78e9785de4a691910639ff26240d87cb2c4f4a6e83ca52e640103626bb6148b5fc16352162f20b69f8867325197517db0878e91438c2c5c40d0a36fa23cc93cafa046418d56104f85e5f098ab43c8cb46175cd8f0f038121c090e0c6302fc410d5690ce2e9314d35719ae63a2c62ac8493d3b9fcad56a1ba6dda8440d55106b73927f2a9416ddf4830d6deb502315c4d72453eae99ca7f572bcb811060e3e0d0843021e1e648800078e8fea40430d5410cc3a27a563c77c3e938d2dee50e314e4edb0f7bc29658b8a595390345f0a177353976eb70c354a41bebb0fd257944a31a54e0af2a6acf3945f9d23723c438d5110c35c8c997476b230b128c831e7f906316355ea090541e6cc2a2a56d216ef030531b89695f29efdf16d0c353e41ee18d5d0a7329e20d7663921736495dc7c430b353a418a2fe67b2aa8a4bb1f4e106e83de069b8be65aa5a1c626481663d8d6c715b1dc6b82e4a7537f5cccea99a1462648966a54b6986bef9d54031324b18ba2c9fe2de70463e428c3fb408d4b904b9e9cfe7be98e7e766fa8610992c78e3e227fbe468d2a41be17a9b2f56be1b4881204ff2473921f6409953e9320e6eda45394b9b0a2f2922045efd06ca662dd958d04d1ee7212ea2c898f2621415031b58739cfb94c425be0486134600b7d042956b6cd3527740429e5d2d9ac2fba8b768d2027fd6ac9c46252ff8d1184114b59267f767d5f0439f4e62ef7c5a6a42d3317430d451054678f6147848a514f8920e9dc19af424c8820f7e967f00da3948de910e4d7bc9f6fbf7d21234310dee386d0142ddca8bf10c4f368ed714a447b883c3c3c3cce6e1819488c13e4d03d42104587cc0a9b62aa3a7310e4bba05330515577164190837cd1ef303aaca8301004fbae28a71dee4ac60041d2f1b3b765e5141dab3f9076a4aca670326db4bc1f082b4a2819f31c4fd5ef433987cef28178dd364a584e490675f1428d3d90b2f67b6e90b529fcad0782dad8bc8f98b70ce58154e369b736c9d8602b1ec85515d3d38d10d2eb35408d3b10dfe54ea84d62cdc3b303713e533cbd67e68bea408a49d6668f9afca50f0b35e8400e73d1544a222e96d46acc819c6cc4449c6ae8f8a609d4900339aedabcfd7b0d851a71209c269d7122649a0aa36e420d3890426acedfedfb0d049dc9d37d888a134be2126ab88130a3f1c6c4d55cc88c126ab481144f555ec571b350830de4fa30cad205b15a1735d6403e8f97d329995a99da0fb6b5d1c502d822c0811b386aa8a10335d240d214f39ee288cbd41810f0b8e1871a6820faca6d4ccb8d2f42b5d105175be30ce43cadafcf1b45956c1f6c6b0672522963e1d6443cde6520b5f889929199cd20eb1a6a908198ae54e6b74f2f10461958630c44d37acfb6acec0eff079b9ba086184841852a0de7a77412d907db0d1ca74b50230c6451e7e92be4f9c196230c2fc00003b1ca2b87ff6cc779fec186e330096a7c81bc49aa66b350eaa4b91f6c07c7a993410d2f907406dd98e23bff58f9c1d60592e7e889914b91979e0fb61b388ec7a0061788e6a23127437e6fc9b740106d162a63d1635a0bc42b93977173f3dec071b40535b240eacb22f4e798badeff53d0a9810552ec1297b4699313dd3fd84a80c2b014d4b802497b0eab5a9d17675d50c30ae44da963105559dc55ac025947c5c5cca6636d8a79116a50817c26fb3e553e153e5627428d29103f5af6a0beb3a65b4a8120326576b86688ce750a35a240907d616a9b3c692c110ae4b4a1d17388d398df3d81a462a708dfd68ff99a146a3881fc5ec2f53ece6e4ea92690c26ce7948ba9c6630c1348aaf4d4995abd0caa5902e9aa4755a5a8dcd2b612081ba3d5af5798aecb25816cc23f1a8bb8a804cda4c3418138180a84026120181062deed0a431500000010161006c3e134113559071400043b3c2c3e2e2616261c1012101412100c830281402818068381806028100883c101716630c6fd387eac83108953f00e52f47787ae91fd388c3f34ce8dfee6e086691dbcc0f606a4f9ed3eaca0615dded33dca3ba599d9a73807720edab5301c21ffc6131ddca14dfb4b5b3a546c5a823b3d3d0d9188197bc76f99b07eb1258f79a60aba89da9bcdf38d43ac89df9ee17bc55b003147a45da9a4e13d5d15f100cf0677b70d37d346ce3ab143eb75a39564305f2bbd099b0a660f41e10d0c7afbfdd686b742024e89bb95c61f308c2449793fcac5bb92488d2d939101bb255c05adc012bb9decc2e810d7fd8acf6a0e8a286ce2cfc5af1ca6258636284c16fe6b61e89ab045d5e737679a5e42ab71175218b2365ef6eabce67bac934803a1876b9eab3d284e00b0451f722705a1d1df64a072a832b8c44ce4d2f1f030a540d4e1527a417d429135c6a1fcaaf776783c758c4ad32c9f36325796eb2d6d9da46fd7335077c2b177233d0b74d671390bd5b2239f57552ef278e5fb2ea2c3cf116b543960914ed5f99dded32bb8923b981138346d4998215a7add7337957e33031039a3e76692808e2aee24512d5635d70db078d1f8cd85530fb074a8a0a9271af77cf1c982683970dd8ec2fb9b585f922c376ce425d5e82c55a3696dc0d5ae6800a061ce4a6c50b08632871bb9ba1f04262ee961f48b074a46a7c7ca2eda40053dab554d37009d092eb7889d9a5a291d5f72b1241e45c0f8e05c2f3047aaa0ee61fa053e5d062d66bc88ed614268ff6c431c5eea32974a6f6bf099e6d236cb8834399b4a533a1193f4326b02442a7944bcf297036751418f333c06c32f3681af735d2dd29a8a2853a972ab7c694c79d56a36d695996661cc76330c580daa5de4351a122bbe70f1f89fa28f2d585dab67868b61440ce94e8a94d5c21b3f07c2a4b371b29a689503f25b00c8b16fb06c000800218c8b03c8264606808abd4c4c1ebe3c8d44bd2aba44529992da4c955ada675dfb21fc66d7d3826b92f7fadc158d5cd30bc2411c1143b0230127fe6f101e862d8cd70518cb23e38eb1363f03a275be01b7cbdee1803959219001a5adcdc9f38b25db8c3b8cffb2020a2c16994c0fe7bf8cfcb8371f0c6dd2f6e61e32dd2e119f4826887ab5457ec171c1ca0957f43cdca296c162d4c5a540252aaa6fe3b8409bd5194db6784bd7e10f835800e560228b0a336f0fa2850cee60b07923ddc826c063583bd67c92eb1c74f3ed062095009b6947030859e405fd24f8576f809b2e638d12dd3827522373001e14d3da801bf89851b734c58df986adc249b49082e73f990d89333151c4220891e0983b934a9d06f4d303821a044ec8b81c228698fa945439d3fda17cd1e4da9067ff1145c0217f84f71383fa6b0da57c60ea0130c246db072d88b79ae3a2cb16fce7388290db257c67100b68f2063d0805ca409320d63b653678a9595e2a8b6948bd0401206c59d8407326d9f48928ba831bbde7d3f7d7221cea6264cf4f66e03f6d5b1cc3cc06fdd9203288376bf6d9061bdf1b6cac37000e2c19560470cea169483ef026d2153404aeb643afc2c9fd0d028c82ba52881e71b490c73d6279eef37478a0cd63cbeff74c82e3e038a915b0c45e33f003f4902140e9ec514f9a3c782707f3bc29cf66ef4892091ccf9667978799c797a79727c2e3d87a6c95a3514ff3ee7946d0e80dc879be3cbf3c17e1e100cb63aa2794f5216bb2a8a55d80322f80d22b3ee53cafadc7564385f656373d35a05c578d0b4f799e351e721e541edb0b8fed47cc4e353ee8bce7b9f2c0e7d1f05cf3d0e529d779c6154b99e895879a87fb0094d6e569e0e1d9d3e913e111e781ec7b049b1af8377a9e218f591e149e92b6a706d170aec63c863cd23c2a3cd63cb3e5b1099549c9881c0df1c46333316317ca6fccab06d031ffa0e021589dc6d83e2ea17201db7eabd7e97365402ceeeb0f2cbbc0fa11235c4cde7069b483b3200d06196057c23f2baaecc12e5424242a30f68e817fb7c22da985345d56cfe07dc4271cffd726c2c9f39a463fc46b85d5c1140e8a53395b0d6ed8b4122a3569308c30da52d87de66864f6ae0a1d12cf629654891792d158b252d0288bff1488f44c03c8e106cbc3f39989fbeef5291e93590b623818cb866bc8c19883d9de0392488d4d439f241a7f56411ec9128f34ecb1a4ded3a6c4b9724f46f1e05cf19e19457b0644fba50ebd5fa68fbe65aeefc2aa882beee974649817f5cc278cd9817aeab2eaf719ea7567c57f96a6189eb406557ada32ef7d299294020897db446df2d0a9466fb9695cbebca62650d94b27180887d1eb04991d1eabc68c328719f371435eb620957db67966cd1f6e5269d01a5bb6edd8a0250a291a249e16f6c17783fe82fb6c4cfb1d0c40dbf8cf67ee66bb6fc9e4b3fd803fd1678a3800d62428d3fdd529d258143b6c0934646c202c1950f2e34a50431e3c5f82bef5a02a52a4aa870e3889ebe9a7bb5b00686588cb87dfe1cadf31cc2fe8c9d1e34a96e33b7d53112766a79eb8e18bd8883d9c359b9a9751da006233288ebfeed2228c5f688768c5721e0f9081890067f442a371732374464523a8356a9dcbcc9157af3106af37fd6c34016524206ed86c505fe3bc6fe9806ba8ae12e2b525fd6c7f19dd19f51c95056927bfe1e162e48c517589f0206dd7d7ed52ddca4542e2310c5ab5505c792c0d0aaffc11b0abeae54e44bf089100d16cd05988ce68c1ae50622a72d5414dc8dd4d2dc889a4b9710b9fff15d8a9887c542ba917b6f21db1e50c92c35b0ab235b197798226467994aa5aa68c7c7173d3531f4e62e4723b70dbdcf21ecfd8c1185b3bf048a1821f2f156e47517c5d2f03de1d072a9c67a09a8c5f142888e4fda10e4ba445c1abf17c8aca442b679cae7d3545e1cbd8540126c15dd6e8004472534a998303471e9f71957c12dc98b5bf1cce11f7e100ceed2dae114924d7daafb0c70341c9b2cc8e1056446207098e1863f921b28a8bfce204ac098960f667eeec4dad3936caa414228acdc2c28151829e0a758bcd1ac0479f7e857f10849b33ad2be6ba2477e544248893cc8b02f52657d12e9e8d16038a8b3ad28aeed319b2308bc1bd1dda0232e7003b2ca91d73f252efbc0c5ab54cc5e56aec8a69ead2bf5106d787e1ab2dbb1a7ad238cb6e40b52402998cd5c183069021ef923dccdfd263d54846a4fad276070aa70c86022c22a6e4a3083e19465f75399d386c1a3c46d62425bf71629264756540c7f5eff0bdfa353b65d4872eb9c641347a2de81a09146cd1e41a3ac235563234c784a93da7601781a6e2af5f8da507ea33757cdddad72914b57984bf27f5a6730ed36a0dc96142db72540c18337ec1d5af90ba62ca56a70f4d9a42268fc1440bfc066806a38d79c1a1f83c661e804d86f5824d27b040684ac04e0ca9ed020d465a5b308da9f24526050db23ea0e5970f48f95f91565f0add5ac0f00608ed910f8b48e71e8c750e1a119054bed285547c99357a7f2ad013bd17757f8e87a647f494c3890739ab922e82854afe62ebe13da57e0905d56dc2524b9ed4a12293d564c0ef9a792b2a178252e0fa704170897195e7aa7239b970254a887b3be6d291b812975d4987c0f5c073254e44852543aec4ccf5b0139c049ee1027115e70a29b812a70e8f2915d7c7ce9538d16be84cb91ed85d891d68f475986b9eb8fa13fc564a926de18fcbe112e70acb35e552cf05122e230490ccf0bc55cc25c785ca65cbe5c235974bcb45854bcfe53cc195887e7edbcdb52ae732a6eb58c91cd27507fbaf4ddb5c57b8a80769913c5c2caee6e94a14c39503c2b8888dae9338a7a1be17530f1e5c1a2ebc5c985c3d5cd85c3e5c3eae312e482e122ed35a97f456afab78e39273a5e54ae42a3d9751ab4a115262d4d04f2dc594c2052d52ae4b0e6cf81eba4c788ebdbf43d98177ac53edd24f24a1641c6c01a275aa7a0d9157d66708ece8350f6c15685b1af4d6a3daffae6989802b129f96473a184b68b4a6d87833860fae9b942152c5264d3149b2ac7e567424f815d23baa7385e737310816fe1fd51ca2bc4854020365b4adfa90ab25dbde22bec55b39a7f0a8dc76acf60f4c92ad108e54510eb44306d39486dcd962d555952907d08ac2ae1284133dc5dcfb358d96f0eb368c28fab00d9693b40f5775bad741e0de74eb2585891bd5153b7c9e6668e9c9738bafad65a57b09fe0bd2212e115b00e7dd3a85dd802142d124a7c19f903706523e765095970bbce31978f6622771917a2f7e7080249e3f17eb7bb6c547f777e449353fbf2e0292c1931e40bd0654ad27812eb70e1f79e2142fb96c347b553df524fc6254b9f295f03ad3e186c5911d6f714dea6aec802239b3a3e80999d7b0f9561e1bfb1b23b4f49811a7b47ceac08968fab2cf4f651659f0a1cb6c60a49d0c20fee3ccb4d22f666484432db8a6d551cdedbecf6ac3257654801a65c64133f08e27921734bfb619996297d9070b354d83c525840c0d9b0d9c7cae3865cec39a3a0ac650c47a8c4ee015240b06b212898fa61326944215cb8e8a91e67dbd5393af2521e783d0bfe035a089bab25e91d38c067a86f16ae2245129cdab0c2c75870f02c531d67c1c0abb15081181db089c2ff4beaeef5e65e860223ef1f2c6a515e085bbd7d51651bd099a98b773a1bab95f5d57c127ed7116bd0a5e830585cc14b237c36635f723c15866a00c20d75dfa8319aaf06ff5dfd738dd302b3f43dd92a6c01f56ede56f6e70eb34f1ba426141aa5654461f912eea2e896db2fe07482a5eb70ac237600ecde8414e6feb2912c6f4fdbc73dd0ab041b8afc090f8925144d0cc97e40430375b223c0a607a0c516b0264fb9de0cb66db107f6b05829b4fc7395a929c99918d020d7f35b0ba6acecae21a16a329b203a414c28cf9449ae64e8404a1a90e749dd2bfc35a490aee36ba67c8933897a066a3c5b0ef04ab367a3da218174235d4c1ccacb74f543074e307136b5a90fb84c28184b31ac7c62ad443086800bb50008f5cd74c4003c871d2298c7a4e560032ce0072d672ab4d0597bccd0702f8c00b6c8ac943b03deceb5846ebb9d01f551ee2d4724d79a03533cab8c8e46cdf80f8aca9488ddb9575a6d7c29052213952edc29d89bf445966d854adbc5ed918094466fb7f3fb30132a5fd6c0730192cd20de27edc426ac610551c2388557450c5492d8483014914052e7088cab2db09e02d60c61a67684a90f52a8d0fc2883c7be69b9e7b085ad1c50d62644186161e4e7d51fbc2a5ac1bfa8017de98c6d03377e9893d75c4984317a708e4d98de86c0b586bcd118ec8e93a8a9183456e216576de061ba8b25dd684a32b2c160709919a2e64124b0872684014f1c972f46625a7ba7479c3adaa343848682bd045ca9c375e2cd29539b846d0bc9b720a7698a4bf5d551191e343633f1a9fa8fb3fe49d9a1b29391b332ad26a12784e9aab9b30a1b76c2cb8a72c73727d4caf3e4c59b112733fccac078df4d4738d64c02c079efba823cc6108b3467de0cc833677ac83cc77d0b98c3fcc4cc4a2920c92d249642a484c889689a789246468496cfa4925801e84a0552e8863b6d5ddbcd8177114a7dbe3ed1a09723d57748a4b6d432e0f440f3eaf27e980b33acd060414546ec30839ad2295ac00b6b2795cf772f0b11efe9c6f70c4633df9a4dcff586392412acd6423945432d09524a12ce0a4b7e2eca339fc39efaa0f220786ef6ad1962ce910a709c1689193109ad4141049e459953a4a1220593ac95e10873acd8dcff4f0273e833b9ef490cce813481040f7f29a92524b78eed7dd4df107d17d692c4137797d40d8493922d6fc60dd72ee032a0f8b603f2b5ccf31a4a280126779b64d4ac8b52770e65b313a4ea5e5e45b328072522ad34d31aca4044c1f1359a48564ddc84a4e6a29b9ff519925c3769af233dfc4312d8aca69c1dd17661f52a7c9fd0d585239a8baedf10ca14cdaf4392da5f63ca798a1967538807f4d409df209d19eb8944947905e09a1958ca4d04d28944822223d0495a885f4f11bdf4f3edba39ff40d8e7a1c279f9cfb1f794ccf3e959b9fd55012c8483769842474096ef519473d8c73dfced98f79d413df93e38fea2c99d1f3b80ec832cff98d44d0349b5350a1328249ae19a71dc40c839834ee43e71eb299632582a60452857c5268461c95acfc480343765b6a9e7f7a8dc0a984b1395d86a0d9237e537391b4dd24b98d4f53a5e7f040ad4c74553d278d356b7392fe6d1904cfa89aba1d4e828da9d4601c49747ba5c580a2122fd94c4bc0cdc148e79ce0523c28446cc36a253406087e28a113778758b5c027825d886db556ea802863d998f760a3292d237783b58175e8fe30065d1641e292223eb57f356f0b44360f2463ee618e552b963ea207b613de41854200872566254965e620bb9266708d92533feec859a394e44abe28450737dc83ad82542470103000728772c38fe4c9b900b881945835907fe7e078ab41f437e400518ccd08a2d4c2e1e13a6e407ecd3f78d40fd320bd95a8e8bef521cde80552587312f0e699572860933511bad6ad9e854cbeed544aad52f0a83ff3664e4dceaa37a3359ae2d02c8e1310cca448ffd3ec7c160b21f7f83100b6759031113c720a18ba642d2c616498149e0991b85d05493d0d326d76a12f97312ebaa50ebdfd2c301cc13aa66ac1a9c8f70dae83c91e891008abc6b6cf3cae92916b9e45140982f0a56d90c818ac420b7ea3aeb75656f0235273e7745402e23d844303bb695c9ea974a4a365a810f02ac2010ad55c9c8e6dee5aae4d3dd61572d39abe4e947785e8af319e52da8c24a0712714130f3c655b345d1437a751c96f906027779ee71caa236f8e28c93d23bc08b2bf9642658322a6c3955ee74df568fc094934452485dd0dc88770bf00adcd90ec056f6ba20886d8eb1de4830b33b194322234b6fea40eabeeb0eda89ae67f5884d2a8654c95c3c3e4eac9a6bc2f36df41f9d37d54374994ad7548f58824ba4b86f16f664bdace5c332ffb154a4a2e94bb461a54d3df4834604aca652403a2037ce68e0b560e8aceabca36a1b5d9e9c06f0f0bbc6833656838f71cce9bffb066094c5146bee47f156de18f82f1a1788d60787d194bc7dcdbff226bb612a6d38ba72428f4425c147c1d48705f85e684c1d67a2682982b5af99f04f2a6afdf0c80cc8c62b5e2d6b1ce095a24f45aba3c22802e6dfeec8b61c7181763d3213b17d98c911f15fae596a19844c4a6cfb3dbf081ba177a95ce462423400bc8ac30b3f5ec1dc83c20805ac91ec28710e9ce550fb04bd31d29d2ea3c57894a73e6179137f92462430746aa560b43a532770235f7ecb899c7105cceb18db486262a18e6f712024aae1ee38f949e0555d78033a7f1ba243f2368665a76c26925af992df90cfc01998646660436801dd657b1404af533026e053fc66c83ad055a4d50148e81d6860feeffc568974f9c266ba4b6407bbf75e1b273d94697f26e4fa1e7062b72543aad6b1178a0165b2a5707dccfb252eeaf3c11647224e7aab3cf3ccd3f60b7ffa39ad1590f4d39f2a689e3963e06dbad46907c3d16c0c7323efac7b42987e1b362290cf166528abe5a9cefa45a1eb39a78b4689c150eb11ee26996d055f58ab8c6d3adf3c7dd4088292a6fa38fa727f395ae14da88c0103c9a2c358d176a74d41cc79844e5dfa1586478308b30ac3f09a03a6a8888f32f70e3f2bf0312c556985496aff1794d019492188da093e243372018bfef7ca58be4efca4477d874e3365a462fcaa08643389569a242884a72f431d6099c1024a0369d671d227da0b70ba932802983a1d7c01fd23aaf677b2b309871fb31322b78ec2fc501d1d92f974a81f96a680797089b4c27ec68f2b91a6ee57a02a1c15d275732147738624451d7e327019579432e0fb358b4abd97f59f19585a0eb508849c1f5411010b333e1cbc6aacddff3d7641ac417d5803a0c10ba140991f5c7b3ae6cf52505a1ed45215dbb1db6f197539eff9d273fce5dbd5d37a6b84dc7025e007e60e4d1b5f55cd2f9578243d79cf56502a3263474a9aa4c86448f73c431cc3841d452f0a723558b5f740464449cff377d716685562b90b7612458e8e1a561bba5f82ab6226caa670263b8b7a13e7ba1ed0f04ddf1432cc181345299cd42004836e9ce8a919019b18bda48be914391ccc05c149a0dd4e6fa9e854ebb42ad84e347d0656d568a8ddc20c7310650543930d8e9c3f1d840f2fcc1452d03151a5afe1f97ee876e0c6fec9bee0a2d29219172f812bde62245ca05cc85837dbb6e410d332a0c894794debf1895f03cb779d8a3bb00782f4b11ef14be17a0ae90f7f74b2939634d53857bc22c44d2df7f4f70f3107bacf655d86d711e0fb4235fc3b145eec682426523d1bf2accbc7962a2408c3dd517f450e44573a44116d38ca56b61a7c9979e67c7aa0c866d928ceab0b91efd5dfdaf2b9f39ded8f50ec8f5f40f9a6a671eeec1481a853bbedc43287f2a280f8b46400a29ea3c631413d9090d54aa073644f578c872a0f44a23941af4f97be902d13412be3ace32cc20147b9fa02c0018e368ef819da264e151305a39d09112221edcc834a391bcd65470e0326eec813d1552d311d84b8587c62321478f2074f32f34e220f08d4decf6ab6d3050ae3ab69a94d7cda9d55fb09b22f40737bc9b45d3bff4d4734d48b5431d0ee9f8323cb8c33cbcb26c095930a5ce479f7347f3a83b064a0a30f5d700cada685c6415c2c8c26ba1329e2a35063df3a775ffbbe705f04fae33c21572a82ad07b25e3ff932ca027ba715a5ddab104134a5d2f800e56cc7a1e3f7afcb61e23bd41b111734eda605acb0db1696075507946d2ba33e5d4758d9dc5d1a73bb2cf19007250497a4e0ae1b89f00cb0711cb5e02300fb090c4fd115d2edfa71d044fe1f9f1f882af73bffbabac9cde4a5bd16b635001adc3ed8497d6e4122bde9eac815e0dc76ae2c324813a1576eb45a584a96d58a84a30ec3c8a250169f9237f8973b99e8381f673362783ed03c0f9bbfe6cdc7e2dd49b1970dea0f590e0a7d39192b42956e863b1760f66567f647fd6bb54076d01186809548e698f0bd783bf9a7e162737eae6f2d0bf2efe16a7258c2304b93c1b0d678dfae3a6f67da1ebed6104ee5d4a88e8d07aba7c63a4c2ebb07e5df81782e89e573048eba7c17ea82b1a77ccf7f5e0b57d0f1e85d0d599883c8e9e7e4bca0877920891017dc6eec9491f17a85e0d4c84f222cb8214af4384fa6d31e781257c259004d48d49ffca8a8f9ab2468fafd551b68cf412f1d1a1b426ada35424c6a8c8eaeee06beb3e1eab57507a5478c5cedec9ddbd8601beadf7877b84625ced20ada4306c41e03802e0b798e224ee3da3a62ff25dd7ef0e1c8f86bc66efb82f7c49c541771a166ef9f504dabd3d694bd4369aa14e0e88c872d0ac7f70b545922378f1ffa6a103866bdc5ce65659a12cd5f883313a5bc5eefdddd9877413bf830b288f46d3b73d48514b232e25f2c555c75792ab33ab4ee65490a30bd13c2eb2c48df5f1f3597c1109da2428db64ea7d583f33a5e2a03b0c1ac149a97883c28d92696e4e0bbb5895efec1d66a56b1bf9cbd9493fdaf79fa8119420910ca88fcf73e3673d5d5c9cfa3fd9773cfc787712bbce64ca56e3fd028ba0461509e5a5e4f952fef72ce0bd0110a9914e7ba700ee0ec6d8a94b1ec438e23daa5148b24f4bf507630b8c0f174c96e0ed5bf1a87d238d8dd31ae241321555c27401fe280d901af109389e0ad2d7f88c7223d81b6bf7b42a038358fa595d98056ee1f2651774f546428b0f9e3ee659338d11011f95419a4d196a981ee70a146d2109e00f8e1c48400239533e5ee0dc7ee743b866cf5a1c531c40f2b3c5b9882a39cb63ba7888b023808415beea4c49ab9b462600bc3557f492563d00b3a159c007666d5dec7a43f1e7c77f6ee153015e2cccfc006a683bbb742cc4225304960f69eff709e903347028da8502799c8528760b83bd5d33cd5989262b61e26ea718d7d8b1b74dedf760dacd89323ce36f3e67770b03b3b91676c679cc11017c3758a6131391ff27b47f107005b685cbc5609aebcadd5ae86af3065ee0cc3ef960ebfc4162400d883f71b8ab91d079b1e4e6d20449748b3a801a8e9fb95c32e4ff246142ad4c3501706b502f625a7213bc17213fdb303e31be9cc18d4ee5c48ddc09021c904ef3f944668824cc52988db79e8a56a9da004145c875608b0af23d6654f5d03186a593c87231813b3499dcd81720cd4089ca79b99d4d19cc38560693fc7aba7be9f86136a4585957d5e6bed58e17bfb189959e3c5ab3c1cc39bd4704863693d73a4721f8115392c2517dd47507e734afeb25a44c2e35e9359e385f8570c815631f8767d3dc354e328e9fd99db0d696c5651988eebc53ec3f6ad0c872a11a8688f9341fa4f8451c82bd7089f0263893d2e6ef804f4c9449419479765f866c28bc6b1e4d256722ae7a9e3a55285fb3434236cd24562b796ff7d9bf5fe21063b4e8c671eacba1eab08a74b81bbe9cf928594ca915d51f8321842b63d6ea50d4d613760fb803fc0923b38b01b2af50554243ae0ed44ef403e9db2feefd58b5288355d431457ee9ac9786604587c3830fd9ede23c08f9325083c5cc5b630e26f4dfec55bc3c5c38e4f8dbe832e44673de5ddce3254aa8da3847bc4336e5b087e4d0b47adac8b89a755b7dc63136043507c55c50d3be57cdd8ca08f5bad3009dcfb47d0d626e9e82c168862a97c2463118b821f71ee470e804d478c842439c0a1cc210b968890340a6fa07e87ec7317536cd33d6bc753dae6d83df53cb8f98001e47ab1a1591cc055224a2f6fe52fe0f1db8da38bc34bd11b73d6536ef8d745121a7b35c59e5c1aa41af6ecb6f2b9937d496cf5396a6925179f17e3d3ceb381678b9b13333d9563f6be9344d7fe11f9cb2d1c19d6265a8038c6a025e3104d30a3950b2a4d001c33f3f3f3f3f3f3fbf3d6209a86dc1da0642494829a5e933e886a4d3af0332c924534a912500042e74f6363021cd3642c300c112000b900a690a7e4c721287efc8207c50219d7ef2e5ab5768ccb699422ae60bba9a97de7e1f29a4e6d534ec78caed9db491c3bdebb6f01185640c3736ca4788d649b1514662c36a7c51811a36c6d021811d334822223b66e050f880424afef118343728e1847de4140e31b4bca851520d0f68a086133e9e908cb3552df5f822c7e384e4c8fcb2e8fe72a2269b903e2937c56c6134e8136342fa7f641254ac5f42fa45c74d626512c48cf5a184640ae69d525e8bd9b57c24a1f1bc9d3d3b8f8454e8b8daa27df64f123fc2d5297fd89eb011529eb3c92aa590519ba40849dd8ec93277b528a9254262845afe5ab2d829d42124b3695f5025a61cf37f84904ad71d7b2227a7ef330849d19ea3e6b41954ca1b2024c3ceefc5f8ff201d44bb9baec7aa0d9d0fd2f523f35b49627fad3d48db783ee14ada122f563e78903ce14d0a26e23e3ff8d881b13c099f3b55f0ecc8a918e8b0715ff8d04152a457c8e5ff667c3e07294f1544f783cc070e52d9199458da4977632722d2e81609992a68de1cb12d92a1a2176376bfac49ae45eade34e7ecf1f12c135a244eb0923aae6c7e109359a484bdec3196c9352abeb248e97ce5304bba39483516c912bf20e324ed0e4a0e2c925bb952ac82f215295bdd746fa277633f57a445a45892922717f5aa150919b71ff4c7fdc72b870327b081c38315a9d86c33f9f77e2be4ab48779aec6958501a645415e9ab983ad77712c56e4e45faeabfaa1b5a54a42d9f6909a304ad96a153a4e47a3cf4f6c5eaaea648cd7f08b5490cd78c612992a2469b9a602968e71452a476f404f5cfbfdfeb598f5124e48f12aeba5a74855459e0218a7468d7fc75edfee5f95024f3de0245dae4fa95b720d3fe853f914c769b22467ea928419e485fccfe8a5fa365946427d2a721afe4af33ff66464e191c6280e185884872226d494e9393ee6831116f2269ed22abe48d51d9594da4f247f5ffd73391ca769207cf17af377a3091cc0cf53a6ee2ca76b5028f4ba4e3087d1db295b28fef6189c459685fac202f55fb9548e7f670a14ed0bad94e289112d5f9dfb29349a4eabe2ff54a4bbc19492231ea6290a1a3e61189649282f689f4e4a619c5716377788e02898488b939adfc5f233323f07844d2674c2bbc24d7b6dd11a90e26a32441ab6825b71109df98e1829cac972a46020f46a452de343195e8cb9ff745243b5b2e496fb922d25da76997c27290994d444af3c9f6fb7627fe6c88489618bbd4848f21f349791c229d8392378bf8cbac9dc4106953cb31777f98bdf41a8f42243dc6fb9dd1a0bb2d26442a57e6cef16772ca2bcbd81c39d684e1318854ca21c4066d49b0dea0205249ed827c673f29d751373c0291ae5e934ffc47071089fb12659db43b5db9486be0f18712b981871f9255612f8f8510cffae983071f526dd12c8650af9aa98d9cf2d84372a8dc279d9b96640d0f68a0c60e0f3d7451d635cc594ca38888884818eb397684400c3172902146e3b841821b27101119e3060dee8c0012e1918754ce7c574fe91d39e5810747c9b15b34ba28cb474e898878e1010dd4d0a3088f3b18d4efe63e4deb897800041ed0400d8369f0b04339b66715e544ae1411111129661e754079ca33cfe1e3961f3975280a1e7448abfda76495358f39a4f6af33a3af9a2587549e39a9a424ed9e14fe38a4c3c92741af4971546b3824c6aac6526c0c1b83eaf1868496c7ec5477223fe486d4a715bf0af594a3aa6d48c70d4abcd613cbd3674cf0604372e4c9f229ed87bcf0d690ae8e5a9f2b869a6829661e6a48c6bc87979c3944e5138f34a4d285cd1e3e25e9531ca121992a05eb70b2a7f270728684eafcaa33162f73a619122eb6571752d37ad09601ed4984a69f5daacf888181071952579ba2e8c8cc630ce9af10da7f83071d6235f31043d2841955965ba183471852a2aba173280fae7e3272aa2a101e6048ed8d0a2fbb6900e8e0f185b4bc66491f5356141d77ccc06d9cc0c30b8c6adf0d52f35d4868930be9ed6369fca4c1b811830445446ae1c185d4a58ad4de144a90575107b6904c494e3996c2e898378824e0a1856410cb942a6edff7cd2ca43a65bd38f9f7b432848007165299b2da7ed218ae595f01f9cf337ea73956485c8f6c7a4e1f29567954219d6fddf7ff3a1e5438ad6f3f8a89a6908e9e93694ac27609a391424a1cbf4cf9f6e3084df188422ac7a5ca9d82da0b961a397587f08042429494ac3bf99d7b729f9092634e1dfb93e84dbf3d9c90d056b2a8944f982d4bd5f8a20239bec82484471352b76629c8d0984e7d83060f26a4fac773773aabd0ff95c16309a919abf467b9d9b6b388c8163c94901825e6330deaa14a5300e1918484b5e52e39f6ace60a728207129229da55cbd7e70d2ad7821b3aae6cd41c3c8e9036318f6b9d53bafe982f4444b2e0618484c81621aeb42ee6f245488610f518fb16addaa1297810219d35ec525cd5e7252929780c211d1fba454c64aee72784d46cf490a32da8fd78270c1e4148c611b372b2acc9061908e912d93e912f566234f9417a2bf6853b9b8d792d3078f820599fdd2f741c293af73d486ef42edd30131ea444a739f9d4f9a3c4d278ec2095b1ace48e56e24966d92823c70ebbf7d0414af614cf4eb46b8ee98841db68018e1b61a8251e39489ab09f3762ad3ac8c886070e9263a973679fc589da46c0c52d529d499204a1e6ef2f50e0c216a98ab569729e9431ad39720a49818b5aa45d7c473fd56ad58e464e750e04021111072359eb0217b448e996493d27bd56bcd8c829dd0117b3486c8b3ad11bbeb3a576e4545912b8904532ffc8a05367cc39679e23063a70b8894572eb4eb3848dcb602f6a7851e30b0dd43088062e6091f4d298c4934ece169a7d45caf5f6c41c54b260ba2225ecd6e5bebf5b913e3f59cb94eb1eeec3052b52d9721cff60d1bdc233d80dd4f0a246e3b891811a5ed4a8e1458d323c0335bca891a386173554c7d8306cb49716b858452a567a8eb9a26e9ce777dcc841c61d13b85045ba372813e3676e123d8ae302d6042e5291fe502e7741c8a0c60445c0052a9276c27db40f5a3f6cd03babc617151011a92b1d01200217a7487846b1cb9eead2df69c36500861865b06a09b830455284cc6fdb9ddd3d647c8c0ed4f00247076a7851e302222261dc1011d13070518ae4bfba6779ca98df5952a4425df5ad4d2cb16367146a4a99b47593c8852852b92c0997cb4e4e6e49464e55759f818b50247bc34ecabd495c79d107a6c00528529be4fd960d934fa42d9cc5afb0eda0473f724a44040b5c7822b9e9e2b5eb2c9adc3c720a060e83e401119131c2601d09179d4897b56b12338d23a7c6b03146187c6178510618383ae02d70306ec8e0460e0f80b13180413ae302179c482d2751538eb984d7d00e1d386e9c6d823713dd7bbd7feb0ee306181ba8e1450d2ff0b24a13a9249da0d2e5a05b4cfd4ca48230f9a2caec9848c7b6cef0a0d93b7c7d89e47aaa07cd599270f2bb042e2c91f6bcb5781994a0f94711ec583028202282c377ec58303e095c54227d999a0461f5294589648aced18df524d21f7377756bf60fa39544b2425b7793c9a131a348a44fbacf31877993d5a35c40225941eb4599fa8f488f4ea2f37dca5e6fe28854cefac71f8d51a9e38d4888c6a78550cdb3cc1991cc214ada9026325ec48b48a79957081dcda4a4b122d2a1e9dedfbb494f4c9288948bc85a8a292294681191ac745bb6f1edc494ee2112a3de2f8ea76f4bb921d2276ab2ec39ffc2071522d9a56f294b7a0d9641844827cd7252fbd8fa5fd02052c965c47a18ade93a15444a8ee3b156f2bf8d7b02b179983d2963e6002215339478418dc96649f20fc90bbdd79792183fa482f6afbb92cd83fc983ea4623ee7ddd850a2e70c1f92a32957d69dd943aa476e73f09282ac897a488e6fac2c692f67ff3102e5ca51beeeebc20408e9b991da17c37feef807e97ffd8ca776275f121fa4e26ed67e68b78b1ea4368f5052787d69b8db050f12b6e5c9e2c7a40c73bbd8412adca88b368bf1566e173a48560a62e5bac6b3bded2207a9bbe4dd6323f3a9b25de020dd59638ad14f10d122748bd4f6cd8a977d099e225ba4eaba42e9bc8bdd06d522616937889037278906d122b5ee41ed6e7d5ef9d02cd25bb7b97dfd9399149245bad2a2c7d1a058247febd3d482cfe90816290f7be1f72322d3fa8a64b8de11f275e1ee5457a47384e650a37372f5ad48cd258d9b93bbbfcd8ad232c8eb10cf5945e2e6ba45a71c55a4f2ee5a4cbf25093a4e454a0c3a35499b838aa479b60daff3140911adafdb1325f9688ad4aec91632c7491fc252a446a61fdd499026a58e14c9d4b97c772d47914e92f5f7a83d3f3195a24897853f490c375247254391124d6a354b1f50a4cd438305adf4daf32792491cb12f299edc9bc41329d1613f67df74e2762225c252062d4d1684cb8994669031a6fc2e713b9b488e12d63b78d20e16a389944879db4a99e3f29948b8bc9f9d9de4b91f265252053df1aa32974848add3909ab7442afe66f94c2667aebb12e92488cb1e2549f27f4289d4be9e7cd9b22e636812a91493f8e9d99144d2dcc367cbfb5c5f4622f1da31f3654348a482123e95751e9192d33efcc97b4e962392b7569acbf6372c858d489928f162d0f64b16674432c678d1e26e85fa8b48ba7dae4d96fc93a68894856bedbd7e0f174e44fa44fa7da5c9412d8b88e45faed5205ddbd53c44322b261dfd9a72fe8d21926134f9bb7a5788544cb14d3593a85d3e21d29dd34cd2b4bb24c80791d412bd9b049157b22847cecf104462e3d2b332ed9f9c0e4442a69836db6296da05443278fec91f529e452ec999343f24335c9a7dffd5b27c1fd22346878c6752cc41e743da3a3d35069537eabb87748e2651bb6b1527a8f49092e2d5bd3b9a8784dea85dfe54b2891b3c243ba84dbb6ba2c76aee901c313fbf9cb99c04cb0e693f8d5183fefc6482558754c6bb1ddb0ac2cfa543b26ce5ec2f3b8754fe6c533331e36a2a87f40932f49d70c6213d9fde79c9eccecb0263af0333e090fa3c792d9fc926c927fb861259c10c372436ece8686795b323d383196d98c1062d8890dd1d63cc50294467c61ad2b35e6d9a566b4ef09491e38b72c20c3524b39a945c7393868738d3901015f9a244cdea9f9691535983196848765e11d729c9addb8d71830c2c63c619d229b60495a327917b35198ec3eb9a30c30c2949aa5eb5ea3c0bca5425cc284332fb6b060faaaa2eee44c20c32243b86f6987f487933c790daaedc31efd75b8918526273529f309a45f71d38b605e60833c290aed924e8cc491a0cc9cabbb47161833049d68830e30b894f73b1b5a8273257aec30b6911627d9f4f8a1b355e4c0833ba90d8ea12ed62ec13d45a1484195c48f695a82fa376f6b285f449d7268ecba885e4e5acd195426fca0633b2904ee29db4fb6de2c8ef5848c8dcd523fd476856aa4098718584b97acccb14ff52c6474ed9e8f51c56484941b459a60a2588d771a40f665421d923fece46495274cf8e5021f5e163acd1d0eb202bf260c614527752081d2a53de24521d524879c67876f2caf8fdf11d3746a2908e971faee3a86dd674061412eae29ec927ad6bfae01392a953e3ccac580e1775427ae3c8f674e31e6427311dcc6842aad4d7d2347323a70a0e66302121a2de7447a667a5f4c8a918cc5842f2b3889283320f267668e4d408e3d81c890d1c375ae089558d2f2a703870021b3098a18454e5982e8927c7112b7f12929f22a6b1f2754e2d414232b47556922c86dd588f908add589eee9d3e636a8474ae14b4abda57bf9b4548cb45d592376e59c544487a721fd5d13143486aac911fb7e5b2078d10527125eaa7ec6210d2232c5fd0bea3539c81904effbb60f27bf04bda0fd27ea7dd73a1e6375a3e489c5992b399c80927a79860460f522b4af21761416e8c9e07a93d11f2dc5294158def2059294d1c7dd16d37ae83647912d4e49831c72607294f626695fe5a339d8183a48ca8fb16497993929c537fa59b24b648c52c29aca50a32b4a6b54808cfd69915365dcc1d5aa49358318dba12db919d5924f33af59a705288ab1c59a4b22769df7297b148f60917465b76695661918ead1354b7c56cea7945f23a5c7e138405e531ae488ff014ac2c99f585d88a94242b2768f6d4bf991529ed14462bd97c509355242e6af56d9794c246a78a94860aaaacc492daed54a46364668b12cd4e5c43453277b49c2ba56ca1d2a748fe65699cac376b5f9922a145b86e4a6d29453a3de8982b3453a99e9022e9a775298408bdbaf26314a8babad11aa2d358288a12f908857d8002f927978cc9d7b9d230f8f844ba4a8cdde42588bae6c313a99ab18e491023f6f24919527c74223556f9e797349cdd0681e2831369d5909ed42ef5b18984b4d1ef69d22693c478e4940e311ec70de3cc1130abaaaaaa2aa4270d9e41e2431329f9d1db9c1bf3918954e8a4d715fe53b0ab3d40831b61dcd8314607b06c70e20313df6611d7fb19259b437c5c2235fe1e9bed4fe3cbf6618994fcb1551fbedec4d29548c8eb16bbd0d0fef351222193ac29d659ca799f58e163122941b4778bf23a8f364a2295a460c22831c60eb751193e2291d0912e16a45d2091f220f2392871c333c9794432e6fb6a95dcd7b15264f87044dad62afc3c9f69dadf8874a88bff9b31dc6cc388d468b016ffaf3f398561f8584442b7828c26ce68b66af64311a9efbcc937f4495fdb2622bd55a72137f3a7cb8618ad31f840443295ba6fa55fc590810d31fa1c2219d37cb024aca5c79cecf016183344627e4b2ea894635a360b91cad1b4cef7f08b82b184f81844e25ee6473eb5c8d7c7b02146eb872012522b664e5e9b2c5e3372ca58d68e19f89de02310a93a1ff999f2a98dd0063e0091b820fea6497d6f3c19f8f84332c61c3a27e58c25787f15f8f0433235a92549cad8558d2f2a50e3a30f29930dd7546214d13967e454950ebfb1e3c655fae0437ade575cfb4a9235a5f6901a111b634a724e377015c6f9d0433acf8ed85893a45c6df390b2d0b9cd9ffe36e868153ef090babb7951de49129374df215dfd712e2c5f4bcab21dd2aeb9da7484340d9993c2471d9226d5993426bae7774787747b1effceee0ee33973489e205ae4c58c69638849f89043e27db388123f9ee89a56247cc421fd6bb2c6cf8925d3170ea9f95fdd90233a356557f8784342e77b95c976fa31968c9cca9113f87043c23ce583e5f20fe557093eda900a9d6be2f5fcc9d9650d7cb021a1935d14b94e9575291df85843426d7bea909771d9a5c10d6dc1871a52fd71aaa1d277bbaa23a774e00c3ed2503ed090d4a09da4914b118fc9e0e30ce9381959b1b3fca4139363c718e71f66488d05296b5a5d41767ee4940d8f410ee6b58163b9d88e8f32a42aa47c0abde3eebf8f9cd2e13a3c0719d2e17e616cb428cbe38d9c02e3630c29b9204693e8ade76f9472c1871812a34d4c3d832abdce87219583a53c31df28a9d60643429ac8aa99e09b52c35f48c9aad7c5c97679258917122237d78986788c7bba90ce9e5f72fe213deec88584b6b44bf26bfaf9f86da1a03477e51c357aa61caafc3db3458e907b4b32036f97819b0f2d246f8492d25563ce6c380b89dbd5144d5a6b91132c24bdffafe283d6e5d6ae90d07729c36ed6b7ff726c5800d0f0618594bcfd854ecd61377887878f2aa46b931884082da558824acf6e394ea0618b541293f8f932dc78b624b548a690b14ff6f4d1d9e11168d0229997729af9b34afe31b348ba876bcfbfa83d9a2d020d5924735335a78b176e62321609cdd25b0dcdb935f4db030d582463ca50f258525f91aefa4f31d409ff953f0f68b82295429ea74ca11d038d56244c1e6d1533fe29a30b061aac48956852a7ea68aafaad5945425c8a3b6a6c63051aaa48dd598eecfc733e4a7603345281891a111abac4780c60700387084676dc208188888808a2818a949c5729774961f91d671aa7487aa8d8c5947a3d8e9b32a0618ae48eded3df4ae27692b8834629d27e82d250d9a28aec76e4148e1c66a430d86b6a1293181c34467105b7d0d0ec78354591fcd58c159bf1028d50a47210523cd5c576e8c01cd6051aa04809d23a589c6051348b23a74c44c4b840e313e957db9242af8931cb49e6d831c6d2f044f245a5cd41561032d2b3008d4ed0e044ba54b39a059df3669d248d4de4a0a18912a19189941434062556c69c2b8e0e8888e4b081430c4ca4929af8e9a45bb39364474e55d5f8a2023ac61023c7040a8d4b24d646ee78922e474be2342c917a4d41c7c7869ab01913685422a9795e62c71863aaf229615dbebf984bee49a4d2f2cb07bbd49fd3471269ef4a26ec7e0a4a3d2712098b224d2bc627d97c038964b5702609fa82d0c8b17a038d47a0268c5477d11a73a649a0e18864c52c7b0bb977a3b29153492318341aa19968e55c5956d13499b0663aee80062312b6d5b2f549be98f65b44c2425fdcb6f682e6cc245ea593a291889498a01e1a8848962651728a4db1962b1a8748c9a76451cdf357b45bc98113d838010d43243be3cd489344d16d6621529b3583cf865f748006218ec6205235ba7dc28fd0712422420110d4a85a020d41a43d2c05b9237a2052729ad14c224344650e8874aabea79852f431cbff901edd61ab82bebb6cb51f522ac2cf3a745d6b50f62125cee78990d1201a7c48be6aca9751cd9f73dc43424952d0993b514e901ed2d9cddc4a729d5b2f0f0925797d7ab88e061e52e1ecc4e0eb25ae657a878476cc94bcf344a061879425f1ca3c672e31bc5287c489232ae66e119ea9d1212596781ed49d8bb03199432a9ea8c152b72ba5989143ca926637ed131f25c6e39092af3f46b98e0d71231c521a35a6f81af3cbcddf9034ef4b92cde74cbdb71b5227a8309324d1e532a5db900ae7d1f246b99cefc886649cdf14644aa204bb6e0de90e6dc1c478256a489df7a58dd936a845310d2971bd5f8390d531ba8286f498579e8673970fcf19525f9a366fce3f63cc0c092528c94bcfe3cfc3322474aab441668b791953322474922aeffee32a6e3786d49c1457497dcf2b2b31a436fb8cfb5ebe182b260ce937f983897d257dcfc090f6fe141ae3db5f48e727db58613d3bc4f242c2c45092d84978d764b12ea4bd4a1e7dbfb73c7a2e24d504dbefaa954bedb690ce2a731744665a48a6b8ec0de765219d4e4c4c5b9d626b25b1905e513a73b2492342e72ba48394ff5b6fd5babc5921a9e1ee828a8665c6b20a89df6b93a3ef5a75955448c91e7d3788dba979720a69b356b7cb9b31b7a01412ae9b713eca8e05b94721359f8349a2266cac24050aa92479878da173bcf9cf133af1a2891a265f4e486aa6a0738ec9d983e534211d32878a27e83139858a09e94c490c4287a7d1bf9a2524443bcbe32b57ca7d94905cdbdb9251ad74954b424a3891bb2a512e5ecc22c1e45164c9d6311a474866dfa866d9d873eed13042d24ab4cc7d662f7642a308a94d392b6a8c5e7272870611929ebe4e56d32f6a663486909292a8aa92bde4fc1fd310423a5c2cc8dc79573bc53482900cb549b69caf0284742cc1535eb992d355ea07694d9b95436a0ecae2e783f49df47362c570efac07a90aaa72ead39107c98bb25af192248d1da4447d1cb5a1673be591860ed227c8d3f7933bc97b1e8d1ca4b5c3653cdfad301ba7818354d84dd1deb8fb93ba5ba444780efabfe4d82295435618d11363febeb5489f5ccaa9d5db656ba4454a74f7a02dc55c51496a16c93876fac172cc256d268b544a134cd44e92a0e39a5824b42fc367d99874c68445329ee577595a5e91b2a4974ae4fada99e70a73cb88d757d58a64499be452ce2df994841529f9ae3ddc955b50f955242d5b92d5e4d0666f9f2a92f6232d7bde73bc284a45423f89959eb5f3a282a8488557ba33e924515f93a748b96d4e724ab74c910e2b692ead93a4a1b652a4f7525b6e5da5a0c4125224f7ec3dc5bc31a348c75b71dbfc4178ceaf2852bf31279f26f9720c311449ad4f5dee312a36754091926f8475cea4dde6da271226e7944dca3a7f1e749e486c8bec89f369ef7dd289b47d4e496dd5f2676638914cee5f395af89031934d243bdf55c3ac33db7c4d24766b739958b179b29a8974c996c7db357d069dc244b22e7392d1bc2f919c57b5dba0aaa42bcd1209f11562adacbcedc39548b72529e6905ede39e65022d571b6fa959f53696712491f8bbffb49fe2f8f49225d1ed5ddcf248d665d24d2a1bf4673dbea5b54482446766e31b78f551e7c447283129dcff52b585c1c9150cfae58ebb12e059546a43ea5895e6926b7a58c11c933e964b3cd41c988bb8854c8f91c623e5bfa0e2922258cee3eb7134d139488544c9719aa1644dd4b4424de04f17bd1d2ce28c1432493e4a3ba9a7b432483cb68d9bf9497525788741294b4bd632144aab2a6cb702966133b3b8854c83d2968668a2052b21d2e7ac891333710294d7129763683a70801913cc9c43b419be8ab9c3fa4d24cd6d2588f1fd2e3692d791075b2985c1f125273c4ed532a51d3f8909096c3d67556f6905e0f67d26b10bd51ea21b1b1ba1f4a4cb1f2c6e421a995e1434b375b75ee0b5de021255e8616b3d59804b704a18b3ba4bea208952cadddff06075dd8216df12ac57aa5ed4fbf0e89edab641d2e49729e4a8784efdfdd55b0f51e1dce21fdded922d45f89996939243ce74a32f15c55621b8784cde8b57b119aeaa270489fd49d634765de90ac78c26c50a3ca3c331b74e186747a13e36cc5fa9734de0dba6843fae4eefa7c9199921cea820da95c27a99a6586a61dad2125e8f3f8fdfdab219dc41c841c317e729e781a52a962d054a9c276657d5da021b5a331e5cec86748bc09a2234b7ac9e8c20ce9b2cbee649b324b8ecb904a62bcf15bd94dd14cc890cc3732d9b65d88bde788d0c518129a837889f9e437d82786e4e6ed4c6f79837deaae8b30245fa46bc57a67fe5b15e8020cc98b6e418ff6885ffc0b09e927d7c5364936d9f642628472cbb6516794dc85d46e0c2396e32bfd0917921df5538e9bca32945b487e8bfcb68baf85747a0b915767c937f55948a78c6795b9f25848eb5fa605255f67f21592719374f2fb899d46b642aa4c2cd973bcaa18a45e8594a441455bbf9711324e8584f031cd9724796e353e85b4f97f88491783d0cda59092acc45a4f3ea293148f424a2b9fc52426e9c5db86427a54fceef099f5f7f4135273a13c3d657b144b3b219d62ae343198eb67be0909d5f8a13dcb9ccccd4c487a8cdfa8793e3749c24b48a6b6589b3db989f16525a4d55553ca6e972c6c3809c9a0ad2d5b746d268f919092449d1fd1f0a2f53e42eaf4fcb5a4549dd53642ba9386aa1e3f317c5c84540affd9fa10e576921021a1b7d5fc6fc35b1e2543486546cb9d77238464c74e2917e2bd9241485801aa48c539a92b284da9829c53912ab13f5aaa4ebd234245f27245ed24c693b37df614c9a0e6a4d51c37a6345253a434b7c2c524c536692b453a888dd9bc1a9dad7248913ebd4eff9ba37efc8c22ad9ffec496b12d6113453248d7f5a0d24d0e2a198a840e19d75c22646335a0486cfa4cc2dbac7bc79f48b7fd9d6b50593c89a22792b31f7ff5576ea3df89e47b27ff24784793921c275271545ad758fe1b35a9e18587b11ca8f185066af4958dda43c82652318dbeb4cc0cbb49ac07219a489ea6d0a3fa73ea897726927d1ebcf257ded1756322a12ff38b9fc92592b217a24a64ca771bb24432dffca98ea795486fd6f9acf9a7ef9fa444f22c84b61d0b9bf1042791948de5a924313b66f21c1d844822252613b39f0f5f27ba91488ac70ab1f14d1c531512a90fe969f161af79bff388c4893166c967e66bd732421c91b698cb3e74d3c458268d48a6bebe6a4ba245fe65445ab3785ef30dcb54d12292f727ebc96e592b36aa8854957c21523497e6ba242255f5992d3ee8cc9c5c082252f133dd96074f7ba29b8e90432474ed9d75ec243a8a2112a32b76e71a7dc289e3c8a9b24a454821929ea40bfaddde727e9623c821c6db0083bdc7d07156114288748aca56a2787dba271944fe257c980d8d0b22615e629afdb1fc3f6f20cee82787328b3120525f82f424dfe786903fa40495de64f36ee4940d1b0e46e3d891332e84f821251ed4cd8969e4f2737d4868f8382236a5ce245a101842f890ecac9e9b939a8ee5750b217b48d6ec5c897b8250bd560fe7f8f4b42c494e961b36aace48481ed2e92c97e456d527554662c30c8708c6108287a4e64cf152f20b7acf7f42c81d921b349a5c2eb73af6212c84d8215959fdf2be961833850d0a21754876308dddceb738a91b6408a143d2624cd9af2946bbadcfcc162173d8ee3a94a49ff6aec48421468e0f91436a7475ccf97edf644ba285c421311f5e74a7b0651242e090aa3431c8ce9493ec71e21142de90fa37d9348ec84a37dd0d098f9bfcab735ce5b9464ee57030c02823c78e36244cfc2bd1828ab29eb31cbec375982984b0c10e7af43b6ada398b2142d690948bf992609a628cec474e950a51437283cc11e22b85e60b0ac1064c042169485979b6c6dca10e2f66b01b504341081a9239c36e50d927fa868b0daf40c8199272f952fd5c0c2da9fa42881952277e18d17edec82911112fbc28a38cbf91c347b081f408454819925a5a2779aaa6e8188f1c1e849021a1c3e724e564a257656f0cc6209399f8ca289304691142c46042c210028612d12f42be606f69f236e9bcdc821de28546c76f4beec82930c0d864470c6c74af88c88dcdf105321f8474e1d08f1a4ece4444bc282387cb208988a4be22840b26f92cb72b660bd66fc6f4d172bfbc102d20355a4ea9e53159509e8287a667d5f1b23d43b2904cc28e6616f7846021edb147de88f7bdb97e856477c7cbd5f498644d5169438815d2a73af66b9ed3b5da2aa4fb3e9496f431f6af840aa9361383968aceb96a9d42ca46e8aedff432cf51a93584482139334a10d57051f2ba5d4814d29642c7c91f64e7e05508146c3c20e40925c409623c8e1b4d6082034296d0801025d8b8314604161092841b63242004090a0839828e32fc050c0831420e7f410e31c8604048111e1042041d43584088100e1012041b080801820e0384fc606d2020c40721213d2840080f0610b2838f101d2c01427260a3002138488feb8d5ca5e705c82d523a4a1e97ab5f9374e339b0c048f60b32160465646c0e0d80d822e1b6257e30613ea7762804905a2463c8e707d18e59d1d12215748aeb93ab376ec56e8c9061a36c16c98a6ae9f77e79f4731c364c898884614816e9aca0de4f1071cf618362910a9b4d0edb1db369476580c022156643c6ac79135b64af489a98c22ba7aa957a505d919671cb3be2f62b3bd88a8466559253e5b2b9c3f04306082b12ee2263fbe593456e06594542e392e66af6ca1a6d0baec61715f84207882a1223b3c6a99e200e80a42225fbef315eb6460b3da222ed6dd14c4a377a5ef6c8a917b8ebb081c34776d830905324357a0ca6256bac0d199be32a0420a6d84f4b0a1b394b914cb29a076165db72a70540489170adf0bf72f631e7c8701c56200019453a7a0c9363343c365e1eb03a0c808822d52606cf361f2f1e47905094088380a24414e413a94fa1e2a84b1d882752f929a4daa5e6124509482752313c53548b59026303841308b28952d67fb1b324489d0c209a287b2e8df9fae8f83361f8b5daaa93e4aacb008289c46ba8499b277e9bce38c440ce383aa09748e8d91269f2a71897a225526aa6a23f4d70f35c815422956e3f66cc1a5b6a594a2493a07582ac9846135624804c22d91f4c3e29e592488d2a3513e6673d5a1d8964d0a4b95a34c7c9513419a815010412899bef204f368db628231d803c222566662fb9f21d919cabca3ad70f91efe200a411a6c75d4c317c0e230a6411e9f8cfbca22147b363940f208a48ae6b0e6a9294213c802422ddafa9d2ea27edd4fdd6008288746e13f49570928fcc9d39801c22f9952dec64cba02a4e33801822a149b40c255dc54d9fe4410a918e3149ca8a21aee4b0ab008410aad98cc664ff23e3c8293236870df7b7e16cba00328874deba24c9ff5f514c1e39557c002288b45be57d171d3310c92c5e95c349f225c9d5331040a443a6b2babd4f11f3a22c40fe901af5ae15b6f96377908ef543f2ef5644894e176d2b23a76a785163878e2f3440011191120b903ea42daea4ce49573ea4528e7d781613656edb432a2da63cf63105dbb85b1a40f490ca246f9b3842c9f67ae721559fd248f3138500081e9226ad253f4b9d9131bd43dab28d491983ce864fda21796a237f4e74cfe3ac06903a24a4ac68d9da74a9e25201103a244c72ff15f3390db29f433a6eeea7dccc1c3e97437a2ed4e5f029372cc63824bd457fd4e056e11fc32179820e0de61b1f733edf90fa7c6d7f62b4b4192f206e48c92a6252d6b86119fc3624d74ecc72593d94789c0dc9a0939c53b098f36853d7908c41cb63cabcad413b6a487fcda73579d3fc769034a4cd2ca820f5f62f40d090d20b9d75d7619e21f556bb31a377c8a712c40ca9536f3fc96793b01dbb004819524186329751376692750e081992d6b144a88f3178da65e4948e1c5de6206348d52569c3a81346c966a223eb540a40c490cce935f2f3c858560e1d40c290bca89e23eb73379e6c2040c080568eb27d2199628b56877de60f205e48a86fcb39a6ecefc8641340ba90d835efcfaf15640208179221ff828ebdf9a5a96a01640b49fbb3d24bf5f5e1315a48e82849b824da325b833e00928584bdc9d124d786187d0803102c14e4e24c9091082057488af0d6b68fbb233c478c2e832056487c9dca7b0cee1a40aa90cc21dbcd7f93686964205448cd9658414484922f3325634190a62053486f6e123495bffb57080c205248bccf985514b9a215b602894242cc4f744b62d2283965e41497183a7088e1c51540a090b8d8b6502d6eb18258068e35bea800187b230c3170940186181e70a7801a05409e90aaac2726e172f4db912b000c01e2847449f659e407ad9e921411911d09089026a4d4739e11c27d26a4934976929836683bf95c42eaeaa35a05a1c753d42821557241784ce9625f6e204948a6b89a3defce8917271292e2a253b019ffb9da82007284c48a1ad5f1b0515982430031424abe609f9ec4109779aa14408a907e7137d5d4212224fd2ab36916b71d550f21953c8f49e192f89eab240a204248273156ea283f6b52ce052119b27ba47b9aadc80808a9d0a0e39f247bb236f107a9ad4e1d4f56b774f1f74152dbc5bbe3fe95306b0f5296e5d13ad6e341f2242906b5d49d1da4d24ef6189101d14152e752c84dee9bc4dd7290aa58593c7cc80c8f39080ed2d1839a6f1b0f19134b346e91d092dc8bcaa8c48fe52261180e8702c150280c06044a77770493130820202c260fc522d1784894863f1480035032264a2a30202e2412181608c4024128100a84828120200c0604c2c03028180c0d8ec368fc020ea2d4ad2a3e6a85b4890a9ab44556d5aa7fa83c5255b55f52e2aa8c55a153fbab5cb74264dc668d5b8e88610c3d7e5be9974440ad4327b15e3eaa4eb6732e90fae264031f45b6e11fdf03a75a8f7c402df8c55d6a7c386cf78e4811d4182b795b1e8faa483f515463422417115bf8f577f67440590339338f85e10346f812baac9c6fea37cffeb38d0d0693084ccffe8fdb5a1e9e8fabadc9104a18d60d27864846ad1a7b2b4553fc9f4dc850bd7f0f96bdfc3866446407b0c139dc731d2551443daaffc02490139555bbda589b0ee25431c9f79ff5973b67bd1f51baa5ab5320fa32f937b215b84dbf54b6a82fc5ffa1a3dc4ba5721c8c88b568c2489797e4948ad058fdf2cdcc62ae2a2dfe691ae3d6eb203c7fb7624a7b291baec6227ab348699f28edcf22647a1ec558d75cd9ff44049f27b2382c43c95f99dd90b0b778554a41296b45a34f6b85dda74f698cd9a797f5e8ad4ac01741a6afdf7b4f609faa21c7c69ca721e0cb6b437cb867410468b1944bc176b8c372d0048f93ab162c20091ca935887b754813605a879893aff6c904c0c1e7a825705b00b260d058c979bd6cd0e78a764574e69ae4fd06daf06093bc01a282a27688a94ad2f4cf43b2134994f57e3cf6e9b5211b1256a25fe9617d7f3857964c9a0cf98eea78e267fc52649bc35829c0401750451a8636fd7a8e88b1a1ac7be2bdadbfd0d922dd1005b0759b1fb2e8e892de4b966b03b683cbd52a377efab61ba8d9cf7741e4c94d153140a2b295f9b3315055e4ffc40f6e225a1b5c58ba8c819affc3275dab5d415117c490a021c50a8a22986a520bb1cc35168bae0942e40251970b5e051d915d169649bfdc3737502ed5de75c9355a23d5f7d1de8612ea5288b43d15b84f6191fcf20ac8825a4bb0b56a319fd38ca687f8f1dff36a1bd089dd6b1f67ec386af44143e99616938d65d7b3435ba1b25938c8907ed3231b6868da3c4d6e0495a007cc6f4df4023b6b72e745a45031172031499adc5125b4e14f25b01995c25f2230210fbbffb2815cf98bc621a5076cc1ad113491ca65cc2c9dfe34ac11add1eea2f6cad9ffd6f3f9573a649f4e3a94e0895c0a9d746e9701c95b6e372a117c5a28d13039a49a35b49a354788139e3b763332e68254ebfc3b705be005902cd5b76e6f3694ad9ca3bf71394ac665996eb6f8d85bcc362c56c94c13ff4c3d452e08e1c5d93d818eac94a6b4da8daf8f17291414ec9df376a57e14ac1c0b55543263393df324c6ba097e0d3b1781e711f3e93b5f315f70fa36181ab330142da09a96d7edfac6833266719818a2036acee41c47931bddd525b9cb509059a5614c40b16d713e60fa0f94d0f76d7762313488fb2ebe482d200abed44b7cab3312543731e4785413d059414016fe685b916a7812c85b8009eecaa458c398bebc8fc1525849d17a58125238a7cac01c3f9493cd57661f0b7be80e44e4fb23c6794bd5d0bb97fea02357c3df129b2c028f1367d9656dbc630db6944ae462cec9328ce13808cd73334e6ab3ba4d4c5db040613fa45f168804db825b047135dd4d008eb15fd3c2bac13d4ad640922d3651ceab2db5d8c121d7b95fb85caded76c39a7022a102909b765b6ac88d598772942c4b1bd4babf54b1a4a5885803aafc932eb85a007d1b28bcdddf3ef59f1053233f100eb78e93abaf214d46634705f67cb10e1e7303cf9c2110d3990737cd8f169befd60f12d2628d3054b9ccd8974694c2f0ea3a0c954b3261db1fe0532a1fa25e426ed6101a13c3c5a39fc204b1d8a86d19e59ccc2c5246eaa4c4999a249f8d161bbcd0381ddd0f929d70500b373d1cf75cc470bad3d588b017300697c0ca50896fae2c2f0257eae84aeb2d604c1d9a619b4bdf7c73b52013cf9f39633d1471d09f62f614b576ea22997a7bc60de6dd79504f7516133e6b1cb6608a917e3eeca339fb25e3563a00cca1d5b73a8ba323d11825219ca8643b7cc3aa6dac90a302eb6f4dee21ac841c99a6c05408375e999cdba2a9711c7ed3d3a484ab6b72c07d7128b7eded1f96559f6788875696f1784495a74ad1c082a206bd1635abde7271669115147122d6b3e1fc027ba8d7b296095be9a5c7595f0852daa44ca4fd279456cf033769aeda20835ab20590580f1cec784739edc9105b4f9033b5b63101ad11cb9246ad8605374971314f3671bcf8b63f3a5fb9b1ffdc87b0735ac6d4c3027fb219eb34dec1c674ae1671f05098eecdc8b64e0de7f9fd3dbf4a042dda76affe0a3c167f93d6290e020c4c9a42ac9db53be1e44963248572d5a9ae46e239a629f93a5c5347e84cfae61435c051281e375bb498178e9006c7b7cf067f8b0696ab6c9fa7c504b9c06c4b547e18b90bd69ec9d01d03e0c7642eb84b8b389e61eb1b96acb3cbe5f3ce32a2be041c9b29686c2511694ca8e913c6d6b0cedd7c4e884188e9652da3d5c4db48925b180361b8669f32c23d9071c4d66cdebc577779e58f2ea581500815e725905b4aa9bd4f3a5dc75edb222efb476eaeec9307c1ce52ec1c1b7bf25237d1f3686181a5b6b107c2b7e27d386f0a08de30d54d9c6aa269fedeed321d793df881bc69988b1a4382618d6c7ec33ef42fa63cb5c2741d6fb7369f49b5bafd6c722bb4a5a25d723bfc8c10604ad4419372079c83b573f3d5ce4a8cccd7574c632c286b90e597cb89c744549babc8d92795fe452e4a8e71f648ee4497505af990982e539c32c8f39edce9a0a7041aa8772be224861daa3f80e4dc496a1cf3c627b63bd90f833d877c4cfd46449f3087c62de56861ef10e1431298b519a24793c81b15867204e96bb2363bfcb47b0a08650c0971e78496441ac520cd90324697c6134155abb62cd7cf8efe08057c53a9dc4478bf7b12ae84107a42ace0e5017d6543d6edf7fea088478adfca044c07b45c90d7af9390194f0751194e5ad9411e3e2609c790e587166b3688873f6d5e6b63161581b8f2a1132b4565490b1ced6333d2c42143c297488639ff078fe39ffb84813169a55ecdb7cd3be825a5cfc9771396c6b14e0dc65db517b46c916afe41a3f0448f00177b200e01b239ee061b5bafac3154a5362be23900c95f5fd7ac28c35560a460e365f788d95026e6d9050af03c5b5d9b51050073cfb575b9153f110b4007753454010d66c05e501b8267ffd57717757c1194eacfd72de772d9ad0e2e10d0aaf377321ec9bb08a1a9fc9ec4b214cecdb49f31a20fb46ec404b66f8080cd8debaf71d1d33b66b46ea4cc8cb6e0715d05737a3a15d68b88c0c0b62cb7567f51020dd94b707dccf40762901c3bbc5bf34c1b50450750e5a64c5e58c7aea3e21a03a107444da857d567be235962fc2baab8f08341f0148d8c68947496216e35470199c23e453955888a18851955e3e44a603b9c43a7c1be5a9bef86c31eaaa01c9aa7d209a59e0318c2e101bf1c1c724e7225a5f35b97365b9be2f4b53d0e03478ff3e4c02be8d47e748b60c0e37211ae37cb456b4d23b5f9901f0cd3b3764df17c2db88c638443db123a9c3e4c44ab13f38cdcf72126a4f002e60951b4ef334e69ef4cddc4a03c688a5db4e298be9550cfdd24901bbb506bf592f44d4324273a3d6341563616d94da498346e087aeeb90e4445a12fb5aff080421b8bde156d0ec462266a160e5f0d9422320ec985e4a4498b36898360e4a5add924933b6107ab6ef8d3de9724a2000c73ba4cce22100a0ee269caa07275119a8c01763e75635efc49947b4dfb849321a52352f6ddb536d59bdaf08194815527fd2ac51870d0cf7830043d9d6b8243af7613cd9661445636b8a40ad565958f6ba500bca34bd4ae154077d66da5997da17d1504b2a73a4895829bb12d2a564a813beb512414961b0b24a66c00b111c5025af127a63a2c98aa55a9a3002713267b2c3a2dbc22788c6b985fcdacf2638e4e331fa73bea99be9b213a1a831aa1cfd15ef85701934f23c71824a4022a16f2fd1916b7b4bada77c8560dba362f02219b11dfaae79843533019488d766cec6414db7f5ddd726abd97664835cee9c028692d483a764d92f4dea0e60f43aee1eae3e7b79e7320df4f41b01f05beb13ed235d381d26fa0dfeb228d0a73cffabe5034fe3980f89d21403b220a9f8ec527162e92b748da09262785ba57965bcc24bc481fbb0568b352042b6be17d7235469250b785f9935abcf95621daf4d35ae7f98ac1400833fae8c2b527a4fef01625eb4124ee355c69c866857fa950da5110bc7c4d537a39456949b43f6a16328bba3eebbc2650efbf1fc623e00770af6491a6e2b4208904fb51804f6f8d1a37f6b7894805760f2f0458d097a63ce85acd3ea8d61d2317ea9398517609e9a8d8321a10c4410e9469500e9da6172d7e0646e69df16191959c2e380b41bb9942ad852ef3b6d8f583026a9697a0ab10c952b7244c6c8131567bbeabb38bde4996749d2145bff7b8b21128400359034f69eb06c292751c45a2af1b49cf28ed684c20940496df221d0d2c13f3fc8050ecd9465084dc1633475b2b15a1db3ee511aa85205b0ad13c1c69e3085c71bcdb2575126adcce8b51c36e9432dd12a482c65bbb2bbac7e2791a46678b56320a66917f33c7ed6e35310300e646161c04333ac53ab041c7fa849b3cc4002b33cb5517cee68ca4c95f735ab9582c641bd8b26291939e25eecbb32ce185cb56a124c0b517de4f3d7df561a203f87a1b912b74b10d62adf22a1a085a9145e2209300db0fad77485a058bc85ac4c45a52e9bc12347235104b7f5ab9e3ab156184cc575026c04ed0d4d2c96cfb473ef42c15da05d21dcfc3a3ca9df4f942108fb2506145f40fd0c23d33336c2d79da55fab09bd278b2df989a2d9fad2130ecec30ba526a7cafbcb8ba90d3ceb1f3c82140960935a60c284f83807d3a89a61cf50f87225d05d5560a36c7dd29d29aa25fc14e155243bd4c7339f64f08ca6c2e23a4005efd92c254bfb6b8ba8731d2bfc37728aa84646c614b459a0554f24e810fcfa2fb074cdac41dd6e22dad1cc61edcf106dbc7786c157ca50081c52165621f483dd0ac39ba9f65244061828298421d3cc2dcea4a224642bcb01f7afaf2a0330c119f783207f1c39c538241216329e8f98e71e2075e86af06594b99109513584d467b62ba54c030288b7af082b7706b310457c190dde14b701cab1c4aeff2166d8c2853755fa0fb09a30e709aaa443bf5293c385652ecdf5dd8c2751a5b76d844bcd765d639c86e15dc2db33c50d70d79114b64dea29cb97c8a89161c25ff374c29aeff66e8fc370af54f9fa7afc37a3f830e4b2d4cd0a8ac6115f41755925c232b525769f9955ba3dd4ff22b1691af160f6ae3e793adc8f90d576e583bc161dbe660eb986e4f5a9a9a9b969c77f254102c3558da62c90a8e05732cc9a565c11dded9cce29361492c58cca7169f25fb9d78c3729d05074b4fb7c8e199135d5deeb260b314c3628a455561d12abb2ab3a9b17465e9a0a5804bcbc0e29226ceaf37dbc235fcde6595ed728a854a165916a92c7658b458c2b19063a9c622cb16589a7260fc73167e2c662c295958b094cf224f8b4bd7e1bee8c04a948acd160d2bfa2b615628476e4d7c937aab6eb2106179788bb07471997e4d0760cce2eae18c6dbd953156a2acdc5c118f165886ced7655d2c4d582cb1e863e9c6c263a9c1b664416a1d1684253a16586af46ea1c35836aea582cb3e16af2c7e961a2e0b01d48b3202c842874559b4a42fbd902db4585ab33461a1c452178b47162f8bc4c29c088745178b37161d6b8bd7a61871e660a9c192c352248b398b7a16172cb258f2b17063e9cb62cca29845752d325ca2b150172d596a60c2afc5b20bb464c59483eb1e8b0a8ee51551d6568e5a6eb8e4d15251752180e031a80d965558c4a585c0ae00e470650b5a972d585c607d7dd7d22061cf943a0d147851187a9620d8d78dd38b2c37f6142cb65b68c28aedb93d4eca847291458635806a214a3520da9dd29a851029064a6abf8c5618e9f1eea8718c9c3996b3986ddc08b84694c0dee2c6004609b259ae93c7509e21162c50aa81527e16f4a48484a8857be86f489c9628f03a29f8134a3f0810b5a495cccc137ce2c2f90a605a73a5bfe63332d8158cf5853f87ff02c471bd1a1b1b689b08da85b427392f2ffe604296a1bc088b2b1f03645ba27552701d0db6b9c4a71cd9d77de9fda6ab98d15378eb8c6a59ee541a2c5dfe7d1a5d4efe7028e5ad3efc9bede0f25f86f761f6a6d6695b25d7be556e75a1665a5f1c5f596bd3ea43e5695d6973776f8643eb52ed44c6141c257041f7ce5a51ab0dae1cc12b1e24b2283d67f5c9269b4a5f2a47ddaa69eda3c4d57dd7d70d998f66421fb2f7d7eab92e5e35e6b316487d4f8dd725a12f6e5edb55fd7533dc1c5eb26b491dceeca474f0bb2ceffc18846ca3a5ac50d978cb6d1621c9d145684fd85adefd5de6e685cbcbcb7e5709531dca65d6a5080f2f124b97d261e92e7f9ff8832ad8e606eb7155416fbfc8bede242784b2933ba20765b1caa5c895f082b4565afabb4aeeaa10c56f16c29e4edffbc810c72392b644eae97f091a2a6df6faf7c8db543057c328bb126525990569e77acefbb356d25a38ad8585eefa7e032c528af7367729ff57395e5da44f9f695c9db23f90abbb159f009e7365c0cb47ba9f22627e251772467086807f3efa342c04aa2fa3bd0ef3eb1113f0193e4e60dd1d8142f2a6a710b3027b2874309cf1c215033e9ed918159c6c12a94d8f8765bac3f53ed0241b30fc563dc357c1d21a956e0f579fb04f462b866181a6556a5da639f2237046807c887a8565809eeee609655d1c5a73ff2984583cac37e6acb281c153a48de9f30c062e421595f0fa0b060a40359111790bd66ba09a82b2048c6cfdf87bf249ea73aaf314c2328657fb2b18ac3755831238f242f8132940f0eb692fcefc78df88096e75bdddb14a6f018f9fb4ea9f4bb512ec4614e2b1d0853f0501acaf5be67e3fb0a30f9b2bf248f338b1e2f1b84e300580657fd7580671380cb1a995274e2a45eda2ead400057c546812c368de12f5bf116d58080f604bce211a5e55a2e60109bd02fc176fe76e1660a93162819da4d47ca901c1f816cb8f50b8a93968734952dd211467ab38151ffacf6c4a487b4e25aa10ec429507c61209172380b467fe872f0d7aa62ae34634f2ffbc1826d9b03f11b821a2c6d624f40dc70456fe24367ca62010d1d78c12f43dd1eaf8c94570ab3aa17d6afd7177ae758e3937e4bc39550b055b9c6f7548185716dd17ce9c71771f11cf264db2f3ea881525f77e4950b9279733cd570a05a55a88155546826bddde62fd1f882b73aecd9768c55f157f0fccd0f266d557ecad664ad29e98af72f11db28e31c8bca9b5299399186b532a11595865c8ccb289250c91bce3ee1287d7704b02d4a871e098b1e000f75247d5ed586135e6d3b84f2b5dbe9a713c5299b94f0f8df230d1f7ae23ccab1b48c77b7eb292f7cc3c2b824f3bf40e1effbd573d3208c7585e2d77e0397aa9f46a4c8707f9eff1d14c7a573004327b238be454f01c31424b3a5982f8aa46a9ac53ca48a260e429fa9b0459aaf1a9afd4c45398f210a6fceb600df242791f8ef11a23c26b20bac52324d3e9c61b0d28953b7b17a581252a3b53717fcda8e7789935ea36781d3047fd10b9d83070415581c26b02499f372f37cc8744307f63e5451e8c2fabcb7a7141b2d94a87d3aefb8405995d54ce819781214b2a8628400b3fd865a6d6f966a586e741f8772bca2cccdb7cb216ec7c06437b7603580665c5ce6837f9caae2084e62b0a12dbc0b67f41e1f40379cc43f4c6d1ea053c7a00b09989d091eade30fa68be122831c3928179aaa1ddce68130fdc4f038dcf384abcc5115a2c61054f3be33d8907392d6defa2bd01b8c574a25c2d0539af05c620931512326e022aec4a2f6cedd530605a9e24041d40a90752136cdb3b335c13c20c693897a2a6768be64b736d4c23eab60659c7ce4af9a66070ebd71ccc7a29025886b7323ad0c572c246461871236dd965720fab9f42cb3dc795da669190483be787121f70a3f88e9b8b59cd66c301d39ed52cbae3e5a6d3185cc3d9c7d94f2b28934826a2d2aee1cdc70a89a96c5c44b0868ef5959a38fb0a176a8ae49fd9fc1ce90b3643c214842e90180602d164c97da6ce414d15357fbb1c90886b0bc62c51ee59ba062d88f282332de6c12fe956d6e240b10d93f06852520537ad2473dd463ac6d9cfef078354c784c72d6bbc34126346a20812a1e9468c6674d8cc2542cc98aa7a942fa1910946a7ebc663a0c4996f692c3a307e0f1c2f17444cd1e051a67643173fe98017b4e08e870b5828819b6e683b053591e3ad084c01dcb705e914ad3e4709ef677f8f95cdee21e8685950b51c79dffc075da7fec2ffff213931de1baea0330e482c8528226549aeb1cc8d02c49828d2dad21a52ae6f9b340c91389f21fbcf3a53c4a65558ffd6c56dadd05509ec4b2653a4711a00bc9d6067606d7257b157869bf1b14f4d0ac524589472d83a1a97878572e12cf9f6aff5e12645a16b809c3c7edf0ed0f0cad4c30f502584639f105eac26b4e0553e09ce05e429fab8973edabb8feabd8fcfeb858f7be5437bd7870cd5d312ccf4d4d979e77fcc7ef337e25000a250200a5843e032f0a3de00a9def9b851b705c51ea82b10664f4ff8f7eb6b938f20cb27aa349a61fe05c0bf8c10d1ecf6a0eeb270dffcb6c5cf790d3fa313cd989fb5a0931e438df0eedbfb556784ec1d5e239b3568af41a890d8a40b4cd747e628d0b45a95349cb544c3df5750a0b88e885fd8a35a333d9275f112e6f5664d22f2e14e8eb090ffdc95e4c47b6b5ae2951176c20131870e8ae25dd18118752e5855d59255563e5409ba8c7daa40f94ccb9650dafd406aa847b1a907687771066a793e31aebf9b8c298c3550d49c0b97e2ab8004ad2f40c8aab6873bd53ae15295cfc35604dd3653b107f4a8362f182f122e551f4ce99982e1c623b9e8f4e8b0a13a09e98b9c0e6893461e7d1013def4ca0117443c4b01485d5b7c2ed0a5a5c2e9df60fb6cd18350bad096e858d42aaa13a59e06e282c25be5505a4c95d18a9d2285dcf18ddf62ee25abdd3728f815dde30590e429bbb0744d6183173456bdee84032270f6103cf5a2bb7bbada46ce2d75d79ca1569b1d8f115f18fa6b50d1f8d210aa06198e76be79100889349772dc9c7e532fe0924a3930458395e1ddc50e634b60e3602971013bb6da05fdfb4a5828b0ac603a5d3c03ed8eaab9143d68e6e76f6af85b5e256f030207062be5738064c7bd242a458a47968ea80028a1711f3c67802949055eee6dfa8bf4377442f13c2da2bb69f31111a8b078703011d70e0833235cf27314b7cddca11bd10ad025a87a02da511222dd6616b4845884ee562c466a5a974634562d3e1ee5e2aac086c769a0c0648768b142d7189b3c040fc24a39a8da3a6203a0b5e1e23663a13fc6eecc2602b29979f87e937d6bc01594473981b87f19649e03d85d9fe02a3e7f4cb1e050ee9a9403a8530283a029ce23c1f452d6d6bc9336bd017263ea14d5afc89ea85e48b343ba5442ced75945dd0ef596820ce27ee7ec35f52ba0e1243b6e64d999ba1960bdc43b6b9604f9573fa0eb9de33be335841178ce3705d73421048c3f131e46822b35aad31b26bca210ef519af494e0b3eaab75e1d1d5e5370befd4f029f3faa029d3f2a6a7ac25cb31a406870fa0f5c01cb1f7efe293a484f62ef0a274d2df6bcc6d72032f05f9efd1d815b232bfeff2c583ed6d1f223b47e9f93a18ee028c377289952cc68f2369fffdeceb6c288f171024da62593f6f30843e326d316d1e7edc78ee465c2377f9abbf746b2fc62f718fbadbcb406b643e72623796053920763fe6f2d343b765579140a6eacbb2e51275a22620090033f00ce8696c399a1215b178bfc52a889cc826be375d1419a2a6507a3220ac2b424e44e0b9ed0a574958905b920632696228545062e4ebf5f05303296b655eba04ae332ef5a226755063294fa633c4931fbd35b4dd8c0687c4506355f2c380616410550528d656e59097a7876269bf6c479bf50422b458fb0356df47b0caa2bf50da0a8d964a75887f6ae4e555bea577444d99b4a443365341f280f0255fecb43d4b1918408d0af8eea87c8f088b7c684486e3ecbc44a6382a1b44c783ee4723322544743ce0370c43052063084401a95f4e1b63101f7e1d0173830de4fb733c4fa8204f16783078340114bd4d2be426a234d45bd13915805851dcc003309f62d56e0f7daa6d07e9513bd1c5c04cb9aaf92e2b8b2576694422dd977734a82ff476c82850503586cd776a03a97e3e082f47a6aaddab2a889dafd342e65e8ad40c25e646d7354abbb9c9fe1888452f47fd0f0b3e9dba50d46b6189f01d1b2f16d0b54a8b2cf4a1e0b99465514e9358f41a8b2fba8736ba41a659fa21476786a9006de4cabc2f45c52662d111de3f6117ec460e9b20e5b4c6c883b44ee2608ba9bc37ee2424c32748ea69124f582d11907f9923e9b7b0390c229e609bd9d76882debc8b07cbb982fce9ff00862c4f3d5805006f2483e026da86b61f272a216d38595271ff639a969381defdee90c36d8bed284462b412b7a1e5c5b24b9dbaf72fb74144e5f34504d5b417eed64aece244004a5547b044571172641467f936963c21df68790304c02be936c5c6260a9c327554d24398c2c5f5db4cf7c2ebdda3c6319753dd3f1e385a4b736bb1489ac41ad19c6d0124eeb254ed0a18c1e19d2f9df5d0f674b818271b08fd0a7f05475ab12f5ef103347e0426ab69b9194de826a29c0673da4fc82ab63563af79a705761dd563b0b9c5ce33400cd35828e6484b1fce4d1e9b814922d552a4a0dd2225db15c70bd67588e054d1cc9ee43420a76c13a66e83a7b2f8ff46604582ae3561c076e4be7ad213f4d533225300d645c574e79705d05d5ed6206389869508d63a0edd5058dd4c81411d5058dc1f077fd5d315e11f09b7bba05be95c02cd5d55b3fcd979980782626f1aa1d3af7826f09601cd2247a5a16a90c8e5fb907c00c4c8ce179d713797a487f840a785da01e8164cd872197eea43908ac802bc92d1b3b85a3f91a9bdd05c41de440f8e440dfd9c8d47d3a5e608495d681b8b45320c6367ea0aa30fbe738b4cc600c95257e5bd5772062a5e96d4bfb30925b440ddd82585e059f077b62de12866be6611ff6ebd6536359ec1fd7abab643bc3309e70fc2976064f12d4a37c54fc23d71b6e7f8e18ca82f92828bdb56911ec22945a478e0b52a8acc550146a85a75e7d9fb4f4900c993bd05d889c1a5748c7405e400f9ae81a6baec8485a09bc45d85c49b9b92804c122349868e2ab7fdf493a1a9ff95f6a82e65441d68f5df1360e9823672bcf2487f983f773955620349003e686fcf3533eb66c1b22e6cb386cb28400acdff8ddd9c079ef8a0134784e6df801b1107e171770aba86360d597f123c5e5cd0e6c29f171620a9f70ed234636acf222b63045f7fbc702e494f951f93202181d95f2bd5671574d4561d39cc5532e7dff3e0af96da451b003939215b5acc79a9c59f4938f459fb97efda8f92b1efa81c6b7b2e6e383dc9a1919d59a94acc46cdc1314729de202d3829d760724e7d0673dbffedb80dc67202ae2f62bd209469bcb7da18b74dd20216560250053557baaa6d8f32c9827322aac919390bc00437a4b83ee0a6d8bdae6c14001ec0aa30abcd123c5da53e3a579b8c6188f306e48180479b9bfd0c385455896e2a5bb86f2d67c00bf358daf3d9ecb98a2f814d6b558f7f5d2bb7a1336a42f421654f0d169997c0bb809281b1bd24c430096ab0679efdc6bc236a6f85b5a93c62be4ec788aa0a48e47b7db44093ca83104dba920ac85be40a06cb8c3529b9c71c85efff06118a22bdd408f715c444c47814d5041124d058da92ba89e6c6314e4c3edfa5c03d7f4f4dc85f7d09cbd8df0fdc62aa9014056db81344a6cc9749d1e3bf3b86344e410a82b41038368cd8b22fcf7f0d65c95f30d1ddfaf73728cf4be7f5eb95f7527b7f7b32fed41cf605e17b5578fe78cafa16ae0af212f23eed7b6c8772f3137bb8bcb6ccfb7cb004739af042f459da83c92c0a6c96024e32c4d20a3550b46439fcffffffffffffff2f4423bf91f63ff93225a9a4d6cff25c454a29c994526469b70020000000008d10b209e9b700801340c60abc0ab40a068ffdb33421e4ed5d3b9840631206e1e37f23f48f9a906ec11892308ea52915399774a94a2312a6720bf9424a16219f0c0983f04ab12672da8c107d84c1e36252853aa56555126838c21c17ca43667a9468e3c68146230c561e214e34b5bbae33c290929c2c2fa95a3b092dc2e4a9b344db51d9b46d4518749fc8afd648eb9d920853fe58e115270421cc3ed0408461676da2e84f4bf7dcb7008c764189028d437821c46b3b920c61fc90e2394905b7ec7d21feb7f875a9a49bd54d08430cb5a6aa448350c52268cb22922608f3994b7ef1f402e1fdb5d97c5e49a3170d4018528a0ccbb1656b326337d0f88329fec88c4b522e898afc608a6da63a3e577984a70f06532575c2088f0fa635759fb3eb640fa6c8d9840a27daaad4b6434b0fc68e74df1517e593e679f0343e840763049d4577de78e5b3ef60fc492ae5e3cf8ae9d90ea6fa0b29ab477f8b4feb609ad4d65d79e4bdfca483e12fdd48c99ff64fc63998741efd0faa151868c8c118665aff25676cb8c70b34e2609c943c44c86a25e4e57030b969abeff8643a3de80de6fcdf15f7a284b844dd60087a476ead9fb494973618724ff4d863fa6b4f3618447ccffd4250e1a9b534d0588339f8e98fec78999b945920471739aa0c34d4906ffd778eabceb6a701d1adcbc876612cf868c063f984f3cf70c70bb6193c3dab6341e95d9794329c724813d427ab144564f8a4e52cd7f610d2796300838618f414d42875d741fd1c86326b44f5d39b16778cc640d6181d06293018e4725fe7889c7544fa0b86d319afb21725a78e5e30ef58aa9b59ef3cbe0560b455170ce24f7dbcd4212a9dce0ee57165ac3c40830ba688e691b29b7e0b06e137b1f368d1c9e4bea4b46070b3b0a7d716fb929446160c2ea32defde2413e76de0023974e82043878e1c5d940144810616c85ae296adc5a2a665ef0a463f35913579f4db4c9e0c3434ac60ccd40f3a7ccadd8c3d9e6954c15822c7fa98bc483b010d2a982349912f7f72c2c87be804684c81f0a2eb616d2a67021a52301a51301a5030ab8f761027234b32d30e2d06018d271882e7b438b1dedd3d3a2d20033740c309a6c9e15e29b4b59392ecd0f222063dca6882d160823959bcada8f8271ee11d5a6490f188478f31bc28830c1e63d8120c3f761b62d5a13dbb5ff028430906ddb9389ffd1ea48ad9056824c1202dafa4926171c7a43c061a4830a998f22494f2082ae908c6131e3622f33e8b5a8c60f68aa5573e49740f3209c4e02da043470c7e0556a0510453c8fbe439a92453810611cce939827eb4deb5b40dc19c322ed64cb43eaf1382417aabf7df6ca725d9146804c19cfa21b6f9de47f01708a6af11d6217cee079589860fcc59d299667e2c497d311468f4c038eb1d6b9fa4e424e23c30286dbb1264fc576b9c47a0b103d3a9ce29393b57c32246a0a10393d0723d29aee2912219a091037399ba51fd393f25a1f1f01690c1c35b4046d1c0812966a989e5a8a5e033a04307193a74d41266dcc2a05e4a437f7bd0d5f61066d8c26ca33f79f0d8ad142b1066d4c294ac743c8e52114a4508336861945c61b46cdcc949396416e6d169498b7cd217c4aca36461ea4afda922add52ac24798110bb388cb17395b1ee64db030c7ab5879e7da4cd05f618a5995d72ec43bcfe20a5355aa44bf8e993b7ac18f11830ff410c18c56987e4bdbefc8eb5d09ce608579669268b3561123543356616a951121cc4f67ceaa30dc4d0a2a85f011bfa454187e3c8ca9ab551a2fa1c2a0f1a2ee4ce85788fb29cc2755764ea6fe586e0a4f52da87b0ab96c214a6b3c8cdf89bd494148657d139f4a2370a83ca613d9585b68e59a230c73199a2429d8c0a92501884c54d3bcba3bf4a0914a65c1b73b93a6a39fa4f98e29aad2965ed716d4f98b3d845f22cd9bed6ee84a9efceaf3ea7b66c36278c2f66df3627de8461c642e82f0ffef9829a305c6ea525b9d965c22037420a4ff153c60c4c184ce7122d29d294ebc8055f80f1aeb697302859edeb4a9d27a904ccb0845192fe3c4f424778b854c2e02127f3b232113aeec50c4a184fbc52de0fed2d269d847974f2889ee37aa6d50c491875dd7272b70b22292812e61c2449fcadac302207e3c378304c180fc6db0c48cc78c441df7f77f2f120b4431d91331a61cea16d844a3929d6ab43c7b920021dc831831146b90b2f11d65e175341cc58c40866288293c992a47de7d8bf4391cc48843945c5c99baa9cce0fc20c44187c47a9bd9c1b3a9fce3884c14a7c90a64225c7cfcd30845184ba0f1195b48fd7eb87198530ff57a960d5a55538cc20846954cea7386284bcf1bc28523b6310e60f2a82fc0f7941982bc7b11a7ff9acc807c254daa793c4bdfc2240987decdc3dacb2e7a43f184c780ab18917ba93fc6090b01e352df63e98527f8d1eb78a922ce78339bd7d680fe66816e791f74f678f1e4ca74ee5cad1751e4c497ea7f0d4593c98f62d9d10da2e4fa9f50e0653f7a6e6c2a54e4ab58349e4d11bdf7da983f96525a4ac3d955e2d743088bce87b466e0ec63e8f4f91f654b0500ee60f351141fea7e59cc5c17823cef37ae43060061c0ca7457c4e13bb3e72fa86c479fa702ac8c6880433dc60504ac2a524ee31824b66b4c1a8ea69b1aa5f7165b2c11c79d447cf7fce10a90d6061c61accaba7fbaf6c2fc7eba8c1e022722e25fa4ffc572bcc48836927e70e5ded63fad41cd0b26830a9efee55088b4faa7406833eedba9aed15532f313e31c30ca61715bd364bf92652e54569196694c1581a72a77645df291531cc2083f12d9a48b4cd961c161d833162bb698b92c62fa494c123042a0653a8739f341f8452e2fa8c30982fdbe325b1dd9a5781c1a0a2c3040bfff076495198f105b3a7306174509a96260b85195e3095e8b770624cf885195d30e7d397f53bbe4350122e984f8fbe10258bca62a72d98730873424d18535d295e98a10543d41062393ec54b89b2600ec126d5dd8905a3a9896f314c965b987105539c142fc85241667f384f30c30a26a9a6b43aa4926725ab82b1cd743855912a999f3bb490173c9cc7984105c37de7acddc8166fa31d5a1a831953305c774e0a39bd4e7cb443ab5d8c4f417b31460bc4e80703a10b6648c1246ae62cdb4c6b897187161933a260f2de4e6d42db3bb456404697e105a9d26306148c1f3eb6e8fd16bbd43fc17449a427efa482870f3e6186130cb14eda5a16a521ef77c28c2698f6523aedd9e769a7bc194c3046d4b2eff8f6120c23ece2a987cc2791124cb143a2a549a583bc4b124cda37e4625ce97c428e04b3c90a95f7ddcbff0826bdeba3848a7d42de9985194630df7b299dda2747f0d304338a60c8ad5ab14d2cc60c22cc1882b94fc83d1567acfc2c338460d091ce2e7d4210c9533d7e0c1e0ac68c2098aa37373e86c8ad56412b369801043eac6352085d7d6d1bf758f98c1f98b4e2936531d1c9fd32bea807e3ec0c1f9842a857d065201366f4c0104c5a328fa44bc6af3a83072609c1e2cb4e6487169140063c3046872106f6e05146f31466ecc09466fc543f450fb9b20e0cf94c483f6de19d829903c3c4ead0655f6a3ac21938309d9992111184bfd559805b187452da6f9e4d2d8d60b480c70e0fe8d0f100327a9cab02d8c22074b4ca163e570b63e738d9f36a394953d2c29c55e6c3ac2eb330e920dbb3551f56df2aa33f500590852108bf0d133f6fb3d00ec440016261f2e49773bc49ca3732f40519627c51d0176a8602c0c220d7ff92c494ad0b523f14e015a61c7f42bc6d7e64895c611e8f9e845c1b25846c5b6110091ee37f3efa930c8f1546f1aefc30aef1a5160cdec5e830ace250805598634dbb6acaeeeaf83c02c8c468018f73f7850f3f184bee59096f1fed1b153efa60ced1152b43742c058b176553f8e083b9cd824c9335711f3ef6606a93a3fac39f9067b51e0cc9afed423e8b0f1f79300789d91e162f1e4cfaa48beed2b1b34dec0ea69837a32144d2d66ee5e1c30ee610440af93eb5b613ad8349e6835a58d7c97655c2e1830e060969474fec68c9bd7ac3c71c4c4294d291efe2123ce97cc8c11472e5fe928fb32757143ee26014bb5213ec277e077787d616e2030eafc98d1c3adb1d46192f01417cbcc19c252fab42079527e548001af1e1068356c41c0ba94246072d111f6d3097555952b95398f95adff0c10693dfea858f7a39526a3f70818f3518d42488945627677469871619af6478e114f0b30f35985f3d9c3e655ac646270d266b11fff9a323af820cf84083b93c7b700d1de32c9867300715771d2288581fc30f3398e3e4e75237933052540653a4503d3f5ded90d52e72100de4e82207c9408e2e72100ce4e82207b9408e2e72903a7c900191b9a7fc2d7a76688dc120c4740ecb0f257bd43bb416131f6230ce8924b3e29a8efed547184c3a4ff2d8a643b3e305184c22dcc749a52df7ce45141f5f3058a9979cb3634f7c78c19c4ae9d18ae45fba92b69df8e882c9fc5c5489553f4f8f0de3830b07abde2df56d1e2af95ff4f880213eb6605c13bd1539af76774e830f2d9852e5d3d1cb4c5f2d9b054396d4b9a1532c984be95a04fd2f0c3eae600e31acf2c8b8ee77647c58c1f09d991e268eacc7471574f0418544cbe86c962e5f42ea8805e1630aa62aab7caddf1f5162a4ce56f02105b35cea87b78e3a8f30b24871144c27169642c69469eb7c40c1248250ed0e0fcfbaa6367c3cc1a4bb9f3fe4905425e424c6171f4e28db898b727155011f4d308f2e95478a3a1db42931c13849456cc7a599b8a72598bab62aecb4a4047356c44ea2d47a8850120ce1eaf3c99e8e9d3012527adf2f55f9473086c7ada43de58d60921743b589503eda7b11cce56b25495bfab1d589605addecb5fd0ae9a20fc1b4e55f164c8484603615b4eb7d62e9fa4f108c9e364e9fa5f0136f209894584812b9fe20d17d32343fd73e3097a58ee29fd40353e938397f840ebd290f0cea29e7bbcf519d527660d21f5defe5d3ce445807a649e184a9f0ee470e0c93849435356ebaa97ee0c09073a4aa64d22c0965dec2b8a36dd553e86c61c8a2dc74f870b32daa85399758c7ce177b295b68b107e129e760965998725a6ef69b4736912cccd14d2def87602c4c4aa75819a573b030c889945a2c052184cabdc2a0ea83b238ea25223c57ac5ebe912ebe6b85b142dc123da77e113556983bb97f7934d7978badc2244bfa6a88786b77992a4c951ab6f1712a0cda2d2f25ca76121515e6bc9c5e520e5a175b9dc2e07945ec5c8e78b9640ae3491a29a275a5ea2d8549acdaf3efa430e6a853d1733621a7ff5198d64bf578b85f1406edf7b142ca3c144651a5d28988491e090285d9e35fe75acdd656ce274c49e74b731ef4cf92da13a6d429e97439a48975ba13a6a4e26ef2a79713e65421fc7e929c8c773761ea9bb99c3fa99a30a798955446cacd1c331306c949a8b529530fc1c484714c782ef53317b1ca4b98ed73dd6ccfc372792c615aeff2b09054ac4a48250c12256853a9257abe51c29c3fd29bd9a9a03a2f9330fa5585a81e54f039a1240c9e4a58f691657d7f24cc932baae45acf6b220709d38ef812a6be4229d31e6190a82aa6b3dfa17f39c2d87357dea5465f7b48238c6ba724ed8913d75083118659cb32e693c3f74477681df7828c26458603ce506311c6bb2cdad32449b6a05584e1af82478f2e1efaf630d44884e9362ea9ac9422c21cb756c4674c60a87108831c756d59e644a5d88d214c2692d691582aa7ffd229a24621ac06210c3ab99c9e52719724ae310893d82a8db593a71a8230bea8b03bff243b6f812078c6454d75c96eb1b49d3e5396db420a208c16545e1ef99ed8a9f1075384142c69a747bd701350c30f86b5b03e7b49e5709dd307b379f48d4d1fbff93812a2061f4cca84ad484c93bb256280a8b10783483bad17477b5e33e9c130a74a58321d25eb7b3fd4c883c1bc7f7f84966c3fd50eada243470d3c98748fe7ebc8f2d2fdf1a1c61dcc1527783221c289cbf90eadcb2ad4b083495d7f2f5ba204cfd13a18f4939e1476e39d4d3a983e98bc2497f3a8871a73308d7788d2977d4dd95835e460b85d738fa67f4449ee0e35e26014c9f51db2a8f4fbd50e35e060965351e75ef55fecdda1f596e30312d02cd47883e982d0c145c5fb6c5da71bcc712a39de84dcaa0dc64f6d171395fda2df658ea8c1068330b1d921a774512b2c811c5de488408e2e72981c5de480408e2eb6c61a0caad28dee7c4b0d359844caa146d29d487a721d6aa4c1dc7221e33aa9204e2fc20883023a74bcf310236d03b0881a6830e829b5f4f2184aa4a43398c67b46ccaf7fb2d89bc1282e390735d341c7bd0ca64b21eddf928a15d36b90c1bcbb252b2c7bd83e9d31183dcac832a9a6fdbb1683e1c48a96c4d0d32987c1a464c673ef2b8269c160be9f1c6d4fef76b66c8d2f98cef245cf3222e916d9106a78c110c79424dd6992b2625ef4e0e1c50b5a2b50a30b66afb2a025894ad93bedd0da81caf854550a0235b86052af4b93f58913c4a8c6160ca2f2de1d53a405e379bef73c3f172ddf2c98447c489e6cc4643f951a583085d1d1efdcab9ceed5b842eba7a6e23d583050c30a86e8797262159269d96b54c19cec538a632a548c52a9601abf2bfb2a3f8c1a53b01a52305aca2519e174eebe9c1dea458f32c6203c7a64a91105bd410d2874a915225137d2a8145750e3098c8b89f534f9c41a4e308950f54b972529c53e851a4d281d62d46082d1d56a66eec45da8b10443b4343fbad6543d56359460f64e115294e0b1f7463592603ead2294ce4f3415b61a48307e5aaa598e4e2a9f4e8d2398c4a41c2f24b8463096e41c4e95dc79cc5904d3e5deab533aa50611cce11b26b73294ca65358660decadd3b418a8460acd4faf741a84bfc748f31b8c240237812811a4130a499ef0fb1d34d52a37d30ce77c08e1535806010f22d43a4202bc4c8d944d4f88121c9ca9a2b9ee489e41855393e208114f4708005726c20066f01327a026655a4c7ef20a36f13357c608a17e6825d79c9dc8906800d357a600a0b12bf931ab5255b1f6af0c0f8a13d88dc158b63dd0e4c5a4755b748c9b137a3430d1d98654324359e4f58fc540c357260d02fa3faaa12264f521d00f65003078611f196f38f79463addc258f2d1cc53948ff99e2d0c7739fe841c3baacfaa8529b8e7987de929a6a4854187bdafef19293a2466158337cb4009bc08801168ccc224c25c7cfb4ab230699e8a778a5fa3e3b1e03b09dd8befc3e29c94b8346e1f7e85f1e23b59ba89fe1f6557984254bb9d4bb6b47d698571c4bd44e494c20a93ac89183224842f09aec21c2b4b4c8f7035956c7d040d55a093081b1ecacb35d0488529d59290f3e9839e8da0c2207f4685bf90b4720a939256b9fef3f666db6da0610ad3c7a4494a8686bc7c3acbf1010988a101106820471739bad0a1a30c8246298c93bff6e383be38a693c2d81e292f07e169e4c733d01885e1b593756d05e9174c3bb452870e38d0108529469ef58b2f89a10c8539e979241d7feb6a7b5018fd2c4792dc27649c3e61aeb8bae06a1eaa6ce409b3f85ded8e903e5a3d9d3056ce5749db10fadce684498de472d36a13264f71c925568a268c29f92e97484a26cc222bcda52f15c17bc484b9ab3fe77cb273bd6f97309e28ddb15169564596306ae7245b46ff47f3aa12c6899f7b4a045a7775487b0d06bf301bcad37f48590d861c52255ea5bca262290d6611dea547777cc93f1acca7456bd5a48fbde29fc124753f9cbbea9692dd0ce6a02e9db55825691e540693be78964c953e157632183ca8f97bf2fa0b3a633068d1d772cba16fb92306539f058f9ce664d91b065312ff29597484160f0ca634ad6a3a9a4e15b1fe82694d989d89ef0f1779c16ce5a56d82ec9994d3057390f9979613749db860dcec309f4de76bd3780b868f75bda3e3b2375d2d98c3626933cfda2aa666c15817635b5410fa9f54b0608ca493c5d2a7a51db72b984f247fb8cb2594b9650563f845f3d2f5922247d81437aa60ac14a77bc13aae434a2771830ac612796d2e4248152fd9850e1d9ab8310573b88dfb721bff709f06727ce00239921037a4609a134be2767208d3300aa6592d6d955d2b3e2d28984e57d754988ef52f3dc1583592af3c5aa99cd34e302899a5cfef3b7f3b4d40a7283dab3a294c30c97c114faa5d82312e5f4e1aea5b21ec4a305dd8c841a745f79473926052d9f3899fafec532e12f2c6110c2e5a62c5d2ab98ad18c1f8295f22d68fce7db10866ff6dd3712b6ffc3f22c8e0c6104cd6163ae48bf3294e764308267deabcf29fce468a27e146100ce27e2f9ee854b2b440308e58ff153be17129e907a66cfb7a4fedb1447e1f9854d097cf3ce4f4c094264750296ccc035367550f8bf5b93acf1d18ae7232193247ee9b4a0706d7ec10433d76c87b0ecc11546343ea0921b4040b37706036afdabc207c3b5dbb8571b4bebdba04d3cbcc16e6fb68191be31ebedb146cd4c2ac13bc3fc9f3b8c93d2dccc9dc53b4e0e1523e7d16e6e4f6feb99736b4c6366461dcedcbcfe21d4c8e8e0a3662610cabf7526e9e22520e0b53dcaf76e91a11bc42af4875df250b59571852909798fd9e9ea26e457f2a3a85ff24668529aca84b3819afc2a8a277c645cf2995555598aa4e49ff9ca2a930a59f0b614457eeb90a15a6f5d13d393dffe37f0a83c75c35619f4fa51032468771364cd18d4a7a24e5d0512ac5b26aaaf23b97cae193a22446c6757d0e36bf8fc28b5e3d2afeaabb281c5339d5c743fa4f288cda79b2f9dfa9dbf080c2737f8bad4bf38bf327ea144547598aec09ff2f8510745ec89de8625dd610e195a2ae9c30573825163dd7e814a49b40a9d57e4b4f2964aa892a6f28b597529275c94c546b1ddc83addc9878e4b94afa5fcf372f71f60a5f1127cbe9552c51db5dde4813922cafc495725ebb4e666b3a4a9c225ccbe89c4f2bc1499023c413a3656e3a2709465afb8c5aa51809e287084acda6db760689638e8a76946c21f3471844ccac47b620fac25ed870c497f95b3a9e284935a2d8d2ec2a8fd3ce746dff4f6eff675e3abf911aa3c33818d860c4d958843979b04b7a4e851897b3a108d388c9aa59ea48c146228c66f1cd265a648796083e023c3ef09f6c20c2144bf95c7ab95253b203f206360e618c7debe46a274fabc710e6dcd1b74b9558088352f93fe2a14276d3218471ecf373bf49d952ef7fd1e30358868d41982c3cc809f75b42761584b9239bce3953b4465b360325f0420c1b813047899262e9141086cf79824e2bd13f984388fe78e7274afbf783f1fffcabff66d48ad507b3c5efd327623e9883b5af5d4e9d470688edc194debd7aaa7a187c91580fe62eafdeb4f94f7342793086a8564ec974a84bb18187924a59c2c4ec0e46f78af53928b3fd2fd9c1589754acb47f29dc4e0783c7f7d00dd8a883eaf513847895a86d7bc16d830e46ebfc17a94c64e4118f2f3460630ebdfbccf6e94f3ecb81e43d61f4cd2b6f230ea6d33f17ac55a4858c76d880c397f3f179f4d2e8bca1cbfe39478a937b2fe50653c898d1aaf765e1fa3618a28e769054c2af22c506c365e4a4544910f389aec1e41f419dce45ad91941a0c16d7b1d39889cef3a7c1f8792cab291172b4144683712fa7e441540aa783e50ce671534186684596d3d00cc6ccad18a16a7ae7d36530e7c965133d3519cc76e26994d0b98ccb13b3310653d2db69823021a3f27d018f62430cc6b214155274140663e52435f236dfc42e6030654acccf2af3174cb94eb55e30cd5a1611673e4f6adf0583108f14525d924eb9e582419a2831d997ad428e7af0f0026d6cc1903c7fd2cc52772a49ad4e0ba68e15153f26251174ec0229b09105b389ffac10533f99a418f428a36a6d60c138a259ba2152d8ddca10e36c5cc1acd51ef7dc5448c2843bb46270486d8f2fe30b8c800d2b1416d8a8820d2a98372698b54910f1be7768e9d0518a1d6c4cc15ca14b644f9eafb7cb60430ae634a3d496ea2f25725e65230a069710d3ca43c455fcc83b8f0c30818259daaf2e5a4a1060e30966b1fbef9624448a607202b6c14613aa6c30c1a083c841cfeb77628a6c2cc178b5d659f13ec9cf6c4309765d160fdb739eae242c3a68ab4bf91d722356369090bc974d6eb19045568e804ab2102bd4bbdd22c75a69d1fdd3acf693e105b6ca6841184c031b4630e7102cb284e41e44b28b60f294a46bcc84b08a33110c29e530b2238eee76c4c610cc76c12abe2a44c8bd183c7a242f7690d182314891c10bb0210493d64fea76656f297d826094897b92449898709125d80082a9b3a75b998cabdffb0393acce39e72ee903538eb15ea71f399a0e21837b603c29497a8899d2216b1e98ce2d9652316b5dc74c828d1d98823a11e6467c59e95c21c1860e4c495f8e9a112fcfbcb79103539c4ad692b56403072691d2efe896c575efb7308b6cae556fe9104d767646f8b085f9d3be57859910c227ef3e6a613665b2927c38e5e18316667d39b121227eccc2a4465ab8434b75e8d031821c5de4c0408e2e7284208c32c868810adc01ff11f0ff00b1547cc8c25cc17754bb64a858e98f589845a78f78f2fe37b7fa8085a926fca87efc0bf23f1faf307ffeeda44a75103dadb9e1c315e6887366a5d38c85889756681e47e813d5410e700adc072bcc9245434493fd0556617a931faddc84c4ceb7163e5461f03809419c7884d4159ae02315062d662f22a6cf9ef61a98c0f7f8f41d408569ae3f56d465bb470bfae31406a522e7ec7f4acaeb627c91ba470b5c8c2f22a04347f768419fe1c314c6984b222921394ec80d858f529825bc25b9ec21e5b88b153e486188a262b43b4d9a7851153e466110f183a991f7c99f6251183c9a6ab94bd32362ab848f5098928e1282bd7cb5a509280cf144d2fffc7e492d67fe844198b20a174ac4f3a07bc287274c6b95af62047b875627cc41588ed32992d2923ce48313ff774859173928d0821d1e405f7c6cc29445bc4eb2f21fff49123e3461f61cabfa823a09f2f33bb4f00348f8c88441859472908fbcfe194afd60700d3e3061504f3b9b1494a7e67f09439014dc4c9cd46ec95bc2a4a32f288b9456c2b4b7ea79976ba9f44509d3848f5992f5f673929c2fc4f08281f03109938698c44bd3f2192adcc187244cd1da525add2e12e68aa4f7a3d8aeea458c06630c1c7c4022591164dc9e4c3853f0f1089388a0f6d6531f8ed88f4674710250c20723cc5994aefd8a189aa78b81fba31ec30331780b2ce26311a6095ef2a456c9f1f5ca0b1f8a58357c24c290b3deaecd8be911d90f44182c27c9ed128f1337fe388479cf2e6536463544d20efd308479ac93cf4f50f6a7ff429864c57e5e655b083a8710460b97627ca96b1086f8a642bf7bf4944d2d0853db5a30d5d51def2c645c20ccfe722107493a6ba8d80e2d32b0031dd0a1a3055e88c143870e323af011d851c6172200a31f023a749021068f30c2e081bc20036ff10108e3cbe7af202c87a817250c1f7f30c43a4bd25c6cc194c7ac635512b9d082f9c77c37a227556ae2220bc609974f0511d59266ca0516cc3e29255696b9ca4eb22b182be99c7a624e798aff9d150c693b734e663f55fa64818b2a9853bb7805613dd2728e0a2697749e2be3acb49f5c4cc19422e4204e3e54acca213de0420a86d5b149418727d53171c04514cc419618dd6fd30f49828229a78fa2f9f9ebe7f62798f4f695d2f1d79772728249e77855f2baa47c9a60b25cda36776218052e98608e89a3c235e3ae2415042e96600a6a1164281db65a3232fac1f80e40810b2598d39ca4caaab01d414d82498c10a3ab2a4c5b769160522d3f1ec97e4da9fc114caadd2cac5e6dcc63239883fadc7b7d552ec92f82f944cc69ae850812810b22184b74d73a5d54482d0dc16c7a8458feae124ba1104c37ae954af2a4d1f804c168f9bc2e9fa9f113aa92042e8060d226b953ae14ddf20353a40ae25bf635762c89042e7c60f4f1af7062d61dfff5c09c2f3e7749f554bbe78207c6101ee49208d9bb7ce5620704e04207e609622eaa16e52207e6f90a274afd6c042e70608a60b964878f2094eab73098a850b9ecf2db363a5f8001462731be2006c0610b7308b9ab536656727c40023a74c0e05d8c2f78e0a885e9cf2f8eb808a5d2c2e8d7f9f4a5eea00e1d3bc8e81db330885c522d2b096921287540870ed4236561f82a25df84febaed1b460f1ea9c78ff163c4e003a9ff02e5cac0110bd3997f8a1c57917248c2323b386061b4f978b9246dc48ae315a5435d410a07385ac10ae29d5ec6f9b8f662f0d0a18371aca2743001872a0cd95bcecc454b10f94f85217e543531da4785c92bf2554a1632ef294c963acd4a96b0da1699c294632ec976f4508997c27c9aa64a3e6fa4ec2185b15694559adf3aa11e85417ed5b6254714e68e91f9a91f0d85b9eae3c72ebed7cd0514e69e3c796d4ffc8441e55cfa27dbe5b4ae79c2fce95ba7264a7074c2a04e8794fcfd32e3000e4e1892985dbdf767c58a6dc290b572522263672c793461101db69207d9c97290608581607099300933cd90bfe0712cdd3ce0c0844972efa8cec9f5468b705cc23caa3e2a4999b848694b182e7457e8e47d6e23e74a98f53c734b6eafd34d30e0a084214e522a43f977aecd2761b02452bc51d1354998464530ef7749133e1809e3f5fbf6c9f837a1e235e08084d9d3ad9ea5aed86fe411c6cff212cb4f8dce1e270e47982edfc5987b8d307a48b59be91d52ac981126913932e5827411a6a4677a423cac96af08538e8c20cc62999a8e89309d8aa1599e22f2a91811e6d652b6a1aab265d1e138843985a80eeab134843943774e732db1f4208e42184443dbc27f9598f97010c2bc7ba3844aa34f6c7a380661d0295a0aa272a572310e4118fb83c89591e705c26411ec4a880595d7940061ae9c8310be13fe8359444d6ef2654b0faa1fcc39297d54dfdd5ad407c3a73c21abf8c74bc96501071f4c49a918327efd742bd5011c7b3028d19f628c3d5e8c147c516c80430fc64affe4a34fb77b160638f260b4ba745962f63f9ae30312c083499d7e922e41ba434b0c1e5f100b038e3b18645bd7868b8e723771d8c190644c2eadf2f1215f873cd429eda6f2f9423bb456c083c70e30fc0b333a9847fc43487b21f22a5cc031078395127f57427798b30b38e4609cc926412f7271306abf6c4dc0010763a54a69ad82940938de60f0f1b908f9949eca9a1b0cb2fe7352692a241df2361884beec78a7ce4ae7c3c106d349bcfbc915e2548aaec13c4a63e2ee469677d5904b0afd25b12338d260363d6e2287931381030de620748a66ea3965a21a081c6730a70c9d6e41de09e53f147098c17811c42565117d2134433fe02883e12549c95912c4071c6430af5d90fd259e9544a997071c6330982c55d6a91f265a880e38c4604ec274b63b4d4cc9a91c5d7ce00239de80230c068b75c22fa7f549162c66c0010653e7513accb682a67539ba70018f1e638c515f3007fd23b7f4ff2735e180c30bc649498d50bf742a72be0d38ba60f070616f6a2e70d52aa9628a595a85e4706cc1342125ed153bb243498d81430b860d1df6a71fe6ef643bb4ca057064c1ecaf9995372ecbea37065e91c116c0810573eeaa55996c133a597668d50c705cc1b8ea1fd73dc7ad60f01cd95d62798be9d60338aa60b8131f7d45a948234c5a9b811278d1001c54306879d698cabd9a9861f4e8e1000780014687e1011d3aeea6607ebffda4bdababe34f041c523055ea5dc9d2235257bb29e08882f1ee2ea52a0b62da63a60c31a480030a2631622b2f7628dd737a82c14b79367592f3c4fb38c128f2e99455dc31dfd8797ca0c680a309a61a339f2db923ae525dec28e30b113820471739727491a38b1c5d74910349e16082f1bea28a126bf5ddcf0ebd7a1d3a10195f84816309a68ec9be71a15782617c3ec48a47b330f22498c4e81a3d4aa4e8d011051c483065adbcfb556f8fcbc6a047198c021c4730a4350959924c80c3082609393c8512a72d27b4438b8c31c270ae1c1f900004bc80a308a6481e5e267dfaa43d8908e6c8baea3f4ac89fa8e6061c43305ab67a7c5608037008c1d8b9f6de2adb48743d08062b29223aa4d2a3521b031c403055caa3edece36ee9fb0786131f4c5d6da770b30f4c79b7e4278ee5fe20f6c02046e8cdeadec8b21c0f4c27bdafd4d74a4f4ae1d881d1828f50b79d251970e8c03896c43cb227953070e4c070e0c0a4761f9b001942b8710bd34c4a51a48cbed69914b8610b83dcddc95cb1ce6da25a1826bb58bfdc8facd469614a8fa46dcb4dc27d7a16c61ab71f2922d64417c9c2207cb3d6b3486361ec4f92f2a4e58aca1e58985464ca29fdf7d5117a8521a8f1b0132e7c9b7a5c61f4242fcdd8efad30889cd52ebdc8784a2d2b4cfd767749abca94eaacc2fc252cdbc41975f3531546b9db92f5693da720a6c294372e9e332d5214155498efb325f52eea290c124369ff30cbd1d2620ad39b8c8afd257474b014a68ead75154be9c977a430e411692fde6a2758c828cc1244ea857d9cba45612e31b5bef03415e5ba110a43ac8e9eacd74e4d9edc0085b194bc1825593df7ed62373e61f29d942d28b5e010ce4009bc38c00d4f1857268891107404400e6e74c29c545c9ebdc7cb0953ac9b90a259bc09c3e81ccc63454a9522dfd084c953ee68ffb909d7c94c98b3c8f6f4354acc56ec0626cc2da94e54380f4208f1126a059bcbe1f34a6409f38e049125bf372a615e9d937d16fee73d7e831289d4ebf7213a4fc80320300983c88ddc29fb9c98ba87d1a1a37bfc0d4918ae45a4caadfffbba44c2a4f2c7c55747f468828441aee7ca3fcb9d434f8f3056fc293512d48b55de11264dd19f2cc81af312cbf246230cf9eb3ebe6d6784415bad4267568ddc8b2e038cf7426e2ce27430baa188bb9108bec10d44dc38c40d431cd4a990cd08aaa6ed500cc58d428ce106218c2e22d758487d314e7a631046939fde72e22308b3a83bbd9482fc892272231026d3314ae5fb2db24977e80d409857cb2d091f6bf570e30f2811256d753e4f0c37fc60cae7924cb6fd4427611f0c523e54ac09db27a47d71b8c107935249a6122fbd0743cccf92a3a9099d1fd283d9e3b7855c9e53bb5538dcc8834963c73da8979c31e1c1f863a25d4bfc988afe0e06392b5ef5a19184d0aa0d37ec609820d5cb333c8b38551dcc1a232497c839196ed0c15ca576292f2bb57d76821b733058183b1f11cb92727c87961c8c26746fa793e9fffad9a1b544b81107a37ac5119a167edafc1d5a553db801078390e45e624ac8259db343ebc170317a073143dc788321040b7984291bbd277af12be832cc3c6080b8e10663a4127b9ab663f1af2fdc6883499d0a376e51bbc10683028d9aa8f410e6e25820100682a1601803413cb95d0253130800182c280b4542b18848342cfb14800449322a4e3a2e1426261a148ec4c16130140a05c3e15010180a8402a16028108f64429c24f203b0a939800d96b96d6ec40d0a81c912c752e882cae42a3d604bcc4c12f558620db859af534b3829b3ce69b4644e193c12141fe4661fd1afef8142ae05169ad1e3887cac4e4218c9da79be177f2d4162e77d2863e553b1a0b1a4125e02b297490c9f61c46676f2764148e650343cace959762f4d38828d0c33016e4875915e0f04b0d68c13ea4220e28c61ff1876513afc0cbcf53327e8d0e454e21a44b7a12df8cd7e29cca7a84432d7de5f4f30ebfe563170f2114b93b20cacea8f5e4b3ece33ebf522c3ea187397e0e94d883d33387b310060a791fb485416d44687595fb87afda9eec7157f231d9c7e70e76a20a677b4085c04e095dfc85bf5a2a10d26eb85a04fca7117a40d3bae7998492a0c43552805373e181c3fb9b71f03abfe65e94c7d7dd0bb94932f09db5b64d29f901dc4ff39a58b0196567c42114a59f7100dd018965539416dd58eb8c1a4987f7eb4a1da05939215c107dfac4cc0eeb0620059c784edc57e0b297937a62eade9fceeaf90a4df7e583753eb809a770403fc7448d1b702d395d17f1a2161c50be1126f15241a5c05bdb617227f12bc5df01b0da3ace1ffa948443553da34f1b1378a74532996afbd298b7b27347044571d8100b91ee7cdee33488706b5ee2fe17f03f6e7417fd30761267b3842b9311e4753453b53f2b97c21f0529080c12bbc8135c1a37cd924353e2464944de16497eecd1c4e7d5d02081c644cc43683b5d8b73dee873857e26efdc40f6f791dd6bb6cc6fc0074b1aa670c1ef130442fde1febd5df9864836760ee692da25af6177877164990ca999bd72a419b4d4f656ee291c1eb2bf6f4f2de80b0f655ca965ea6273b41098da668e39774fd625894d4a52af99e2652ce991d4696d3d709ab342fc18e703abd79710b69591141a2b1f4b6daccefc0002e92f2941d055682689e9da892c746c811336bb719255aa81ae98c79e60aad2cb966a453a342282b5280e9d534dfb4fc0df97e94c3691870f0276039497fc903fe43a3edd78adb002d737b2412623e596dde8d186b22b56a7cd9677bfa4a798590d6c87a3766a99d5e94054c8e27c6b1ae418db33def93eadd8a84f1da74b2ab554b3a5d8ff357ed81243c16c50fd6f4665653d6b7039c04635496e9ad6f2423035bfc95e00e0bf7bc5cd4b34d34a49705a41bf177111c3795a6d2e229c252a7218cea5928401c84a314a2289bb0998585510689afaf925206c53177ed1005c10dfbc52cb4aba54e0cede08698bc5aa6eb87a648a7d2011fe679b2aa9ed35f666abbc1d43f824e2ca0c7343104b6445026a59603976f363f1704913ada29cd99de5a171ed42e87f6b93d4c00f062fe8f4944eb87a7cee39f7537054ef5731122568860ac8bdfa1c343223b70a86b3768c7d5d6deda35c901bfcd44a0d243d6d3e699ec7daab2204b6f255d61107278abbf6e77b68a610c06e958bda3f6b4da3509e9f5d7897f60d318df2df4e1c01c65b622524c0e1d1db6e0fbea6f012cd6c52da1597c9ca4b1c6180b9ccbb3524ff323027e8587029f76103104a8bc590b0086ef524a5e817e247393567c464aa7583c5f0b445525a72d34fca4f927531e81ab9f84a1007a8ed10590231db6f7ddd5ffcc984f0f449350ab50bdc47c372b7c4e2425aed5c6a1442eff0fc1cc0ed43d4ccace2123805a995108a2486d8154057285c8010a9fe43ceadc2ccc323ef2677ae846b63dcd3e4fd4606050a3fd67083db3b46d91c38fab4bab343326355eba9051c0ca58b10b4b0c328c0e69d00601977599f2173e075739113e7a4674ba15a703d387bc5a6f7cb4234c1c06c95be456bbfb124aa195592683e0d4d5d664c078866dc8c4df94f48dd226c1d9842cbce09eda61ade7281b0b033b1df4a6265773faeb3c836aa3867beab3df47279b61dae324ad9f71e299744722142347b716a4dc64021e05613722fa0a372b1bb5b445e59d8f71f87d9fb2f53b0cfa22de5cf01eec1a1ccbba71e7fd06abc72941062d7249d6c0d66e9944398a73d900f5d7831d7461a477eb71b76810099f92babede1e8eaaaded23696a481f1287202079465ac0947e637b3c1e991970e64f9022d198086480f37bcfba0f9d3c2e2c8be3d7fe418ddff060ac59ab16af5ae12ad2ca27cd9c3aa89503f1a445e6cc3f5ff75de819a4616e075e0e2b3f8b7231c7059f47c9ea6dc42b08deb3b06c7f4d676b5a4d928bdd4a451a9ebd06e19baf23a8cffb57e6d98bfecad1d6c4980a3f9adfacf921acd362dc0021baca3b32b92324a6ff0ac539fd01f009654f9977b6d308860e01f87adac3d646276c835ecb154b2f3384328ebd430fae5522ea1e89edeafd6da17a0211513ea06249c453c0321a25a4917d259e55f0f98d04709615f84dac461555dac4385246429a0e31a6c42cea681059980672a437aaa534354354b616e038d4114e03ea4667e8d593d09a8b2203645f10fefcb8de3b93fa0dfd0cd3d3cfa1027767dc2862374d0405f677085a37876f0f380d2ad73cef871836203274b6af6bc9430d7e7d4ad04433c5c4851442b059048825fb6976e0889e4cccad840fdb5ce626c55f85b4d9e80f16c619a543778897bc0b95d955529869f509b667f33b206c2fd015450a78d9e6fe357f45a3dce950b2d7a1f4d16c8dc832aab5d9b086650b004aa98743530d852205c4eac5665150e919ae8b88791defbe301d6e17a228f254e09e5f0e095f713885e5b6877590750cd13776d7760145b79e3ea60a542226801edbeed8209380e154939320d07615bbb0b8352427887afa6206509da832f26d780790eec462fe086418fbad9c92053f621844c07d0900ce74683129dea3f8c5ead8365d594f243fb8e6508022fcb28905ffae4ce83790000a0abeebce13fd6f94eac06cab1e38bf289d1b436bf880e5aea0e08e1a0866974bb74009b5f52176dd5a827fda21d8a0f54bfaae6d2a3c1df0201d15cf99b24994139d1deec55dff44b9ab6c29a48931785713825c5b02c6ddb04b18c2ca9f98e351ac92d25f833ace779dab75d522eae0c70ea0f80b3ab1e80dd7556f1f465e57291fe213e9ce29d3f2a7b8ad18527e4513d9d096f02130e84a9ea2076332521d127b22736bd0cfaafe0617a1acffb9cdd60a21b63bf47cb7276d6f4725db75a7c315e23df864fec560967548255722089fb868ab8c74c13c03f488e3546b4ebb7bd4590d34403af866de45060560e7f54ecfa029117fad71302cfcd5d744a971641b79acfd829c47244126399c252faa50a98350c692c40e5374aecafe8519d8c0199c05b78cec1de29c8e6777c623243e32a957ee6a226f00f1984f313af9d6e88b77335674ee44769433dce451c7f854e759a0c92b0066f3e6f14d1de6d0c763c45c3cbc27065a4e11070fd60f9c2026349e5ddf98c9e2274ff22783846ab8bbe5c3c74c7a4bf5110c31b7aff1d881379edd17adfe0c5614bbd0f54c6b277fc85e41e5064c0cf7392a120135ff7a2f5ec7805e9dd9cefe0169ececde12c052d3107d418003cccf90095018916df7e02c616900a941856d90e0f4fbfe5a3a0e4c9c2553470a4ab245e2490a54cef7e9100ce01c9062d250f434a96a95201cfa0cace23549952b49f340fbf11262b6a65e39c0aa8052a7e2683f58ea4c354670313a1f14e1f6cfb56b0cdc4c1238c24e3f33b6c31c0ca82d450ee826c96f1a654915ff82ae73d20723d3abee4e1e69be1c94f77d5ce11e3869b5035debacebb25f1670c728ee909ede33cda109e03664ab6a799724e0009ee47d16cef43287c8a84ec291ed690fae3a0fcbb7fad7d9151540b4a868a3c29c9b936eab7509706725a5e39022025e9cb82de840373d7dec1c1fd1b5c3b595feea7a8630debb2f5e9cefeae2b5a6eb81ee8bec9aa3572c5edfdafd5eafdebc96dbf5e8de37f19af715a3ae8fba1f75f5e95ad1f5816e9dab23cd2a28b4c1ecedfb5ea8e245e1a403162a33d661f01117165b40608cd17848c38771b5548ae50aad1dd31a89d0cc8e2e9045a9a8b09728bb7affd1b1ccdceee9a49a1778bfa8b9278c7c3076d9066066d91a43ca8994719a9d099ac2184eec049d7e1ae0c69bc8c43c0e83e9cc8525d9f41a6cdc6c182a3d068a2eda9a9e6e50fe0f30236c54f2ee7fab1c6c40a14ac06a81da2914bdb7aac1aa06f1066a7c09665437ba6adf38f374a2ee8c077d1a37979d06c033d8e08b0106bff7457c9b0460eaa145200e58aa656690565f8f44ef7a20743c84b08f9357d1791502794cf20e3ced82f188ede1ac0f17809c889b3d259c6ebc60313bdf2a446096bf63bc385300371fe20521ea841a8f887d7594b76ac2c96eb20fc387484c440f2de884815230370234e3940729cb113d42eb4a4c7d20181b42dbb731585b20201d2172099004607c7ffe69e629ef5e0327de7551a12be9ee820d373822354ab7b726181e90bdded5e8699fc9a105b6bc6bcb0b73ae37bc7a0cccf287b0a14f8f1d05c67951b70aaaaa9e0f6862677cb6e2eedf7c14386909ac53a47aa5a775ffbadc4a1e90dde5e27218119778aa6fca9d9166473e70e425571a1c5dcf7464def6bc3c7ad9aaca8b15e076fb49738d5c07cf6a96f418d487088eda27d328ad0597ab916ac8478eb0aa7c495f7d06eb93367a608efbd280baf5123085632a849a10b8ff9f09ed7e8c75542d637aad56bf674426f94480a3be9ed99dd1afa839690d7a576e34dc4f7a32d31d1509db3979ba0590cb89ba0a9cbdfd054e086c489631f59a7eaa5617797538061ec317e8b834332118689b435150ef17cdb83256868bebb3e44d48242374e48f4c2e4ecaae23c6808b4c571a8969dc40e70185a1b2b8600e71b949269056eda1deb935b5ccdf3d26a8d6a0df15b936fa30bcdf6b4b90e0ad28bd9a6516f71caf0b014825eda78d7fc4b7c8ae5bffa2fbdd45ff4a324dff670c0faa61fd4012900daeaa4b964225d99044cff3a83d9b24be9cad9b26d45e2c4d259040c44da4204bdfaf3264e974135c19421161dc212237742703ddc2302b4ebdc8f19abf1b189911df26dae57cfeec7ab194b1acf4b5da56be214477625fc1fed5a7c6c394e5e7d39b9ee166afa0ea8f0a624b3f5d66be330d98f38c8103da55ad23874968a1ca8a08823f9eb33237c8e76753e57401722c1596da1a6d7a1c8cae390538f8f49b9e42702dcc10d40dfe45cb1cb41baadf53a6931fa1ce212a1b4310568856908f3d793f70d71c62cbe0a0bf32448dd6117f67c84765e1b94c9cf283957861111ccb8a3ca236f92f06c525094019e4464471d0febb1183f83cfc62b0c3f4e5773277e1dfb4bc3a45f609035b12e36dad344c54955031f91295cb284ab3c19874caef107cd93aea28b9e78fca286ae25eaefe33abe699ed429a2638dd64b1340ce65d8e2343284a534b1d0742e29c87892b5473b8389a0f831b307d96b5201461be8950244df41334c0590f2691bb0bda456111f8ee6f22d24e36686707c863f0ba53b76992e6cb187fcb6d810f511bad48559eaa1690b812853a5cd7655704f9c1f336458c5bbbd6243bb34938e27788190ff1508de482cd74e845f6525d7bd7ccc2c6a5ebf50c51a924b0ca1b1d868d7ba275e41e491fd8985408fe0548c2620333fbc41dcc670b980af6b5bdd9134bc4d62090b04a164312484ae1fe85c962b2f4d2d3ab551331012940e51533b5413994244ff67c3249b0401500137d024d62d4a91dede9bcd30f35ffb204ba0cfaed5fd28200652bc54074c031f7b5200ed7e7bb29ba60149f85058cd065bcd894dda267d64cd8980690c03a27c48f91ae51fe4e326837597990b33cdcc4b36230b4edae41074945d8b2aaa113628b18c9a9c39cfa3d21773d46ab9bf16c87baf9c0725b597c7fc2f31d6a13e5cf8294d295c04a34f5487edcf192fea4c597bccae8c0b5415bae1914d399787c5da349eaf41081442c0a65aad0458affcc82920a7118f123e180fee376c0209a0c2bcea81539034a428159c85fb54c348d1beb18f84c383712b9093dfe45ed605f7ba15ed125f0d0fc85b4049e66054a23e0d35615ee41fc1761829642224cc6353346924d477016756ae5c97503942d330127ae92e03674d4edbfcab0ac0ae7f7256d4cca8e5891f13bb11e0353823b86ad4b7fc49e42e67f4df8e41248c56a0e02ca77c96d05d3b1ea2dddc71043684bf11378062e51e5bfc16d2f61bb4916c2f0eda8a25bd604b45105baddeec10fc85c674ecc4a06e8ca1db0bf96d65a709cd502e11fd688f93e41b53635e1e08f5e5f37155972c0bb1dc3d93a4c1160974e6a6933465c4e343dbd15ef460a6d0fcb72ab9cf8faeb9496cee6e1b9b7aa925ee187dd370b55573140aa007371bea2bc07fe7f778dd359829615aecc1c027f4664458053895e46608b481190ce44acdb73f2d1b3e12d0c75ab0481614456c88a52f9e42c2692f43361e18d17243c58623a7f5d1d6997f264b3b111bd7754f9089eb243907810956baf72d1d50e85c3f5f545b730d29b3215e22e4314edbf5b6cdb4655226f4b6d80c996047dba7d70ca2036188843e8a05f8bf2925f6f5064fe42486f19ab47638b9061fb19ab7dfe139c6d0e1f336e128c91d9a300195a69df757cc64d78d8d770ee45a0bb7140edc5c3eb5a76f721b95e3952267640e45c0144d7a52cec289d81f703054395d68d7747ad5c1442381c229864ee0a08e1d85f81062a45f4454eeeb8a61db9427645fcef99c4378b4d0e19eb197c6aba85f5c6ae5d7ca1dcba3ee914091a9f65ccd18d463d50a9f0381439cb2898c01c4e79a79776d79d1c26f532df6a2896cfd6b7dce01b5a84d2d2ca0292079d1230c875fcd89d2a22d4926be75f7aa7f306eaa70c1c676ef9f7ed903549bf16f01d813c37f2f87b1313eb225bbcf5e892ea0e32c10a1800d6bcc246f74087468569a5219bc0f8c817fc7a8c06524597f45fbf3ae07cdcea825e9b6e9da9bfc46ebe93ee48e0ba3637c12cad23108abda47f598c005f0233ad44076d72edf27755bea7b901a110550501f26057b52acc2f31334ca64eb0390ce90f3e2ca4ae723552a13fa9c35fca91b347e95e030bcfc2303ace828e6916b903080e974f10707e3baf182bfde199b1c6f8435cd1183aafe980b9607871df01847cd6c42d5f7d6531149e1422e56c12454c791b7748edb70a08d032c10c765ec135dacfe59d74657d113db45537ca6636ba62da9cd07f90efa81f335248458156a9a14cafe71092fb3ee979ab059de0d7841b4a7f7d55f0515dc209ba94299a2d5732285a057c77bef57097bbaa6b8cce7e840e00331318522c12c6e4210faf3697e88453378cad0721e8a9eb1215891f7db6fce4334697855b3ecfe415cd1520f7e78969bbb29346a49f2bc4923449cf23ad1f557cf871d534cf46653fae6770ff9ae96ac7f28caf42457db6bb5cc74d7e52548c90cccd96996636c1bb367c90f7f5f009976368dd340645a5489ee568e1b1635b95a280fbb559bdc0484989ae04569403749592489d73b4c0174f45f08ea4ef44451828fd474ea3df4d2799d549170b8ec01a0627fbad2761d60bd9294823c7f34ea353757e790576949795dbceae9833ab8035c3bf0491c3ec57207ee7bdd69bc9fa0dc03f0d57857914f366ab3fb3a03ef07a96b0fdb15d98ee11b2661d962e752bdee412ca0a4cf162f255ab947eba4c23d5724e70a04ae3b4b807f0401529362be1c2aaefb00f242e51a6a1f6a0ab5064394ab7446d6dd02bb5e7c461112b4f2f059d51d8e8d760022a32c064c52330b27ef9990720139078de475d894812ec52463178cc231872b48ddb8a6c8ac47354587258758d2beb701fd96d65532260a418e7ad26bd442a6c4fdc2e4654d3102d66b6f16320bb2003f92e198856652017a10242e6e3178ee223e2b824a1fe3b4f551715002f34f92843dcacf9e3413811de41827d4c4e51070c3125b627564b827844638983e39aca3ff272e228153ae53002d842bb1876f454f630d39a74cbf86bbfb0354c7e13a57e5ffa34b04f536c88e9db0acf553f0ca3c49b835c84e35590908dd61735ff572a612a78f9129e4d6004b40d03e1b3bff7dfd2b5018ae05842d08fab0d39e629cb6df095f9696ee8d32ec6bea2823e6d793949d804fe3baa965cb86e51d8793f9a604505bc3123468c3c47a6e7a40693756502f295883a5d19bdb44ab6e989ea43305a7834ee858eb963004b4b750af8124a26b346ffc0c29ec9f4eb6456dd932ec65b7617eed02d2ba4de8ced1718cfb64c41b041000d517053d51ec65e8f478a85b2a000997afacf779a10f1c79cc30d484e5c9b52311869870690667b32b4ab11dd0abfeb129d58161032d390871141c456d473e1024cc85888b3d61fe2a406a033d64c039dd8083484ab170bae52795c7555136caf00ef25c2818a202c4a0a4239717f02c3e3ab17983813d6757f34a0cd48286d7613e43005635a35c71c48b9bf28138736feafa25b4f50ff5a631033cba1f1165c1039e3545802008881d92fdb10b76bed5c3e5b3e0393ffaca668494114d24180cf4cd222f9761c04fb84ecac4978cad3f0da95efa1a318854e1db6f14f505264d863680eb2bbe9a4e7e02bf6403eb462a5b1ea004b87e7f9304e8d840e04224a6ecf49e87d934e5be27875c3616b180c459560c1eaf7c91769b40f5f110abdcb65c8f64199ee4c60b737355acd3371a62de40985cfc08e9057384cea1529f84f6a43c988225714fab1be5b0fb65c98a50f05e2788012826c2413d20a0a85e7742644e1208896a62512ddf55ad8968ab8e013f40edcb58e1c3d48567f4c9251f3920e971df8857f880d3ec91eb84ece64c35d7bcb6452fd48513414a57429d908022dba6995c5f5a48cce0c57b0c932937f7edc01264e0886e3a9a5074b1ae4b8be39ad63078ead859273e752d0e4e7240d2e8f07f2d5882ed27abd14460e5e5a2575eef61d9d7a391e0b0feca0d08eeaf6c0decfc175ef7c9a2ada7ae66ff75da81785dc445a116aedf4dfadd942f90cdc796da237bff127c878699cf88b9be57654eae15fd99b92278ad90579541bf016698627138934caff23fbd0eee6bdec60a5916c5478fc884cf6b464e738b6ef512e969653e1684c92921da948915c364a157ee61b5320d5f2699f5da4239b443d7f567854b77c479204cc3a3c9d4cb145cd29f970233b5bb97f9d9c738a7e6aae15fe5e3866a0f68160b1c064216825a508438b34664b9e9a70afbc6b9416e26a3bf5472efbf2e24788e84d72779151c947fe256645b79d8046b7229c0a66ea1e1e9e35a514fea6e930d87c0c9b5cf57f5c21f8da94c4b4f374f6841fd3f25e8df3106f424479f5f5c5652b7515751f076ba5e127a0a2fc68feadf1a23ff3beca1b27e8059bb841e49c9dbd1b9ec123df0934956a6a9c6f5a696c2126818877ff0ad917d7bf62de879d9b7bc038f1ca8e2e149cb20e2e5b8db9ef59f2e8175f8985f5c205f5ba0c4e6f18465c6f15744cb10ee594c72444b5127257eeba03526b100661b3cccd3ee3065c21cb8ab3f4e415091cd05590c41d9838826112010d3a7c2c41960575f86d23752166ee9a892813bb84cae218561a4bbaa14d7b0d00cdca0c960610f247876a04bdf65441b59ef0c6fe8109aa6058e6f2a29e0895e625ae633bf4273646a2081a74ef1d5cbd5bc2f6e49181e32383d6182a00860d388719c5ea5d50923dd319db8879d46fc604a488b6fa12ae32621330016174bd23ef1d747c927cbf33fb2589d11160a298451b94c65c35734b13b8bda8707f8c5a81cfa789a950e141e5743cf2f2c21c99eabb037bc271c5e38f29dd394dd60327bb83ae6736947b3122f88a4992a3cac68672881ff4e71b7917409a599bc3695c7f2d085fc73c00ea4254946c819863c1ddfa6ac33cc9d265ebc714377e49c409daa314a63e8a8691a69263eacf5b6efd4015db13f8c29e959c36f5e98a9250e38bb8f39b452ad1c0501590868de61f228dcc5b1e1748a2fa86c1046395f42a9fa102c588a38c5643a3f41a0edb71d245e33bee09a689c3165d4d46328c5424251656a5a7f9156e4587d306239f70689e3b14d94d0ef7ba53cf919a6902183e45fe5ce94f7022e402d1f74a5fa7fbbec45f51466fdf9f502e9317eb5809c53a999258e7fb01dac5ab23deef97e2866477f75c5429c3b48908d6105121709f8d8a7df4e2cd15d8479291124858e5041ec6588c6a72c65c080a84a89e115a1bbd9addf1cc1026963c2fe248dd039ead6d18839ee594ab7b123a0c5f80b37380d7040f75bf092eef997d57b78990ef1c734e3f34939f11ba09055213615b652ec6dd6952ccbbf53cb2fe07653533cf2f3dfb05f2f12c64af996bbc8ef140e4e5f819d010017ad0a7598b7c1489582fd9e0eb02fae8c3ea10c1ea64c06bee2c8b5afbb8abf78efed364c60709b661f1ccb7f328cdf476269567121f88056e8ec4f00d16450477b6c09d0280c54fd46bcfaca5010477855d80cafdff368a810eae3f6e16189cb65ceafe9019be1d2133aaa1ba9b0b878de4896eb6767768c510fe70901fc10e06570d64bac1c6ab4117c1fd6033fbe08c2a2406632ad569cd34c866a08503ef236c08a17f52576f1c6476c59e279eb983cd92f814a4e6964bcf4cdf955e2e4c2400661000b3a5be5213d1641b8f26945b2586d9e8c5da7fbba82d84045928ed09c10042f62040962d226de1441434774525a2e2304a4c588a00503c9c2db205ba783f7fe2fe1b1952a968063a40ebda79c7640c159459e5472098b307c9c26bbd1f9c57c2e4a4cb5084d55f486794b2642ae88921fa4391d7784403b644817c1e3880e65ac847243fcf647d03e4341eb2fc3249afe152cdb9bc8cd8fae6a02e2ff38dba3730c54bb53bb6480346ca8d235a2f0ba0f3b4c58465e836c07873f1e2a2c7c5652e1b7779e9ae796b3891319654c47ccf58e3014dde36bbc54838efe128c5b1e8393443d1498be661be3ceb067072a4a765480f00ffbf74d4fc530679e09c8bd1f5c5d56afca27434e26ebac54268f4fc3cc06c4215d484387f193c8ea880435043d806b16877a08929a49135b64ed6f9d4e700c851d1926d241771105241f101e341107364bdbe850dac28213997665ec549442ad23ea1c67f975a0f3a41a57c943edd8ca4ac5c81f37adf38df0a7a8646a15b26f81cc53cc6296ea72311d822b8890fd00a1b3b0c1c5f2f30f059d256a791234d6688576e7020f6d79fcb5cc76247c0597bfe61b4f2dc4fe343d61676c584474ab359034312319a23eb65544f33a165ecf663fe8079ad404a9b31701f0a9a52141cb9f73f28852689797b26094045d1021b62805c42c7be7443fb8e10d3f666bb3933616f1a4de3508557f450fb03a72a2e9cef75731f7ffc7bfa5deb3d9d7c3f19099304bbec410498b4b74a8a68a32d47f07ab189fddfb4f17925f9c8ed27ade033abc2a94c1039dc2bf132a27ec78593a5f4054685ea998ef6173477487698287d4e8e6e1babefa21c5deaf2cf1b5b60215f9abcb498efc65e5278a214ce559091f33fc355fb53e5f969e932bb75e26aa379594ab5df2b1976b5817db6d03251139a04e507caab3ae586c6ca675269be272bc0385ac8b193e3aabfa73c6721ff842a2fae5b020530762b39d0f3063e6945ec853e5d901ca6d2282dbf4d5491ca7c281491032f18746a447510c30160b7774c0d9deaca79fda973d9ff556ee5df370b385dc92d7ffb14a2b3592ce64f487c3272f771f80c268497a20302e1cd67f64c50b0a51daa06ccaec9d39596a832727e73ecf880f6df4bff3a0a73f7c1180a58def9585fe209690cf0ab08f0e33487a9c264c84386c77ba2b988500188a013c9302f000b78cd9eee53cc773f259815150eac9bdac6ae1ad9d8edaa59605829f5afd777944c4a93100c3ad84524ee39308616e8c5c958103467d87549e33c40afe30e9afa08e06dbd1bfa875f463b47f032b1808946044d3a3b0532c0809d2818abfaeea6493da20bd09a3698b3e506cee8da4bd7cc49faefd3851e127eee89a46050a0d64c8a2e040b128b4dd949499c9fb8057709ac5e05b44fa5f94a0722e25ae53de31a9bb0b1a16761e688db3cc7ac1cce85736083f337fc04ad5f66b2a4b3368698b3d24c37fd480634c67b82bb19b25aa8d38e658535c415c415125f5deadc3cddb67890f182d4914412f0b0082b4178da8f444c37815e06f510f508da6f78bf7d26ed3109c455215f0d342bacea336d06c23e50f238065af85539cb77ea8ffb3eca4f190c142f38e7a3343fb34c8197e78446a2557d507189cec0e02f5af01366454e76979ab89a1df5e444049d317ecc2f948acf660c6c0b0a1aab178ccf55df958604369617383c21c8170e5e0bbc3559bd85820ff81f5621a3b65a609b3066fa246765c7d1161825fee0fd939660cf9e0437604324e3caea18553fae6671d388a79004f01b386b107d4f95e8918659739d08ae259da7d342a86159e6300044848a60e528d1debd0100ff4d103aed2c1dd8cb3c4f4915a77ceb91cbed93693e11a167fe24aaa6e679525d8e09aba807e2635396f14393cb9083ba14f5dc536047a91fc415201737c4d037d542d77e7e0c7afe7c114351ec81d036620afcdec1ac3049b1077751294d64c319331eb80ca47f8c7232864c16b53ac66e99a93a1cc1168d09e37401823345e5015a019155294b53e352b246813d9839b4564265fa0e62065f43fb40411d6593a863113967d2434e2583fa9c011b71b4324e1df079d6303331a595245f1ca328996d8e62ae55b8112f5cc8d3d8d4c0735b599dd57db3598af5238b0b6850fe76d6a446799c80cc3a3f06c80077713f2eb9a5786140a384ede5cdc9b76fd1884cf763000834d4c33e15a8c7fa6bc1ddf2256d6b263bf2d41f58dd7bd79fab67645ceb885ba78fe11d23a733238738fb6a61c0e90f03e215c42d2f9ac25f400ff43a2c39a20d2eb4188d0ae1b9aa1a68986d2f1c4794d0e21f307bf91ebe7fcff637f75a9749ea1b806b0714e2dd8e7196f5570d13895a01759c53ddf2ad619ee576c45a42e20582c89012e40de93852ad8d7c9dcc72ca01ed1761f6021f91c6135a140738897fa2c57c68745824087fe9130a3428fb92d6c7e2f385abc73a0a5068b9144f6f2838c4f148402a1a68e34b5eb26850d343cabb6c44022c2a2dad275ba0de6a008752894a5ca9f0a9ef96a82271550e20698b0044b38e58676f11ed6a3c6b26aa7c2d7290ddc40c4f2740c610c747ab8afc78c63b424141e452ec168f879cf5ff7ab5cae485e550e061e075eb1ff2ee6b5fe0a1dc8307fce2ec57f166a02cf13e74432cdab2a360ecaeb0f5ee54594dfa70c863077247c18ec9660cdb1058918e70d72769227c21a72f84587d64931c6232899603c36fa597f52e54fb59985ef502bd6b9eaf6b6e6f9d87a12b3a1fa084b2aa6c9fd56fbc4efb91cf73d8cf41ee810435168625ae9f36b7342069171ab8dd9cdf5d2222fcecbbd785a4f34c1f7231986cd64340d72679867d46f552e1369e10ef349421b2c95cb97c5afd2fce1c84ebeaf3f6e7b5ab824262f54d228f0b59de5e11ba064d303369811e53245c776748d4d965af59356d4b24520076d76ea9cd8631dfc64d12dac45f5c6c76548cbfa7b8855d742b8babd754ada04937c54f5241c303210174f43017f29f040e3b14b50b048f4e5ead10ef40676879c9a9da118ef58de48bb045ced743d1f2cbb2e41ac7e4a7a91b3eac4c6b842c15f636580c68e7f5b2abef4e89655c46a4136b7e1c169d2ef2717989bfc551765d3b8d5f9c3b24b4fc0c3f18e11ef6b92574d82df77a49449196d0b626e14e5105759a5de1516babe27a8bc901d93b1ddc40ccdc4b82081ac1bc2570a4744692a62070a2d1d9831f425aec5e6fcd906032876d985f79f087243cc836dfac4c498572dd360442faf375ca6d01cd969d645efb3f7f0a6af076c31d4833dd67423c8ac930c63c50031ab303d4211d7bca5575871c095d0abfb7856b640785d70efaee362207d59b9224f128712fff4ac249366532a539aa61926b262be972ca599d6eda064a04c7c033b872f9791a5e574b9567e305c6734816aff10de12b95b32194b4b997d06104179a225bdb217384197dbe020efb44b30c3130b0a6d0010000000000000000a16b777bb3df5af3522659909ee9e0398094524a29a54c5f8d41276a1e980130f4711b28ba0c3a0c9a0ce5d441897bf9769a993694930a111f462d54091b4a4aafabb44f69d67c0da5ff93a4cc2694ecd76a2827ed983c85fac9a33414e3993829f5b3458d86925af15362e379373c43494cdd35fb7beb7666064d7798f6b70ce5fc2abbd5243294942486c6b0a68c79311464479720cf3094565b94991257c2070c850f4afef2986cb5fd4231fd6c6e848c51cfe385b2d78ff05879621675a118524e46cc3c5e8973a1a04c301d83521dabb385a2c67ce29c69972f570b850d93134a446893b3209085820cde1b2c45841aad208085823cfd5b9d740e7b2204040257289e70ca834cdad2633e70e0008276e083473ab4732b94afcf4cab96091f4a2e075bda0fba205085c27fcecef194d25c562a04a850f298eff0247e9eed51750ac512dd23e49c9c09012914ae5d7c4c9498b439e7607b8109d27e803e74e0e8f123ed0f108842317f8e26b9f9ac684e210085f267d02793187a4ebccd138af9241d99936092f4b3134ab2e4d8a8fa8e498b0e812694c64c273731e464338300138a2508753ed204a1f65c3601049650baff52517773b03504945072d9fca17388fd70f59250baf32c4a1efbac8c218084f2896edfa083a7c307903c46d13c2913d3480f4af8780eb61d3b74f4c018259d746dafe8fc8f62146b4ba52721f409fa54629424e9d3a4c91d338c62f230e9f73aae579808a3a079e46e9242cbf92918053fb165fe77034631da978a3741df966e7e513061c604f9ec7da224b1f3852d3f7335fb7b2fca99943c4926399ae69ca4021abc2827f9d35e597227f554da2e944da5e3e6344f3acec1a60bcdcc4eae62675deedc32c73be5ee8eb928ad5da90b6927d6072b6d023120410f324c200410fcf8615a10831b376e182e0a22a7e584a71e4dd24ae316c52e41760cd61f4abed2162539bf418d6d49727f346a51cea0b694c9269383cd69514cde2698289661dd6416e53e9d538d0c7b5246c6caa2204459b8db598e38b1941e8bdbd4494269c7141685513fb119a7266ad41c6cfb8a72fa9394de3133075be2d3704571f74cd927135172d25a40a315e59ab7ce2d2163b7565694c5c478fad32665106b0eb64e4082e00052c62a4aa7a9eb9498ec55b6cfc1e6aa287aa69ad9317da2c691462a0a729af465decb6811b2c580062a0a9ea49dccdb6a2154c98f539424d947472b31c9571a638af20899bdd1b72355e475a528e7f092ff93feeb2b2529cad1b36ef28ebfaa518fa2e47f791d479f768cf1424314259d1f7be69364280a2a77b11e4366fdb10d14850ffb711e4f922a3f16d0f84439ce68fabca5283979ea89c28d4793263e8532a904078e327c5c096874a224f7a17184fee81a9e1d3b74a0e0c60d1e3a70f4f8a19c60008d4d9437fe4df4cdcc35bed1443997f0515f9d935d621a99484c1ba3cd4813fdb103e1f0c103470f438699d2c0c46e161723ee2a3bda69fad1bd7cb51c6c3e80fcc0f1c3acd3b844299420e6374fca12e59117966e7a4e998975a4946682118ce0c60d1c578972f2646fe627e6f023a74189929d92512af5ea335850a03189b2a6dc1b9b134f12c56fbdbefa3e91018d48944cee5282e8dddab81612458df3d183958f288a8c292e943a697af4dd41269068101a8e28e84962dca4c71b6177b6f7dc132f23ca9f62929b54b27657b288a2ef876c29394f4311c51c3246e6ac92cd70fda091889277ee3c31f5b8ea578828ce9d9db619ed5772e710d6be6eb66c9bd968dfd7e039eeac3244211b6f9b6bd29f12a3018d4294649624d8c8f5287f720851e559ae9a6d659a76b5d688d6127498ab9d340651dcac0b2506f9d7e41f33d0104441771e65bacf241d7368070ed483c7f98136021a81288a38e94f9027278106208aeabd41895e7d37b1fe43694309b2cdb6fbea94f8a19c39978adffab735791fca26a8a6f198c4a8a68d0fe5ef2487dc78ea3da89666d55af7fa5982c81f13ae4ba632d14339764dd02094d273bb75f098c19241230f250f5aed7b1c06041a78286889a526ff491b4e96dca11c74b3c71aa9dba1e867aa043d49c77cbf3a14337c8c909e6f5efea643f13da913b663f85ce699433193242899c327a52c942081861ccabd222a74c48e86861887f11268c4a1789bc4132d7aba718371981e81061c4a6229994c096d19f6a70ed07803da6b4dbe93433328911b0a6273e8bcce9efb716a435b2aa33bb79979fbe221bec33cafc938dd1768b0a1a4942e51522b1a6b28bd8d104ad25562da91a1a186b266faf794dd397e2a1a6928c95cdd6945f54d030dc54da34349bab30306376e3413689ca1389eb134746f12f7db1d499016dcb871e3c68d1bcc34cc70c97f5cc8e709a2251a6540d5f4edf534c4ea3a5f4edfb77a6f44830cc5ff3ca7c4c7923967500eb61fe8781481f799e718caa204d70f1a44fd885f0ce59cbd1b9932cee7244918ca579ba42f93270d30144dd8bf4c92126572f80b05cf9625094f354993ef85e209b1b96163069da353031a5d287f12d73789a226ca9c70a168b596371f4bc59cb68542e6c5cbb3ebdcc44fd2cf9554d5f0311a5a28f98e52cf7add157959186864a1605a9394dba4f6bb93dcb8815828de5d7bbe4d2528498e8680c615ca2553afb5939a20d79f010d2b146f4b3cf1c46ab38e3e8d2a144eacabf5607ea149c9146850a1a0939d56b3b6afd14134a650fecc303b37ff49983c120d2994d2376d4eed3e99acc2e183078e327c20361fa85740230a85f9bf3479a2dae46fe90734a050b8d0b325c72b5922534de309e5a42c44e7ca8becf904d9817cf4e0a6e184826e9b709bc42e0710d382cc01c4f4482100b9a4d184e25689f6d3cf24cfc41c6c64e8f001a481f800f20305349890d799dd89e8b7b5c67d5382d60b150890a3b184e2787a9b0f9de33d6828a16ce2aad5425cac55a53b6824a1f8697a4ec4c997a5612e0d2414444bc68f51d4186a4a886fcf0eb2b520da8319c6289d74b5b666ed25fa8c3c98518c528d26a1e9cee37af0ec98418c72d8d66630f1a4ebbc73b0e9c001e447101f387ee868fbb143079020ca8119c328969cffebee6ab3ba481865f1744a506eed27639260945c84d2bcf5fbefa71e420082c028efd9e91c6582cccdde2fca5a25837a56d913ec4ac20c5fd495f3f531769b6ede9e29e69925652e351f3b193e788c800c1f3cd28d1b420032a317e5d4d33cdbdb3b3de119bc28c8a4c332b333bbf56917c5af8f3deaf48927de4717259933a938117f26473b178539514d66f9edf219e10235e974768b63eedc34ae35ab45d32cc3e75c966d8b9254133b66fa207ec35c8be2feb5ecbb488b6212bca4edbf7a16c9c5ade7ce867de9985647bea856d7021d3b7ac0c007901f258b8265cebd66d159d3cf33625112f2257368383993ae19b028267582776c515f51fe4d624972c72c4a12e10c57147e2b75b684d68a6292bcb64f939e1525c9c4ea37752659896fc62a8adb63b6676aa48a92e9121f752b1525c93e860625af657f1254b4361e5ea1955772ce567e8ab2e82853a3638927e36e8a92b2311dcbb0279b344b5114512f79f6f74a7c9471981a29b0ac8cad0a2daf77dd0fed98373bd5b7449c2bb0018e336314c5f91373dc8973b226a1280af39e5e4e957892fa86a22c9aef4fe84f9f173528ca2d4275eaa4ef4f14b39d67efe463823cd3136591318a2c5135f925ec44693ddbe78af75c25686670a224e779da78d72a3a483791be7a88e579b8c8650873afce1fefff4ff20433345194574de2c9621a3d8d333251ea2d13fae5e48ca91d26cad79a33265b1561829728aa951c7a46c82caa2bc73accb044594e4bbc7b2839fee31cc38c4a94f7447a5ce9bb6fadc8308312655f11f51b3f68cbbe6b983189927479f641bbe2357f49144f2929f4cc44d9cc57244af2e748effcfe30390162c8f0c1630472980189f2850c668292db73fa4a0c331e51d226ae616da199573aa21476c2bfe55fbdef8b9e4708d80d331a519e3d6937b8c85e66ac6c06234a97d12ff7731401d1e10308673a7a181c64fc30406810cc5844f1b4c724c834fa2799f25011c5cceec1f52ed44be644946f3bc7a45cf3a81d1122ca95f9eeb4f9d5f9890f81a59addea59adab87ba0972d4f47789311f3544f13bf697cc2844e164d8ba2f5d6710a2fc41c99a2937dde9ec8c411493d2b7498e9a0551cafe92cf44d77c3f7c0409c10f04440820f040144df0f11c46c931a83708afc00638ca980108db37e6ceb83931897fccf843b766753ae369aeda9d1efb941e31a635a6fd6037540733fa5016b79139596db86c7a061fd23fede13626750fa54d6ffa4c972e3de3e9a1dbb7ca8c4dbbab91f3b8f47f11d21979287bd6b996f685507268061e4a627afd45fa5c8a754630e30e25694dc6c6f50d62c5638772bcff9d203a5d8772a877a992e4ef52faa443f14de9d548d11c5c542298318792249b684ae7541566c8a194c9c496d0fa41c935cf8843d945e7fb2dc66430dd0c3894bfd34c4c971df6457e4341e933256e6e2f6aab9ae186822c7d1bc6bfaddfde196d2889f515aaf6e333d8507aff535172460631f147a32866166127f86f9d52a221a228f8e60ae9b99d9e3c294848288a5625ddc9bae9cf29d211020a552f64bcec36744c3bc44c43fb6792645ffb423e51ec24a609c25b2f8478a22c5a4f96187b52b313c407c84c101f94904e1473e7149f3f273268378413c5eca5a9dbb7a4d0d2ff08d94479fd8489fb247d8126ca191b263c7d9992bfc7218464a2246a9dfcd03a2a4208264ae2288fa739079137d24b94cfbcfca45c4d91d3ed303108b1444938a5bf3a84f093b14a228454a2ec25be27a5dde6aa4609bb11328962eb770ea65b3eb86973b0e1f900d2c34324510cbd267adbf5dba6f2062191285ec955197ba524b91112e590a335cda6cdae1a7b44499954a64c9de76c4a734479633589c12c4f89a341218d28cc6def26f5232a278630a254f2db6feba63911fe0e421651d2a776b5c383e6d4a91045ac235be5f599bb96693aa332b76ea69acdf9403bd8018f1db742084944f947c81ecd605f75a61c7c2188288971fa6da12db3c7384d1072885266dfd9884d51b23c86286c1213bbbf9f47d649218ac933946dbaba90721222138329490ce9850ca2fcf33ef2256668d44f88204a26481959264ec71c530b44494bbc770fd37422dee323080f189c1d4200511235d66b8749e27d08f94339499ba6b4e970e293c60fc5d33fa74ca6d01d42fa50ce493497ab493d318ca80c1d09193cced9f2a1b0b361e6d79a7ec368042f98002142f650eacf0dd1ad9e53a3ccc307b2411042f450fa36410821baa7c4330f05934ff3c59e9e20352b83103c24364c47031a84dca1949b23d387b0b2ff3507ebf041831b37de05217628c90f97f7b8271542ea5058ed78fa83d7757d9a0ec55842c8c8168d7d3a73286a743d395eb7f9881a228782fc99b518218c4379e534e34b794e1a333894ac73dfd4e7ee0c990a7943418a129de43bab923b49881b0aa6499fb4318bda50ce259da0f6d96643c1344309f9d741568e6b28c8fea96c7f42d45012ed6fcf2439270d25f90d19ef8312c364140dc552e2ad8b8a1d72863c56ddabc4623dd4c54b8e41e8e9d79aa4360b3143419db8ea924a652877fef8f924b14daf4386926dfb8a92d9db653386e2a6359ded2c162a238692faf6e425c487973c0ca58c7fe5495036babb2589496a76c9fa178a3726c7cffb69b3dd5e28c9acb568aebb50eeec1a4506f5d45573a194f16cc75de7041d6fa174d2fe7f6db63aba5a289724cb494a693831b85928acb6a6ff78f33c512c145f3636f36690bbf40a85558b933983c90ae52826a45f4913ef62aa42593ef6eabde367f212158ab9f2c4654cb2922d4da1243d948a89c78567490ac59869f22939987565290ae50b8fa94ba812144a927bc87c2737c7293da1ac26687cfa3e2146c909a5d791b138e96194a90925bdf12aee59cb72c484f227c93eb8f8895df24b28be9988933d77f2f7214a289a78acb15031eb9c9024943b0635212f93b0fc8420a1a45a82499b9308252839466135ece712f9d8b61ba3e0a2f4d7c7b33cddc5287bee6d34efd1166262942c4e295b1d655bf2308ad9c38a763be97eb1304a9e574327a10d4659ccc41d7d828eb01518c53cd6b9434dc9b9b65f944b991a19ad902f4af5de5a9f15ea4531a9a68fda757298132f0a1ac496fe0c25ac99765112ea5a9de4e8762de9a254c286113a93c9b7512e8a25931e25fc081785134cd647092926f8b728fa9e24f98ecc22f4892dcadbdafea34a6a513ed9c7eee494ee6f6851da3f799d8f416ccccca21c2d6737749e718dcba22c2b9f7ee345b7f65894949818946f1cd5d26151dc534a347afa5f51d213fe6a4a749cb6ef8a72a9bb780f7a9250e2b762df109f15e5325366b2067ffbdcafa264e59ef4fd9d74a1bd2a8a6d793afb06efd8ea535110e233dee88ed7a7848a824ef2c446c9271e4ea728862cd94f4d98746f32c56722357df9a52859d56b8e5fadd1e490a2ec49926292d0a4e79e5114939ed18ea51f932711454994b8f39c7b280a3a8925cc4d123d5a5094aa6f547bd47ca2a4e424213cdd9e2878364b5beff6a4ed4e143bcfe78ca527df8639514cad4989935b17316fa21cb464d0a6a3a69c5913c58f7eda3475d0f1f764a2a01963fde493f6c4ef60a2543e5a4d880c2674772e51f21116a76ec4a36fc712e5cb0f4ace9d4a94b68406519a943eb91d4a940417d525a8f769cdce240a1bb47b3e498e142d49a22046e651ea194b532912e50cf6b1427ba5691124ca611db4d4f72f94fc23cef3d024e87c1c5112353a83e8289b3a8d4075ecefa64cc288a2069d3ee6cf2ca2247f4ff99e20f3755744593b7d5226a2a03499f88cec89de882826254409b599c4ce8728eee63b3b252eef624314555f2d44b1742e5d6f33214449cb8f9b9c6314a1cc6410a535fdb9ac4c822877bc6f2c2da236c602511e3dba4447fa75d612401473f3d3aca9693e2df943693e73737a936f942af14341ae94a0c5fdfef395f4a15c61af7944e9b9aa123e94c398984f7cc3751eeda1dc4127bb2ecdf83bd243d94ee78a7614933a270f8593c4f586116bc275f0508a3393316aa6f168728772cc51ea94b8bac6183b144c3c6c44ba96b2bc0ee5502745c69294aab0e950f6b68f31a8d1a33ecfa158a2843c39c8722889754ad4dcdc124a360ee57062bc196d27094285433985d234e926fe8dfa8692f05e7bed73272769dc50aecd8c3ba5b5a118be21fa3cc92e2d0d1b4a6229aad66d5c4468d650722f8fa793d09e4a901aca5fa5baf14f4379935cd7f1db4c501f0de54b13b4b6f88e68ce194afa4acc8c63628672cfd9b928c1322cea94979c43478692c6dfe68ca1a04b6ed24126cd242386e2c9a5b6399b34d1c350eacda1463f495daf81a1d81963b55dfe8592ee2e2dea4c5e28ae6f7c1294927389a12e940475a6d3944cf28ecf858209be5953ff374b922d14d4eee77774c853622d94f374e88da297d6e12c94aa5fe473667bbdc542492eb174f293361fa457284962c60acfa76e735aa118ca53e8133ee6b9b10a453b410942630c63fa6b2a94f3c48e279eed347e3d85823e2daf213bbfc3d65228a7b94e32abd65128dba64de2ac9a92496b28144e9c13779fecbd939e5090f2268c7d8592667242a94bda6c95497b06a126944b7fe7899631a1b42963a5e4126fc4be84529c349df2732f9b47400925a1a4f3d735a94349472009e5548232294549bd418e00120af799afd7ef314a4ae3754da4c628f67eca58a616a3bce6bfe3226bd28bc4286cd8d6125494909e1b464936b9784d1e0ba318935ccd6a254f3e310e4649492689c69c4934b531308a9b4ecc6c25e93b69e35f9464f434a656f345395b349789ebaca9178571170d31e52f67312f4a1eb64e2acba0e42bde4531463b79ef896a23a48be2e724d69db3c96b3f17e53c3ada6dad73dc0417a5932eea3df8959e7e8b82d79a52b39f9fae2d4a737278f5249f3ced5a94ddc4b49ae44f82974d8b92fdc620949f7032a4b328c8126f9745715e4e526b4fd3e96d2c0a3264aec8b1161625e904557a7c948831bda29c24a5e4586d8e162657944d92f48c89413bdda81525f59c9f4afc59513e25eb4a9cd850a36415257d1f349fdea8a220c2ff3aff4e45f1d32649e63695fe1915e5f978a2c6fe1d13738ac2091377db4d53143b5ee91161294a9771ef7ab366ea4851169d438a905db6311b45e1bdfb63cc98f89989a2b4318409272363a4a5a1286df4cf2b5a29284ae2cd26adda27ab4b9f28cdc921f377d413053339f9ccb04bd73b51f0cf35b983d618cde644a94feffd55cc6bcee6268a274cc9a02bb63bbea9896265dfe82c713e9d9a99286bfecefc1a6a3fc4c444d9e4ebea12c59224f724c6b03366b244314cb64e1b74c6a45225ca4195b42594b0494e11258ae1bbfaa2a3bbe43f899254a6848b2451fcd331ce8389659e13895289f55d59bb79da041205cdf00da1427bc9e947948478e79339e5e892238a7b32bd89225d74541b518c277767de97cf1d1951f8207c6452aa773eb78882a9892e77cf595f4594be7d3be5669888624e1bbddf0b11511ef3ab11799f9474e1218a339a6451bdfd412719a264b69e19775f4e8f0a51faa441e7649049eb4f889230e129b30942bd4a0651d29d7a94fbc7d1242388628eedb89fcafc131388529f9bc875061025a5b34cdc3a9527fd43f97366a66bd324a7fba1eca7534cef7d28f56a2a7d3acf87d2763e2549d2ba87b28f523f4187cdd7493d14643af1e964c567e9f250f2527262dee1a198e3c54a860eff1cbb4341a9f8ce11275779ecec50728fef7fbbae0e052bf1041933ff13a24341e830a1a19d43d145690d612683801cd29e5934ccf37128a7f292cb723e6d4c0287929a5327adc91b8aa1b226777e2a3fb92175578b529850f2b326a9e4d124ba021be070810d5a94baf4d3e7fa4d629027676316a58d214be8bc77b228a6f298bc3f991a254a178be298aedcd1514d6b0e0f1685f9dc248922d2fdc2b3f18a727cd9a0fe538e34fdd0a1e78a52a71243feb6e566ecaf15c551427fcc98524f9e79ac289d776d9ef4359d4a8fab28c7474de2561cd85045e5d75d757e36166ca4a260b3269aae0aa1a39865051ba8288933316e9851624d524f5132315e95aae9935df393820d5394245935e8c8919344fc27d82845d14fc5083da284df92b3418af2c93326f4f5a792f9e12bd81845d14bba0a4f263d3b8e6c88a22064e77f6e2b99a41fa18d5014763564b75a53051ba0c8c4c627ca165a84ee3069c656f344deb0d189c2e99b9eb8d87cf26a874126108273b4830d4e94b46f50553283b8933968b0b18982ec9c33ceeae477508fc08626cabea51eeaa3cfc1d61eb09189926cc27c9fb25c0fcb5bd0031b9828097f268449a277aa3140ccd1b1a3ef87c9c0c6250aff26ffe6066d5953b261896295ec1a373e7327c1461b952899c8b93d292e5a9af4820d4a143ba77e7c2c31f747b960631225f9fac9b202810d4914ce5a94b25895d5acdb884449d056fb77d2c706248a59b2b75dc7dacd976c3ca23c4a30a154740efef60d6c386257cfa5c37f121b8df83f77a46d9204dd06234a52bb9795e6241b8b3887d46879f2aa74145190a13d895858c9e226a25cbbdebb268e08afea4df32bd54c6d773537a64fd2a5697460e31005113a5d2813475de868c31005dd1c2c3c3566c9a616a2b4b99dc39a3023bd3d1b8428b97c975032c69457a64114c74e9ce69ade134c82484f30ffa0eb07a2e449e5285d1bbf3d06100519d4a6cdf1f9d5317f286ebe9c24bcf5434189c5471113aa41457d28775e51cf25e24341be9f886e904df5efa120435e86b693d74379ecf5cf4349e4eaac97b0d9a13f7828e95c3d0f62ccb44bce1d8a49756feda436e1ef6387f22839312e47685ff5d4a1181ad34ebc0c9a711d3a94cfa4f6fe784abacf2773289c18f693b899440ec5b95d539207695af6240e0597533fd1364cd79ac0e1b336699de499bca1f42d4af44c926d182d7143498f2c4df2c458724f6d286713761ea3465d37b1a1309e44f507e157fbafa1bcfa491e5962dfcfa38682525b6bfd581d9392349484c99e37a5a916dda0a1183a6bcef0ba91629fa19437329947137e2e3643314992a4d463774e265b86620cd11ffda5193567c850d6d1b9e64f3efdc4cc184a1f647ccda9e7a383c450deb8f741a81d93320f43c963d85cf2b783a19841c389266e5dc9d9bf7068fc38595b762f14c36e10dd922495e377a19c3309138b1da537860b25392721e366b2ca4f7b0b05a5e49ab809a73f9dad8592dab3f4fb0b93db9485827f9eedf498e437c74269739223c3095ea158efae5eb319ff39b6424a92ceb45528b6fc5bc9ed950ae5d4cc5a233cd97f47a7502e537a524942f79458a550121326766ece6ba3d328149350e2ea8750623e1f0ac9707a3b97d69f509a199549eaf2eb683ba1e89dc4f8a7ad0d5a37a174f3a294bbc56cf298508e725add325b42f96265464ffaa82aa1a427bd2719b35f772a9350acf9bd139f843690500c55b7a6659e2c84f018c54e6206fd2f324631c720637eadad3e39c528a897968fa7d49564428cb268aea5eeec6a26711805bbd62485aae994270aa320de29b64ddad2bc3018050b519eb39b79c90a8151d2182756955706f5fca2a026f75cf4951ca7395f94c4a4cffad24ef7e5d78b620713b5aa4a5293dce34549d8533a5f9997c6e4eda2a4422625089993c738d245499a7793e164fb248d7251f61347e6daf9a4c4375c14c783d88737e5f974bb4531735042e934d9938a668bb2d87e5e0ff19de4cc6a5192a9be846d7d3fb9438ba2c93a1d5456e9ebcc2c8afbb92628a9cba2b45d19263da5cac9c6a2645b26669393e4f8c2a22ca7724d47dbff135f511226a3c9309f2bca49a8ceae7932f6b4aad18a9230cbcabb92ad0c410b52308111bc6002a6891aacc8622bce4ef7ccb24f33d3840bddfed72acad9746a8fd3f5125e0d55143589ae27e27d47a8ad462acaa5ab2aa3c8700d54b89ae59fbd3fbb3b3ea8710a53c5ac33ccb2ccc36af473b6969293456c8a729026897df793d71d354a5110422f7deb5a448d40928e1c3ffc470f1e38aa0629ca9dfd4c84cc25ceb5c7ccb7c628ca7a6b62e34beca04a95a30cb3a305e879aca0b186288aa5849473bd1619dbcdc1866387b950944d9f5a0b13eabb2dcdc19665d40045d93be8d8a67757d7d6f84459ac2cd388f987d951c6831a9e28669614315fa1eaa4078f1ed889623825acc6587a3fc6cb837ee09c28a8cfb93c76493a8b9a0fb240093536511c7de1db667a7ea7cfc1e6037407cda086260a364aa6d39b3f49de413fc0f123138513a19db27ea7d1cc1a982806137d4d4ee6dab571198f1a97286b3afd78a5547c7d54470d4b94848d9b6f3da255a2a49af38b3275a901a941896289a7c464d09a99a49c83ed110f1d3b60b0821b37d08e24d1b169566312a551722e4f8bcd5f62124978e5626b1f2f3be7f5e5a75e645c4deb9445a25cd296706b99252238420d4814b37be367965ce311a54e25c746cf4b3839a786230a6bd2a4f71265176a34a274257c30417d16eb5a1951ead62fcf31c8d07caab18882c9d29c42657a53be2aa2bcd946e98ceb267e538960ccf23d45abed7274dcc9ed9731eb284144f93649f511e1ef1ab2116a1ca2a4ee8356d1a702028f10dcb8d14ba86188e207197721fd42144e73bb07ff384a7508519266dfa54c0753a51a44418d57a850c268743109a218bb4ef8eaf70271dd67b8ae28bd41ec63b60a88d29ba0e4ad89fea13749e2c1c3478f3f14e64fcc1eba473677e387e29e3a716250d2644e6235fab09a4e976bf0a124eacb5cdf4fe408658d3d94779449f16119b4a9af861e8a27287d76ed49849c5f230f25d14f5b9712b559adcfc1960cda613d6ae0615d8d753dd5bc70bdb2576befce18f4a7bd871a7728c9af41a98f41b7c916d579d9c198e492b78f1a7558b4b673564df54b2bccb2e64f4f976c32471f0535e870acfeefbf528d3920bbb323a7f7e55952c79c47e7ac1cca6931233a9af6de70a11d9810d48843492a315135f1f667b31a70286bfca446eda83a2994d76fe02ef3daaa4b633e64be9a351363fd27f5a0861bca9d7e92a43f8dda50f613a961fe5e32387c20203a960de5516bba9993e751ffe660f381809481d65030f94444762fd49f4e0da552931d54ab5c9e3c7d8d34143e2e947b0e1dbd8de760434349741b37bd92394339e89cbd39c8dc4e0d3394a37ceef0cc490a551b53a30c65511a3b958aa306190ab31befe497fe0635c650562d614a9e1c3ca4267350430ca5fb7591953539cd6138acc474ecc37cecb7cbd40043b9d38a29c12c1f3c7034da0a6a7ca1d865be314b0a3bd9d4410d2f9444f668deec9b086a74a1f8bbaa976bc2b2455a830be53465f7266f8638ddd942f1f4c724d43d56281d6b50430b858f9a6a79426753e2ad9185622769a273c724099e532c78abe2b6551d675eeba6792c93dc698d2b1443f48d6edcec16aa638592495aef45c3a80a254ddaa1936fea4a8fa95094d31aab474535a6c0b6c8ea5578e76877124588bdfb8ec80e1c6a48a154a1b4e39c16ebf54f144a3226134da76850289eac22f761c4959ecf134ae2fb7d0e93224b337742c96c94ae46134a3b5a4b8aa74d21a4cf84625e6c90df982594f6376b3e2da9bb5bee166a28a164e29c743b429c383227a13822833e33b11ea2571015f840404c60851a482875ac6651bf7b0921c728a6520dffb1639686930921c628674c31f1f72d4631f37892a47d1bafcc0611428cb26fd22489c8cd9ba887514ea2c789798395121f660312228c6212291bfca4cd9d5607a3d4dd27e37dbc7a21c0c06e6b4f3bab5475f7c9d6c1f38bf2c7dc766e66f9a22c52449accd27b51503527dce3a7437861aaa9876bc9d598dbb82825bad5973b42765152d269aa300bcb98444374510ceffea3d539ab35ee86905c94cf73b586b690f592648799c171220417259de3657ad172b0e1d841193aca28c3f4f881e34732a8501621b72846517a21d3bee48f568f1e416c51fed2d9c747ae388e0e21b5285bc63f25665ed7c769518a9384c9bcca6aa915088e1f01e844c82cca2f4a4e723e1d277bb22c8aa5754e50793107db0f7ad03b8a9058944dded8c96ed1f81ec1a26cd7156a9933dc283707db0f7a80236d0628b84a84bca25ca2259c3239a395e65d51529b4fa2c6e9d924aa1c6c38787ce720a41525f37a15d1ffb1a2289b4677b47b078f8c0f207a3c42565112267550b2a36eb0f35551ea8d32624e5227e79b4252518cd9e0b555827e5b13541483bccf1db6c21d0601f981a3073b82246a3b28430708fc4e51d658728e9a3189922e648a5295f057fb696ac72b4549c9aae8f3dc8de132a428f7a758d8dcd95dcd21014082803250c60e74fc40c0057e64808c055c40003f908f20400c4a381680010058002d035c19c0ab137143c8fa13ae8088107600c9b1031d6564a06e20df300a142000424832f048010000f223c80b081000b40313640765981d0810c00f1fe804791e3e7a2440064050193f40ff8005d40f1d3d8c0202900500fcf891dc2080000c10f3370a100003c43c0f1f370e0080013820013e500f8e01f203078e050020000d38400f32ce160e20012da00e203fd0f159401c381020012c00413fae803a803c0f3282e0c091000958a1b44153c6f11899542673709f05392303f9c0f1031d8fe3751cd4e3871b903274b8400255308004a8504e52eac91fe69d4249521a9329133352289928f71ef4fd66540d19880c5e0944a1a0c4ec39d369c785d0e39081c858321019f8a30c1d407ca01d3a7a90c1e3a804a0803a80f8c8f163070e1c0990c0135007901d397e181c3812200127943de65baf688603126842317435bbcaef9529494c28cda67695ce5f024b28979c14cdefa43d865b024a28df5c065bd33e36322881249c049080c740639424d36163126f55d5fc62689e2df225318a66c2a70c7ac5c4fd012408a80cdd810fa4023c1f08888e61949478ea8ee53a19468451479fcd19094649ce5e35aa3549f2a539020c7463e6db73cdec3c2f4fd21926f57707cb477e51ceffec2c2787f5aa892f8aa9836db787ad2f69f431d20b4509a79b494962923e80f4d8c1082f9039eae658c9e6598fc1c82e4674c1ab7b5d6beb78e9b599dd86d2f19d5d35c96b2417454d611aa7af36092e2eca25c74e894e4a32d14ab7287a12b3e589a11bb145d78269818cb5cad98d5dd66c7c9fcc59c6790f32ce2c4a9aaff13b76180e23b22829193da61b0fe204d119894569f57274cedde4ae35028b7e831264b4661a53d32b94d519d71bb7d5adbdfc7c8232d5614db4fa92378cb8a2303e9e4a2c5b4d65df8a62fc5ce1c9a387cd78ac286dc749d51232741acd2a8a59db34ac99c7fbd355514a1f255c4d3ca9287e5cb9cbf275041525c1947d14f5f5ec14e5cb4d2543ada63719463a8c98a2b0e1d54af6d8ab2775464a51d4ba1a5926e6ec2de108294a95fd27e39568859151144dc712d387d98674d18828ca396ac8d93027bca53d128aa2f89e7c624e914926d91150946f3c4bd0d69be5049d914f14459d98a4d61c9448b9c8401ef144b1727428d39449d724c80ff3c048270ca1f46cce38518e565db25828e9e15f118c6ca2248d5dbc811136c59fa433d6c04826cae5264bca98f56343308209d484a9fbe8124318b1c4558229b1932898480f3294dcb143773b2209c4eedbabded5f34b2f4d45ef2699a9c3fe39d87a60621009557395a0ebe43e028972fc091fe2fe6953bd238fb01b8eb8461c234abe1b4c9ed151e25d5ec48822ca7ffa4eb6cb9756eb1351ced99ca384d2f4a6b9114494d232355cbe876dba460e6137c818314471be8466d2b5233487460a516a150f722da47806991142d88d41d88d1544d963864d2030ddd8b92ad3dd17ebd01a13fcaac3fc83114014c4a4aaee99ad51228efca19c6b93095b4a34215a1af1434197994e26066fb9938ff4a1f4267c882fcf99b1c447f850eecd6beffa3e2a6337b287b22739d7d4a928b92be9a1a464d0d29e7deccafe3cb0bb2223d4a40c0fc592ea495b694d4227d5c81d0a6ad34e12b3253b94e495d4f827db1c8cd4a16432fa7a9b2469ac0bd1a1e09723fa6e651e23732896fc7e256bdc9ddcb21c8a6dee714ab4d04eaa6e1a89437993b0a9c4109122b40a07f476434de83af286f2f887334db9eb79db0da5cd57265e459628231e6943399dcb6d8edf73b0f9d0615a70e386a962840d3bb2061d5143d95489c9ae8b7770511a8a6b9f496792da424f8886b28917512663758ba9cf503e492731176f9208a11b31431a7aa5def169b2d160a40c25ad9e337ddf78b54e8692cc30e1be343786c26a1c8f180a579b93ce3526e6c97a18caa2bfa7fe37074349d67f7d599ee431df5f2865562fb9722f94b375bf37fec326c92e9453b57b345dfe6f42e6423968ca8c96496e0179caf3d3ed895a28fdc6a0df1b3dd85f235928bf665ad9dd1e551161a1b43a736171d29dc8fb0a8557ed519f7f436b6b4d18b142294594a0d449f2b9a6ba0ae50cb23e32980e6a4c09154a4ab406b3d69333bd8e383285d2596f92c3990671440ac517f525449b641246a250b00c25499226611c8142e9fd6b437ad20c9b849009234f28c8bc2723ea5a37f71e8e38a1123efe4961a247cc33186942c26084092f185942901125e44812808c20a19c33f5bd443cc74cd9313415d5b65d8f5975ffa0642aed2548c4182531a84ea2535d6e4e51e640a4180513cd9a8d4177fd7e62144b9a9013734ef573ea300a6a33e76bde6579c7855192ad57ce53c7b6774c308a27f609a6467e755d0c8c829dd6cb529e8416cfe560d3f1a38bc82f8a1d7d3ffc09918f1e7702115f1447f60893bf74a7cc4f0e365581482f9e9331d9d99483ed447861f235794fb64ce52eec06eaa20af78e91fb275c948bce6a45e75eed5437b7c605277bae8c6b92788bf28eceb3f13e638b929b2499206b452725c96b51b61dd1fe978f16458df2c933e6f62c5f89cca2dc23b79467f16551f833bdf66c7be24c522ccab13a6c4cff0f8b52e9481ba5eab3b8e688bca228272971234aae288ba7920493ff9fb53cad2868119f932837cda0775614565f77f4a8ea3f49bb8ab2be8c9c3c7a4a30f7445451d0d62437093adea5a2202a731eb9499a2661a1a2589d5c3f959c778a8292fe7355191a57fd8998a2f42243b7cfdd4a3ee92d43a414e5fdfe24f4e8fa98a73d1152d8dd31dc5fa5370a4df27e0dd52673a2286c1c3527c8add90d9a4828ca51546b696bfc14a5b11f22a028cdd57ae8c895d8181782c827caed1e83c9b1b15af2ed21e2899294292626d7acba1aa42bb0010e188874a298ca2471fbc3c489f2c94975736a6de329fcc1896ca2ac715b266ca4f728a1d644b1fc4adc38a9db3d7a2c92097ddf357796ebdca1a60e114cd4669aa2e2838bf22e06229738ff843cf1273082174c600e22962849c2474d99d4a80dc2a483944941a4129e09aa53bcc89bfe4428812293c8c6eb5de3abebe5b6d334949cef5d32cc9dbc88244a1e9e5ca349b576329128d67cee4f7f7e7f1f8b40a220a4c952dd2fb97b442964e7bdc6093ba29c67aa7c6f3ec717d708228d289ea67f911a6a59b24684117f7eb5d012441651acd52c8f91b9f93b7726a288b2ceac5dea6f9cac2b11454bd5d2415987b555451051568de571267dc9e9b346e4108999369ec920ba1c6c41b6052286287ace99184eef6f8c59a410a703114214f306392794bc1294d68328855597aa3799048f1b114114cddf3b89ce199a4f2e1005399dd653374bf4244094e4db77d04edbe326f587c28956bde949123142e3878252a37aa269a9d51545fa501ad159113e94aa93ac415cc8e00f44f65050d2a9134cd42ddf1c8ae8c136d70c7daf2add3c1d2d79fe04ddb8bc9a0a22792849921c7d732e315f8f8b87822c598307cdf10e057965eaa3ca688792d6ac9f242537ad33568762eac8d993b4a77eaa6a204287624c23d74c7aae3e599a4371639a68ea33baaf551139142de3b4b2b773ed8929108943696d4c9451cd4992d32a0207bd52cbee3ae66375d3bd3f9b2493c8378f4148e40d2533f139ee4f6ddc5c22e2865208d5f3b0d83d3999481bca4952f257768e53b2c44e840da5fdd7339f0fde49c3226b287accc94a9adb226a5091341447a507b9f39dad4c9e830d0d380491339404f33bfb6c9b1c6cd60111331443f3a7532529c9c1b6031c65e8c801440710ca70cc5665c5bbed696c901bb3b5b56e7dcae0e123e17894e347901e6c6428fb850c1e947639d870a07d40640c05135264f60362ee87ab88180af2fb357c2eb94cdd9a830d888e1d3d7e8884a1980493a4ce399494c9bd198880a12456d6496af4f4596228f285929264d73a7e50ad7845bc505026477d93c6bb50f01cb34b84bb96b4792e94cf3c8dec20a3a51bb305bb7144b4504ca7d13ea85911f1580ee644240b259d5374956492acf1572c1463902334f634912b949352158a58a134b7dad599fca43011a9422a67a1efb92e63fbb2a50f112a148496d7341fd375f389c814ca1627fa2797a8232312914229536395c7cc1d4dbc45a250b8cd55eda64fca1ceb3a8840a124aa3b9aa79413dee49f50107a2bedf776427953671937d934a1f8e94de6515f72927b156142399724cee7b60fda57b241449650b639f7184367d1de1b125142b9c2df4df474de5b720d049124945e74474f25c43297340f2065986007224828e990d33f6237f36afa182599c35608d39a23d8304631aaf796dcfa749b351fd828861f3c57ff6c831845b9ffa4513f3b8cb54ef32ed6bdd2b6add4fb2ae44a5c34368451923d65b0d3499dacde60304a8227cf3e4ad0f09f7f0446e93368e8523226e579b6f18ba28792fe3ae91ea1ccfee18b529b77472d3fe50b6cf4a26cee777250921adfe8b9e34549437aab6c661072efdd2e8ae1a6bd537ec61cedef74518e39bb0913fbd9eff05d2e0ac2645033ae234b4c7c878b9214333947bb88d6eb77b728fdc6d8b532f57993ef6c513e6f131a6fddd3b9018cc0a8046ea542d2502c1408030271281008261fa600931308001044228ac5e2b1689c68babe011480025b301c3a3626242c181610161c8b050251300c08840261202010088482615028209cca1dd60355ab43339a17d01a23e16b6c7b12fe14088e9b113ff8e5075d9ba838badc4e5f3cfe72a8055ee5024d71f4aebbb86efc5fff697f3444703528eb0399efe5ba0276acfcc301a8328b6a25f476c9ca7c2e4782354e02e88da796ed090e2963a31dd3ea2be26e1b9f51c7fc1fb87896a39844c4e833b6bcfc87cac4cea5b659b395e518e7262907af24afcdf864db5ebb8dfbf2cc7e52a571f274f409560634157d91c5ffedbff325b4b23108d2d0921975085826c111c579d95c7a34624b4d4284d444fae9b60cec09f10478586fe1706cdc5eedb3caa696ae5a54a7b4b7d3bf3b1ae8e330b50e4e754f8d52a35c5b924b2a7519dffd8e23c50e8c5e84e58d85813231b5600a94f8d7a2bf35f3b137a9a707c808fd061fc19f322521051d64a131527a118f421636374b1b9420020d9cb6549812cae0168923598c5916ca4f21b9058eecaed65c61be936de23880613b5898254921211230ce711aee5d936df7e1358f425aac2046e280cf343c6cfa6566d28e657a7d198d0de447777586afb47f8d0be1c48cd5b89b19a9695b8838d8bd4a52a6e32839176b099638a71028be6c973b6ddeb555f422f3cd1c941e598e12a7c959151c3b799aee93b28efe4cff78206403048fed46f21679707fe3afe1037d9bf6a2ee55825c9ee98f2cd9c4adff336a021853797bc1e19bd92ac1174b8d4366f4f07d628ccd9b866a391f83b9050e059524cbcdf54327aa5202d888646b91d0903887c5d43f24138785a792a2919dce3c5b945d7c1e9b596a669ef7952c8d5dd3f4cfe90f8af8943661a4d51296534890c4d2720374d438bd21ae355844db0f3e9c852d75b4ae413e8a51a8f0c4681116ef640bf95bafd31c54e1da8d03f8de49f346956224c7c34677709171498d9ec65a396aec1c9b193489a10e6018bdcefe883dda9cee02dd3c8fb696672914be35808dac6e119bfb518554823c7e6631b2d8ef12c30a59933b623137928b0d658fec2203af162110c2d3e221ce0b1cbd560f3e1aec3b786dd4e26e246cd3bd6f3c32c39047f779d159ef4b41b8ce8b7d1e98f51a3e8bd407c1c37040435a19d77792f9d7345c2879f989cf2b260e5f54addd2e0bec8b629254b4030ab7c78ffcc6a11e6c460c3ead3f924a37b8d69035c6409ff5c4ec92b3cbbae3767e62d545579f988d5ff6a609df86aca038b6ae3202980a3dd23f38049d93d2e324f478a7f478a795289dca24aedcbfb80e5ddd79e53e5c9dfc010eb5639570fe3bd2f5036dd214035140b70dba86e9ed057283c5403b50e4875815750aa04f06b30066755f2f16e0e22906129f5818e9de8742e98f7568a607a91e232c35050bc02109aee0ff8a286f73a173a33e3f8af3ed8e9ff15476a680a2b421d9f9cca639af86a50f62692e51721570e0ce0ed77f84c5a90d28756d3f7519626bed4cdf932ed8cedf0b9a10d028f9b791244a7c5b3e7137512f75fed00b3d0fd5b817db6052eed64bf68dfa33d1d46bb88860a1bfea15eb5a9bbe9a7bba701baebc1c69d43637d87283160a4a500659312ec2c38909b67c7265286a4820183d560c41f6aa40db8f93f1906092a21fa37e6fb1ef8b36291556317e6cb0143766f83e427e7eb8ca732132ecb821734f3c398f4fe51340b96b646548b8cd24011fbccd0e471ed614794e1fd3e757dcd042adc1c5afc033e535c97d47a45258c2ff1ab35c474b592b3cb33fc7870ac5ba072f698295bbc5fdeeb55077afda20a218ee7302d5be9de0f96e7cbc0d247de2e949c5d696b202aae2ac0634a86b825dd4c9b0ce51a440d4063faeac7955a2d09c0bcbadd60c5f4e695bce16ce6ca8f8d1999f1b1fbca5329f9d4ce55982aad32e9aa509f11d338964dedf697b9d3645fb2e0d376f1fd050c27439ad65b5bf084713cd025e8c273ff40aa6f2c8a951060a1c602d8a9539ea1ee916c8c2dd9ecb0e5e6a637e3256776b6d569a3142e185ea49c3452018c7fd567b5f5a66722b280070c6b6774b809991984f43561b4704df462f538d477547736d1048b2ce8cb0e0a39d6b4153f837d9b9f643d0451e4c7ad22b02ef2cea71f70c02672654a3df80081c7785c18f4c3de06d9faf6d875119265618e1147611d5e093d836aaa7ed1d919ec1957193973d5f9818c843677fb861908f3f6322715cfe8f48093558da88d5bd0474287e55e9c1d4dc2ba0dae9ee93707c81d628be0f1a231c78cb478d503e8fc987df7608784471155e7dbcade2adce30954f42ddc28dad5f02878dbc33aeb0a64a9600e78dacdcc981d614d7bf2c482f2c6b6fc9582555b3cc1efc308e30a86d6ea9e4cf474a350e5ea0b54e689c75b40eaf785064545aa13aed3ce254fe10f5ed736644690c078d5cd25cc81332f167ef7a43108458c90c618e9c366ef6a215c4bf07a86407a5772b18c7f80d770c61e35d4da9023e4d321209a6d3a42fe145d60c75cf557620757492cf2f0ef2a70781bcaa5ccd2233f276174cb34e4985567a49603df9b3266424c01ade39281b118ce62e02b0ef4f291331dd0dea51ddc5ae26742fad63edf2dcf367380fdae51d8a209627c8bd6b1a3911babe49997d4b2bea620adc25e98839052f819132069e0024386d3a6d08604835025b32dc60082800ae9810c679be8d194db552a22f22c80eee2d9c7d3824d700ca7e6b1fa8a3705e8916611322e65da3c66cce3c624ea105a8ac7cf031426c9e69dbf290fa774e6c56d21743b37a368ace0d69d95344f76b6bd126aa95ef307ecd14ae0e837408636703fd45891788fe009d17379ba54d851ff2be7fb8f608e5ceac0a8996e0c0d24ba81483512c752cc1859dbb478ac14ce5a5fa05043c27053d12bb8ae07752df16cb0c37e053982e28a3dde9282205ef7cd37ed0d2965c29849eba1654f9c895eac3e543434bf539a0b795ac842cbcad438618890ce2ef08914dedbd4b5e087e328bab3669d17e21be7bbb7c3adbef510f6049c171c1dd37a30bf12052b7338ac846d53b30735fb1568befd1834052cdc7ec9c8b727976997fab805989b767d8cec390f1c1020534b1a058669a392434b18d7f8060d8b66ab1cee2a68aec6f88800dd4839a17b915632756e6b5a7eeb6c4cf9ac3caee877fb9208c8f8f10b9dc89170a00bf609ebd993b08f76103e799e9310f071f3ba78a13245e1fdd6fdccd42c68edf140599ebc52e8732949272fc8280dd12dbc4f0002da0ff6e69706e422f8d27da81fda6145dc3bdced20535dad8598a2043d8f3931eb618dfda0827572bf9eb74a940b95b841eb2863eeddbf580425d6839c9802c7e46884c841760e5c832c68771840ba8bf063a82e661df01547c054eded99c70ee8def948115294d8cc9a92b882d674493fafed78e94829c01d19ca9dd220f03903da2c90ad2313058179f767bfd98226229fb5624904703c71c2b067103ad1ba1557c76a406b8bdc319a78cea2a82075378785645ef00397504909d90f0f0cba7b7bf96565656673f3d9fb450f70d5fc561d8c57530549685784c0d6506bb00b96f8502761a488d06a4529bd392a34702dca0f91b0e22c076c706a72bdec1c93d87bce6f6e0267faf14a96a33296147d8dbb46c43ee181d146eaee806e521d2781d5b16fbef05adae88659eedb768d31bb336b5bf6e6cf7c4b505d4da819834446a962d55405400ce2c0e04ef32146fa63a2fce404839845b3de3750c87914dc8789a2b00a7f6478fcb01f0458f9881a26a3bc6985c1a2671416c130cb96deeb698b9b8ac0c60b12dabdc6092646fffc3a7e9302ee37686b0a363cb74e78992b197741a85dc0b618100aecfc99235f076afeb284b791048d454b425a25436ed58d38925c3c25e68f468d2a82a4d0865c76841958504e575491fd7f34a769a74abe5ef5ad228ed731b6ac605d4e7a4cf88b4ac5e16cc9ae11c5693bc1dd6141b478fd46ec34dc317a863fce77a131271057f3b0fc7806d22cb80fd394f4f777dd0cfd954c0464c3a5989a5b6816815b7361c8b8574348282de6a0c31591272cccf0daeabce23625f4714c8971338eff11e1af5ab4a10aec5eedd61c5f214171c981a75c1d22cc381645ae1b5e0bfb2ffd775d5ab2428c2b79962d3463e0f4e8600d4200c23de9f2364ef005c74354c1b4349829af7964c4a1880c4ae933c6076ff44a292ed1fac4b10cca96313acfe8573188ccd9f94d3dfc9fc12831f276d51d5a6200f47341542c52152662d97dee303292f25f72890b9d1668c7112c1286659ac66af0eadd0c8e6cd67fe88879f89d440d98df6d3071d0b368d04688698582b414290305ea499c8ba06bf1c1e149b6043b17e4549cb519730c040466c69698d2c322fae8ddb357acb9ec0cb3da65c5f1659ff6996d48c3b833536c7217eabb4c06c8148581ef4e0bba881bf87aa455c9b59fa1cb953b6ef66e2426dcd3af2aae9ce95a468160f39484a4e22dac866e5bfd1d3140807c72dd213fb55cfc02d173292576995d5fb48d2a16ec879067d937ae538f7d2be563b2348af2639aba285ce0f309bc3d8b63c9928a4606711c53080ce9af998ba60283d21830532063ffc362c8a53806f85221078940ec66ee98d2191327c67a5c2de45881ecc485452c1952ce6230d9a8806e5337e72dea7e3c569988f7044e1a6dbf1ba1f6f9831028c0caa13d2e00f68010ac67a19292b468f854530cff26106326b16a4842cc638d61a9e4a36068e91561db85d28380e10d3dca82134111c80d7360db33066f3c7c8daa9df75f01b4db4fc3a958f9348dcf46f5cdbdb6aa5ca9f173f37bee9c3f2f04b40e8c3069a937a1107f58803e3c8c146f39de989311fa107a41d9a660fa46ff559cd0dfafe6f31ecc5ea2790b069212d1f5f2c041dd19ca4202d4be4d16cd81012a7363da6acc953680ddb3c1346a51eb56ba34512a81d980e4b9b8ad43edfcee1c5b5a7c0fb464f8324fad15cedbc97c8d7480dd5d30a99939aea9a0a28ef916d1c5097a2a9fee0801f02d6a7d37ee90fc6359de7f376024fc9ba04b9fa9d805ce492d9c26b29b2a2d7569c0cceaacaf559379253b2931716f9305a4d4bcf78212557a99e62a22f772732d3b0b02422caa01caabe24b00f3944fdd1df159de253df618d139e3b6e722a2b4bf13b4bc583d9373d768c3a50610ffd69ac1c75d10829288fc51117152185e57056a64961c4446596c8e9c73ea23be1e539edcc676ac629e56e81ec9529e463bac29143bad7d9741d872c5adca4f9cc2121b256713d432b00f1a96bddcc25c2932ce8fd7760006902b50f70cd29d004b1785f1251be612b1bdd9d57a099b6f466ccaa45f64f53f97584cee2dfc18ad98d8b9a6b59cd6b2366acc9e70b6aba0c762321a768bb8a8a263d5f08a84d6160c0249276b82fdc3268249c0fec4878efe465ec44de3687e9ae17ddcc9d6704ae88c21326ff81c78b058d19a1cdda8dfeb9b07f9c662defbb5e81ecdd7013341bdd7588792c622fc5a5d7dda1685404a4ccb3a8189e6cb0c880101bb478b243ad5f406d29955e0aad65e1cdfba3717db536a17cfa59fcbf6d622f8510e3069be121f43d9fc627b8292060a235f0cf2f192b2cc9c61b8926d7e494d192af1b06b68d79844785737ce4bfbecae96c998c76d8b68ae41370ec4a00e694b082c44fcc816d52b30a7b627e1d6fcacee432ce3e885a541901776e7918a077a8e1bc9c9938a767660615fe054aaad021468c6769dfcdf260258331efb122d511c98518cb44f6941df8e05ddbe55a41f295461ae2c2c09b8c652dd56373f3bbbb2dfc88f6b7e705251a3c35ff3d9e71d2746d5e0c22803b4f5c79dc91b4d9c73441e30b9f360935c09b2fd7a76f05ae2f2fa925f5652ee5bf64ab351ab530a0251f96a0377732b8e88fd251d24e78dbd6c8ca8d1fe0cca382f7c7c2ed936b162fc77a2816173dd11474303d843bd26dd94090007891f902b27230322740d418932817b1b3d5a7b320650332518336991eb45638f40bf0e3670630229e9524a54ed10a0f5fd22616a9ee94ac78b0d38986e724ffe9721b9230398e53c6475487855e135a47a604b71cfc490324ed1897b7522ff66d877acdaafd23cbff93801186231b7943ac9b8ad3f919d9200ac268c99a7da2757c38a6fb5c6f72f049f50abe389179234f6f6ba0188f9a1ea092017916b452a6d9adb36b15a2f794d9373a4ce3afbd91a20adecc04af51e95fd95d1759c4ce74903fd0f7393015c9b19f0acce96ef7f0509a9c219683a149cf2108fc997a28c9d9e81305516f90211a8e3b316c5f100c9cd6e9b5126414d6499e360de23e67a1a57379ddf2dae4f7502d29f87ef2e56abed591592b557a79f3e50bc72b2739b5ce21661fe20fe6149f517ced4ed86fbfbbec3d13ec5f81658103ce907d8d11fbfba786fb92f1cf5386b4a14827967bc196469822fdcf5c75838e769ccaf0c2d0c12f587b4c2080751e56bdb6080641090acc5a7a9937e6ef09a3860ec5089998b72eb8dd623687512db60c00389730100bd414b9d07976d7540026f32f50b4ce98a3a402b8c845a1259324ab4f2a94da3aa7bde936cd5e9ffc1f5cfd3590580711136fb1bc6a56df56ee65ac170c1de5eb2b797ee4dbc0cbcfd01a06e9e7ebdeba91cfbe462a58026d3895db4714fe63cb36b3d6bdd8e6be6ba0d4180130ceb38244f996481a842fe21af587b95af2caf2706b776e036ca8eab315485304728f91166b10a10dcf8871dae00bf00662277ed13482b5142ac58fd45a37ac1394cd41625151a6a2865adc48b739782c645ceb08a9b20617aa1110a7a0680e97ad03d6f1c97cc4cc4fa0c18b0aec90914083abb1e86496178e8c00fc0e3ec1af57fed167a41ef984973555b5c4e569324850bf531815fa13c25348c4deb4c1b4083b8100759c90c7259a9e54d7f486f84c28e7d0e97b1d7c9b0b871faff91cd64ac8f71abee20124b4fe8284b3a54fc07e2c0e1057ca2a003d137ab9b812f886e108245359d6acfb42315bba830532bb46090124be009029a47a55656324adfa049f196622b1b708de8bf8af998100781a8378f333c89c0719b84b51a0ffe5221d98d0ad4459d5a15893385eff7fa8a255bcaefd7fdf7a2c747513e60aeccee0282a790f04894f2cc4bd96ee4168492e0f9ff83de039eafc17ff17422c729ec4731c84fff2ad50f1ebcc23382e8aef7287a0493be98e87d9efa1dd4a88b64e74ff276c82d736f6e0f94c1b55853aed226d643937f8b2337f4e4414b9273038010607511f5e46e71dc146eaeed61010a76d76f520dba248297a6e053069e294c4ae1f4a4ec118945cf87e45aa16edcf59855e72a00078a6228fb68416e2483a41324a79a834dd206e02ae665c087e02d268ca597e22cc03730f41b23088afe027c9dce193aa5e7947dba72f5f5b1be781f0c663d797bb0107e2d6f5f65bd3c4a628de3a7fa949e754e085d8f13539fcee67821394db2ecf0a6d4a7674aa0fcdfe0ac3f499de8da4a53b0f2d5a2d4209e3b3005d9f5c580f18889e2c8ca0970aaf870ab62fd5b35f28331f8e263ca04ce80fce836aad82ea48a7720667f933e1b068fc822f3afe7df2ce88e2040d36f5906ff2ce9084fd217cddecc40d30f6694ef58f86ef90a2db2af361e1fc445508c2c138bfa947f7bf1e7fc4585ca27e128ce2f5709e71b76a2e92afd7ff83021cf8db06cc1efc0abd7df2dd91e5e3b80fdbd2c79a887171d17294323d9932bf3a5d9dc83043ae71aee9628f6c6c004c6a900ca3c9b666069bb9599cd3cc5ed8b76e8b67f7375ead2d86800a4854f17f419a8a305785f7b9a1a2a617718e997181be3d23eb638e9c4b1ba3501384c37f0e0057e5e3f633db6bf9b9e4d09eca20669cbc5c91c6714d1c7a221434fad944660974a9534cb0bea042f7f107f781275b452aa65a963f3b4883144e41f906c931b79c08454e114683e4b31140a076910bd43b54d6ae3bebd3fb01298c2031eb672e6bfba2144a98371920a185426dcad71f23e796e202f9f7738b519ad9d0b17c424b055af636fa89eb194026f26364aed982e27f30e0c229b9898a5afed5710bd97dd6d54090150f428e94fd5b78d33a5e2904ddd12315b1df058ba8d6bbe76370db9066033d7e0030681e7c2e3656a2a141ac96db75eb5096fd41e172a7e059bf323bccb3675021b45eda935fcf89ce5e07f19fd3e332582d5d0d49e578854de1bd0c689c2ba6387b609b63bef0b1dadcba9254cfae4647307dbe2e91d3add534b79015edf09e508a10e4176e596b2e96ca75a39dbb598165a769c277484a99f13efbd9c2d89225573254f3d72bbd3d0037c121e8ef1bfaf022100ea37bdecf3360153a31251f3ecc69ba3a3445df1bb7d639d8ddd89e71f10e76d699b1c3094ce2d0a9c75fade0767804b9e771d9ddfb7c9d1db8ca8bf35f9928bdb20d94025652d7b1aea741c0b6dad83faac06dd2ab5fdeab2a41d774c297ff385c6342fe0f5af9c260f4aa2f1b41e368ddb7137846577ce4d55ae952c8fe8118a89b48a9311255d16bf37307a8405edc055def97f35648926cd4e578ae9853767e27ccc3feb14ef9f7204f9fa6d4617d2dee5966308d442b68313c89ab3a0263d8416a520d0fe6f9276ba5b89c3871fb0fc4055dc35755c3fe952610df9424b511fdefa089d8cfb349b48994464972c9aed311fb3ea898832cf1a4f5c26e575804f91c74d803a312a95c0870ed043dd261835a7775349fa873302992503f11a7a2272b5fafa78847418be9953ba9d3db22f0c6bdc3cf62a2e23faef60f6a910dcffa85db45a47d0007e4ff004bce5c6631a6683b634ed6e5cb0d5824efe1e5f0a7cca439f2d8142cbcb8e9903f19530041ab62e7f1749cd249beb2e378bd4ec09e9944e824d47345ceec14ad6ad48793b7e716c250bbaa3fc32a4b7f3ea749f1b6c294ca8b547fc8147dd5ec05bf53c0e09f19daec63b2fc176210f9e2f0943c536aaafdba464f2fcfc9b8b1c07e7caff04b7f1f27759e2fd821bc2eb3254d92d8640653572325612d95d7ec4ad2b0d7c84c1c47f04cd44b745ed8a16c156fd229f41fd8dcb8c386f0f92fdf237fab681f61eb104c8c02498e2a92aee6c78cb4a516c72cea510d5cd09b3b29f396190fe98a6c1109f6d49cd3e0454c69491fe1361c22bc465db75b638bc07ec34df6d83b0580444adbb261d7296ce2b888a60895dd9368b708cf6c68adaf5dda5232ce359b1c51e44e0e5e5d69c9e8f74c9e39787c37637e244429444665467509b9036115d7df99ba62d7854dd04b4f1819a7c2a7750ecc679a5da1436e654a05599b46fb77da81a2e4de119a2a79b96be9aadfca9324c35ecf5897a525ca8a37455a5d67e0392a5921ba6f1896accdb141b8a66b7bc36e76c96494ab31f5a088a13fe87727b04aa51ec07a16042a63e928d38fecd96a357dc7ac2e99f5cad9866b04a571139f324e649d115b5630a14a71d30f80fb582550634d2f3a650c160ae4cbccf89bc210378112bdf163d3dbe1be05bb8de4b1447632e1b46502521153d6a6d6f087a93ce067bb8495fe8d97d710624053ee322f2b7917ce2af4c687e22607262a2a01e75bf454632b60864f89d6d702936b488cb6277aa3b1d15911b29a5b49e5200492747b22f3596809dcae3e91111ce8c77589f3d9fff1fa833c9ff110ba2c0ed9916d8c28304fb2436d07629505029a1ce99ac83ac62261daff4b19a41d0237fabb418644b5e66b60fb4dd0c79941abc669a88106001fbe1c08b1df1564c71b6fc87229a3ed69e467ba5709e61ee2a653c7c9e6148363ea35de0ace658151194d2b22932ec3957b15d1c7c1689d4c90ec660dcfc78f406d47f1a4a5c187ee8043336d0d6c65ac9b13a40dc79c56085b00ee8eebfc6ca42be06f6e6dd82a4d747cfc58c9a1e69b0cd90d48b9971ee357db0238f1ad32d66a63e2ec92b6285b1d79cf58e9663275d99632da719a8716a2e28074b30a4649a23cf75421a8e9381a39a9b73ad2e7d64b0127daa3e03b48f01afdf6b86ec20141676069a2bcf14fa2db1811a92665e9a8ec776eefff9406092ec6b75d2146a3d0745e17774cdb35880547078cedcea004ce2a53631ee7c8b0a2df927f42d7d6f82ceb8e941a0e6d7fbd5bcd44f871804f1ce461b7e4fd24caac58cda2e16013804fc1c219da1c2c44f838f9760230b9ea72c7da1343ab8974ee75c2346bb0eb5c684f2c5018fa0988169eaf85dad81376dd6444381a366698847b742c54e6f6caad1977e32d2fa1c9b608c00add806445b901ac6b328592dedb2868a88bd5ff9e0344efd9baabfc1840636b807ff46e83839c51bb9c7ca0123ab4d88fc3c9633ebab6d7df280109203171c4691a5784fbc2ff89ae687242ee863b74e6aee2bf3b6b03e643c964d7d10b68e35b31360d60daec9a874f471609ff5c4f576fa626e46709305c953ed971d3be9d914c41cca664fe0ffdaf43736a428f5b1a48bd812afa9470a52072264eb18d693eef317857a452406b263a590f43ba78c36fecb947a8bd4be3c5ee59d3ca4bb2f7b566fa5ec82da3e905029e0375529b0526abfe38e71d35bd24041d92b7b189df7964012e829f2e2ad662b0d9ba237c049839c06855bbeafa0c347b52fd2ae90f419a64a0c9c0af301797b9ce8d797bc12064017afc120441e7ab92b91f7ade10bf8179d43dc41f38ad56621050bc57f18173561d5b2f0e7b622b5a48f4a14c094d5b40c7f93098434d18c5292dc7e30c4f6301811358892e5fd2a030714cec2cd18e388e3a21f4f620a6115d0c990b53d4d227ca5274102e26d044f9f8b0ae037a6213a022af8150ed4d0532dfdc424ce9c5063a63c3dee3ada8f88e93b4ee7128073104e65b418ef9a916000e2a2bd5b0635069169282a8bf3193f32b13b043e3344ada932ba24c63b99d2d642ee39ed5745c32331911a7dde1cfa016e108167614612ab508758b51e44417195939f4c3675e899ec6dcddc4bc026856a59d9c625ae951891b9ccf89f14b1ef254ad7cdd9c13a69b5e6f96ee76a476e6c045bbe410b275157c9795af445eb6b4cd45e07bdf220c4b1b0769f57b771f6084f7c2ba09480ca0ac299070dec07e5fac8a890790838474b0274e19e8c59138769cb887d39c7be3596b0ff071a9589a7b18aa250937ca4bb7f5a08c72a0cfa641379b427b9fd0a3e32a17021e5ad171637584013c9dc65febd95c60256202673c5042694ab878e78c88966617f263f1479e21362167c1cbcffa16d0b1669f858750ff5a9b34f631ffa9ed874eb980c1d59d0138d1c5dbd1bd589f0c23733418cf3cddbc169b14560bebb951ad93f7f042d8d61d1c122141eae04c8a542073d8022d4f10b670d97060959be420a88c86ccac3a1d707ae87139b2f772ed39f35a258c4a8339b3dd40586ab31a1a09a6c35fd1f335406d0e3ba63ba7facc3f6390050b58f91f43acef17b58bccab50d8d1cb93eedc60dc38b6020ecd034d51b54036d59f3b7883ee4b881856817a9c485a02d01d9786645c6bf3ec17f374579fad327352b1f8250457d0b5cb08e3e3ad945182c8bf62f8ca3232667aa76cad0238a4b5021d70eb77d435c258ddab708fd52bb59b3c0ca210d314b7f7fd082a1df40ce783c1ec95414f30b1054d9104e7dbcf92517641ab50c74359a30174779c050f6478d59a74917039ea0806f993d432a25213b43c9e4f08e639ee01c8cdc124ed84d38552084408ef74c3dfce916e9e426e1058d15efa373d5267d91226fee36bfab60e2167aeab3db2d0784454438dccd7a97cd6e0f6c9e8eaaea9eaeb304592c4a6eef6c7563d1b6c919d3dab8ca84a0be5aab57ab992c93dc60c4eff1008de820233c85bf15bdbfce34cec8500ec911f00aa6ae096ce79a877008cd6aad8566c70947d778c1c54859277638ebdb1318d11dcd50898647e4d092113916421e3d72373862185531e4826af4807a7f1d04c107f0f6c5ae056f13f6fe5da8cb831e8eff71bb9106d0d300d704b18c4ad0910f144b6e3837a397636ee850096ce6407705318da5de5dc4039cf95e061b5f88df744c2f557c029718544338d9bd117b7c1237c4adfacd3999557e15837aceecba8ee28ed2a092f55826aa8c6252b86f0a120d34effb2c6ceae8e3be426a08cffe932f2523565607a50ecdbd286eece6bea53f1724dc876837bdf6c26499c777da4059aaa63e7bdd0075b86df27a611e9fd67dd47fabe183c16cdd26616aed304078fb9f4173e4f0e3d970c4c93ce6861247a230569b54a35511589731c5048d98b8d84438ed1569a322f3d0cc68ea41f10a15fefd8e76542e6ad5fe8a946f86f6d3db8b9983a41311231580304920b789e71405c1750ad3ce0e54242bec8a051b7801d55de2da5e5f32ed2ad354444be407ec8341aaf03b11371e00ca99fa56c841cf8200927ea842508bdcf12936ba851ef5bf3219c950ed93d1a6e275285c0627409ca7d6ae2022f8bc9a25a5960aeaec741e2de1a1bb3a5d53c05407b4cceded1a1e5664743d75fcc3f8e9c08c811dc6b5b2e44e14458cf492f20e522d017a9f25ea5e9482ebfab9045115506a43cc49475acdb3f533d123216b55e720d4fd6cb070a0f0ea880bc98ca4b37dcc537629c60a73cbd49aa8dd94e8cc2103c563354a7e079efebb23512afb33709eee029015334f0640771ddde61ecb460023063b8e08456b2b65243393bbd384d4ed831b96a0a977a8bacd3462c7801d636419470343060f46da08562cec48f2ec718a432a784f56281aacdbbd0be62678ae4d0580ea40b267b2fed814a73de9da9c6829de88b5061d5d0e54a97c5fa33e61aa6615796dbb45bdbfcea4c219479bca209f0e5f1112ca64900322443c97b64a08595b7852d8d4aa0ae75b93a6b57dd3f2b7f0f3e0b5fedf9c5f534a19cdc9b914e3213a5249858b9ac7268c83aa453d906ea9af30ca0c0f3a41ba5e8262742cda5e15034e0fb6d6fadbfaf37e85ce3810de8ff60a06e00f36a942492fadb02110eb060f55b8d289dd50520c854d4aa735baa1342f57b67b72c7841721eeed8b12af326ad1439df77513524514ee400352bf12ee53d8232acdd1cd683436ee171310404d55654db89c757c4bda2437dd35852d064b5b8ae602120a8cac8c8bcab00ca2619da11223e798dc31acb82c20153c78004541b1c1c1999ce48f80c020dd7f1705b03f5a784f9e124cc7432c1bf0663495d7d0358f79afbfde9751b7347976f799c280905a8af9d4781e07cae604badf537e7c8bc59573d" + }, + "parachainSystem": {}, + "parachainInfo": { + "parachainId": 2000 + }, + "balances": { + "balances": [ + [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + 1152921504606846976 + ], + [ + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + 1152921504606846976 + ], + [ + "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y", + 1152921504606846976 + ], + [ + "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy", + 1152921504606846976 + ], + [ + "5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw", + 1152921504606846976 + ], + [ + "5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL", + 1152921504606846976 + ], + [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + 1152921504606846976 + ], + [ + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + 1152921504606846976 + ], + [ + "5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT", + 1152921504606846976 + ], + [ + "5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8", + 1152921504606846976 + ], + [ + "5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n", + 1152921504606846976 + ], + [ + "5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk", + 1152921504606846976 + ] + ] + }, + "transactionPayment": { + "multiplier": "1000000000000000000" + }, + "assets": { + "assets": [ + [ + 1, + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + true, + 100000000000 + ], + [ + 2, + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + true, + 100000000000 + ] + ], + "metadata": [ + [ + 1, + [ + 97, + 115, + 115, + 101, + 116, + 45, + 49 + ], + [ + 65, + 76, + 84, + 49 + ], + 10 + ], + [ + 2, + [ + 97, + 115, + 115, + 101, + 116, + 45, + 50 + ], + [ + 65, + 76, + 84, + 50 + ], + 10 + ] + ], + "accounts": [ + [ + 1, + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + 500000000000 + ], + [ + 2, + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + 500000000000 + ] + ] + }, + "sudo": { + "key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + }, + "council": { + "members": [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y", + "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" + ] + }, + "collatorSelection": { + "invulnerables": [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" + ], + "candidacyBond": 16000000000, + "desiredCandidates": 0 + }, + "session": { + "keys": [ + [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + { + "aura": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + } + ], + [ + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + { + "aura": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" + } + ] + ] + }, + "aura": { + "authorities": [] + }, + "auraExt": {}, + "polkadotXcm": { + "safeXcmVersion": 3 + } + } + } +} \ No newline at end of file diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml deleted file mode 100644 index 903c6e5..0000000 --- a/runtime/Cargo.toml +++ /dev/null @@ -1,129 +0,0 @@ -[package] -name = "node-template-runtime" -version = "4.0.0-dev" -description = "A fresh FRAME-based Substrate node, ready for hacking." -authors = ["Substrate DevHub "] -homepage = "https://substrate.io/" -edition = "2021" -license = "Unlicense" -publish = false -repository = "https://github.com/substrate-developer-hub/substrate-node-template/" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } - -# nft dependencies -pallet-nft-fractionalization = {version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v0.9.43"} -pallet-nfts = {version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v0.9.43" } - -# pallets added -pallet-assets = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-identity = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-utility = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} - -# template pallets -pallet-aura = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -frame-try-runtime = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v0.9.43"} -pallet-timestamp = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -frame-executive = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-block-builder = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-core = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-inherents = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-offchain = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-session = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-std = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43" } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -sp-version = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} - -# Used for the node template's RPCs -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} -pallet-transaction-payment-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.43"} - -# Used for runtime benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.43"} -frame-system-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v0.9.43"} - -# Local Dependencies -pallet-template = { version = "4.0.0-dev", default-features = false, path = "../pallets/template" } - -[build-dependencies] -substrate-wasm-builder = { version = "5.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.43"} - -[features] -default = ["std"] -std = [ "frame-try-runtime?/std", - "frame-system-benchmarking?/std", - "frame-benchmarking?/std", - "codec/std", "scale-info/std", - "frame-executive/std", - "frame-support/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime/std", - "pallet-aura/std", - "pallet-balances/std", - "pallet-grandpa/std", - "pallet-identity/std", - "pallet-sudo/std", - "pallet-template/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-assets/std", - "pallet-nfts/std", - "pallet-nft-fractionalization/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-consensus-grandpa/std", - "sp-core/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-transaction-pool/std", - "sp-version/std", - "substrate-wasm-builder", - "pallet-utility/std" - ] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-grandpa/runtime-benchmarks", - "pallet-template/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-nft-fractionalization/runtime-benchmarks", - ] -try-runtime = [ - "frame-try-runtime/try-runtime", - "frame-executive/try-runtime", - "frame-system/try-runtime", - "frame-support/try-runtime", - "pallet-aura/try-runtime", - "pallet-balances/try-runtime", - "pallet-grandpa/try-runtime", - "pallet-sudo/try-runtime", - "pallet-template/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-nft-fractionalization/try-runtime", - ] diff --git a/runtime/build.rs b/runtime/build.rs deleted file mode 100644 index c03d618..0000000 --- a/runtime/build.rs +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - #[cfg(feature = "std")] - { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build(); - } -} diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml new file mode 100644 index 0000000..75fb9d4 --- /dev/null +++ b/runtime/common/Cargo.toml @@ -0,0 +1,38 @@ +[package] +authors = ["Metaquity Network"] +description = "Runtime Common" +edition = "2021" +license = "Unlicense" +name = "metaquity-network-runtime-common" +repository = "https://github.com/Metaquity-Network/metaquity-network-node-extended" +version = "0.0.1-dev" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + + +[dependencies] +codec = {package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"]} +scale-info = {version = "2.9.0", default-features = false, features = ["derive"]} + +# Substrate +frame-support = {git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0"} +sp-runtime = {git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0"} +sp-std = {git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0"} + +parachains-common = {git = "https://github.com/paritytech/cumulus", branch = "polkadot-v1.0.0", default-features = false} +polkadot-primitives = {git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0", default-features = false} + +[features] +default = [ + "std", +] +std = [ + "frame-support/std", + "sp-runtime/std", +] + +runtime-benchmarks = [ + "frame-support/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", +] diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs new file mode 100644 index 0000000..8d28f05 --- /dev/null +++ b/runtime/common/src/lib.rs @@ -0,0 +1,45 @@ +#![cfg_attr(not(feature = "std"), no_std)] +use sp_runtime::Perbill; + +use frame_support::weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}; + +// Cumulus types re-export +// These types are shared between the mainnet and devnet runtimes +//https://github.com/paritytech/cumulus/tree/master/parachains/common +pub use parachains_common::{ + impls::DealWithFees, AccountId, AuraId, Balance, Block, BlockNumber, Hash, Signature, +}; + +/// Nonce for an account +pub type Nonce = u32; + +/// 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 = 12000; + +// 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; + +/// 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 0.5 of a second of compute with a 12 second average block time. +pub const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + polkadot_primitives::MAX_POV_SIZE as u64, +); diff --git a/runtime/devnet/Cargo.toml b/runtime/devnet/Cargo.toml new file mode 100644 index 0000000..6fe3713 --- /dev/null +++ b/runtime/devnet/Cargo.toml @@ -0,0 +1,190 @@ +[package] +name = "metaquity-network-devnet-runtime" +version = "0.0.1-dev" +authors = ["Anonymous"] +description = "Metaquity network devnet runtime" +edition = "2021" +homepage = "https://metaquity.xyz" +license = "Unlicense" +repository = "https://github.com/Metaquity-Network/metaquity-network-node-extended" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[build-dependencies] +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v1.0.0" } + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", +] } +hex-literal = { version = "0.4.1", optional = true } +log = { version = "0.4.20", default-features = false } +scale-info = { version = "2.9.0", default-features = false, features = [ + "derive", +] } +smallvec = "1.11.0" + +# Local +metaquity-network-runtime-common = { path = "../common", default-features = false } + +# Substrate +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } + +# Polkadot +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } + +# Cumulus +assets-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false, version = "3.0.0" } +cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +parachain-info = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } + +[features] +default = ["std"] +std = [ + "codec/std", + "log/std", + "scale-info/std", + "assets-common/std", + "cumulus-pallet-aura-ext/std", + "cumulus-pallet-dmp-queue/std", + "cumulus-pallet-parachain-system/std", + "cumulus-pallet-xcm/std", + "cumulus-pallet-xcmp-queue/std", + "cumulus-primitives-core/std", + "cumulus-primitives-timestamp/std", + "cumulus-primitives-utility/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "pallet-aura/std", + "pallet-authorship/std", + "pallet-assets/std", + "pallet-balances/std", + "pallet-collective/std", + "pallet-collator-selection/std", + "pallet-multisig/std", + "pallet-preimage/std", + "pallet-scheduler/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "pallet-utility/std", + "pallet-xcm/std", + "parachain-info/std", + "polkadot-parachain/std", + "polkadot-runtime-common/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-core/std", + "sp-inherents/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "sp-std/std", + "sp-transaction-pool/std", + "sp-version/std", + "xcm-builder/std", + "xcm-executor/std", + "xcm/std", + "substrate-wasm-builder", +] + +runtime-benchmarks = [ + "hex-literal", + "frame-benchmarking/runtime-benchmarks", + "assets-common/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-assets/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-collator-selection/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-preimage/runtime-benchmarks", + "pallet-scheduler/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "cumulus-pallet-session-benchmarking/runtime-benchmarks", + "cumulus-pallet-xcmp-queue/runtime-benchmarks", +] + +try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-assets/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-collective/try-runtime", + "pallet-multisig/try-runtime", + "pallet-preimage/try-runtime", + "pallet-scheduler/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", +] diff --git a/runtime/devnet/build.rs b/runtime/devnet/build.rs new file mode 100644 index 0000000..02d6973 --- /dev/null +++ b/runtime/devnet/build.rs @@ -0,0 +1,13 @@ +#[cfg(feature = "std")] +fn main() { + substrate_wasm_builder::WasmBuilder::new() + .with_current_project() + .export_heap_base() + .import_memory() + .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/devnet/src/lib.rs b/runtime/devnet/src/lib.rs new file mode 100644 index 0000000..9a43ddf --- /dev/null +++ b/runtime/devnet/src/lib.rs @@ -0,0 +1,866 @@ +#![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")); + +mod weights; +pub mod xcm_config; +pub use fee::WeightToFee; + +use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; +use sp_api::impl_runtime_apis; +use sp_core::{crypto::KeyTypeId, ConstBool, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +use frame_support::{ + construct_runtime, + dispatch::DispatchClass, + parameter_types, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything}, + weights::{ConstantMultiplier, Weight}, + PalletId, +}; +use frame_system::{ + limits::{BlockLength, BlockWeights}, + EnsureRoot, EnsureSigned, +}; +use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; +pub use metaquity_network_runtime_common::{ + AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, MILLISECS_PER_BLOCK, MINUTES, + NORMAL_DISPATCH_RATIO, SLOT_DURATION, +}; +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +pub use sp_runtime::{MultiAddress, Perbill, Permill}; +use xcm_config::{RelayLocation, XcmConfig, XcmOriginToTransactDispatchOrigin}; + +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; + +// Polkadot imports +use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; + +pub use metaquity_network_runtime_common::{AccountId, Balance, BlockNumber, DealWithFees, Hash, Signature}; + +use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; + +// XCM Imports +use metaquity_network_runtime_common::Nonce; +use xcm::latest::prelude::BodyId; +use xcm_executor::XcmExecutor; + +/// The address format for describing accounts. +pub type Address = MultiAddress; + +/// Block header type as expected by this runtime. +pub type Header = generic::Header; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +/// Extrinsic type that has already been checked. +pub type CheckedExtrinsic = generic::CheckedExtrinsic; + +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, +>; + +pub mod fee { + use super::{Balance, ExtrinsicBaseWeight, MILLIUNIT}; + use frame_support::weights::{ + FeePolynomial, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, + WeightToFeePolynomial, + }; + use smallvec::smallvec; + use sp_runtime::Perbill; + + /// 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]` + /// - `[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. + pub struct WeightToFee; + impl frame_support::weights::WeightToFee for WeightToFee { + type Balance = Balance; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + let ref_polynomial: FeePolynomial = RefTimeToFee::polynomial().into(); + let proof_polynomial: FeePolynomial = ProofSizeToFee::polynomial().into(); + + // Get fee amount from ref_time based on the RefTime polynomial + let ref_fee: Balance = ref_polynomial.eval(weight.ref_time()); + + // Get fee amount from proof_size based on the ProofSize polynomial + let proof_fee: Balance = proof_polynomial.eval(weight.proof_size()); + + // Take the maximum instead of the sum to charge by the more scarce resource. + ref_fee.max(proof_fee) + } + } + + /// Maps the Ref time component of `Weight` to a fee. + pub struct RefTimeToFee; + impl WeightToFeePolynomial for RefTimeToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: + // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT + let p = MILLIUNIT / 10; + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } + + /// Maps the proof size component of `Weight` to a fee. + pub struct ProofSizeToFee; + impl WeightToFeePolynomial for ProofSizeToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // Map 10kb proof to 1 CENT. + let p = MILLIUNIT / 10; + let q = 10_000; + + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } +} +/// 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}; + + 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; +} + +impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + } +} + +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("devnet"), + impl_name: create_runtime_str!("devnet"), + authoring_version: 1, + spec_version: 1000, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +pub const MICROUNIT: Balance = 1_000_000; +pub const MILLIUNIT: Balance = 1_000 * MICROUNIT; +pub const UNIT: Balance = 1_000 * MILLIUNIT; + +pub const EXISTENTIAL_DEPOSIT: Balance = MILLIUNIT; + +pub const fn deposit(items: u32, bytes: u32) -> Balance { + (items as Balance * 20 * UNIT + (bytes as Balance) * 100 * MICROUNIT) / 100 +} + +/// 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() } +} + +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(); + pub MaxCollectivesProposalWeight: Weight = Perbill::from_percent(50) * RuntimeBlockWeights::get().max_block; + pub const SS58Prefix: u16 = 42; +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The basic call filter to use in dispatchable. + type BaseCallFilter = Everything; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = RuntimeBlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = RuntimeBlockLength; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// This stores the number of previous transactions associated with a sender account. + type Nonce = Nonce; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = AccountIdLookup; + /// The Block type used by the runtime. This is used by `construct_runtime` to retrieve the + /// extrinsics or other block specific data as needed. + type Block = Block; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// 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 = (); + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = (); + /// 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 + type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; + /// The maximum number of consumers allowed on a single account. + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = (); +} + +parameter_types! { + pub const UncleGenerations: u32 = 0; +} + +impl pallet_authorship::Config for Runtime { + type FindAuthor = pallet_session::FindAccountFromAuthorIndex; + type EventHandler = (CollatorSelection,); +} + +parameter_types! { + pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; +} + +impl pallet_balances::Config for Runtime { + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_balances::weights::SubstrateWeight; + /// The type for recording an account's balance. + type Balance = Balance; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type ReserveIdentifier = [u8; 8]; + type RuntimeHoldReason = (); + type FreezeIdentifier = (); + type MaxLocks = ConstU32<50>; + type MaxReserves = ConstU32<50>; + type MaxHolds = ConstU32<0>; + type MaxFreezes = ConstU32<0>; +} + +parameter_types! { + pub const AssetDeposit: Balance = 10 * UNIT; + pub const AssetAccountDeposit: Balance = deposit(1, 16); + pub const ApprovalDeposit: Balance = EXISTENTIAL_DEPOSIT; + pub const StringLimit: u32 = 50; + pub const MetadataDepositBase: Balance = deposit(1, 68); + pub const MetadataDepositPerByte: Balance = deposit(0, 1); +} + +impl pallet_assets::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Balance = Balance; + type RemoveItemsLimit = ConstU32<1000>; + type AssetId = u32; + type AssetIdParameter = codec::Compact; + type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; + type ForceOrigin = EnsureRoot; + type AssetDeposit = AssetDeposit; + type AssetAccountDeposit = AssetAccountDeposit; + type MetadataDepositBase = MetadataDepositBase; + type MetadataDepositPerByte = MetadataDepositPerByte; + type ApprovalDeposit = ApprovalDeposit; + type StringLimit = StringLimit; + type Freezer = (); + type Extra = (); + type CallbackHandle = (); + type WeightInfo = pallet_assets::weights::SubstrateWeight; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); +} + +parameter_types! { + /// Relay Chain `TransactionByteFee` / 10 + pub const TransactionByteFee: Balance = 10 * MICROUNIT; +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = + pallet_transaction_payment::CurrencyAdapter>; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = WeightToFee; + type LengthToFee = ConstantMultiplier; + type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; +} + +impl pallet_utility::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + + type WeightInfo = pallet_utility::weights::SubstrateWeight; +} + +parameter_types! { + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); +} + +impl cumulus_pallet_parachain_system::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnSystemEvent = (); + type SelfParaId = parachain_info::Pallet; + type OutboundXcmpMessageSource = XcmpQueue; + type DmpMessageHandler = DmpQueue; + type ReservedDmpWeight = ReservedDmpWeight; + type XcmpMessageHandler = XcmpQueue; + type ReservedXcmpWeight = ReservedXcmpWeight; + type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; +} + +impl parachain_info::Config for Runtime {} + +impl cumulus_pallet_aura_ext::Config for Runtime {} + +impl cumulus_pallet_xcmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ChannelInfo = ParachainSystem; + type VersionWrapper = (); + type ExecuteOverweightOrigin = EnsureRoot; + type ControllerOrigin = EnsureRoot; + type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; + type PriceForSiblingDelivery = (); + type WeightInfo = (); +} + +impl cumulus_pallet_dmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ExecuteOverweightOrigin = EnsureRoot; +} + +parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + RuntimeBlockWeights::get().max_block; + pub const NoPreimagePostponement: Option = Some(10); +} + +impl pallet_scheduler::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeOrigin = RuntimeOrigin; + type PalletsOrigin = OriginCaller; + type RuntimeCall = RuntimeCall; + type MaximumWeight = MaximumSchedulerWeight; + type ScheduleOrigin = frame_system::EnsureRoot; + type OriginPrivilegeCmp = frame_support::traits::EqualPrivilegeOnly; + type MaxScheduledPerBlock = ConstU32<512>; + type WeightInfo = pallet_scheduler::weights::SubstrateWeight; + type Preimages = Preimage; +} + +parameter_types! { + pub const Period: u32 = 6 * HOURS; + pub const Offset: u32 = 0; +} + +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 WeightInfo = (); +} + +impl pallet_sudo::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; +} + +parameter_types! { + pub const CouncilMotionDuration: BlockNumber = 7 * DAYS; + pub const CouncilMaxProposals: u32 = 10; + pub const CouncilMaxMembers: u32 = 25; +} + +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 = pallet_collective::weights::SubstrateWeight; + type SetMembersOrigin = EnsureRoot; + type MaxProposalWeight = MaxCollectivesProposalWeight; +} + +parameter_types! { + // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. + pub const DepositBase: Balance = deposit(1, 88); + // Additional storage item size of 32 bytes. + pub const DepositFactor: Balance = deposit(0, 32); +} + +impl pallet_multisig::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = ConstU32<100>; + type WeightInfo = pallet_multisig::weights::SubstrateWeight; +} + +parameter_types! { + pub const PreimageBaseDeposit: Balance = deposit(2, 64); + pub const PreimageByteDeposit: Balance = deposit(0, 1); +} + +impl pallet_preimage::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_preimage::weights::SubstrateWeight; + type Currency = Balances; + type ManagerOrigin = EnsureRoot; + type BaseDeposit = PreimageBaseDeposit; + type ByteDeposit = PreimageByteDeposit; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type MaxAuthorities = ConstU32<100_000>; + type DisabledValidators = (); + type AllowMultipleBlocksPerSlot = ConstBool; +} + +parameter_types! { + pub const PotId: PalletId = PalletId(*b"PotStake"); + pub const MaxCandidates: u32 = 1000; + pub const MinEligibleCollators: u32 = 5; + pub const SessionLength: BlockNumber = 6 * HOURS; + pub const MaxInvulnerables: u32 = 100; + // StakingAdmin pluralistic body. + pub const StakingAdminBodyId: BodyId = BodyId::Defense; +} + +/// We allow root and the StakingAdmin to execute privileged collator selection operations. +pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< + EnsureRoot, + EnsureXcm>, +>; + +impl pallet_collator_selection::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type UpdateOrigin = CollatorSelectionUpdateOrigin; + type PotId = PotId; + type MaxCandidates = MaxCandidates; + type MinEligibleCollators = MinEligibleCollators; + type MaxInvulnerables = MaxInvulnerables; + // should be a multiple of session or things will get inconsistent + type KickThreshold = Period; + type ValidatorId = ::AccountId; + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ValidatorRegistration = Session; + type WeightInfo = (); +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub struct Runtime { + // System support stuff. + System: frame_system = 0, + ParachainSystem: cumulus_pallet_parachain_system = 1, + Timestamp: pallet_timestamp = 2, + ParachainInfo: parachain_info = 3, + + // Utility + Utility: pallet_utility = 4, + Multisig: pallet_multisig = 5, + Preimage: pallet_preimage = 6, + Scheduler: pallet_scheduler = 7, + + // Monetary stuff. + Balances: pallet_balances = 10, + TransactionPayment: pallet_transaction_payment = 11, + Assets: pallet_assets = 12, + + // Governance + Sudo: pallet_sudo = 15, + Council: pallet_collective:: = 16, + + // Collator support. The order of these 4 are important and shall not change. + Authorship: pallet_authorship = 20, + CollatorSelection: pallet_collator_selection = 21, + Session: pallet_session = 22, + Aura: pallet_aura = 23, + AuraExt: cumulus_pallet_aura_ext = 24, + + // XCM helpers. + XcmpQueue: cumulus_pallet_xcmp_queue = 30, + PolkadotXcm: pallet_xcm = 31, + CumulusXcm: cumulus_pallet_xcm = 32, + DmpQueue: cumulus_pallet_dmp_queue = 33, + } +); + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + frame_benchmarking::define_benchmarks!( + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_assets, Assets] + [pallet_session, SessionBench::] + [pallet_scheduler, Scheduler] + [pallet_timestamp, Timestamp] + [pallet_collator_selection, CollatorSelection] + [pallet_multisig, Multisig] + [pallet_preimage, Preimage] + [cumulus_pallet_xcmp_queue, XcmpQueue] + ); +} + +impl_runtime_apis! { + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + 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() -> sp_std::vec::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 frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Nonce { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + 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(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + for Runtime + { + fn query_call_info( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::RuntimeDispatchInfo { + TransactionPayment::query_call_info(call, len) + } + fn query_call_fee_details( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_call_fee_details(call, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { + ParachainSystem::collect_collation_info(header) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + 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, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + 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) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{Benchmarking, BenchmarkBatch}; + + use frame_system_benchmarking::Pallet as SystemBench; + impl frame_system_benchmarking::Config for Runtime {} + + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + impl cumulus_pallet_session_benchmarking::Config for Runtime {} + + use frame_support::traits::WhitelistedStorageKeys; + let whitelist = 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) + } + } +} + +struct CheckInherents; + +impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { + fn check_inherents( + block: &Block, + relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, + ) -> sp_inherents::CheckInherentsResult { + let relay_chain_slot = relay_state_proof + .read_slot() + .expect("Could not read the relay chain slot from the proof"); + + let inherent_data = + cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( + relay_chain_slot, + sp_std::time::Duration::from_secs(6), + ) + .create_inherent_data() + .expect("Could not create the timestamp inherent data"); + + inherent_data.check_extrinsics(block) + } +} + +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, + CheckInherents = CheckInherents, +} diff --git a/runtime/devnet/src/weights/block_weights.rs b/runtime/devnet/src/weights/block_weights.rs new file mode 100644 index 0000000..b2092d8 --- /dev/null +++ b/runtime/devnet/src/weights/block_weights.rs @@ -0,0 +1,53 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Importing a block with 0 Extrinsics. + pub const BlockExecutionWeight: Weight = + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); + } + + #[cfg(test)] + mod test_weights { + use frame_support::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::constants::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/devnet/src/weights/extrinsic_weights.rs b/runtime/devnet/src/weights/extrinsic_weights.rs new file mode 100644 index 0000000..332c3b3 --- /dev/null +++ b/runtime/devnet/src/weights/extrinsic_weights.rs @@ -0,0 +1,53 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Executing a NO-OP `System::remarks` Extrinsic. + pub const ExtrinsicBaseWeight: Weight = + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); + } + + #[cfg(test)] + mod test_weights { + use frame_support::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::constants::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/devnet/src/weights/mod.rs b/runtime/devnet/src/weights/mod.rs new file mode 100644 index 0000000..ed0b4db --- /dev/null +++ b/runtime/devnet/src/weights/mod.rs @@ -0,0 +1,28 @@ +// 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 extrinsic_weights; +pub mod paritydb_weights; +pub mod rocksdb_weights; + +pub use block_weights::constants::BlockExecutionWeight; +pub use extrinsic_weights::constants::ExtrinsicBaseWeight; +pub use paritydb_weights::constants::ParityDbWeight; +pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/runtime/devnet/src/weights/paritydb_weights.rs b/runtime/devnet/src/weights/paritydb_weights.rs new file mode 100644 index 0000000..4338d92 --- /dev/null +++ b/runtime/devnet/src/weights/paritydb_weights.rs @@ -0,0 +1,63 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights + /// are available for brave runtime engineers who may want to try this out as default. + pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::ParityDbWeight as W; + use frame_support::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 sane() { + // 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/devnet/src/weights/rocksdb_weights.rs b/runtime/devnet/src/weights/rocksdb_weights.rs new file mode 100644 index 0000000..1d115d9 --- /dev/null +++ b/runtime/devnet/src/weights/rocksdb_weights.rs @@ -0,0 +1,63 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::RocksDbWeight as W; + use frame_support::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 sane() { + // 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/devnet/src/xcm_config.rs b/runtime/devnet/src/xcm_config.rs new file mode 100644 index 0000000..eeeb3df --- /dev/null +++ b/runtime/devnet/src/xcm_config.rs @@ -0,0 +1,299 @@ +use super::{ + AccountId, AllPalletsWithSystem, Assets, Balance, Balances, ParachainInfo, ParachainSystem, + PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, +}; +use core::{marker::PhantomData, ops::ControlFlow}; +use frame_support::{ + log, match_types, parameter_types, + traits::{ConstU32, Everything, Nothing, PalletInfoAccess, ProcessMessageError}, + weights::Weight, +}; +use frame_system::EnsureRoot; +use pallet_xcm::XcmPassthrough; +use polkadot_parachain::primitives::Sibling; +use polkadot_runtime_common::impls::ToAuthor; +use xcm::latest::prelude::*; +use xcm_builder::{ + AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowTopLevelPaidExecutionFrom, + CreateMatcher, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, + IsConcrete, MatchXcm, NativeAsset, NoChecking, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, TrailingSetTopicAsId, + UsingComponents, WithComputedOrigin, WithUniqueTopic, +}; +use xcm_executor::traits::Properties; +use xcm_executor::{traits::ShouldExecute, XcmExecutor}; + +parameter_types! { + pub const RelayLocation: MultiLocation = MultiLocation::parent(); + pub const RelayNetwork: Option = None; + pub SelfReserve: MultiLocation = MultiLocation { parents: 0, interior: Here }; + pub PlaceholderAccount: AccountId = PolkadotXcm::check_account(); + pub AssetsPalletLocation: MultiLocation = + PalletInstance(::index() as u8).into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); + pub UniversalLocation: InteriorMultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); +} + +/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used +/// when determining ownership of accounts for asset transacting and when attempting to use XCM +/// `Transact` in order to determine the dispatch Origin. +pub type LocationToAccountId = ( + // The parent (Relay-chain) origin converts to the parent `AccountId`. + ParentIsPreset, + // Sibling parachain origins convert to AccountId via the `ParaId::into`. + SiblingParachainConvertsVia, + // Straight up local `AccountId32` origins just alias directly to `AccountId`. + AccountId32Aliases, +); + +/// `AssetId/Balancer` converter for `TrustBackedAssets` +pub type TrustBackedAssetsConvertedConcreteId = + assets_common::TrustBackedAssetsConvertedConcreteId; + +/// Means for transacting assets on this chain. +pub type LocalAssetTransactor = CurrencyAdapter< + // Use this currency: + Balances, + // Use this currency when it is a fungible asset matching the given location or name: + IsConcrete, + // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports. + (), +>; + +/// Means for transacting assets besides the native currency on this chain. +pub type LocalFungiblesTransactor = FungiblesAdapter< + // Use this fungibles implementation: + Assets, + // Use this currency when it is a fungible asset matching the given location or name: + TrustBackedAssetsConvertedConcreteId, + // Convert an XCM MultiLocation into a local account id: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports of `Assets`. + NoChecking, + // We don't track any teleports of `Assets`, but a placeholder account is provided due to trait + // bounds. + PlaceholderAccount, +>; + +/// Means for transacting assets on this chain. +pub type AssetTransactors = (LocalAssetTransactor, LocalFungiblesTransactor); + +/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, +/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can +/// biases the kind of local `Origin` it will become. +pub type XcmOriginToTransactDispatchOrigin = ( + // Sovereign account converter; this attempts to derive an `AccountId` from the origin location + // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for + // foreign chains who want to have a local sovereign account on this chain which they control. + SovereignSignedViaLocation, + // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when + // recognized. + RelayChainAsNative, + // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when + // recognized. + SiblingParachainAsNative, + // Native signed account converter; this just converts an `AccountId32` origin into a normal + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, + // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. + XcmPassthrough, +); + +parameter_types! { + // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. + pub UnitWeightCost: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); + pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; +} + +match_types! { + pub type ParentOrParentsExecutivePlurality: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Executive, .. }) } + }; +} + +//TODO: move DenyThenTry to polkadot's xcm module. +/// Deny executing the xcm message if it matches any of the Deny filter regardless of anything else. +/// If it passes the Deny, and matches one of the Allow cases then it is let through. +pub struct DenyThenTry(PhantomData, PhantomData) +where + Deny: ShouldExecute, + Allow: ShouldExecute; + +impl ShouldExecute for DenyThenTry +where + Deny: ShouldExecute, + Allow: ShouldExecute, +{ + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + max_weight: Weight, + properties: &mut Properties, + ) -> Result<(), ProcessMessageError> { + Deny::should_execute(origin, instructions, max_weight, properties)?; + Allow::should_execute(origin, instructions, max_weight, properties) + } +} + +// See issue +pub struct DenyReserveTransferToRelayChain; +impl ShouldExecute for DenyReserveTransferToRelayChain { + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + _max_weight: Weight, + _properties: &mut Properties, + ) -> Result<(), ProcessMessageError> { + instructions.matcher().match_next_inst_while( + |_| true, + |inst| match inst { + InitiateReserveWithdraw { + reserve: MultiLocation { parents: 1, interior: Here }, + .. + } + | DepositReserveAsset { + dest: MultiLocation { parents: 1, interior: Here }, .. + } + | TransferReserveAsset { + dest: MultiLocation { parents: 1, interior: Here }, .. + } => { + Err(ProcessMessageError::Unsupported) // Deny + }, + // An unexpected reserve transfer has arrived from the Relay Chain. Generally, + // `IsReserve` should not allow this, but we just log it here. + ReserveAssetDeposited { .. } + if matches!(origin, MultiLocation { parents: 1, interior: Here }) => + { + log::warn!( + target: "xcm::barrier", + "Unexpected ReserveAssetDeposited from the Relay Chain", + ); + Ok(ControlFlow::Continue(())) + }, + _ => Ok(ControlFlow::Continue(())), + }, + )?; + + // Permit everything else + Ok(()) + } +} + +pub type Barrier = TrailingSetTopicAsId< + DenyThenTry< + DenyReserveTransferToRelayChain, + ( + TakeWeightCredit, + WithComputedOrigin< + ( + AllowTopLevelPaidExecutionFrom, + // Parent and its exec plurality get free execution + AllowExplicitUnpaidExecutionFrom, + ), + UniversalLocation, + ConstU32<8>, + >, + ), + >, +>; + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type RuntimeCall = RuntimeCall; + type XcmSender = XcmRouter; + // How to withdraw and deposit an asset. + type AssetTransactor = AssetTransactors; + type OriginConverter = XcmOriginToTransactDispatchOrigin; + type IsReserve = NativeAsset; + type IsTeleporter = (); + type Aliasers = Nothing; + // Teleporting is disabled. + type UniversalLocation = UniversalLocation; + type Barrier = Barrier; + type Weigher = FixedWeightBounds; + type Trader = + UsingComponents>; + type ResponseHandler = PolkadotXcm; + type AssetTrap = PolkadotXcm; + type AssetLocker = (); + type AssetExchanger = (); + type AssetClaims = PolkadotXcm; + type SubscriptionService = PolkadotXcm; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; +} + +/// No local origins on this chain are allowed to dispatch XCM sends/executions. +pub type LocalOriginToLocation = SignedToAccountId32; + +/// The means for routing XCM messages which are not for local execution into the right message +/// queues. +pub type XcmRouter = WithUniqueTopic<( + // Two routers - use UMP to communicate with the relay chain: + cumulus_primitives_utility::ParentAsUmp, + // and XCMP to communicate with the sibling chains. + XcmpQueue, +)>; + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parent.into()); +} + +impl pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + // We disallow users to send arbitrary XCMs from this chain. + type SendXcmOrigin = EnsureXcmOrigin; + type AdminOrigin = EnsureRoot; + type XcmRouter = XcmRouter; + // We disallow users to execute arbitrary XCMs from this chain. + type ExecuteXcmOrigin = EnsureXcmOrigin; + // Disable dispatchable execute on the XCM pallet. + // NOTE: This needs to be `Everything` for local testing. + type XcmExecuteFilter = Nothing; + // Disable dispatchable execute on the XCM pallet. + // Needs to be `Everything` for local testing. + type XcmExecutor = XcmExecutor; + // No teleportation is allowed. + type XcmTeleportFilter = Nothing; + // No teleportation is allowed. + type XcmReserveTransferFilter = Everything; + // Use (conservative) bounds on estimating XCM execution on this chain. + type Weigher = FixedWeightBounds; + type UniversalLocation = UniversalLocation; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + + // Override for AdvertisedXcmVersion default + const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; + type MaxRemoteLockConsumers = ConstU32<0>; + type RemoteLockConsumerIdentifier = (); +} + +impl cumulus_pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; +} diff --git a/runtime/mainnet/Cargo.toml b/runtime/mainnet/Cargo.toml new file mode 100644 index 0000000..70a187d --- /dev/null +++ b/runtime/mainnet/Cargo.toml @@ -0,0 +1,190 @@ +[package] +name = "metaquity-network-mainnet-runtime" +version = "0.0.1-dev" +authors = ["Anonymous"] +description = "Metaquity Network mainnet runtime" +edition = "2021" +homepage = "https://metaquity.xyz" +license = "Unlicense" +repository = "https://github.com/Metaquity-Network/metaquity-network-node-extended" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[build-dependencies] +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v1.0.0" } + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", +] } +hex-literal = { version = "0.4.1", optional = true } +log = { version = "0.4.20", default-features = false } +scale-info = { version = "2.9.0", default-features = false, features = [ + "derive", +] } +smallvec = "1.11.0" + +# Local +metaquity-network-runtime-common = { path = "../common", default-features = false } + +# Substrate +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v1.0.0" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } + +# Polkadot +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v1.0.0" } + +# Cumulus +assets-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false, version = "3.0.0" } +cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } +parachain-info = { git = "https://github.com/paritytech/cumulus.git", branch = "polkadot-v1.0.0", default-features = false } + +[features] +default = ["std"] +std = [ + "codec/std", + "log/std", + "scale-info/std", + "assets-common/std", + "cumulus-pallet-aura-ext/std", + "cumulus-pallet-dmp-queue/std", + "cumulus-pallet-parachain-system/std", + "cumulus-pallet-xcm/std", + "cumulus-pallet-xcmp-queue/std", + "cumulus-primitives-core/std", + "cumulus-primitives-timestamp/std", + "cumulus-primitives-utility/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "pallet-aura/std", + "pallet-authorship/std", + "pallet-assets/std", + "pallet-balances/std", + "pallet-collective/std", + "pallet-collator-selection/std", + "pallet-multisig/std", + "pallet-preimage/std", + "pallet-scheduler/std", + "pallet-session/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "pallet-utility/std", + "pallet-xcm/std", + "parachain-info/std", + "polkadot-parachain/std", + "polkadot-runtime-common/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-core/std", + "sp-inherents/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "sp-std/std", + "sp-transaction-pool/std", + "sp-version/std", + "xcm-builder/std", + "xcm-executor/std", + "xcm/std", + "substrate-wasm-builder", +] + +runtime-benchmarks = [ + "hex-literal", + "frame-benchmarking/runtime-benchmarks", + "assets-common/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-assets/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-collator-selection/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-preimage/runtime-benchmarks", + "pallet-scheduler/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", + "cumulus-pallet-session-benchmarking/runtime-benchmarks", + "cumulus-pallet-xcmp-queue/runtime-benchmarks", +] + +try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-assets/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-collective/try-runtime", + "pallet-multisig/try-runtime", + "pallet-preimage/try-runtime", + "pallet-scheduler/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", +] diff --git a/runtime/mainnet/build.rs b/runtime/mainnet/build.rs new file mode 100644 index 0000000..02d6973 --- /dev/null +++ b/runtime/mainnet/build.rs @@ -0,0 +1,13 @@ +#[cfg(feature = "std")] +fn main() { + substrate_wasm_builder::WasmBuilder::new() + .with_current_project() + .export_heap_base() + .import_memory() + .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/mainnet/src/lib.rs b/runtime/mainnet/src/lib.rs new file mode 100644 index 0000000..b09e157 --- /dev/null +++ b/runtime/mainnet/src/lib.rs @@ -0,0 +1,865 @@ +#![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")); + +mod weights; +pub mod xcm_config; +pub use fee::WeightToFee; + +use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; +use sp_api::impl_runtime_apis; +use sp_core::{crypto::KeyTypeId, ConstBool, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +use frame_support::{ + construct_runtime, + dispatch::DispatchClass, + parameter_types, + traits::{AsEnsureOriginWithArg, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything}, + weights::{ConstantMultiplier, Weight}, + PalletId, +}; +use frame_system::{ + limits::{BlockLength, BlockWeights}, + EnsureRoot, EnsureSigned, +}; +use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; +pub use metaquity_network_runtime_common::{ + AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, MILLISECS_PER_BLOCK, MINUTES, + NORMAL_DISPATCH_RATIO, SLOT_DURATION, +}; +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +pub use sp_runtime::{MultiAddress, Perbill, Permill}; +use xcm_config::{RelayLocation, XcmConfig, XcmOriginToTransactDispatchOrigin}; + +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; + +// Polkadot imports +use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; + +pub use metaquity_network_runtime_common::{AccountId, Balance, BlockNumber, DealWithFees, Hash, Signature}; + +use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; + +// XCM Imports +use metaquity_network_runtime_common::Nonce; +use xcm::latest::prelude::BodyId; +use xcm_executor::XcmExecutor; + +/// The address format for describing accounts. +pub type Address = MultiAddress; + +/// Block header type as expected by this runtime. +pub type Header = generic::Header; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +/// Extrinsic type that has already been checked. +pub type CheckedExtrinsic = generic::CheckedExtrinsic; + +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, +>; + +pub mod fee { + use super::{Balance, ExtrinsicBaseWeight, MILLIUNIT}; + use frame_support::weights::{ + FeePolynomial, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, + WeightToFeePolynomial, + }; + use smallvec::smallvec; + use sp_runtime::Perbill; + + /// 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]` + /// - `[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. + pub struct WeightToFee; + impl frame_support::weights::WeightToFee for WeightToFee { + type Balance = Balance; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + let ref_polynomial: FeePolynomial = RefTimeToFee::polynomial().into(); + let proof_polynomial: FeePolynomial = ProofSizeToFee::polynomial().into(); + + // Get fee amount from ref_time based on the RefTime polynomial + let ref_fee: Balance = ref_polynomial.eval(weight.ref_time()); + + // Get fee amount from proof_size based on the ProofSize polynomial + let proof_fee: Balance = proof_polynomial.eval(weight.proof_size()); + + // Take the maximum instead of the sum to charge by the more scarce resource. + ref_fee.max(proof_fee) + } + } + + /// Maps the Ref time component of `Weight` to a fee. + pub struct RefTimeToFee; + impl WeightToFeePolynomial for RefTimeToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: + // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT + let p = MILLIUNIT / 10; + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } + + /// Maps the proof size component of `Weight` to a fee. + pub struct ProofSizeToFee; + impl WeightToFeePolynomial for ProofSizeToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // Map 10kb proof to 1 CENT. + let p = MILLIUNIT / 10; + let q = 10_000; + + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } + } +} +/// 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}; + + 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; +} + +impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + } +} + +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("mainnet"), + impl_name: create_runtime_str!("mainnet"), + authoring_version: 1, + spec_version: 1000, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +pub const MICROUNIT: Balance = 1_000_000; +pub const MILLIUNIT: Balance = 1_000 * MICROUNIT; +pub const UNIT: Balance = 1_000 * MILLIUNIT; + +pub const EXISTENTIAL_DEPOSIT: Balance = MILLIUNIT; + +pub const fn deposit(items: u32, bytes: u32) -> Balance { + (items as Balance * 20 * UNIT + (bytes as Balance) * 100 * MICROUNIT) / 100 +} + +/// 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() } +} + +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(); + pub MaxCollectivesProposalWeight: Weight = Perbill::from_percent(50) * RuntimeBlockWeights::get().max_block; + pub const SS58Prefix: u16 = 42; +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The basic call filter to use in dispatchable. + type BaseCallFilter = Everything; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = RuntimeBlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = RuntimeBlockLength; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// This stores the number of previous transactions associated with a sender account. + type Nonce = Nonce; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = AccountIdLookup; + /// The Block type used by the runtime. This is used by `construct_runtime` to retrieve the + /// extrinsics or other block specific data as needed. + type Block = Block; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// 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 = (); + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = (); + /// 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 + type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = (); +} + +parameter_types! { + pub const UncleGenerations: u32 = 0; +} + +impl pallet_authorship::Config for Runtime { + type FindAuthor = pallet_session::FindAccountFromAuthorIndex; + type EventHandler = (CollatorSelection,); +} + +parameter_types! { + pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; +} + +impl pallet_balances::Config for Runtime { + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_balances::weights::SubstrateWeight; + /// The type for recording an account's balance. + type Balance = Balance; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type ReserveIdentifier = [u8; 8]; + type RuntimeHoldReason = (); + type FreezeIdentifier = (); + type MaxLocks = ConstU32<50>; + type MaxReserves = ConstU32<50>; + type MaxHolds = ConstU32<0>; + type MaxFreezes = ConstU32<0>; +} + +parameter_types! { + pub const AssetDeposit: Balance = 10 * UNIT; + pub const AssetAccountDeposit: Balance = deposit(1, 16); + pub const ApprovalDeposit: Balance = EXISTENTIAL_DEPOSIT; + pub const StringLimit: u32 = 50; + pub const MetadataDepositBase: Balance = deposit(1, 68); + pub const MetadataDepositPerByte: Balance = deposit(0, 1); +} + +impl pallet_assets::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Balance = Balance; + type RemoveItemsLimit = ConstU32<1000>; + type AssetId = u32; + type AssetIdParameter = codec::Compact; + type Currency = Balances; + type CreateOrigin = AsEnsureOriginWithArg>; + type ForceOrigin = EnsureRoot; + type AssetDeposit = AssetDeposit; + type AssetAccountDeposit = AssetAccountDeposit; + type MetadataDepositBase = MetadataDepositBase; + type MetadataDepositPerByte = MetadataDepositPerByte; + type ApprovalDeposit = ApprovalDeposit; + type StringLimit = StringLimit; + type Freezer = (); + type Extra = (); + type CallbackHandle = (); + type WeightInfo = pallet_assets::weights::SubstrateWeight; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); +} + +parameter_types! { + /// Relay Chain `TransactionByteFee` / 10 + pub const TransactionByteFee: Balance = 10 * MICROUNIT; +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = + pallet_transaction_payment::CurrencyAdapter>; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = WeightToFee; + type LengthToFee = ConstantMultiplier; + type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; +} + +impl pallet_utility::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + + type WeightInfo = pallet_utility::weights::SubstrateWeight; +} + +parameter_types! { + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); +} + +impl cumulus_pallet_parachain_system::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnSystemEvent = (); + type SelfParaId = parachain_info::Pallet; + type OutboundXcmpMessageSource = XcmpQueue; + type DmpMessageHandler = DmpQueue; + type ReservedDmpWeight = ReservedDmpWeight; + type XcmpMessageHandler = XcmpQueue; + type ReservedXcmpWeight = ReservedXcmpWeight; + type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; +} + +impl parachain_info::Config for Runtime {} + +impl cumulus_pallet_aura_ext::Config for Runtime {} + +impl cumulus_pallet_xcmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ChannelInfo = ParachainSystem; + type VersionWrapper = (); + type ExecuteOverweightOrigin = EnsureRoot; + type ControllerOrigin = EnsureRoot; + type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; + type PriceForSiblingDelivery = (); + type WeightInfo = (); +} + +impl cumulus_pallet_dmp_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; + type ExecuteOverweightOrigin = EnsureRoot; +} + +parameter_types! { + pub const Period: u32 = 6 * HOURS; + pub const Offset: u32 = 0; +} + +parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + RuntimeBlockWeights::get().max_block; + pub const NoPreimagePostponement: Option = Some(10); +} + +impl pallet_scheduler::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeOrigin = RuntimeOrigin; + type PalletsOrigin = OriginCaller; + type RuntimeCall = RuntimeCall; + type MaximumWeight = MaximumSchedulerWeight; + type ScheduleOrigin = frame_system::EnsureRoot; + type OriginPrivilegeCmp = frame_support::traits::EqualPrivilegeOnly; + type MaxScheduledPerBlock = ConstU32<512>; + type WeightInfo = pallet_scheduler::weights::SubstrateWeight; + type Preimages = Preimage; +} + +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 WeightInfo = (); +} + +impl pallet_sudo::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; +} + +parameter_types! { + pub const CouncilMotionDuration: BlockNumber = 7 * DAYS; + pub const CouncilMaxProposals: u32 = 10; + pub const CouncilMaxMembers: u32 = 25; +} + +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 = pallet_collective::weights::SubstrateWeight; + type SetMembersOrigin = EnsureRoot; + type MaxProposalWeight = MaxCollectivesProposalWeight; +} + +parameter_types! { + // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. + pub const DepositBase: Balance = deposit(1, 88); + // Additional storage item size of 32 bytes. + pub const DepositFactor: Balance = deposit(0, 32); +} + +impl pallet_multisig::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = ConstU32<100>; + type WeightInfo = pallet_multisig::weights::SubstrateWeight; +} + +parameter_types! { + pub const PreimageBaseDeposit: Balance = deposit(2, 64); + pub const PreimageByteDeposit: Balance = deposit(0, 1); +} + +impl pallet_preimage::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_preimage::weights::SubstrateWeight; + type Currency = Balances; + type ManagerOrigin = EnsureRoot; + type BaseDeposit = PreimageBaseDeposit; + type ByteDeposit = PreimageByteDeposit; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type MaxAuthorities = ConstU32<100_000>; + type DisabledValidators = (); + type AllowMultipleBlocksPerSlot = ConstBool; +} + +parameter_types! { + pub const PotId: PalletId = PalletId(*b"PotStake"); + pub const MaxCandidates: u32 = 1000; + pub const MinEligibleCollators: u32 = 5; + pub const SessionLength: BlockNumber = 6 * HOURS; + pub const MaxInvulnerables: u32 = 100; + // StakingAdmin pluralistic body. + pub const StakingAdminBodyId: BodyId = BodyId::Defense; +} + +/// We allow root and the StakingAdmin to execute privileged collator selection operations. +pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< + EnsureRoot, + EnsureXcm>, +>; + +impl pallet_collator_selection::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type UpdateOrigin = CollatorSelectionUpdateOrigin; + type PotId = PotId; + type MaxCandidates = MaxCandidates; + type MinEligibleCollators = MinEligibleCollators; + type MaxInvulnerables = MaxInvulnerables; + // should be a multiple of session or things will get inconsistent + type KickThreshold = Period; + type ValidatorId = ::AccountId; + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ValidatorRegistration = Session; + type WeightInfo = (); +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub struct Runtime { + // System support stuff. + System: frame_system = 0, + ParachainSystem: cumulus_pallet_parachain_system = 1, + Timestamp: pallet_timestamp = 2, + ParachainInfo: parachain_info = 3, + + // Utility + Utility: pallet_utility = 4, + Multisig: pallet_multisig = 5, + Preimage: pallet_preimage = 6, + Scheduler: pallet_scheduler = 7, + + // Monetary stuff. + Balances: pallet_balances = 10, + TransactionPayment: pallet_transaction_payment = 11, + Assets: pallet_assets = 12, + + // Governance + Sudo: pallet_sudo = 15, + Council: pallet_collective:: = 16, + + // Collator support. The order of these 4 are important and shall not change. + Authorship: pallet_authorship = 20, + CollatorSelection: pallet_collator_selection = 21, + Session: pallet_session = 22, + Aura: pallet_aura = 23, + AuraExt: cumulus_pallet_aura_ext = 24, + + // XCM helpers. + XcmpQueue: cumulus_pallet_xcmp_queue = 30, + PolkadotXcm: pallet_xcm = 31, + CumulusXcm: cumulus_pallet_xcm = 32, + DmpQueue: cumulus_pallet_dmp_queue = 33, + } +); + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + frame_benchmarking::define_benchmarks!( + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_assets, Assets] + [pallet_session, SessionBench::] + [pallet_scheduler, Scheduler] + [pallet_timestamp, Timestamp] + [pallet_collator_selection, CollatorSelection] + [pallet_multisig, Multisig] + [pallet_preimage, Preimage] + [cumulus_pallet_xcmp_queue, XcmpQueue] + ); +} + +impl_runtime_apis! { + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + 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() -> sp_std::vec::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 frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Nonce { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + 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(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + for Runtime + { + fn query_call_info( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::RuntimeDispatchInfo { + TransactionPayment::query_call_info(call, len) + } + fn query_call_fee_details( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_call_fee_details(call, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { + ParachainSystem::collect_collation_info(header) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + 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, + select: frame_try_runtime::TryStateSelect, + ) -> Weight { + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + 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) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{Benchmarking, BenchmarkBatch}; + + use frame_system_benchmarking::Pallet as SystemBench; + impl frame_system_benchmarking::Config for Runtime {} + + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + impl cumulus_pallet_session_benchmarking::Config for Runtime {} + + use frame_support::traits::WhitelistedStorageKeys; + let whitelist = 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) + } + } +} + +struct CheckInherents; + +impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { + fn check_inherents( + block: &Block, + relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, + ) -> sp_inherents::CheckInherentsResult { + let relay_chain_slot = relay_state_proof + .read_slot() + .expect("Could not read the relay chain slot from the proof"); + + let inherent_data = + cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( + relay_chain_slot, + sp_std::time::Duration::from_secs(6), + ) + .create_inherent_data() + .expect("Could not create the timestamp inherent data"); + + inherent_data.check_extrinsics(block) + } +} + +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, + CheckInherents = CheckInherents, +} diff --git a/runtime/mainnet/src/weights/block_weights.rs b/runtime/mainnet/src/weights/block_weights.rs new file mode 100644 index 0000000..b2092d8 --- /dev/null +++ b/runtime/mainnet/src/weights/block_weights.rs @@ -0,0 +1,53 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Importing a block with 0 Extrinsics. + pub const BlockExecutionWeight: Weight = + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); + } + + #[cfg(test)] + mod test_weights { + use frame_support::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::constants::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/mainnet/src/weights/extrinsic_weights.rs b/runtime/mainnet/src/weights/extrinsic_weights.rs new file mode 100644 index 0000000..332c3b3 --- /dev/null +++ b/runtime/mainnet/src/weights/extrinsic_weights.rs @@ -0,0 +1,53 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, Weight}, + }; + + parameter_types! { + /// Executing a NO-OP `System::remarks` Extrinsic. + pub const ExtrinsicBaseWeight: Weight = + Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); + } + + #[cfg(test)] + mod test_weights { + use frame_support::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::constants::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/mainnet/src/weights/mod.rs b/runtime/mainnet/src/weights/mod.rs new file mode 100644 index 0000000..ed0b4db --- /dev/null +++ b/runtime/mainnet/src/weights/mod.rs @@ -0,0 +1,28 @@ +// 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 extrinsic_weights; +pub mod paritydb_weights; +pub mod rocksdb_weights; + +pub use block_weights::constants::BlockExecutionWeight; +pub use extrinsic_weights::constants::ExtrinsicBaseWeight; +pub use paritydb_weights::constants::ParityDbWeight; +pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/runtime/mainnet/src/weights/paritydb_weights.rs b/runtime/mainnet/src/weights/paritydb_weights.rs new file mode 100644 index 0000000..4338d92 --- /dev/null +++ b/runtime/mainnet/src/weights/paritydb_weights.rs @@ -0,0 +1,63 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights + /// are available for brave runtime engineers who may want to try this out as default. + pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 8_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::ParityDbWeight as W; + use frame_support::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 sane() { + // 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/mainnet/src/weights/rocksdb_weights.rs b/runtime/mainnet/src/weights/rocksdb_weights.rs new file mode 100644 index 0000000..1d115d9 --- /dev/null +++ b/runtime/mainnet/src/weights/rocksdb_weights.rs @@ -0,0 +1,63 @@ +// 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. + +pub mod constants { + use frame_support::{ + parameter_types, + weights::{constants, RuntimeDbWeight}, + }; + + parameter_types! { + /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 25_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::RocksDbWeight as W; + use frame_support::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 sane() { + // 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/mainnet/src/xcm_config.rs b/runtime/mainnet/src/xcm_config.rs new file mode 100644 index 0000000..eeeb3df --- /dev/null +++ b/runtime/mainnet/src/xcm_config.rs @@ -0,0 +1,299 @@ +use super::{ + AccountId, AllPalletsWithSystem, Assets, Balance, Balances, ParachainInfo, ParachainSystem, + PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, +}; +use core::{marker::PhantomData, ops::ControlFlow}; +use frame_support::{ + log, match_types, parameter_types, + traits::{ConstU32, Everything, Nothing, PalletInfoAccess, ProcessMessageError}, + weights::Weight, +}; +use frame_system::EnsureRoot; +use pallet_xcm::XcmPassthrough; +use polkadot_parachain::primitives::Sibling; +use polkadot_runtime_common::impls::ToAuthor; +use xcm::latest::prelude::*; +use xcm_builder::{ + AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowTopLevelPaidExecutionFrom, + CreateMatcher, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, + IsConcrete, MatchXcm, NativeAsset, NoChecking, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, TrailingSetTopicAsId, + UsingComponents, WithComputedOrigin, WithUniqueTopic, +}; +use xcm_executor::traits::Properties; +use xcm_executor::{traits::ShouldExecute, XcmExecutor}; + +parameter_types! { + pub const RelayLocation: MultiLocation = MultiLocation::parent(); + pub const RelayNetwork: Option = None; + pub SelfReserve: MultiLocation = MultiLocation { parents: 0, interior: Here }; + pub PlaceholderAccount: AccountId = PolkadotXcm::check_account(); + pub AssetsPalletLocation: MultiLocation = + PalletInstance(::index() as u8).into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); + pub UniversalLocation: InteriorMultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); +} + +/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used +/// when determining ownership of accounts for asset transacting and when attempting to use XCM +/// `Transact` in order to determine the dispatch Origin. +pub type LocationToAccountId = ( + // The parent (Relay-chain) origin converts to the parent `AccountId`. + ParentIsPreset, + // Sibling parachain origins convert to AccountId via the `ParaId::into`. + SiblingParachainConvertsVia, + // Straight up local `AccountId32` origins just alias directly to `AccountId`. + AccountId32Aliases, +); + +/// `AssetId/Balancer` converter for `TrustBackedAssets` +pub type TrustBackedAssetsConvertedConcreteId = + assets_common::TrustBackedAssetsConvertedConcreteId; + +/// Means for transacting assets on this chain. +pub type LocalAssetTransactor = CurrencyAdapter< + // Use this currency: + Balances, + // Use this currency when it is a fungible asset matching the given location or name: + IsConcrete, + // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports. + (), +>; + +/// Means for transacting assets besides the native currency on this chain. +pub type LocalFungiblesTransactor = FungiblesAdapter< + // Use this fungibles implementation: + Assets, + // Use this currency when it is a fungible asset matching the given location or name: + TrustBackedAssetsConvertedConcreteId, + // Convert an XCM MultiLocation into a local account id: + LocationToAccountId, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + // We don't track any teleports of `Assets`. + NoChecking, + // We don't track any teleports of `Assets`, but a placeholder account is provided due to trait + // bounds. + PlaceholderAccount, +>; + +/// Means for transacting assets on this chain. +pub type AssetTransactors = (LocalAssetTransactor, LocalFungiblesTransactor); + +/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, +/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can +/// biases the kind of local `Origin` it will become. +pub type XcmOriginToTransactDispatchOrigin = ( + // Sovereign account converter; this attempts to derive an `AccountId` from the origin location + // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for + // foreign chains who want to have a local sovereign account on this chain which they control. + SovereignSignedViaLocation, + // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when + // recognized. + RelayChainAsNative, + // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when + // recognized. + SiblingParachainAsNative, + // Native signed account converter; this just converts an `AccountId32` origin into a normal + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, + // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. + XcmPassthrough, +); + +parameter_types! { + // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. + pub UnitWeightCost: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); + pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; +} + +match_types! { + pub type ParentOrParentsExecutivePlurality: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Executive, .. }) } + }; +} + +//TODO: move DenyThenTry to polkadot's xcm module. +/// Deny executing the xcm message if it matches any of the Deny filter regardless of anything else. +/// If it passes the Deny, and matches one of the Allow cases then it is let through. +pub struct DenyThenTry(PhantomData, PhantomData) +where + Deny: ShouldExecute, + Allow: ShouldExecute; + +impl ShouldExecute for DenyThenTry +where + Deny: ShouldExecute, + Allow: ShouldExecute, +{ + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + max_weight: Weight, + properties: &mut Properties, + ) -> Result<(), ProcessMessageError> { + Deny::should_execute(origin, instructions, max_weight, properties)?; + Allow::should_execute(origin, instructions, max_weight, properties) + } +} + +// See issue +pub struct DenyReserveTransferToRelayChain; +impl ShouldExecute for DenyReserveTransferToRelayChain { + fn should_execute( + origin: &MultiLocation, + instructions: &mut [Instruction], + _max_weight: Weight, + _properties: &mut Properties, + ) -> Result<(), ProcessMessageError> { + instructions.matcher().match_next_inst_while( + |_| true, + |inst| match inst { + InitiateReserveWithdraw { + reserve: MultiLocation { parents: 1, interior: Here }, + .. + } + | DepositReserveAsset { + dest: MultiLocation { parents: 1, interior: Here }, .. + } + | TransferReserveAsset { + dest: MultiLocation { parents: 1, interior: Here }, .. + } => { + Err(ProcessMessageError::Unsupported) // Deny + }, + // An unexpected reserve transfer has arrived from the Relay Chain. Generally, + // `IsReserve` should not allow this, but we just log it here. + ReserveAssetDeposited { .. } + if matches!(origin, MultiLocation { parents: 1, interior: Here }) => + { + log::warn!( + target: "xcm::barrier", + "Unexpected ReserveAssetDeposited from the Relay Chain", + ); + Ok(ControlFlow::Continue(())) + }, + _ => Ok(ControlFlow::Continue(())), + }, + )?; + + // Permit everything else + Ok(()) + } +} + +pub type Barrier = TrailingSetTopicAsId< + DenyThenTry< + DenyReserveTransferToRelayChain, + ( + TakeWeightCredit, + WithComputedOrigin< + ( + AllowTopLevelPaidExecutionFrom, + // Parent and its exec plurality get free execution + AllowExplicitUnpaidExecutionFrom, + ), + UniversalLocation, + ConstU32<8>, + >, + ), + >, +>; + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type RuntimeCall = RuntimeCall; + type XcmSender = XcmRouter; + // How to withdraw and deposit an asset. + type AssetTransactor = AssetTransactors; + type OriginConverter = XcmOriginToTransactDispatchOrigin; + type IsReserve = NativeAsset; + type IsTeleporter = (); + type Aliasers = Nothing; + // Teleporting is disabled. + type UniversalLocation = UniversalLocation; + type Barrier = Barrier; + type Weigher = FixedWeightBounds; + type Trader = + UsingComponents>; + type ResponseHandler = PolkadotXcm; + type AssetTrap = PolkadotXcm; + type AssetLocker = (); + type AssetExchanger = (); + type AssetClaims = PolkadotXcm; + type SubscriptionService = PolkadotXcm; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Everything; +} + +/// No local origins on this chain are allowed to dispatch XCM sends/executions. +pub type LocalOriginToLocation = SignedToAccountId32; + +/// The means for routing XCM messages which are not for local execution into the right message +/// queues. +pub type XcmRouter = WithUniqueTopic<( + // Two routers - use UMP to communicate with the relay chain: + cumulus_primitives_utility::ParentAsUmp, + // and XCMP to communicate with the sibling chains. + XcmpQueue, +)>; + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parent.into()); +} + +impl pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + // We disallow users to send arbitrary XCMs from this chain. + type SendXcmOrigin = EnsureXcmOrigin; + type AdminOrigin = EnsureRoot; + type XcmRouter = XcmRouter; + // We disallow users to execute arbitrary XCMs from this chain. + type ExecuteXcmOrigin = EnsureXcmOrigin; + // Disable dispatchable execute on the XCM pallet. + // NOTE: This needs to be `Everything` for local testing. + type XcmExecuteFilter = Nothing; + // Disable dispatchable execute on the XCM pallet. + // Needs to be `Everything` for local testing. + type XcmExecutor = XcmExecutor; + // No teleportation is allowed. + type XcmTeleportFilter = Nothing; + // No teleportation is allowed. + type XcmReserveTransferFilter = Everything; + // Use (conservative) bounds on estimating XCM execution on this chain. + type Weigher = FixedWeightBounds; + type UniversalLocation = UniversalLocation; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + + // Override for AdvertisedXcmVersion default + const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; + type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = ConstU32<8>; + type WeightInfo = pallet_xcm::TestWeightInfo; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; + type MaxRemoteLockConsumers = ConstU32<0>; + type RemoteLockConsumerIdentifier = (); +} + +impl cumulus_pallet_xcm::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type XcmExecutor = XcmExecutor; +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs deleted file mode 100644 index 9be5106..0000000 --- a/runtime/src/lib.rs +++ /dev/null @@ -1,792 +0,0 @@ -#![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")); - -use codec::{Decode, Encode, MaxEncodedLen}; -use pallet_grandpa::AuthorityId as GrandpaId; -use sp_api::impl_runtime_apis; -use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{ - AccountIdLookup, BlakeTwo256, Block as BlockT, IdentifyAccount, NumberFor, One, Verify, - }, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, MultiSignature, -}; -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -// A few exports that help ease life for downstream crates. -pub use frame_support::{ - construct_runtime, parameter_types, - traits::{ - AsEnsureOriginWithArg, ConstU128, ConstU32, ConstU64, ConstU8, KeyOwnerProofSystem, - Randomness, StorageInfo, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, - }, - IdentityFee, Weight, - }, - BoundedVec, PalletId, StorageValue, -}; -pub use frame_system::Call as SystemCall; -use frame_system::{EnsureRoot, EnsureSigned}; -pub use pallet_balances::Call as BalancesCall; -use pallet_nfts::PalletFeatures; -/// Import the template pallet. -pub use pallet_template; -pub use pallet_timestamp::Call as TimestampCall; -use pallet_transaction_payment::{ConstFeeMultiplier, CurrencyAdapter, Multiplier}; -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; -pub use sp_runtime::{Perbill, Permill}; - -/// An index to a block. -pub type BlockNumber = u32; - -/// Function used in fee configurations -pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance + (bytes as Balance) * 100 -} -/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. -pub type Signature = MultiSignature; - -/// 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; - -/// Balance of an account. -pub type Balance = u128; - -/// 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; - -//public type -pub type AccountPublic = ::Signer; -/// 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::*; - - 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; - - impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - pub grandpa: Grandpa, - } - } -} - -// To learn more about runtime versioning, see: -// https://docs.substrate.io/main-docs/build/upgrade#runtime-versioning -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("node-template"), - impl_name: create_runtime_str!("node-template"), - authoring_version: 1, - // The version of the runtime specification. A full node will not attempt to use its native - // runtime in substitute for the on-chain Wasm runtime unless all of `spec_name`, - // `spec_version`, and `authoring_version` are the same between Wasm and native. - // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use - // the compatible custom types. - spec_version: 101, - impl_version: 1, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, - state_version: 1, -}; - -/// 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 = 6000; - -// 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; - -pub const MILLICENTS: Balance = 1_000_000_000; -pub const CENTS: Balance = 1_000 * MILLICENTS; // assume this is worth about a cent. -pub const DOLLARS: Balance = 100 * CENTS; -pub const UNITS: Balance = 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() } -} - -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); - -parameter_types! { - pub const BlockHashCount: BlockNumber = 2400; - pub const Version: RuntimeVersion = VERSION; - /// We allow for 2 seconds of compute with a 6 second average block time. - pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::with_sensible_defaults( - Weight::from_parts(2u64 * WEIGHT_REF_TIME_PER_SECOND, u64::MAX), - NORMAL_DISPATCH_RATIO, - ); - pub BlockLength: frame_system::limits::BlockLength = frame_system::limits::BlockLength - ::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub const SS58Prefix: u8 = 42; -} - -// Configure FRAME pallets to include in runtime. - -impl frame_system::Config for Runtime { - /// The basic call filter to use in dispatchable. - type BaseCallFilter = frame_support::traits::Everything; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = BlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = BlockLength; - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// 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 = AccountIdLookup; - /// The index type for storing how many extrinsics an account has signed. - type Index = Index; - /// The index type for blocks. - type BlockNumber = BlockNumber; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The header type. - type Header = generic::Header; - /// 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; - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// Version of the runtime. - type Version = Version; - /// Converts a module to the index of the module in `construct_runtime!`. - /// - /// This type is being generated by `construct_runtime!`. - type PalletInfo = PalletInfo; - /// 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 data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = (); - /// This is used as an identifier of the chain. 42 is the generic substrate prefix. - type SS58Prefix = SS58Prefix; - /// The set code logic, just the default since we're not a parachain. - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<32>; -} - -impl pallet_grandpa::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - - type WeightInfo = (); - type MaxAuthorities = ConstU32<32>; - type MaxSetIdSessionEntries = ConstU64<0>; - - type KeyOwnerProof = sp_core::Void; - type EquivocationReportSystem = (); -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = (); -} - -/// Existential deposit. -pub const EXISTENTIAL_DEPOSIT: u128 = 1000; - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - type MaxReserves = (); - type ReserveIdentifier = [u8; 8]; - /// 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 = pallet_balances::weights::SubstrateWeight; - type FreezeIdentifier = (); - type MaxFreezes = (); - type HoldIdentifier = HoldReason; - type MaxHolds = ConstU32<1>; -} - -parameter_types! { - pub FeeMultiplier: Multiplier = Multiplier::one(); -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = CurrencyAdapter; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = IdentityFee; - type LengthToFee = IdentityFee; - type FeeMultiplierUpdate = ConstFeeMultiplier; -} - -impl pallet_sudo::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type WeightInfo = (); -} - -parameter_types! { - // Minimum 100bytes - pub const BasicDeposit: Balance = 1000 * CENTS; //258 bytes on-chain - pub const FieldDeposit: Balance = 250 * CENTS; //66 bytes on-chain - pub const SubAccountDeposit: Balance = 200 * CENTS; // 53 bytes on-chain - pub const MaxAdditionalFields: u32 = 100; - pub const MaxSubAccounts: u32 = 100; - pub const MaxRegistrars: u32= 20; -} - -impl pallet_identity::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type BasicDeposit = BasicDeposit; - type FieldDeposit = FieldDeposit; - type SubAccountDeposit = SubAccountDeposit; - type MaxSubAccounts = MaxSubAccounts; - type MaxAdditionalFields = MaxAdditionalFields; - type MaxRegistrars = MaxRegistrars; - type Slashed = (); - type ForceOrigin = EnsureSigned; - type RegistrarOrigin = EnsureSigned; - type WeightInfo = (); -} - -parameter_types! { - pub const AssetDeposit: Balance = 100 * DOLLARS; - pub const ApprovalDeposit: Balance = 1 * DOLLARS; - pub const StringLimit: u32 = 50; - pub const MetadataDepositBase: Balance = 10 * DOLLARS; - pub const MetadataDepositPerByte: Balance = 1 * DOLLARS; -} - -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = u128; - type AssetId = u32; - type AssetIdParameter = codec::Compact; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = EnsureRoot; - type AssetDeposit = AssetDeposit; - type AssetAccountDeposit = ConstU128; - type MetadataDepositBase = MetadataDepositBase; - type MetadataDepositPerByte = MetadataDepositPerByte; - type ApprovalDeposit = ApprovalDeposit; - type StringLimit = StringLimit; - type Freezer = (); - type Extra = (); - type CallbackHandle = (); - type WeightInfo = pallet_assets::weights::SubstrateWeight; - type RemoveItemsLimit = ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -parameter_types! { - pub const UniquesCollectionDeposit: Balance = UNITS /10; - pub const UniquesItemDeposit: Balance = UNITS / 1_000; - pub const UniquesMetadataDepositsBase: Balance = deposit(1, 129); - pub const UniquesAttributeDepositsBase: Balance = deposit(1, 129); - pub const UniquesDepositPerByte: Balance = deposit(0, 1); -} - -parameter_types! { - pub NftsPalletFeatures: PalletFeatures = PalletFeatures::all_enabled(); - pub const NftsMaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS; - - // reuse the unique deopsits - pub const NftsCollectionDeposit: Balance = UniquesCollectionDeposit::get(); - pub const NftsItemDeposit: Balance = UniquesItemDeposit::get(); - pub const NftsMetadataDepositsBase: Balance = UniquesMetadataDepositsBase::get(); - pub const NftsAttributeDepositsBase: Balance = UniquesAttributeDepositsBase::get(); - pub const NftsDepositPerByte: Balance = UniquesDepositPerByte::get(); -} - -impl pallet_nfts::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CollectionId = u32; - type ItemId = u32; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = frame_system::EnsureRoot; - type Locker = (); - type CollectionDeposit = NftsCollectionDeposit; - type ItemDeposit = NftsItemDeposit; - type MetadataDepositBase = NftsMetadataDepositsBase; - type AttributeDepositBase = NftsAttributeDepositsBase; - type DepositPerByte = NftsDepositPerByte; - type StringLimit = ConstU32<50>; - type KeyLimit = ConstU32<50>; - type ValueLimit = ConstU32<50>; - type ApprovalsLimit = ConstU32<10>; - type ItemAttributesApprovalsLimit = ConstU32<2>; - type MaxTips = ConstU32<10>; - type MaxDeadlineDuration = NftsMaxDeadlineDuration; - type MaxAttributesPerCall = ConstU32<2>; - type Features = NftsPalletFeatures; - /// Off-chain = signature On-chain - therefore no conversion needed. - /// It needs to be From for benchmarking. - type OffchainSignature = Signature; - /// Using `AccountPublic` here makes it trivial to convert to `AccountId` via `into_account()`. - type OffchainPublic = AccountPublic; - type WeightInfo = (); - #[cfg(feature = "runtime-benchmarks")] - type Helper = (); -} - -/// A reason for placing a hold on funds. -#[derive( - Copy, - Clone, - Eq, - PartialEq, - Ord, - PartialOrd, - Encode, - Decode, - MaxEncodedLen, - Debug, - scale_info::TypeInfo, -)] -pub enum HoldReason { - /// Used by the NFT Fractionalization Pallet. - NftFractionalization, -} - -parameter_types! { - pub const NftFractionalizationPalletId: PalletId = PalletId(*b"fraction"); - pub NewAssetSymbol: BoundedVec = (*b"FRAC").to_vec().try_into().unwrap(); - pub NewAssetName: BoundedVec = (*b"Frac").to_vec().try_into().unwrap(); - // TODO: remove in the next version of polkadot - pub const NftFractionalizationHoldReason: HoldReason = HoldReason::NftFractionalization; -} - -impl pallet_nft_fractionalization::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Deposit = AssetDeposit; - type Currency = Balances; - type NftCollectionId = ::CollectionId; - type NftId = ::ItemId; - type AssetBalance = ::Balance; - type AssetId = ::AssetId; - type Assets = Assets; - type Nfts = Nfts; - type PalletId = NftFractionalizationPalletId; - type NewAssetSymbol = NewAssetSymbol; - type NewAssetName = NewAssetName; - type StringLimit = StringLimit; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); - type WeightInfo = (); - // TODO: change to `RuntimeHoldReason` in the next version of polkadot - type HoldReason = NftFractionalizationHoldReason; -} - -/// Configure the pallet-template in pallets/template. -impl pallet_template::Config for Runtime { - type RuntimeEvent = RuntimeEvent; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = pallet_utility::weights::SubstrateWeight; -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub struct Runtime - where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { - System: frame_system, - Timestamp: pallet_timestamp, - Aura: pallet_aura, - Grandpa: pallet_grandpa, - Balances: pallet_balances, - TransactionPayment: pallet_transaction_payment, - Sudo: pallet_sudo, - - // Include the custom logic from the pallet-template in the runtime. - Utility: pallet_utility, - Identity: pallet_identity, - Assets: pallet_assets, - Nfts: pallet_nfts, - NftFractionalization: pallet_nft_fractionalization, - TemplateModule: pallet_template, - } -); - -/// The address format for describing accounts. -pub type Address = sp_runtime::MultiAddress; -/// Block header type as expected by this runtime. -pub type Header = generic::Header; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -/// The payload being signed in transactions. -pub type SignedPayload = generic::SignedPayload; -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; - -#[cfg(feature = "runtime-benchmarks")] -#[macro_use] -extern crate frame_benchmarking; - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - define_benchmarks!( - [frame_benchmarking, BaselineBench::] - [frame_system, SystemBench::] - [pallet_balances, Balances] - [pallet_timestamp, Timestamp] - [pallet_template, TemplateModule] - ); -} - -impl_runtime_apis! { - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block); - } - - fn initialize_block(header: &::Header) { - 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() -> sp_std::vec::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_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - opaque::SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - opaque::SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl sp_consensus_grandpa::GrandpaApi for Runtime { - fn grandpa_authorities() -> sp_consensus_grandpa::AuthorityList { - Grandpa::grandpa_authorities() - } - - fn current_set_id() -> sp_consensus_grandpa::SetId { - Grandpa::current_set_id() - } - - fn submit_report_equivocation_unsigned_extrinsic( - _equivocation_proof: sp_consensus_grandpa::EquivocationProof< - ::Hash, - NumberFor, - >, - _key_owner_proof: sp_consensus_grandpa::OpaqueKeyOwnershipProof, - ) -> Option<()> { - None - } - - fn generate_key_ownership_proof( - _set_id: sp_consensus_grandpa::SetId, - _authority_id: GrandpaId, - ) -> Option { - // NOTE: this is the only implementation possible since we've - // defined our key owner proof type as a bottom type (i.e. a type - // with no values). - None - } - } - - 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 { - 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(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - Vec, - Vec, - ) { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkList}; - use frame_support::traits::StorageInfoTrait; - use frame_system_benchmarking::Pallet as SystemBench; - use baseline::Pallet as BaselineBench; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch, TrackedStorageKey}; - - use frame_system_benchmarking::Pallet as SystemBench; - use baseline::Pallet as BaselineBench; - - impl frame_system_benchmarking::Config for Runtime {} - impl baseline::Config for Runtime {} - - use frame_support::traits::WhitelistedStorageKeys; - let whitelist: Vec = AllPalletsWithSystem::whitelisted_storage_keys(); - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. If any of the pre/post migration checks fail, we shall stop - // right here and right now. - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, BlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).expect("execute-block failed") - } - } -} - -#[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 = 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") - ); - } -} diff --git a/scripts/frame-weight-template.hbs b/scripts/frame-weight-template.hbs new file mode 100644 index 0000000..38bb4de --- /dev/null +++ b/scripts/frame-weight-template.hbs @@ -0,0 +1,121 @@ +{{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}}` +//! 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, 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}} +} diff --git a/scripts/init.sh b/scripts/init.sh deleted file mode 100755 index f976f72..0000000 --- a/scripts/init.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# This script is meant to be run on Unix/Linux based systems -set -e - -echo "*** Initializing WASM build environment" - -if [ -z $CI_PROJECT_NAME ] ; then - rustup update nightly - rustup update stable -fi - -rustup target add wasm32-unknown-unknown --toolchain nightly diff --git a/shell.nix b/shell.nix deleted file mode 100644 index c08005c..0000000 --- a/shell.nix +++ /dev/null @@ -1,35 +0,0 @@ -let - mozillaOverlay = - import (builtins.fetchGit { - url = "https://github.com/mozilla/nixpkgs-mozilla.git"; - rev = "57c8084c7ef41366993909c20491e359bbb90f54"; - }); - pinned = builtins.fetchGit { - # Descriptive name to make the store path easier to identify - url = "https://github.com/nixos/nixpkgs/"; - # Commit hash for nixos-unstable as of 2020-04-26 - # `git ls-remote https://github.com/nixos/nixpkgs nixos-unstable` - ref = "refs/heads/nixos-unstable"; - rev = "1fe6ed37fd9beb92afe90671c0c2a662a03463dd"; - }; - nixpkgs = import pinned { overlays = [ mozillaOverlay ]; }; - toolchain = with nixpkgs; (rustChannelOf { date = "2021-09-14"; channel = "nightly"; }); - rust-wasm = toolchain.rust.override { - targets = [ "wasm32-unknown-unknown" ]; - }; -in -with nixpkgs; pkgs.mkShell { - buildInputs = [ - clang - pkg-config - rust-wasm - ] ++ stdenv.lib.optionals stdenv.isDarwin [ - darwin.apple_sdk.frameworks.Security - ]; - - LIBCLANG_PATH = "${llvmPackages.libclang}/lib"; - PROTOC = "${protobuf}/bin/protoc"; - RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library/"; - ROCKSDB_LIB_DIR = "${rocksdb}/lib"; - -} diff --git a/zombienet-config/rococo-local-config.toml b/zombienet-config/rococo-local-config.toml new file mode 100644 index 0000000..ab46bd8 --- /dev/null +++ b/zombienet-config/rococo-local-config.toml @@ -0,0 +1,19 @@ +[relaychain] +chain = "rococo-local" +default_command = "./bin/polkadot-v1.0.0" + + # relaychain nodes are validators by default + [[relaychain.nodes]] + name = "alice" + + [[relaychain.nodes]] + name = "bob" + +[[parachains]] +id = 666 +addToGenesis = true +cumulus_based = true + + [parachains.collator] + name = "parachain-collator01" + command = "./target/release/metaquity-network-node" \ No newline at end of file diff --git a/zombienet.sh b/zombienet.sh new file mode 100755 index 0000000..2d51e79 --- /dev/null +++ b/zombienet.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +ZOMBIENET_V=v1.3.55 +POLKADOT_V=v0.9.42 + +case "$(uname -s)" in + Linux*) MACHINE=Linux;; + Darwin*) MACHINE=Mac;; + *) exit 1 +esac + +if [ $MACHINE = "Linux" ]; then + ZOMBIENET_BIN=zombienet-linux-x64 +elif [ $MACHINE = "Mac" ]; then + ZOMBIENET_BIN=zombienet-macos +fi + +build_polkadot(){ + echo "cloning polkadot repository..." + CWD=$(pwd) + mkdir -p bin + pushd /tmp + git clone https://github.com/paritytech/polkadot.git + pushd polkadot + git checkout $POLKADOT_V + echo "building polkadot executable..." + cargo build --release --features fast-runtime + cp target/release/polkadot $CWD/bin + popd + popd +} + +zombienet_init() { + if [ ! -f $ZOMBIENET_BIN ]; then + echo "fetching zombienet executable..." + curl -LO https://github.com/paritytech/zombienet/releases/download/$ZOMBIENET_V/$ZOMBIENET_BIN + chmod +x $ZOMBIENET_BIN + fi + if [ ! -f bin/polkadot ]; then + build_polkadot + fi +} + +zombienet_spawn() { + zombienet_init + if [ ! -f target/release/metaquity-network-node ]; then + echo "building metaquity-network-node..." + cargo build --release + fi + echo "spawning polkadot-local relay chain plus metaquity-network-node..." + ./$ZOMBIENET_BIN spawn zombienet-config/rococo-local-config.toml -p native +} + +print_help() { + echo "This is a shell script to automate the execution of zombienet." + echo "" + echo "$ ./zombienet.sh init # fetches zombienet and polkadot executables" + echo "$ ./zombienet.sh spawn # spawns a rococo-local relay chain plus metaquity-network-node" +} + +SUBCOMMAND=$1 +case $SUBCOMMAND in + "" | "-h" | "--help") + print_help + ;; + *) + shift + zombienet_${SUBCOMMAND} $@ + if [ $? = 127 ]; then + echo "Error: '$SUBCOMMAND' is not a known SUBCOMMAND." >&2 + echo "Run './zombienet.sh --help' for a list of known subcommands." >&2 + exit 1 + fi + ;; +esac