diff --git a/invarch/rust-toolchain.toml b/invarch/rust-toolchain.toml index 124289af..4ee00bc4 100644 --- a/invarch/rust-toolchain.toml +++ b/invarch/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] channel = "nightly-2023-05-22" targets = ["wasm32-unknown-unknown"] -components = [ "rustfmt", "rustc", "rust-std", "cargo", "clippy", "llvm-tools-preview"] \ No newline at end of file +components = [ "rustfmt", "rustc", "rust-std", "cargo", "clippy", "llvm-tools-preview"] diff --git a/modified-construct-runtime/Cargo.lock b/modified-construct-runtime/Cargo.lock new file mode 100644 index 00000000..2b0ea432 --- /dev/null +++ b/modified-construct-runtime/Cargo.lock @@ -0,0 +1,260 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "modified-construct-runtime" +version = "4.0.0-dev" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "frame-support-procedural-tools", + "itertools", + "proc-macro-warning", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[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]] +name = "proc-macro-warning" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] diff --git a/new-modified-construct-runtime/Cargo.lock b/new-modified-construct-runtime/Cargo.lock new file mode 100644 index 00000000..c4b59bc5 --- /dev/null +++ b/new-modified-construct-runtime/Cargo.lock @@ -0,0 +1,623 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "expander" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e83c02035136f1592a47964ea60c05a50e4ed8b5892cfac197063850898d4d" +dependencies = [ + "blake2", + "fs-err", + "prettier-please", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "macro_magic" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "new-modified-construct-runtime" +version = "4.0.0-dev" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "expander", + "frame-support-procedural-tools", + "itertools", + "macro_magic", + "proc-macro-warning", + "proc-macro2", + "quote", + "regex", + "sp-core-hashing", + "syn 2.0.48", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettier-please" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22020dfcf177fcc7bf5deaf7440af371400c67c0de14c399938d8ed4fb4645d3" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[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]] +name = "proc-macro-warning" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "sp-core-hashing" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest", + "sha2", + "sha3", + "twox-hash", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest", + "rand", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] diff --git a/new-modified-construct-runtime/Cargo.toml b/new-modified-construct-runtime/Cargo.toml new file mode 100644 index 00000000..02c86839 --- /dev/null +++ b/new-modified-construct-runtime/Cargo.toml @@ -0,0 +1,42 @@ +[package] +name = "new-modified-construct-runtime" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "Proc macro of Support code for the runtime." + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[lib] +proc-macro = true + +[dependencies] +derive-syn-parse = "0.1.5" +Inflector = "0.11.4" +cfg-expr = "0.15.5" +itertools = "0.10.3" +proc-macro2 = "1.0.56" +quote = "1.0.28" +syn = { version = "2.0.48", features = ["full"] } +frame-support-procedural-tools = { path = "./tools" } +macro_magic = { version = "0.5.0", features = ["proc_support"] } +proc-macro-warning = { version = "1.0.0", default-features = false } +expander = "2.0.0" +sp-core-hashing = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +[dev-dependencies] +regex = "1" + + +[features] +default = ["std"] +std = [] +no-metadata-docs = [] +# Generate impl-trait for tuples with the given number of tuples. Will be needed as the number of +# pallets in a runtime grows. Does increase the compile time! +tuples-96 = [] +tuples-128 = [] diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/call.rs b/new-modified-construct-runtime/src/construct_runtime/expand/call.rs new file mode 100644 index 00000000..a431222c --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/call.rs @@ -0,0 +1,226 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; +use std::str::FromStr; +use syn::Ident; + +pub fn expand_outer_dispatch( + runtime: &Ident, + system_pallet: &Pallet, + pallet_decls: &[Pallet], + scrate: &TokenStream, +) -> TokenStream { + let mut variant_defs = TokenStream::new(); + let mut variant_patterns = Vec::new(); + let mut query_call_part_macros = Vec::new(); + let mut pallet_names = Vec::new(); + let mut pallet_attrs = Vec::new(); + let system_path = &system_pallet.path; + + let pallets_with_call = pallet_decls.iter().filter(|decl| decl.exists_part("Call")); + + for pallet_declaration in pallets_with_call { + let name = &pallet_declaration.name; + let path = &pallet_declaration.path; + let index = pallet_declaration.index; + let attr = + pallet_declaration + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + variant_defs.extend(quote! { + #attr + #[codec(index = #index)] + #name( #scrate::dispatch::CallableCallFor<#name, #runtime> ), + }); + variant_patterns.push(quote!(RuntimeCall::#name(call))); + pallet_names.push(name); + pallet_attrs.push(attr); + query_call_part_macros.push(quote! { + #path::__substrate_call_check::is_call_part_defined!(#name); + }); + } + + quote! { + #( #query_call_part_macros )* + + #[derive( + Clone, PartialEq, Eq, + #scrate::__private::codec::Encode, + #scrate::__private::codec::Decode, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeCall { + #variant_defs + } + #[cfg(test)] + impl RuntimeCall { + /// Return a list of the module names together with their size in memory. + pub const fn sizes() -> &'static [( &'static str, usize )] { + use #scrate::dispatch::Callable; + use core::mem::size_of; + &[#( + #pallet_attrs + ( + stringify!(#pallet_names), + size_of::< <#pallet_names as Callable<#runtime>>::RuntimeCall >(), + ), + )*] + } + + /// Panics with diagnostic information if the size is greater than the given `limit`. + pub fn assert_size_under(limit: usize) { + let size = core::mem::size_of::(); + let call_oversize = size > limit; + if call_oversize { + println!("Size of `Call` is {} bytes (provided limit is {} bytes)", size, limit); + let mut sizes = Self::sizes().to_vec(); + sizes.sort_by_key(|x| -(x.1 as isize)); + for (i, &(name, size)) in sizes.iter().enumerate().take(5) { + println!("Offender #{}: {} at {} bytes", i + 1, name, size); + } + if let Some((_, next_size)) = sizes.get(5) { + println!("{} others of size {} bytes or less", sizes.len() - 5, next_size); + } + panic!( + "Size of `Call` is more than limit; use `Box` on complex parameter types to reduce the + size of `Call`. + If the limit is too strong, maybe consider providing a higher limit." + ); + } + } + } + impl #scrate::dispatch::GetDispatchInfo for RuntimeCall { + fn get_dispatch_info(&self) -> #scrate::dispatch::DispatchInfo { + match self { + #( + #pallet_attrs + #variant_patterns => call.get_dispatch_info(), + )* + } + } + } + + impl #scrate::dispatch::CheckIfFeeless for RuntimeCall { + type Origin = #system_path::pallet_prelude::OriginFor<#runtime>; + fn is_feeless(&self, origin: &Self::Origin) -> bool { + match self { + #( + #pallet_attrs + #variant_patterns => call.is_feeless(origin), + )* + } + } + } + + impl #scrate::traits::GetCallMetadata for RuntimeCall { + fn get_call_metadata(&self) -> #scrate::traits::CallMetadata { + use #scrate::traits::GetCallName; + match self { + #( + #pallet_attrs + #variant_patterns => { + let function_name = call.get_call_name(); + let pallet_name = stringify!(#pallet_names); + #scrate::traits::CallMetadata { function_name, pallet_name } + } + )* + } + } + + fn get_module_names() -> &'static [&'static str] { + &[#( + #pallet_attrs + stringify!(#pallet_names), + )*] + } + + fn get_call_names(module: &str) -> &'static [&'static str] { + use #scrate::{dispatch::Callable, traits::GetCallName}; + match module { + #( + #pallet_attrs + stringify!(#pallet_names) => + <<#pallet_names as Callable<#runtime>>::RuntimeCall + as GetCallName>::get_call_names(), + )* + _ => unreachable!(), + } + } + } + impl #scrate::__private::Dispatchable for RuntimeCall { + type RuntimeOrigin = RuntimeOrigin; + type Config = RuntimeCall; + type Info = #scrate::dispatch::DispatchInfo; + type PostInfo = #scrate::dispatch::PostDispatchInfo; + fn dispatch(self, origin: RuntimeOrigin) -> #scrate::dispatch::DispatchResultWithPostInfo { + if !::filter_call(&origin, &self) { + return #scrate::__private::sp_std::result::Result::Err( + #system_path::Error::<#runtime>::CallFiltered.into() + ); + } + + #scrate::traits::UnfilteredDispatchable::dispatch_bypass_filter(self, origin) + } + } + impl #scrate::traits::UnfilteredDispatchable for RuntimeCall { + type RuntimeOrigin = RuntimeOrigin; + fn dispatch_bypass_filter(self, origin: RuntimeOrigin) -> #scrate::dispatch::DispatchResultWithPostInfo { + match self { + #( + #pallet_attrs + #variant_patterns => + #scrate::traits::UnfilteredDispatchable::dispatch_bypass_filter(call, origin), + )* + } + } + } + + #( + #pallet_attrs + impl #scrate::traits::IsSubType<#scrate::dispatch::CallableCallFor<#pallet_names, #runtime>> for RuntimeCall { + #[allow(unreachable_patterns)] + fn is_sub_type(&self) -> Option<&#scrate::dispatch::CallableCallFor<#pallet_names, #runtime>> { + match self { + #variant_patterns => Some(call), + // May be unreachable + _ => None, + } + } + } + + #pallet_attrs + impl From<#scrate::dispatch::CallableCallFor<#pallet_names, #runtime>> for RuntimeCall { + fn from(call: #scrate::dispatch::CallableCallFor<#pallet_names, #runtime>) -> Self { + #variant_patterns + } + } + )* + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/composite_helper.rs b/new-modified-construct-runtime/src/construct_runtime/expand/composite_helper.rs new file mode 100644 index 00000000..69e8dfcf --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/composite_helper.rs @@ -0,0 +1,70 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::parse::PalletPath; +use proc_macro2::{Ident, TokenStream}; +use quote::quote; + +pub(crate) fn expand_conversion_fn( + composite_name: &str, + path: &PalletPath, + instance: Option<&Ident>, + variant_name: &Ident, +) -> TokenStream { + let composite_name = quote::format_ident!("{}", composite_name); + let runtime_composite_name = quote::format_ident!("Runtime{}", composite_name); + + if let Some(inst) = instance { + quote! { + impl From<#path::#composite_name<#path::#inst>> for #runtime_composite_name { + fn from(hr: #path::#composite_name<#path::#inst>) -> Self { + #runtime_composite_name::#variant_name(hr) + } + } + } + } else { + quote! { + impl From<#path::#composite_name> for #runtime_composite_name { + fn from(hr: #path::#composite_name) -> Self { + #runtime_composite_name::#variant_name(hr) + } + } + } + } +} + +pub(crate) fn expand_variant( + composite_name: &str, + index: u8, + path: &PalletPath, + instance: Option<&Ident>, + variant_name: &Ident, +) -> TokenStream { + let composite_name = quote::format_ident!("{}", composite_name); + + if let Some(inst) = instance { + quote! { + #[codec(index = #index)] + #variant_name(#path::#composite_name<#path::#inst>), + } + } else { + quote! { + #[codec(index = #index)] + #variant_name(#path::#composite_name), + } + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/config.rs b/new-modified-construct-runtime/src/construct_runtime/expand/config.rs new file mode 100644 index 00000000..4ddb5700 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/config.rs @@ -0,0 +1,150 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use inflector::Inflector; +use proc_macro2::TokenStream; +use quote::{format_ident, quote, ToTokens}; +use std::str::FromStr; +use syn::Ident; + +pub fn expand_outer_config( + runtime: &Ident, + pallet_decls: &[Pallet], + scrate: &TokenStream, +) -> TokenStream { + let mut types = TokenStream::new(); + let mut fields = TokenStream::new(); + let mut genesis_build_calls = TokenStream::new(); + let mut query_genesis_config_part_macros = Vec::new(); + + for decl in pallet_decls { + if let Some(pallet_entry) = decl.find_part("Config") { + let path = &decl.path; + let pallet_name = &decl.name; + let path_str = path.into_token_stream().to_string(); + let config = format_ident!("{}Config", pallet_name); + let field_name = + &Ident::new(&pallet_name.to_string().to_snake_case(), decl.name.span()); + let part_is_generic = !pallet_entry.generics.params.is_empty(); + let attr = &decl + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + types.extend(expand_config_types( + attr, + runtime, + decl, + &config, + part_is_generic, + )); + fields.extend(quote!(#attr pub #field_name: #config,)); + genesis_build_calls.extend(expand_config_build_storage_call( + scrate, &config, attr, field_name, + )); + query_genesis_config_part_macros.push(quote! { + #path::__substrate_genesis_config_check::is_genesis_config_defined!(#pallet_name); + #[cfg(feature = "std")] + #path::__substrate_genesis_config_check::is_std_enabled_for_genesis!(#pallet_name, #path_str); + }); + } + } + + quote! { + #( #query_genesis_config_part_macros )* + + #types + + use #scrate::__private::serde as __genesis_config_serde_import__; + #[derive(#scrate::__private::serde::Serialize, #scrate::__private::serde::Deserialize, Default)] + #[serde(rename_all = "camelCase")] + #[serde(deny_unknown_fields)] + #[serde(crate = "__genesis_config_serde_import__")] + pub struct RuntimeGenesisConfig { + #fields + } + + #[cfg(any(feature = "std", test))] + #[deprecated(note = "GenesisConfig is planned to be removed in December 2023. Use `RuntimeGenesisConfig` instead.")] + pub type GenesisConfig = RuntimeGenesisConfig; + + #[cfg(any(feature = "std", test))] + impl #scrate::sp_runtime::BuildStorage for RuntimeGenesisConfig { + fn assimilate_storage( + &self, + storage: &mut #scrate::sp_runtime::Storage, + ) -> std::result::Result<(), String> { + #scrate::__private::BasicExternalities::execute_with_storage(storage, || { + ::build(&self); + Ok(()) + }) + } + } + + impl #scrate::traits::BuildGenesisConfig for RuntimeGenesisConfig { + fn build(&self) { + #genesis_build_calls + ::on_genesis(); + } + } + } +} + +fn expand_config_types( + attr: &TokenStream, + runtime: &Ident, + decl: &Pallet, + config: &Ident, + part_is_generic: bool, +) -> TokenStream { + let path = &decl.path; + + match (decl.instance.as_ref(), part_is_generic) { + (Some(inst), true) => quote! { + #attr + pub type #config = #path::GenesisConfig<#runtime, #path::#inst>; + }, + (None, true) => quote! { + #attr + pub type #config = #path::GenesisConfig<#runtime>; + }, + (_, false) => quote! { + #attr + pub type #config = #path::GenesisConfig; + }, + } +} + +fn expand_config_build_storage_call( + scrate: &TokenStream, + pallet_genesis_config: &Ident, + attr: &TokenStream, + field_name: &Ident, +) -> TokenStream { + quote! { + #attr + <#pallet_genesis_config as #scrate::traits::BuildGenesisConfig>::build(&self.#field_name); + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/freeze_reason.rs b/new-modified-construct-runtime/src/construct_runtime/expand/freeze_reason.rs new file mode 100644 index 00000000..653cba28 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/freeze_reason.rs @@ -0,0 +1,69 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use super::composite_helper; +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; + +pub fn expand_outer_freeze_reason(pallet_decls: &[Pallet], scrate: &TokenStream) -> TokenStream { + let mut conversion_fns = Vec::new(); + let mut freeze_reason_variants = Vec::new(); + for decl in pallet_decls { + if let Some(_) = decl.find_part("FreezeReason") { + let variant_name = &decl.name; + let path = &decl.path; + let index = decl.index; + let instance = decl.instance.as_ref(); + + conversion_fns.push(composite_helper::expand_conversion_fn( + "FreezeReason", + path, + instance, + variant_name, + )); + + freeze_reason_variants.push(composite_helper::expand_variant( + "FreezeReason", + index, + path, + instance, + variant_name, + )); + } + } + let freeze_reason_variants_count = freeze_reason_variants.len() as u32; + + quote! { + /// A reason for placing a freeze on funds. + #[derive( + Copy, Clone, Eq, PartialEq, + #scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeFreezeReason { + #( #freeze_reason_variants )* + } + + impl #scrate::traits::VariantCount for RuntimeFreezeReason { + const VARIANT_COUNT: u32 = #freeze_reason_variants_count; + } + + #( #conversion_fns )* + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/hold_reason.rs b/new-modified-construct-runtime/src/construct_runtime/expand/hold_reason.rs new file mode 100644 index 00000000..3249870a --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/hold_reason.rs @@ -0,0 +1,69 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use super::composite_helper; +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; + +pub fn expand_outer_hold_reason(pallet_decls: &[Pallet], scrate: &TokenStream) -> TokenStream { + let mut conversion_fns = Vec::new(); + let mut hold_reason_variants = Vec::new(); + for decl in pallet_decls { + if let Some(_) = decl.find_part("HoldReason") { + let variant_name = &decl.name; + let path = &decl.path; + let index = decl.index; + let instance = decl.instance.as_ref(); + + conversion_fns.push(composite_helper::expand_conversion_fn( + "HoldReason", + path, + instance, + variant_name, + )); + + hold_reason_variants.push(composite_helper::expand_variant( + "HoldReason", + index, + path, + instance, + variant_name, + )); + } + } + let hold_reason_variants_count = hold_reason_variants.len() as u32; + + quote! { + /// A reason for placing a hold on funds. + #[derive( + Copy, Clone, Eq, PartialEq, + #scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeHoldReason { + #( #hold_reason_variants )* + } + + impl #scrate::traits::VariantCount for RuntimeHoldReason { + const VARIANT_COUNT: u32 = #hold_reason_variants_count; + } + + #( #conversion_fns )* + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/inherent.rs b/new-modified-construct-runtime/src/construct_runtime/expand/inherent.rs new file mode 100644 index 00000000..55854fcb --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/inherent.rs @@ -0,0 +1,254 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; +use std::str::FromStr; +use syn::Ident; + +pub fn expand_outer_inherent( + runtime: &Ident, + block: &TokenStream, + unchecked_extrinsic: &TokenStream, + pallet_decls: &[Pallet], + scrate: &TokenStream, +) -> TokenStream { + let mut pallet_names = Vec::new(); + let mut pallet_attrs = Vec::new(); + let mut query_inherent_part_macros = Vec::new(); + + for pallet_decl in pallet_decls { + if pallet_decl.exists_part("Inherent") { + let name = &pallet_decl.name; + let path = &pallet_decl.path; + let attr = pallet_decl + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + pallet_names.push(name); + pallet_attrs.push(attr); + query_inherent_part_macros.push(quote! { + #path::__substrate_inherent_check::is_inherent_part_defined!(#name); + }); + } + } + + quote! { + #( #query_inherent_part_macros )* + + trait InherentDataExt { + fn create_extrinsics(&self) -> + #scrate::__private::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic>; + fn check_extrinsics(&self, block: &#block) -> #scrate::inherent::CheckInherentsResult; + } + + impl InherentDataExt for #scrate::inherent::InherentData { + fn create_extrinsics(&self) -> + #scrate::__private::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic> + { + use #scrate::inherent::ProvideInherent; + + let mut inherents = #scrate::__private::sp_std::vec::Vec::new(); + + #( + #pallet_attrs + if let Some(inherent) = #pallet_names::create_inherent(self) { + let inherent = <#unchecked_extrinsic as #scrate::sp_runtime::traits::Extrinsic>::new( + inherent.into(), + None, + ).expect("Runtime UncheckedExtrinsic is not Opaque, so it has to return \ + `Some`; qed"); + + inherents.push(inherent); + } + )* + + inherents + } + + fn check_extrinsics(&self, block: &#block) -> #scrate::inherent::CheckInherentsResult { + use #scrate::inherent::{ProvideInherent, IsFatalError}; + use #scrate::traits::{IsSubType, ExtrinsicCall}; + use #scrate::sp_runtime::traits::Block as _; + use #scrate::__private::{sp_inherents::Error, log}; + + let mut result = #scrate::inherent::CheckInherentsResult::new(); + + // This handle assume we abort on the first fatal error. + fn handle_put_error_result(res: Result<(), Error>) { + const LOG_TARGET: &str = "runtime::inherent"; + match res { + Ok(()) => (), + Err(Error::InherentDataExists(id)) => + log::debug!( + target: LOG_TARGET, + "Some error already reported for inherent {:?}, new non fatal \ + error is ignored", + id + ), + Err(Error::FatalErrorReported) => + log::error!( + target: LOG_TARGET, + "Fatal error already reported, unexpected considering there is \ + only one fatal error", + ), + Err(_) => + log::error!( + target: LOG_TARGET, + "Unexpected error from `put_error` operation", + ), + } + } + + for xt in block.extrinsics() { + // Inherents are before any other extrinsics. + // And signed extrinsics are not inherents. + if #scrate::sp_runtime::traits::Extrinsic::is_signed(xt).unwrap_or(false) { + break + } + + let mut is_inherent = false; + + #( + #pallet_attrs + { + let call = <#unchecked_extrinsic as ExtrinsicCall>::call(xt); + if let Some(call) = IsSubType::<_>::is_sub_type(call) { + if #pallet_names::is_inherent(call) { + is_inherent = true; + if let Err(e) = #pallet_names::check_inherent(call, self) { + handle_put_error_result(result.put_error( + #pallet_names::INHERENT_IDENTIFIER, &e + )); + if e.is_fatal_error() { + return result; + } + } + } + } + } + )* + + // Inherents are before any other extrinsics. + // No module marked it as inherent thus it is not. + if !is_inherent { + break + } + } + + #( + #pallet_attrs + match #pallet_names::is_inherent_required(self) { + Ok(Some(e)) => { + let found = block.extrinsics().iter().any(|xt| { + let is_signed = #scrate::sp_runtime::traits::Extrinsic::is_signed(xt) + .unwrap_or(false); + + if !is_signed { + let call = < + #unchecked_extrinsic as ExtrinsicCall + >::call(xt); + if let Some(call) = IsSubType::<_>::is_sub_type(call) { + #pallet_names::is_inherent(&call) + } else { + false + } + } else { + // Signed extrinsics are not inherents. + false + } + }); + + if !found { + handle_put_error_result(result.put_error( + #pallet_names::INHERENT_IDENTIFIER, &e + )); + if e.is_fatal_error() { + return result; + } + } + }, + Ok(None) => (), + Err(e) => { + handle_put_error_result(result.put_error( + #pallet_names::INHERENT_IDENTIFIER, &e + )); + if e.is_fatal_error() { + return result; + } + }, + } + )* + + result + } + } + + impl #scrate::traits::EnsureInherentsAreFirst<#block> for #runtime { + fn ensure_inherents_are_first(block: &#block) -> Result<(), u32> { + use #scrate::inherent::ProvideInherent; + use #scrate::traits::{IsSubType, ExtrinsicCall}; + use #scrate::sp_runtime::traits::Block as _; + + let mut first_signed_observed = false; + + for (i, xt) in block.extrinsics().iter().enumerate() { + let is_signed = #scrate::sp_runtime::traits::Extrinsic::is_signed(xt) + .unwrap_or(false); + + let is_inherent = if is_signed { + // Signed extrinsics are not inherents. + false + } else { + let mut is_inherent = false; + #( + #pallet_attrs + { + let call = <#unchecked_extrinsic as ExtrinsicCall>::call(xt); + if let Some(call) = IsSubType::<_>::is_sub_type(call) { + if #pallet_names::is_inherent(&call) { + is_inherent = true; + } + } + } + )* + is_inherent + }; + + if !is_inherent { + first_signed_observed = true; + } + + if first_signed_observed && is_inherent { + return Err(i as u32) + } + } + + Ok(()) + } + } + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/lock_id.rs b/new-modified-construct-runtime/src/construct_runtime/expand/lock_id.rs new file mode 100644 index 00000000..67c2fb93 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/lock_id.rs @@ -0,0 +1,64 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use super::composite_helper; +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; + +pub fn expand_outer_lock_id(pallet_decls: &[Pallet], scrate: &TokenStream) -> TokenStream { + let mut conversion_fns = Vec::new(); + let mut lock_id_variants = Vec::new(); + for decl in pallet_decls { + if let Some(_) = decl.find_part("LockId") { + let variant_name = &decl.name; + let path = &decl.path; + let index = decl.index; + let instance = decl.instance.as_ref(); + + conversion_fns.push(composite_helper::expand_conversion_fn( + "LockId", + path, + instance, + variant_name, + )); + + lock_id_variants.push(composite_helper::expand_variant( + "LockId", + index, + path, + instance, + variant_name, + )); + } + } + + quote! { + /// An identifier for each lock placed on funds. + #[derive( + Copy, Clone, Eq, PartialEq, + #scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeLockId { + #( #lock_id_variants )* + } + + #( #conversion_fns )* + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/metadata.rs b/new-modified-construct-runtime/src/construct_runtime/expand/metadata.rs new file mode 100644 index 00000000..4d496b9a --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/metadata.rs @@ -0,0 +1,261 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::{parse::PalletPath, Pallet}; +use proc_macro2::TokenStream; +use quote::quote; +use std::str::FromStr; +use syn::Ident; + +pub fn expand_runtime_metadata( + runtime: &Ident, + pallet_declarations: &[Pallet], + scrate: &TokenStream, + extrinsic: &TokenStream, + system_path: &PalletPath, +) -> TokenStream { + let pallets = pallet_declarations + .iter() + .filter_map(|pallet_declaration| { + pallet_declaration.find_part("Pallet").map(|_| { + let filtered_names: Vec<_> = pallet_declaration + .pallet_parts() + .iter() + .filter(|part| part.name() != "Pallet") + .map(|part| part.name()) + .collect(); + (pallet_declaration, filtered_names) + }) + }) + .map(|(decl, filtered_names)| { + let name = &decl.name; + let index = &decl.index; + let storage = expand_pallet_metadata_storage(&filtered_names, runtime, decl); + let calls = expand_pallet_metadata_calls(&filtered_names, runtime, decl); + let event = expand_pallet_metadata_events(&filtered_names, runtime, scrate, decl); + let constants = expand_pallet_metadata_constants(runtime, decl); + let errors = expand_pallet_metadata_errors(runtime, decl); + let docs = expand_pallet_metadata_docs(runtime, decl); + let attr = decl + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + quote! { + #attr + #scrate::__private::metadata_ir::PalletMetadataIR { + name: stringify!(#name), + index: #index, + storage: #storage, + calls: #calls, + event: #event, + constants: #constants, + error: #errors, + docs: #docs, + } + } + }) + .collect::>(); + + quote! { + impl #runtime { + fn metadata_ir() -> #scrate::__private::metadata_ir::MetadataIR { + // Each runtime must expose the `runtime_metadata()` to fetch the runtime API metadata. + // The function is implemented by calling `impl_runtime_apis!`. + // + // However, the `construct_runtime_modified!` may be called without calling `impl_runtime_apis!`. + // Rely on the `Deref` trait to differentiate between a runtime that implements + // APIs (by macro impl_runtime_apis!) and a runtime that is simply created (by macro construct_runtime_modified!). + // + // Both `InternalConstructRuntime` and `InternalImplRuntimeApis` expose a `runtime_metadata()` function. + // `InternalConstructRuntime` is implemented by the `construct_runtime_modified!` for Runtime references (`& Runtime`), + // while `InternalImplRuntimeApis` is implemented by the `impl_runtime_apis!` for Runtime (`Runtime`). + // + // Therefore, the `Deref` trait will resolve the `runtime_metadata` from `impl_runtime_apis!` + // when both macros are called; and will resolve an empty `runtime_metadata` when only the `construct_runtime_modified!` + // is called. + // + // `Deref` needs a reference for resolving the function call. + let rt = #runtime; + + let ty = #scrate::__private::scale_info::meta_type::<#extrinsic>(); + let address_ty = #scrate::__private::scale_info::meta_type::< + <<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::SignatureAddress + >(); + let call_ty = #scrate::__private::scale_info::meta_type::< + <#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::Call + >(); + let signature_ty = #scrate::__private::scale_info::meta_type::< + <<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::Signature + >(); + let extra_ty = #scrate::__private::scale_info::meta_type::< + <<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::SignatureExtra + >(); + + #scrate::__private::metadata_ir::MetadataIR { + pallets: #scrate::__private::sp_std::vec![ #(#pallets),* ], + extrinsic: #scrate::__private::metadata_ir::ExtrinsicMetadataIR { + ty, + version: <#extrinsic as #scrate::sp_runtime::traits::ExtrinsicMetadata>::VERSION, + address_ty, + call_ty, + signature_ty, + extra_ty, + signed_extensions: < + < + #extrinsic as #scrate::sp_runtime::traits::ExtrinsicMetadata + >::SignedExtensions as #scrate::sp_runtime::traits::SignedExtension + >::metadata() + .into_iter() + .map(|meta| #scrate::__private::metadata_ir::SignedExtensionMetadataIR { + identifier: meta.identifier, + ty: meta.ty, + additional_signed: meta.additional_signed, + }) + .collect(), + }, + ty: #scrate::__private::scale_info::meta_type::<#runtime>(), + apis: (&rt).runtime_metadata(), + outer_enums: #scrate::__private::metadata_ir::OuterEnumsIR { + call_enum_ty: #scrate::__private::scale_info::meta_type::< + <#runtime as #system_path::Config>::RuntimeCall + >(), + event_enum_ty: #scrate::__private::scale_info::meta_type::(), + error_enum_ty: #scrate::__private::scale_info::meta_type::(), + } + } + } + + pub fn metadata() -> #scrate::__private::metadata::RuntimeMetadataPrefixed { + // Note: this always returns the V14 version. The runtime API function + // must be deprecated. + #scrate::__private::metadata_ir::into_v14(#runtime::metadata_ir()) + } + + pub fn metadata_at_version(version: u32) -> Option<#scrate::__private::OpaqueMetadata> { + #scrate::__private::metadata_ir::into_version(#runtime::metadata_ir(), version).map(|prefixed| { + #scrate::__private::OpaqueMetadata::new(prefixed.into()) + }) + } + + pub fn metadata_versions() -> #scrate::__private::sp_std::vec::Vec { + #scrate::__private::metadata_ir::supported_versions() + } + } + } +} + +fn expand_pallet_metadata_storage( + filtered_names: &[&'static str], + runtime: &Ident, + decl: &Pallet, +) -> TokenStream { + if filtered_names.contains(&"Storage") { + let instance = decl.instance.as_ref().into_iter(); + let path = &decl.path; + + quote! { + Some(#path::Pallet::<#runtime #(, #path::#instance)*>::storage_metadata()) + } + } else { + quote!(None) + } +} + +fn expand_pallet_metadata_calls( + filtered_names: &[&'static str], + runtime: &Ident, + decl: &Pallet, +) -> TokenStream { + if filtered_names.contains(&"Call") { + let instance = decl.instance.as_ref().into_iter(); + let path = &decl.path; + + quote! { + Some(#path::Pallet::<#runtime #(, #path::#instance)*>::call_functions()) + } + } else { + quote!(None) + } +} + +fn expand_pallet_metadata_events( + filtered_names: &[&'static str], + runtime: &Ident, + scrate: &TokenStream, + decl: &Pallet, +) -> TokenStream { + if filtered_names.contains(&"Event") { + let path = &decl.path; + let part_is_generic = !decl + .find_part("Event") + .expect("Event part exists; qed") + .generics + .params + .is_empty(); + let pallet_event = match (decl.instance.as_ref(), part_is_generic) { + (Some(inst), true) => quote!(#path::Event::<#runtime, #path::#inst>), + (Some(inst), false) => quote!(#path::Event::<#path::#inst>), + (None, true) => quote!(#path::Event::<#runtime>), + (None, false) => quote!(#path::Event), + }; + + quote! { + Some( + #scrate::__private::metadata_ir::PalletEventMetadataIR { + ty: #scrate::__private::scale_info::meta_type::<#pallet_event>() + } + ) + } + } else { + quote!(None) + } +} + +fn expand_pallet_metadata_constants(runtime: &Ident, decl: &Pallet) -> TokenStream { + let path = &decl.path; + let instance = decl.instance.as_ref().into_iter(); + + quote! { + #path::Pallet::<#runtime #(, #path::#instance)*>::pallet_constants_metadata() + } +} + +fn expand_pallet_metadata_errors(runtime: &Ident, decl: &Pallet) -> TokenStream { + let path = &decl.path; + let instance = decl.instance.as_ref().into_iter(); + + quote! { + #path::Pallet::<#runtime #(, #path::#instance)*>::error_metadata() + } +} + +fn expand_pallet_metadata_docs(runtime: &Ident, decl: &Pallet) -> TokenStream { + let path = &decl.path; + let instance = decl.instance.as_ref().into_iter(); + + quote! { + #path::Pallet::<#runtime #(, #path::#instance)*>::pallet_documentation_metadata() + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/mod.rs b/new-modified-construct-runtime/src/construct_runtime/expand/mod.rs new file mode 100644 index 00000000..88f9a3c6 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/mod.rs @@ -0,0 +1,43 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +mod call; +pub mod composite_helper; +mod config; +mod freeze_reason; +mod hold_reason; +mod inherent; +mod lock_id; +mod metadata; +mod origin; +mod outer_enums; +mod slash_reason; +mod task; +mod unsigned; + +pub use call::expand_outer_dispatch; +pub use config::expand_outer_config; +pub use freeze_reason::expand_outer_freeze_reason; +pub use hold_reason::expand_outer_hold_reason; +pub use inherent::expand_outer_inherent; +pub use lock_id::expand_outer_lock_id; +pub use metadata::expand_runtime_metadata; +pub use origin::expand_outer_origin; +pub use outer_enums::{expand_outer_enum, OuterEnumType}; +pub use slash_reason::expand_outer_slash_reason; +pub use task::expand_outer_task; +pub use unsigned::expand_outer_validate_unsigned; diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/origin.rs b/new-modified-construct-runtime/src/construct_runtime/expand/origin.rs new file mode 100644 index 00000000..a82d052e --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/origin.rs @@ -0,0 +1,469 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::{Pallet, SYSTEM_PALLET_NAME}; +use proc_macro2::TokenStream; +use quote::quote; +use std::str::FromStr; +use syn::{Generics, Ident}; + +pub fn expand_outer_origin( + runtime: &Ident, + system_pallet: &Pallet, + pallets: &[Pallet], + scrate: &TokenStream, +) -> syn::Result { + let mut caller_variants = TokenStream::new(); + let mut pallet_conversions = TokenStream::new(); + let mut query_origin_part_macros = Vec::new(); + + for pallet_decl in pallets + .iter() + .filter(|pallet| pallet.name != SYSTEM_PALLET_NAME) + { + if let Some(pallet_entry) = pallet_decl.find_part("Origin") { + let instance = pallet_decl.instance.as_ref(); + let index = pallet_decl.index; + let generics = &pallet_entry.generics; + let name = &pallet_decl.name; + let path = &pallet_decl.path; + + if instance.is_some() && generics.params.is_empty() { + let msg = format!( + "Instantiable pallet with no generic `Origin` cannot \ + be constructed: pallet `{}` must have generic `Origin`", + name + ); + return Err(syn::Error::new(name.span(), msg)); + } + + caller_variants.extend(expand_origin_caller_variant( + runtime, + pallet_decl, + index, + instance, + generics, + )); + pallet_conversions.extend(expand_origin_pallet_conversions( + scrate, + runtime, + pallet_decl, + instance, + generics, + )); + query_origin_part_macros.push(quote! { + #path::__substrate_origin_check::is_origin_part_defined!(#name); + }); + } + } + + let system_path = &system_pallet.path; + + let system_index = system_pallet.index; + + let system_path_name = system_path.module_name(); + + let doc_string = get_intra_doc_string( + "Origin is always created with the base filter configured in", + &system_path_name, + ); + + let doc_string_none_origin = + get_intra_doc_string("Create with system none origin and", &system_path_name); + + let doc_string_root_origin = + get_intra_doc_string("Create with system root origin and", &system_path_name); + + let doc_string_signed_origin = + get_intra_doc_string("Create with system signed origin and", &system_path_name); + + let doc_string_runtime_origin = get_intra_doc_string( + "Convert to runtime origin, using as filter:", + &system_path_name, + ); + + let doc_string_runtime_origin_with_caller = get_intra_doc_string( + "Convert to runtime origin with caller being system signed or none and use filter", + &system_path_name, + ); + + Ok(quote! { + #( #query_origin_part_macros )* + + /// The runtime origin type representing the origin of a call. + /// + #[doc = #doc_string] + #[derive(Clone)] + pub struct RuntimeOrigin { + caller: OriginCaller, + filter: #scrate::__private::sp_std::rc::Rc::RuntimeCall) -> bool>>, + } + + #[cfg(not(feature = "std"))] + impl #scrate::__private::sp_std::fmt::Debug for RuntimeOrigin { + fn fmt( + &self, + fmt: &mut #scrate::__private::sp_std::fmt::Formatter, + ) -> #scrate::__private::sp_std::result::Result<(), #scrate::__private::sp_std::fmt::Error> { + fmt.write_str("") + } + } + + #[cfg(feature = "std")] + impl #scrate::__private::sp_std::fmt::Debug for RuntimeOrigin { + fn fmt( + &self, + fmt: &mut #scrate::__private::sp_std::fmt::Formatter, + ) -> #scrate::__private::sp_std::result::Result<(), #scrate::__private::sp_std::fmt::Error> { + fmt.debug_struct("Origin") + .field("caller", &self.caller) + .field("filter", &"[function ptr]") + .finish() + } + } + + impl #scrate::traits::OriginTrait for RuntimeOrigin { + type Call = <#runtime as #system_path::Config>::RuntimeCall; + type PalletsOrigin = OriginCaller; + type AccountId = <#runtime as #system_path::Config>::AccountId; + + fn add_filter(&mut self, filter: impl Fn(&Self::Call) -> bool + 'static) { + let f = self.filter.clone(); + + self.filter = #scrate::__private::sp_std::rc::Rc::new(Box::new(move |call| { + f(call) && filter(call) + })); + } + + fn reset_filter(&mut self) { + let filter = < + <#runtime as #system_path::Config>::BaseCallFilter + as #scrate::traits::Contains<<#runtime as #system_path::Config>::RuntimeCall> + >::contains; + + self.filter = #scrate::__private::sp_std::rc::Rc::new(Box::new(filter)); + } + + fn set_caller_from(&mut self, other: impl Into) { + self.caller = other.into().caller; + } + + fn filter_call(&self, call: &Self::Call) -> bool { + match self.caller { + // Root bypasses all filters + OriginCaller::system(#system_path::Origin::<#runtime>::Root) => true, + _ => (self.filter)(call), + } + } + + fn caller(&self) -> &Self::PalletsOrigin { + &self.caller + } + + fn into_caller(self) -> Self::PalletsOrigin { + self.caller + } + + fn try_with_caller( + mut self, + f: impl FnOnce(Self::PalletsOrigin) -> Result, + ) -> Result { + match f(self.caller) { + Ok(r) => Ok(r), + Err(caller) => { self.caller = caller; Err(self) } + } + } + + fn none() -> Self { + #system_path::RawOrigin::None.into() + } + + fn root() -> Self { + #system_path::RawOrigin::Root.into() + } + + fn signed(by: Self::AccountId) -> Self { + #system_path::RawOrigin::Signed(by).into() + } + } + + #[derive( + Clone, PartialEq, Eq, #scrate::__private::RuntimeDebug, #scrate::__private::codec::Encode, + #scrate::__private::codec::Decode, #scrate::__private::scale_info::TypeInfo, #scrate::__private::codec::MaxEncodedLen, + )] + #[allow(non_camel_case_types)] + pub enum OriginCaller { + #[codec(index = #system_index)] + system(#system_path::Origin<#runtime>), + #caller_variants + #[allow(dead_code)] + Void(#scrate::__private::Void) + } + + // For backwards compatibility and ease of accessing these functions. + #[allow(dead_code)] + impl RuntimeOrigin { + #[doc = #doc_string_none_origin] + pub fn none() -> Self { + ::none() + } + + #[doc = #doc_string_root_origin] + pub fn root() -> Self { + ::root() + } + + #[doc = #doc_string_signed_origin] + pub fn signed(by: <#runtime as #system_path::Config>::AccountId) -> Self { + ::signed(by) + } + } + + impl From<#system_path::Origin<#runtime>> for OriginCaller { + fn from(x: #system_path::Origin<#runtime>) -> Self { + OriginCaller::system(x) + } + } + + impl #scrate::traits::CallerTrait<<#runtime as #system_path::Config>::AccountId> for OriginCaller { + fn into_system(self) -> Option<#system_path::RawOrigin<<#runtime as #system_path::Config>::AccountId>> { + match self { + OriginCaller::system(x) => Some(x), + _ => None, + } + } + fn as_system_ref(&self) -> Option<&#system_path::RawOrigin<<#runtime as #system_path::Config>::AccountId>> { + match &self { + OriginCaller::system(o) => Some(o), + _ => None, + } + } + } + + impl TryFrom for #system_path::Origin<#runtime> { + type Error = OriginCaller; + fn try_from(x: OriginCaller) + -> #scrate::__private::sp_std::result::Result<#system_path::Origin<#runtime>, OriginCaller> + { + if let OriginCaller::system(l) = x { + Ok(l) + } else { + Err(x) + } + } + } + + impl From<#system_path::Origin<#runtime>> for RuntimeOrigin { + + #[doc = #doc_string_runtime_origin] + fn from(x: #system_path::Origin<#runtime>) -> Self { + let o: OriginCaller = x.into(); + o.into() + } + } + + impl From for RuntimeOrigin { + fn from(x: OriginCaller) -> Self { + let mut o = RuntimeOrigin { + caller: x, + filter: #scrate::__private::sp_std::rc::Rc::new(Box::new(|_| true)), + }; + + #scrate::traits::OriginTrait::reset_filter(&mut o); + + o + } + } + + // impl From for #scrate::__private::sp_std::result::Result<#system_path::Origin<#runtime>, RuntimeOrigin> { + // /// NOTE: converting to pallet origin loses the origin filter information. + // fn from(val: RuntimeOrigin) -> Self { + // if let OriginCaller::system(l) = val.caller { + // Ok(l) + // } else { + // Err(val) + // } + // } + // } + impl From::AccountId>> for RuntimeOrigin { + #[doc = #doc_string_runtime_origin_with_caller] + fn from(x: Option<<#runtime as #system_path::Config>::AccountId>) -> Self { + <#system_path::Origin<#runtime>>::from(x).into() + } + } + + #pallet_conversions + }) +} + +fn expand_origin_caller_variant( + runtime: &Ident, + pallet: &Pallet, + index: u8, + instance: Option<&Ident>, + generics: &Generics, +) -> TokenStream { + let part_is_generic = !generics.params.is_empty(); + let variant_name = &pallet.name; + let path = &pallet.path; + let attr = pallet + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + match instance { + Some(inst) if part_is_generic => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::Origin<#runtime, #path::#inst>), + }, + Some(inst) => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::Origin<#path::#inst>), + }, + None if part_is_generic => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::Origin<#runtime>), + }, + None => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::Origin), + }, + } +} + +fn expand_origin_pallet_conversions( + scrate: &TokenStream, + runtime: &Ident, + pallet: &Pallet, + instance: Option<&Ident>, + generics: &Generics, +) -> TokenStream { + let path = &pallet.path; + let variant_name = &pallet.name; + + let part_is_generic = !generics.params.is_empty(); + let pallet_origin = match instance { + Some(inst) if part_is_generic => quote!(#path::Origin<#runtime, #path::#inst>), + Some(inst) => quote!(#path::Origin<#path::#inst>), + None if part_is_generic => quote!(#path::Origin<#runtime>), + None => quote!(#path::Origin), + }; + + let doc_string = get_intra_doc_string(" Convert to runtime origin using", &path.module_name()); + let attr = pallet + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + quote! { + #attr + impl From<#pallet_origin> for OriginCaller { + fn from(x: #pallet_origin) -> Self { + OriginCaller::#variant_name(x) + } + } + + #attr + impl From<#pallet_origin> for RuntimeOrigin { + #[doc = #doc_string] + fn from(x: #pallet_origin) -> Self { + let x: OriginCaller = x.into(); + x.into() + } + } + + #attr + impl From for #scrate::__private::sp_std::result::Result<#pallet_origin, RuntimeOrigin> { + /// NOTE: converting to pallet origin loses the origin filter information. + fn from(val: RuntimeOrigin) -> Self { + if let OriginCaller::#variant_name(l) = val.caller { + Ok(l) + } else { + Err(val) + } + } + } + + #attr + impl TryFrom for #pallet_origin { + type Error = OriginCaller; + fn try_from( + x: OriginCaller, + ) -> #scrate::__private::sp_std::result::Result<#pallet_origin, OriginCaller> { + if let OriginCaller::#variant_name(l) = x { + Ok(l) + } else { + Err(x) + } + } + } + + #attr + impl<'a> TryFrom<&'a OriginCaller> for &'a #pallet_origin { + type Error = (); + fn try_from( + x: &'a OriginCaller, + ) -> #scrate::__private::sp_std::result::Result<&'a #pallet_origin, ()> { + if let OriginCaller::#variant_name(l) = x { + Ok(&l) + } else { + Err(()) + } + } + } + + #attr + impl<'a> TryFrom<&'a RuntimeOrigin> for &'a #pallet_origin { + type Error = (); + fn try_from( + x: &'a RuntimeOrigin, + ) -> #scrate::__private::sp_std::result::Result<&'a #pallet_origin, ()> { + if let OriginCaller::#variant_name(l) = &x.caller { + Ok(&l) + } else { + Err(()) + } + } + } + } +} + +// Get the actual documentation using the doc information and system path name +fn get_intra_doc_string(doc_info: &str, system_path_name: &String) -> String { + format!( + " {} [`{}::Config::BaseCallFilter`].", + doc_info, system_path_name + ) +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/outer_enums.rs b/new-modified-construct-runtime/src/construct_runtime/expand/outer_enums.rs new file mode 100644 index 00000000..0bcc7265 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/outer_enums.rs @@ -0,0 +1,292 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use proc_macro2::{Span, TokenStream}; +use quote::{quote, ToTokens}; +use std::str::FromStr; +use syn::{Generics, Ident}; + +/// Represents the types supported for creating an outer enum. +#[derive(Clone, Copy, PartialEq)] +pub enum OuterEnumType { + /// Collects the Event enums from all pallets. + Event, + /// Collects the Error enums from all pallets. + Error, +} + +impl OuterEnumType { + /// The name of the structure this enum represents. + fn struct_name(&self) -> &str { + match self { + OuterEnumType::Event => "RuntimeEvent", + OuterEnumType::Error => "RuntimeError", + } + } + + /// The name of the variant (ie `Event` or `Error`). + fn variant_name(&self) -> &str { + match self { + OuterEnumType::Event => "Event", + OuterEnumType::Error => "Error", + } + } +} + +impl ToTokens for OuterEnumType { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + OuterEnumType::Event => quote!(Event).to_tokens(tokens), + OuterEnumType::Error => quote!(Error).to_tokens(tokens), + } + } +} + +/// Create an outer enum that encapsulates all pallets as variants. +/// +/// Each variant represents a pallet and contains the corresponding type declared with either: +/// - #[pallet::event] for the [`OuterEnumType::Event`] variant +/// - #[pallet::error] for the [`OuterEnumType::Error`] variant +/// +/// The name of the outer enum is prefixed with Runtime, resulting in names like RuntimeEvent +/// or RuntimeError. +/// +/// This structure facilitates the decoding process by leveraging the metadata. +/// +/// # Example +/// +/// The code generate looks like the following for [`OuterEnumType::Event`]. +/// +/// ```ignore +/// enum RuntimeEvent { +/// #[codec(index = 0)] +/// System(pallet_system::Event), +/// +/// #[codec(index = 5)] +/// Balances(pallet_system::Event), +/// } +/// ``` +/// +/// Notice that the pallet index is preserved using the `#[codec(index = ..)]` attribute. +pub fn expand_outer_enum( + runtime: &Ident, + pallet_decls: &[Pallet], + scrate: &TokenStream, + enum_ty: OuterEnumType, +) -> syn::Result { + // Stores all pallet variants. + let mut enum_variants = TokenStream::new(); + // Generates the enum conversion between the `Runtime` outer enum and the pallet's enum. + let mut enum_conversions = TokenStream::new(); + // Specific for events to query via `is_event_part_defined!`. + let mut query_enum_part_macros = Vec::new(); + + let enum_name_str = enum_ty.variant_name(); + let enum_name_ident = Ident::new(enum_ty.struct_name(), Span::call_site()); + + for pallet_decl in pallet_decls { + let Some(pallet_entry) = pallet_decl.find_part(enum_name_str) else { + continue; + }; + + let path = &pallet_decl.path; + let pallet_name = &pallet_decl.name; + let index = pallet_decl.index; + let instance = pallet_decl.instance.as_ref(); + let generics = &pallet_entry.generics; + + if instance.is_some() && generics.params.is_empty() { + let msg = format!( + "Instantiable pallet with no generic `{}` cannot \ + be constructed: pallet `{}` must have generic `{}`", + enum_name_str, pallet_name, enum_name_str, + ); + return Err(syn::Error::new(pallet_name.span(), msg)); + } + + let part_is_generic = !generics.params.is_empty(); + let pallet_enum = match (instance, part_is_generic) { + (Some(inst), true) => quote!(#path::#enum_ty::<#runtime, #path::#inst>), + (Some(inst), false) => quote!(#path::#enum_ty::<#path::#inst>), + (None, true) => quote!(#path::#enum_ty::<#runtime>), + (None, false) => quote!(#path::#enum_ty), + }; + + enum_variants.extend(expand_enum_variant( + runtime, + pallet_decl, + index, + instance, + generics, + enum_ty, + )); + enum_conversions.extend(expand_enum_conversion( + scrate, + pallet_decl, + &pallet_enum, + &enum_name_ident, + )); + + if enum_ty == OuterEnumType::Event { + query_enum_part_macros.push(quote! { + #path::__substrate_event_check::is_event_part_defined!(#pallet_name); + }); + } + } + + // Derives specific for the event. + let event_custom_derives = if enum_ty == OuterEnumType::Event { + quote!(Clone, PartialEq, Eq,) + } else { + quote!() + }; + + // Implementation specific for errors. + let error_custom_impl = generate_error_impl(scrate, enum_ty); + + Ok(quote! { + #( #query_enum_part_macros )* + + #[derive( + #event_custom_derives + #scrate::__private::codec::Encode, + #scrate::__private::codec::Decode, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + #[allow(non_camel_case_types)] + pub enum #enum_name_ident { + #enum_variants + } + + #enum_conversions + + #error_custom_impl + }) +} + +fn expand_enum_variant( + runtime: &Ident, + pallet: &Pallet, + index: u8, + instance: Option<&Ident>, + generics: &Generics, + enum_ty: OuterEnumType, +) -> TokenStream { + let path = &pallet.path; + let variant_name = &pallet.name; + let part_is_generic = !generics.params.is_empty(); + let attr = pallet + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + match instance { + Some(inst) if part_is_generic => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::#enum_ty<#runtime, #path::#inst>), + }, + Some(inst) => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::#enum_ty<#path::#inst>), + }, + None if part_is_generic => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::#enum_ty<#runtime>), + }, + None => quote! { + #attr + #[codec(index = #index)] + #variant_name(#path::#enum_ty), + }, + } +} + +fn expand_enum_conversion( + scrate: &TokenStream, + pallet: &Pallet, + pallet_enum: &TokenStream, + enum_name_ident: &Ident, +) -> TokenStream { + let variant_name = &pallet.name; + let attr = pallet + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + quote! { + #attr + impl From<#pallet_enum> for #enum_name_ident { + fn from(x: #pallet_enum) -> Self { + #enum_name_ident + ::#variant_name(x) + } + } + #attr + impl TryInto<#pallet_enum> for #enum_name_ident { + type Error = (); + + fn try_into(self) -> #scrate::__private::sp_std::result::Result<#pallet_enum, Self::Error> { + match self { + Self::#variant_name(evt) => Ok(evt), + _ => Err(()), + } + } + } + } +} + +fn generate_error_impl(scrate: &TokenStream, enum_ty: OuterEnumType) -> TokenStream { + // Implementation is specific to `Error`s. + if enum_ty == OuterEnumType::Event { + return quote! {}; + } + + let enum_name_ident = Ident::new(enum_ty.struct_name(), Span::call_site()); + + quote! { + impl #enum_name_ident { + /// Optionally convert the `DispatchError` into the `RuntimeError`. + /// + /// Returns `Some` if the error matches the `DispatchError::Module` variant, otherwise `None`. + pub fn from_dispatch_error(err: #scrate::sp_runtime::DispatchError) -> Option { + let #scrate::sp_runtime::DispatchError::Module(module_error) = err else { return None }; + + let bytes = #scrate::__private::codec::Encode::encode(&module_error); + #scrate::__private::codec::Decode::decode(&mut &bytes[..]).ok() + } + } + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/slash_reason.rs b/new-modified-construct-runtime/src/construct_runtime/expand/slash_reason.rs new file mode 100644 index 00000000..0695d810 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/slash_reason.rs @@ -0,0 +1,64 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use super::composite_helper; +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; + +pub fn expand_outer_slash_reason(pallet_decls: &[Pallet], scrate: &TokenStream) -> TokenStream { + let mut conversion_fns = Vec::new(); + let mut slash_reason_variants = Vec::new(); + for decl in pallet_decls { + if let Some(_) = decl.find_part("SlashReason") { + let variant_name = &decl.name; + let path = &decl.path; + let index = decl.index; + let instance = decl.instance.as_ref(); + + conversion_fns.push(composite_helper::expand_conversion_fn( + "SlashReason", + path, + instance, + variant_name, + )); + + slash_reason_variants.push(composite_helper::expand_variant( + "SlashReason", + index, + path, + instance, + variant_name, + )); + } + } + + quote! { + /// A reason for slashing funds. + #[derive( + Copy, Clone, Eq, PartialEq, + #scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeSlashReason { + #( #slash_reason_variants )* + } + + #( #conversion_fns )* + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/task.rs b/new-modified-construct-runtime/src/construct_runtime/expand/task.rs new file mode 100644 index 00000000..94a5f52b --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/task.rs @@ -0,0 +1,131 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use proc_macro2::{Ident, TokenStream as TokenStream2}; +use quote::quote; + +/// Expands aggregate `RuntimeTask` enum. +pub fn expand_outer_task( + runtime_name: &Ident, + pallet_decls: &[Pallet], + scrate: &TokenStream2, +) -> TokenStream2 { + let mut from_impls = Vec::new(); + let mut task_variants = Vec::new(); + let mut variant_names = Vec::new(); + let mut task_paths = Vec::new(); + for decl in pallet_decls { + if decl.find_part("Task").is_none() { + continue; + } + + let variant_name = &decl.name; + let path = &decl.path; + let index = decl.index; + + from_impls.push(quote! { + impl From<#path::Task<#runtime_name>> for RuntimeTask { + fn from(hr: #path::Task<#runtime_name>) -> Self { + RuntimeTask::#variant_name(hr) + } + } + + impl TryInto<#path::Task<#runtime_name>> for RuntimeTask { + type Error = (); + + fn try_into(self) -> Result<#path::Task<#runtime_name>, Self::Error> { + match self { + RuntimeTask::#variant_name(hr) => Ok(hr), + _ => Err(()), + } + } + } + }); + + task_variants.push(quote! { + #[codec(index = #index)] + #variant_name(#path::Task<#runtime_name>), + }); + + variant_names.push(quote!(#variant_name)); + + task_paths.push(quote!(#path::Task)); + } + + let prelude = quote!(#scrate::traits::tasks::__private); + + const INCOMPLETE_MATCH_QED: &'static str = + "cannot have an instantiated RuntimeTask without some Task variant in the runtime. QED"; + + let output = quote! { + /// An aggregation of all `Task` enums across all pallets included in the current runtime. + #[derive( + Clone, Eq, PartialEq, + #scrate::__private::codec::Encode, + #scrate::__private::codec::Decode, + #scrate::__private::scale_info::TypeInfo, + #scrate::__private::RuntimeDebug, + )] + pub enum RuntimeTask { + #( #task_variants )* + } + + #[automatically_derived] + impl #scrate::traits::Task for RuntimeTask { + type Enumeration = #prelude::IntoIter; + + fn is_valid(&self) -> bool { + match self { + #(RuntimeTask::#variant_names(val) => val.is_valid(),)* + _ => unreachable!(#INCOMPLETE_MATCH_QED), + } + } + + fn run(&self) -> Result<(), #scrate::traits::tasks::__private::DispatchError> { + match self { + #(RuntimeTask::#variant_names(val) => val.run(),)* + _ => unreachable!(#INCOMPLETE_MATCH_QED), + } + } + + fn weight(&self) -> #scrate::pallet_prelude::Weight { + match self { + #(RuntimeTask::#variant_names(val) => val.weight(),)* + _ => unreachable!(#INCOMPLETE_MATCH_QED), + } + } + + fn task_index(&self) -> u32 { + match self { + #(RuntimeTask::#variant_names(val) => val.task_index(),)* + _ => unreachable!(#INCOMPLETE_MATCH_QED), + } + } + + fn iter() -> Self::Enumeration { + let mut all_tasks = Vec::new(); + #(all_tasks.extend(#task_paths::iter().map(RuntimeTask::from).collect::>());)* + all_tasks.into_iter() + } + } + + #( #from_impls )* + }; + + output +} diff --git a/new-modified-construct-runtime/src/construct_runtime/expand/unsigned.rs b/new-modified-construct-runtime/src/construct_runtime/expand/unsigned.rs new file mode 100644 index 00000000..109f7081 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/expand/unsigned.rs @@ -0,0 +1,92 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +use crate::construct_runtime::Pallet; +use proc_macro2::TokenStream; +use quote::quote; +use std::str::FromStr; +use syn::Ident; + +pub fn expand_outer_validate_unsigned( + runtime: &Ident, + pallet_decls: &[Pallet], + scrate: &TokenStream, +) -> TokenStream { + let mut pallet_names = Vec::new(); + let mut pallet_attrs = Vec::new(); + let mut query_validate_unsigned_part_macros = Vec::new(); + + for pallet_decl in pallet_decls { + if pallet_decl.exists_part("ValidateUnsigned") { + let name = &pallet_decl.name; + let path = &pallet_decl.path; + let attr = pallet_decl + .cfg_pattern + .iter() + .fold(TokenStream::new(), |acc, pattern| { + let attr = TokenStream::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }); + + pallet_names.push(name); + pallet_attrs.push(attr); + query_validate_unsigned_part_macros.push(quote! { + #path::__substrate_validate_unsigned_check::is_validate_unsigned_part_defined!(#name); + }); + } + } + + quote! { + #( #query_validate_unsigned_part_macros )* + + impl #scrate::unsigned::ValidateUnsigned for #runtime { + type Call = RuntimeCall; + + fn pre_dispatch(call: &Self::Call) -> Result<(), #scrate::unsigned::TransactionValidityError> { + #[allow(unreachable_patterns)] + match call { + #( + #pallet_attrs + RuntimeCall::#pallet_names(inner_call) => #pallet_names::pre_dispatch(inner_call), + )* + // pre-dispatch should not stop inherent extrinsics, validation should prevent + // including arbitrary (non-inherent) extrinsics to blocks. + _ => Ok(()), + } + } + + fn validate_unsigned( + #[allow(unused_variables)] + source: #scrate::unsigned::TransactionSource, + call: &Self::Call, + ) -> #scrate::unsigned::TransactionValidity { + #[allow(unreachable_patterns)] + match call { + #( + #pallet_attrs + RuntimeCall::#pallet_names(inner_call) => #pallet_names::validate_unsigned(source, inner_call), + )* + _ => #scrate::unsigned::UnknownTransaction::NoUnsignedValidator.into(), + } + } + } + } +} diff --git a/new-modified-construct-runtime/src/construct_runtime/mod.rs b/new-modified-construct-runtime/src/construct_runtime/mod.rs new file mode 100644 index 00000000..4dc2ee71 --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/mod.rs @@ -0,0 +1,843 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Implementation of `construct_runtime_modified`. +//! +//! `construct_runtime_modified` implementation is recursive and can generate code which will call itself in +//! order to get all the pallet parts for each pallet. +//! +//! Pallets can define their parts: +//! - Implicitely: `System: frame_system` +//! - Explicitly: `System: frame_system::{Pallet, Call}` +//! +//! The `construct_runtime_modified` transitions from the implicit definition to the explict one. +//! From the explicit state, Substrate expands the pallets with additional information +//! that is to be included in the runtime metadata. This expansion makes visible some extra +//! parts of the pallets, mainly the `Error` if defined. The expanded state looks like +//! `System: frame_system expanded::{Error} ::{Pallet, Call}` and concatenates the extra expanded +//! parts with the user-provided parts. For example, the `Pallet`, `Call` and `Error` parts are +//! collected. +//! +//! Pallets must provide the `tt_extra_parts` and `tt_default_parts` macros for these transitions. +//! These are automatically implemented by the `#[pallet::pallet]` macro. +//! +//! This macro also generates the following enums for ease of decoding: +//! - `enum RuntimeCall`: This type contains the information needed to decode extrinsics. +//! - `enum RuntimeEvent`: This type contains the information needed to decode events. +//! - `enum RuntimeError`: While this cannot be used directly to decode `sp_runtime::DispatchError` +//! from the chain, it contains the information needed to decode the +//! `sp_runtime::DispatchError::Module`. +//! +//! # State Transitions +//! +//! ```ignore +//! +----------+ +//! | Implicit | -----------+ +//! +----------+ | +//! | | +//! v v +//! +----------+ +------------------+ +//! | Explicit | --> | ExplicitExpanded | +//! +----------+ +------------------+ +//! ``` +//! +//! When all pallet parts are implcit, then the `construct_runtime_modified!` macro expands to its final +//! state, the `ExplicitExpanded`. Otherwise, all implicit parts are converted to an explicit +//! expanded part allow the `construct_runtime_modified!` to expand any remaining explicit parts to an +//! explicit expanded part. +//! +//! # Implicit to Explicit +//! +//! The `construct_runtime_modified` macro transforms the implicit declaration of each pallet +//! `System: frame_system` to an explicit one `System: frame_system::{Pallet, Call}` using the +//! `tt_default_parts` macro. +//! +//! The `tt_default_parts` macro exposes a comma separated list of pallet parts. For example, the +//! `Event` part is exposed only if the pallet implements an event via `#[pallet::event]` macro. +//! The tokens generated by this macro are ` expanded :: { Pallet, Call }` for our example. +//! +//! The `match_and_insert` macro takes in 3 arguments: +//! - target: This is the `TokenStream` that contains the `construct_runtime_modified!` macro. +//! - pattern: The pattern to match against in the target stream. +//! - tokens: The tokens to added after the pattern match. +//! +//! The `construct_runtime_modified` macro uses the `tt_call` to get the default pallet parts via +//! the `tt_default_parts` macro defined by each pallet. The pallet parts are then returned as +//! input to the `match_and_replace` macro. +//! The `match_and_replace` then will modify the the `construct_runtime_modified!` to expand the implicit +//! definition to the explicit one. +//! +//! For example, +//! +//! ```ignore +//! construct_runtime_modified!( +//! //... +//! { +//! System: frame_system = 0, // Implicit definition of parts +//! Balances: pallet_balances = 1, // Implicit definition of parts +//! } +//! ); +//! ``` +//! This call has some implicit pallet parts, thus it will expand to: +//! ```ignore +//! frame_support::__private::tt_call! { +//! macro = [{ pallet_balances::tt_default_parts }] +//! ~~> frame_support::match_and_insert! { +//! target = [{ +//! frame_support::__private::tt_call! { +//! macro = [{ frame_system::tt_default_parts }] +//! ~~> frame_support::match_and_insert! { +//! target = [{ +//! construct_runtime_modified!( +//! //... +//! { +//! System: frame_system = 0, +//! Balances: pallet_balances = 1, +//! } +//! ); +//! }] +//! pattern = [{ System: frame_system }] +//! } +//! } +//! }] +//! pattern = [{ Balances: pallet_balances }] +//! } +//! } +//! ``` +//! `tt_default_parts` must be defined. It returns the pallet parts inside some tokens, and +//! then `tt_call` will pipe the returned pallet parts into the input of `match_and_insert`. +//! Thus `match_and_insert` will initially receive the following inputs: +//! ```ignore +//! frame_support::match_and_insert! { +//! target = [{ +//! frame_support::match_and_insert! { +//! target = [{ +//! construct_runtime_modified!( +//! //... +//! { +//! System: frame_system = 0, +//! Balances: pallet_balances = 1, +//! } +//! ) +//! }] +//! pattern = [{ System: frame_system }] +//! tokens = [{ ::{Pallet, Call} }] +//! } +//! }] +//! pattern = [{ Balances: pallet_balances }] +//! tokens = [{ ::{Pallet, Call} }] +//! } +//! ``` +//! After dealing with `pallet_balances`, the inner `match_and_insert` will expand to: +//! ```ignore +//! frame_support::match_and_insert! { +//! target = [{ +//! construct_runtime_modified!( +//! //... +//! { +//! System: frame_system = 0, // Implicit definition of parts +//! Balances: pallet_balances::{Pallet, Call} = 1, // Explicit definition of parts +//! } +//! ) +//! }] +//! pattern = [{ System: frame_system }] +//! tokens = [{ ::{Pallet, Call} }] +//! } +//! ``` +//! +//! Which will then finally expand to the following: +//! ```ignore +//! construct_runtime_modified!( +//! //... +//! { +//! System: frame_system::{Pallet, Call}, +//! Balances: pallet_balances::{Pallet, Call}, +//! } +//! ) +//! ``` +//! +//! This call has no implicit pallet parts, thus it will expand to the runtime construction: +//! ```ignore +//! pub struct Runtime { ... } +//! pub struct Call { ... } +//! impl Call ... +//! pub enum Origin { ... } +//! ... +//! ``` +//! +//! Visualizing the entire flow of `construct_runtime_modified!`, it would look like the following: +//! +//! ```ignore +//! +--------------------+ +---------------------+ +-------------------+ +//! | | | (defined in pallet) | | | +//! | construct_runtime_modified! | --> | tt_default_parts! | --> | match_and_insert! | +//! | w/ no pallet parts | | | | | +//! +--------------------+ +---------------------+ +-------------------+ +//! +//! +--------------------+ +//! | | +//! --> | construct_runtime_modified! | +//! | w/ pallet parts | +//! +--------------------+ +//! ``` +//! +//! # Explicit to Explicit Expanded +//! +//! Users normally do not care about this transition. +//! +//! Similarly to the previous transition, the macro expansion transforms `System: +//! frame_system::{Pallet, Call}` into `System: frame_system expanded::{Error} ::{Pallet, Call}`. +//! The `expanded` section adds extra parts that the Substrate would like to expose for each pallet +//! by default. This is done to expose the approprite types for metadata construction. +//! +//! This time, instead of calling `tt_default_parts` we are using the `tt_extra_parts` macro. +//! This macro returns the ` :: expanded { Error }` list of additional parts we would like to +//! expose. + +mod expand; +mod parse; + +use cfg_expr::Predicate; +use frame_support_procedural_tools::{ + generate_access_from_frame_or_crate, generate_crate_access, generate_hidden_includes, +}; +use itertools::Itertools; +use parse::{ExplicitRuntimeDeclaration, ImplicitRuntimeDeclaration, Pallet, RuntimeDeclaration}; +use proc_macro::TokenStream; +use proc_macro2::TokenStream as TokenStream2; +use quote::quote; +use std::{collections::HashSet, str::FromStr}; +use syn::{spanned::Spanned, Ident, Result}; + +/// The fixed name of the system pallet. +const SYSTEM_PALLET_NAME: &str = "System"; + +/// Implementation of `construct_runtime_modified` macro. Either expand to some code which will call +/// `construct_runtime_modified` again, or expand to the final runtime definition. +pub fn construct_runtime_modified(input: TokenStream) -> TokenStream { + let input_copy = input.clone(); + let definition = syn::parse_macro_input!(input as RuntimeDeclaration); + + let res = match definition { + RuntimeDeclaration::Implicit(implicit_def) => { + check_pallet_number(input_copy.clone().into(), implicit_def.pallets.len()).and_then( + |_| construct_runtime_implicit_to_explicit(input_copy.into(), implicit_def), + ) + } + RuntimeDeclaration::Explicit(explicit_decl) => check_pallet_number( + input_copy.clone().into(), + explicit_decl.pallets.len(), + ) + .and_then(|_| { + construct_runtime_explicit_to_explicit_expanded(input_copy.into(), explicit_decl) + }), + RuntimeDeclaration::ExplicitExpanded(explicit_decl) => { + check_pallet_number(input_copy.into(), explicit_decl.pallets.len()) + .and_then(|_| construct_runtime_final_expansion(explicit_decl)) + } + }; + + let res = res.unwrap_or_else(|e| e.to_compile_error()); + + let res = expander::Expander::new("construct_runtime_modified") + .dry(std::env::var("EXPAND_MACROS").is_err()) + .verbose(true) + .write_to_out_dir(res) + .expect("Does not fail because of IO in OUT_DIR; qed"); + + res.into() +} + +/// All pallets that have implicit pallet parts (ie `System: frame_system`) are +/// expanded with the default parts defined by the pallet's `tt_default_parts` macro. +/// +/// This function transforms the [`RuntimeDeclaration::Implicit`] into +/// [`RuntimeDeclaration::Explicit`] that is not yet fully expanded. +/// +/// For more details, please refer to the root documentation. +fn construct_runtime_implicit_to_explicit( + input: TokenStream2, + definition: ImplicitRuntimeDeclaration, +) -> Result { + let frame_support = generate_access_from_frame_or_crate("frame-support")?; + let mut expansion = + quote::quote!(new_modified_construct_runtime::construct_runtime_modified! { #input }); + for pallet in definition + .pallets + .iter() + .filter(|pallet| pallet.pallet_parts.is_none()) + { + let pallet_path = &pallet.path; + let pallet_name = &pallet.name; + let pallet_instance = pallet + .instance + .as_ref() + .map(|instance| quote::quote!(::<#instance>)); + expansion = quote::quote!( + #frame_support::__private::tt_call! { + macro = [{ #pallet_path::tt_default_parts }] + your_tt_return = [{ #frame_support::__private::tt_return }] + ~~> #frame_support::match_and_insert! { + target = [{ #expansion }] + pattern = [{ #pallet_name: #pallet_path #pallet_instance }] + } + } + ); + } + + Ok(expansion) +} + +/// All pallets that have +/// (I): explicit pallet parts (ie `System: frame_system::{Pallet, Call}`) and +/// (II): are not fully expanded (ie do not include the `Error` expansion part) +/// are fully expanded by including the parts from the pallet's `tt_extra_parts` macro. +/// +/// This function transforms the [`RuntimeDeclaration::Explicit`] that is not yet fully expanded +/// into [`RuntimeDeclaration::ExplicitExpanded`] fully expanded. +/// +/// For more details, please refer to the root documentation. +fn construct_runtime_explicit_to_explicit_expanded( + input: TokenStream2, + definition: ExplicitRuntimeDeclaration, +) -> Result { + let frame_support = generate_access_from_frame_or_crate("frame-support")?; + let mut expansion = + quote::quote!(new_modified_construct_runtime::construct_runtime_modified! { #input }); + for pallet in definition + .pallets + .iter() + .filter(|pallet| !pallet.is_expanded) + { + let pallet_path = &pallet.path; + let pallet_name = &pallet.name; + let pallet_instance = pallet + .instance + .as_ref() + .map(|instance| quote::quote!(::<#instance>)); + expansion = quote::quote!( + #frame_support::__private::tt_call! { + macro = [{ #pallet_path::tt_extra_parts }] + your_tt_return = [{ #frame_support::__private::tt_return }] + ~~> #frame_support::match_and_insert! { + target = [{ #expansion }] + pattern = [{ #pallet_name: #pallet_path #pallet_instance }] + } + } + ); + } + + Ok(expansion) +} + +/// All pallets have explicit definition of parts, this will expand to the runtime declaration. +fn construct_runtime_final_expansion( + definition: ExplicitRuntimeDeclaration, +) -> Result { + let ExplicitRuntimeDeclaration { + name, + pallets, + pallets_token, + where_section, + } = definition; + + let system_pallet = pallets + .iter() + .find(|decl| decl.name == SYSTEM_PALLET_NAME) + .ok_or_else(|| { + syn::Error::new( + pallets_token.span.join(), + "`System` pallet declaration is missing. \ + Please add this line: `System: frame_system::{Pallet, Call, Storage, Config, Event},`", + ) + })?; + if !system_pallet.cfg_pattern.is_empty() { + return Err(syn::Error::new( + system_pallet.name.span(), + "`System` pallet declaration is feature gated, please remove any `#[cfg]` attributes", + )); + } + + let features = pallets + .iter() + .filter_map(|decl| { + (!decl.cfg_pattern.is_empty()).then(|| { + decl.cfg_pattern.iter().flat_map(|attr| { + attr.predicates().filter_map(|pred| match pred { + Predicate::Feature(feat) => Some(feat), + Predicate::Test => Some("test"), + _ => None, + }) + }) + }) + }) + .flatten() + .collect::>(); + + let hidden_crate_name = "construct_runtime_modified"; + let scrate = generate_crate_access(hidden_crate_name, "frame-support"); + let scrate_decl = generate_hidden_includes(hidden_crate_name, "frame-support"); + + let frame_system = generate_access_from_frame_or_crate("frame-system")?; + let block = quote!(<#name as #frame_system::Config>::Block); + let unchecked_extrinsic = quote!(<#block as #scrate::sp_runtime::traits::Block>::Extrinsic); + + let outer_event = + expand::expand_outer_enum(&name, &pallets, &scrate, expand::OuterEnumType::Event)?; + let outer_error = + expand::expand_outer_enum(&name, &pallets, &scrate, expand::OuterEnumType::Error)?; + + let outer_origin = expand::expand_outer_origin(&name, system_pallet, &pallets, &scrate)?; + let all_pallets = decl_all_pallets(&name, pallets.iter(), &features); + let pallet_to_index = decl_pallet_runtime_setup(&name, &pallets, &scrate); + + let dispatch = expand::expand_outer_dispatch(&name, system_pallet, &pallets, &scrate); + let tasks = expand::expand_outer_task(&name, &pallets, &scrate); + let metadata = expand::expand_runtime_metadata( + &name, + &pallets, + &scrate, + &unchecked_extrinsic, + &system_pallet.path, + ); + let outer_config = expand::expand_outer_config(&name, &pallets, &scrate); + let inherent = + expand::expand_outer_inherent(&name, &block, &unchecked_extrinsic, &pallets, &scrate); + let validate_unsigned = expand::expand_outer_validate_unsigned(&name, &pallets, &scrate); + let freeze_reason = expand::expand_outer_freeze_reason(&pallets, &scrate); + let hold_reason = expand::expand_outer_hold_reason(&pallets, &scrate); + let lock_id = expand::expand_outer_lock_id(&pallets, &scrate); + let slash_reason = expand::expand_outer_slash_reason(&pallets, &scrate); + let integrity_test = decl_integrity_test(&scrate); + let static_assertions = decl_static_assertions(&name, &pallets, &scrate); + + let warning = where_section.map_or(None, |where_section| { + Some( + proc_macro_warning::Warning::new_deprecated("WhereSection") + .old("use a `where` clause in `construct_runtime_modified`") + .new( + "use `frame_system::Config` to set the `Block` type and delete this clause. + It is planned to be removed in December 2023", + ) + .help_links(&["https://github.com/paritytech/substrate/pull/14437"]) + .span(where_section.span) + .build_or_panic(), + ) + }); + + let res = quote!( + #warning + + #scrate_decl + + // Prevent UncheckedExtrinsic to print unused warning. + const _: () = { + #[allow(unused)] + type __hidden_use_of_unchecked_extrinsic = #unchecked_extrinsic; + }; + + #[derive( + Clone, Copy, PartialEq, Eq, #scrate::sp_runtime::RuntimeDebug, + #scrate::__private::scale_info::TypeInfo + )] + pub struct #name; + impl #scrate::sp_runtime::traits::GetRuntimeBlockType for #name { + type RuntimeBlock = #block; + } + + // Each runtime must expose the `runtime_metadata()` to fetch the runtime API metadata. + // The function is implemented by calling `impl_runtime_apis!`. + // + // However, the `construct_runtime_modified!` may be called without calling `impl_runtime_apis!`. + // Rely on the `Deref` trait to differentiate between a runtime that implements + // APIs (by macro impl_runtime_apis!) and a runtime that is simply created (by macro construct_runtime_modified!). + // + // Both `InternalConstructRuntime` and `InternalImplRuntimeApis` expose a `runtime_metadata()` function. + // `InternalConstructRuntime` is implemented by the `construct_runtime_modified!` for Runtime references (`& Runtime`), + // while `InternalImplRuntimeApis` is implemented by the `impl_runtime_apis!` for Runtime (`Runtime`). + // + // Therefore, the `Deref` trait will resolve the `runtime_metadata` from `impl_runtime_apis!` + // when both macros are called; and will resolve an empty `runtime_metadata` when only the `construct_runtime_modified!` + // is called. + + #[doc(hidden)] + trait InternalConstructRuntime { + #[inline(always)] + fn runtime_metadata(&self) -> #scrate::__private::sp_std::vec::Vec<#scrate::__private::metadata_ir::RuntimeApiMetadataIR> { + Default::default() + } + } + #[doc(hidden)] + impl InternalConstructRuntime for &#name {} + + #outer_event + + #outer_error + + #outer_origin + + #all_pallets + + #pallet_to_index + + #dispatch + + #tasks + + #metadata + + #outer_config + + #inherent + + #validate_unsigned + + #freeze_reason + + #hold_reason + + #lock_id + + #slash_reason + + #integrity_test + + #static_assertions + ); + + Ok(res) +} + +fn decl_all_pallets<'a>( + runtime: &'a Ident, + pallet_declarations: impl Iterator, + features: &HashSet<&str>, +) -> TokenStream2 { + let mut types = TokenStream2::new(); + + // Every feature set to the pallet names that should be included by this feature set. + let mut features_to_names = features + .iter() + .map(|f| *f) + .powerset() + .map(|feat| (HashSet::from_iter(feat), Vec::new())) + .collect::, Vec<_>)>>(); + + for pallet_declaration in pallet_declarations { + let type_name = &pallet_declaration.name; + let pallet = &pallet_declaration.path; + let mut generics = vec![quote!(#runtime)]; + generics.extend( + pallet_declaration + .instance + .iter() + .map(|name| quote!(#pallet::#name)), + ); + let mut attrs = Vec::new(); + for cfg in &pallet_declaration.cfg_pattern { + let feat = format!("#[cfg({})]\n", cfg.original()); + attrs.extend(TokenStream2::from_str(&feat).expect("was parsed successfully; qed")); + } + let type_decl = quote!( + #(#attrs)* + pub type #type_name = #pallet::Pallet <#(#generics),*>; + ); + types.extend(type_decl); + + if pallet_declaration.cfg_pattern.is_empty() { + for (_, names) in features_to_names.iter_mut() { + names.push(&pallet_declaration.name); + } + } else { + for (feature_set, names) in &mut features_to_names { + // Rust tidbit: if we have multiple `#[cfg]` feature on the same item, then the + // predicates listed in all `#[cfg]` attributes are effectively joined by `and()`, + // meaning that all of them must match in order to activate the item + let is_feature_active = pallet_declaration.cfg_pattern.iter().all(|expr| { + expr.eval(|pred| match pred { + Predicate::Feature(f) => feature_set.contains(f), + Predicate::Test => feature_set.contains(&"test"), + _ => false, + }) + }); + + if is_feature_active { + names.push(&pallet_declaration.name); + } + } + } + } + + // All possible features. This will be used below for the empty feature set. + let mut all_features = features_to_names + .iter() + .flat_map(|f| f.0.iter().cloned()) + .collect::>(); + let attribute_to_names = features_to_names + .into_iter() + .map(|(mut features, names)| { + // If this is the empty feature set, it needs to be changed to negate all available + // features. So, we ensure that there is some type declared when all features are not + // enabled. + if features.is_empty() { + let test_cfg = all_features.remove("test").then_some(quote!(test)).into_iter(); + let features = all_features.iter(); + let attr = quote!(#[cfg(all( #(not(#test_cfg)),* #(not(feature = #features)),* ))]); + + (attr, names) + } else { + let test_cfg = features.remove("test").then_some(quote!(test)).into_iter(); + let disabled_features = all_features.difference(&features); + let features = features.iter(); + let attr = quote!(#[cfg(all( #(#test_cfg,)* #(feature = #features,)* #(not(feature = #disabled_features)),* ))]); + + (attr, names) + } + }) + .collect::>(); + + let all_pallets_without_system = attribute_to_names.iter().map(|(attr, names)| { + let names = names.iter().filter(|n| **n != SYSTEM_PALLET_NAME); + quote! { + #attr + /// All pallets included in the runtime as a nested tuple of types. + /// Excludes the System pallet. + pub type AllPalletsWithoutSystem = ( #(#names,)* ); + } + }); + + let all_pallets_with_system = attribute_to_names.iter().map(|(attr, names)| { + quote! { + #attr + /// All pallets included in the runtime as a nested tuple of types. + pub type AllPalletsWithSystem = ( #(#names,)* ); + } + }); + + quote!( + #types + + #( #all_pallets_with_system )* + + #( #all_pallets_without_system )* + ) +} +fn decl_pallet_runtime_setup( + runtime: &Ident, + pallet_declarations: &[Pallet], + scrate: &TokenStream2, +) -> TokenStream2 { + let names = pallet_declarations + .iter() + .map(|d| &d.name) + .collect::>(); + let name_strings = pallet_declarations.iter().map(|d| d.name.to_string()); + let name_hashes = pallet_declarations + .iter() + .map(|d| two128_str(&d.name.to_string())); + let module_names = pallet_declarations.iter().map(|d| d.path.module_name()); + let indices = pallet_declarations + .iter() + .map(|pallet| pallet.index as usize); + let pallet_structs = pallet_declarations + .iter() + .map(|pallet| { + let path = &pallet.path; + match pallet.instance.as_ref() { + Some(inst) => quote!(#path::Pallet<#runtime, #path::#inst>), + None => quote!(#path::Pallet<#runtime>), + } + }) + .collect::>(); + let pallet_attrs = pallet_declarations + .iter() + .map(|pallet| { + pallet + .cfg_pattern + .iter() + .fold(TokenStream2::new(), |acc, pattern| { + let attr = TokenStream2::from_str(&format!("#[cfg({})]", pattern.original())) + .expect("was successfully parsed before; qed"); + quote! { + #acc + #attr + } + }) + }) + .collect::>(); + + quote!( + /// Provides an implementation of `PalletInfo` to provide information + /// about the pallet setup in the runtime. + pub struct PalletInfo; + + impl #scrate::traits::PalletInfo for PalletInfo { + + fn index() -> Option { + let type_id = #scrate::__private::sp_std::any::TypeId::of::

(); + #( + #pallet_attrs + if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() { + return Some(#indices) + } + )* + + None + } + + fn name() -> Option<&'static str> { + let type_id = #scrate::__private::sp_std::any::TypeId::of::

(); + #( + #pallet_attrs + if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() { + return Some(#name_strings) + } + )* + + None + } + + fn name_hash() -> Option<[u8; 16]> { + let type_id = #scrate::__private::sp_std::any::TypeId::of::

(); + #( + #pallet_attrs + if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() { + return Some(#name_hashes) + } + )* + + None + } + + fn module_name() -> Option<&'static str> { + let type_id = #scrate::__private::sp_std::any::TypeId::of::

(); + #( + #pallet_attrs + if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() { + return Some(#module_names) + } + )* + + None + } + + fn crate_version() -> Option<#scrate::traits::CrateVersion> { + let type_id = #scrate::__private::sp_std::any::TypeId::of::

(); + #( + #pallet_attrs + if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() { + return Some( + <#pallet_structs as #scrate::traits::PalletInfoAccess>::crate_version() + ) + } + )* + + None + } + } + ) +} + +fn decl_integrity_test(scrate: &TokenStream2) -> TokenStream2 { + quote!( + #[cfg(test)] + mod __construct_runtime_integrity_test { + use super::*; + + #[test] + pub fn runtime_integrity_tests() { + #scrate::__private::sp_tracing::try_init_simple(); + ::integrity_test(); + } + } + ) +} + +fn decl_static_assertions( + runtime: &Ident, + pallet_decls: &[Pallet], + scrate: &TokenStream2, +) -> TokenStream2 { + let error_encoded_size_check = pallet_decls.iter().map(|decl| { + let path = &decl.path; + let assert_message = format!( + "The maximum encoded size of the error type in the `{}` pallet exceeds \ + `MAX_MODULE_ERROR_ENCODED_SIZE`", + decl.name, + ); + + quote! { + #scrate::__private::tt_call! { + macro = [{ #path::tt_error_token }] + your_tt_return = [{ #scrate::__private::tt_return }] + ~~> #scrate::assert_error_encoded_size! { + path = [{ #path }] + runtime = [{ #runtime }] + assert_message = [{ #assert_message }] + } + } + } + }); + + quote! { + #(#error_encoded_size_check)* + } +} + +fn check_pallet_number(input: TokenStream2, pallet_num: usize) -> Result<()> { + let max_pallet_num = { + if cfg!(feature = "tuples-96") { + 96 + } else if cfg!(feature = "tuples-128") { + 128 + } else { + 64 + } + }; + + if pallet_num > max_pallet_num { + let no_feature = max_pallet_num == 128; + return Err(syn::Error::new( + input.span(), + format!( + "{} To increase this limit, enable the tuples-{} feature of [frame_support]. {}", + "The number of pallets exceeds the maximum number of tuple elements.", + max_pallet_num + 32, + if no_feature { + "If the feature does not exist - it needs to be implemented." + } else { + "" + }, + ), + )); + } + + Ok(()) +} + +pub(crate) fn two128_str(s: &str) -> TokenStream2 { + bytes_to_array(sp_core_hashing::twox_128(s.as_bytes()).into_iter()) +} + +pub(crate) fn bytes_to_array(bytes: impl IntoIterator) -> TokenStream2 { + let bytes = bytes.into_iter(); + + quote!( + [ #( #bytes ),* ] + ) + .into() +} diff --git a/new-modified-construct-runtime/src/construct_runtime/parse.rs b/new-modified-construct-runtime/src/construct_runtime/parse.rs new file mode 100644 index 00000000..4e7458be --- /dev/null +++ b/new-modified-construct-runtime/src/construct_runtime/parse.rs @@ -0,0 +1,839 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use frame_support_procedural_tools::syn_ext as ext; +use proc_macro2::{Span, TokenStream}; +use quote::ToTokens; +use std::collections::{HashMap, HashSet}; +use syn::{ + ext::IdentExt, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + spanned::Spanned, + token, Attribute, Error, Ident, Path, Result, Token, +}; + +mod keyword { + syn::custom_keyword!(Block); + syn::custom_keyword!(NodeBlock); + syn::custom_keyword!(UncheckedExtrinsic); + syn::custom_keyword!(Pallet); + syn::custom_keyword!(Call); + syn::custom_keyword!(Storage); + syn::custom_keyword!(Event); + syn::custom_keyword!(Error); + syn::custom_keyword!(Config); + syn::custom_keyword!(Origin); + syn::custom_keyword!(Inherent); + syn::custom_keyword!(ValidateUnsigned); + syn::custom_keyword!(FreezeReason); + syn::custom_keyword!(HoldReason); + syn::custom_keyword!(Task); + syn::custom_keyword!(LockId); + syn::custom_keyword!(SlashReason); + syn::custom_keyword!(exclude_parts); + syn::custom_keyword!(use_parts); + syn::custom_keyword!(expanded); +} + +/// Declaration of a runtime. +/// +/// Pallet declare their part either explicitly or implicitly (using no part declaration) +/// If all pallet have explicit parts then the runtime declaration is explicit, otherwise it is +/// implicit. +#[derive(Debug)] +pub enum RuntimeDeclaration { + Implicit(ImplicitRuntimeDeclaration), + Explicit(ExplicitRuntimeDeclaration), + ExplicitExpanded(ExplicitRuntimeDeclaration), +} + +/// Declaration of a runtime with some pallet with implicit declaration of parts. +#[derive(Debug)] +pub struct ImplicitRuntimeDeclaration { + pub name: Ident, + pub where_section: Option, + pub pallets: Vec, +} + +/// Declaration of a runtime with all pallet having explicit declaration of parts. +#[derive(Debug)] +pub struct ExplicitRuntimeDeclaration { + pub name: Ident, + pub where_section: Option, + pub pallets: Vec, + pub pallets_token: token::Brace, +} + +impl Parse for RuntimeDeclaration { + fn parse(input: ParseStream) -> Result { + input.parse::()?; + + // Support either `enum` or `struct`. + if input.peek(Token![struct]) { + input.parse::()?; + } else { + input.parse::()?; + } + + let name = input.parse::()?; + let where_section = if input.peek(token::Where) { + Some(input.parse()?) + } else { + None + }; + let pallets = + input.parse::>>()?; + let pallets_token = pallets.token; + + match convert_pallets(pallets.content.inner.into_iter().collect())? { + PalletsConversion::Implicit(pallets) => { + Ok(RuntimeDeclaration::Implicit(ImplicitRuntimeDeclaration { + name, + where_section, + pallets, + })) + } + PalletsConversion::Explicit(pallets) => { + Ok(RuntimeDeclaration::Explicit(ExplicitRuntimeDeclaration { + name, + where_section, + pallets, + pallets_token, + })) + } + PalletsConversion::ExplicitExpanded(pallets) => Ok( + RuntimeDeclaration::ExplicitExpanded(ExplicitRuntimeDeclaration { + name, + where_section, + pallets, + pallets_token, + }), + ), + } + } +} + +#[derive(Debug)] +pub struct WhereSection { + pub span: Span, + pub block: syn::TypePath, + pub node_block: syn::TypePath, + pub unchecked_extrinsic: syn::TypePath, +} + +impl Parse for WhereSection { + fn parse(input: ParseStream) -> Result { + input.parse::()?; + + let mut definitions = Vec::new(); + while !input.peek(token::Brace) { + let definition: WhereDefinition = input.parse()?; + definitions.push(definition); + if !input.peek(Token![,]) { + if !input.peek(token::Brace) { + return Err(input.error("Expected `,` or `{`")); + } + break; + } + input.parse::()?; + } + let block = remove_kind(input, WhereKind::Block, &mut definitions)?.value; + let node_block = remove_kind(input, WhereKind::NodeBlock, &mut definitions)?.value; + let unchecked_extrinsic = + remove_kind(input, WhereKind::UncheckedExtrinsic, &mut definitions)?.value; + if let Some(WhereDefinition { + ref kind_span, + ref kind, + .. + }) = definitions.first() + { + let msg = format!( + "`{:?}` was declared above. Please use exactly one declaration for `{:?}`.", + kind, kind + ); + return Err(Error::new(*kind_span, msg)); + } + Ok(Self { + span: input.span(), + block, + node_block, + unchecked_extrinsic, + }) + } +} + +#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)] +pub enum WhereKind { + Block, + NodeBlock, + UncheckedExtrinsic, +} + +#[derive(Debug)] +pub struct WhereDefinition { + pub kind_span: Span, + pub kind: WhereKind, + pub value: syn::TypePath, +} + +impl Parse for WhereDefinition { + fn parse(input: ParseStream) -> Result { + let lookahead = input.lookahead1(); + let (kind_span, kind) = if lookahead.peek(keyword::Block) { + (input.parse::()?.span(), WhereKind::Block) + } else if lookahead.peek(keyword::NodeBlock) { + ( + input.parse::()?.span(), + WhereKind::NodeBlock, + ) + } else if lookahead.peek(keyword::UncheckedExtrinsic) { + ( + input.parse::()?.span(), + WhereKind::UncheckedExtrinsic, + ) + } else { + return Err(lookahead.error()); + }; + + Ok(Self { + kind_span, + kind, + value: { + let _: Token![=] = input.parse()?; + input.parse()? + }, + }) + } +} + +/// The declaration of a pallet. +#[derive(Debug, Clone)] +pub struct PalletDeclaration { + /// Is this pallet fully expanded? + pub is_expanded: bool, + /// The name of the pallet, e.g.`System` in `System: frame_system`. + pub name: Ident, + /// Optional attributes tagged right above a pallet declaration. + pub attrs: Vec, + /// Optional fixed index, e.g. `MyPallet ... = 3,`. + pub index: Option, + /// The path of the pallet, e.g. `frame_system` in `System: frame_system`. + pub path: PalletPath, + /// The instance of the pallet, e.g. `Instance1` in `Council: pallet_collective::`. + pub instance: Option, + /// The declared pallet parts, + /// e.g. `Some([Pallet, Call])` for `System: system::{Pallet, Call}` + /// or `None` for `System: system`. + pub pallet_parts: Option>, + /// The specified parts, either use_parts or exclude_parts. + pub specified_parts: SpecifiedParts, +} + +/// The possible declaration of pallet parts to use. +#[derive(Debug, Clone)] +pub enum SpecifiedParts { + /// Use all the pallet parts except those specified. + Exclude(Vec), + /// Use only the specified pallet parts. + Use(Vec), + /// Use the all the pallet parts. + All, +} + +impl Parse for PalletDeclaration { + fn parse(input: ParseStream) -> Result { + let attrs = input.call(Attribute::parse_outer)?; + + let name = input.parse()?; + let _: Token![:] = input.parse()?; + let path = input.parse()?; + + // Parse for instance. + let instance = if input.peek(Token![::]) && input.peek3(Token![<]) { + let _: Token![::] = input.parse()?; + let _: Token![<] = input.parse()?; + let res = Some(input.parse()?); + let _: Token![>] = input.parse()?; + res + } else if !(input.peek(Token![::]) && input.peek3(token::Brace)) + && !input.peek(keyword::expanded) + && !input.peek(keyword::exclude_parts) + && !input.peek(keyword::use_parts) + && !input.peek(Token![=]) + && !input.peek(Token![,]) + && !input.is_empty() + { + return Err(input.error( + "Unexpected tokens, expected one of `::$ident` `::{`, `exclude_parts`, `use_parts`, `=`, `,`", + )); + } else { + None + }; + + // Check if the pallet is fully expanded. + let (is_expanded, extra_parts) = if input.peek(keyword::expanded) { + let _: keyword::expanded = input.parse()?; + let _: Token![::] = input.parse()?; + (true, parse_pallet_parts(input)?) + } else { + (false, vec![]) + }; + + // Parse for explicit parts + let pallet_parts = if input.peek(Token![::]) && input.peek3(token::Brace) { + let _: Token![::] = input.parse()?; + let mut parts = parse_pallet_parts(input)?; + parts.extend(extra_parts.into_iter()); + Some(parts) + } else if !input.peek(keyword::exclude_parts) + && !input.peek(keyword::use_parts) + && !input.peek(Token![=]) + && !input.peek(Token![,]) + && !input.is_empty() + { + return Err(input.error( + "Unexpected tokens, expected one of `::{`, `exclude_parts`, `use_parts`, `=`, `,`", + )); + } else { + is_expanded.then_some(extra_parts) + }; + + // Parse for specified parts + let specified_parts = if input.peek(keyword::exclude_parts) { + let _: keyword::exclude_parts = input.parse()?; + SpecifiedParts::Exclude(parse_pallet_parts_no_generic(input)?) + } else if input.peek(keyword::use_parts) { + let _: keyword::use_parts = input.parse()?; + SpecifiedParts::Use(parse_pallet_parts_no_generic(input)?) + } else if !input.peek(Token![=]) && !input.peek(Token![,]) && !input.is_empty() { + return Err(input.error("Unexpected tokens, expected one of `exclude_parts`, `=`, `,`")); + } else { + SpecifiedParts::All + }; + + // Parse for pallet index + let index = if input.peek(Token![=]) { + input.parse::()?; + let index = input.parse::()?; + let index = index.base10_parse::()?; + Some(index) + } else if !input.peek(Token![,]) && !input.is_empty() { + return Err(input.error("Unexpected tokens, expected one of `=`, `,`")); + } else { + None + }; + + Ok(Self { + is_expanded, + attrs, + name, + path, + instance, + pallet_parts, + specified_parts, + index, + }) + } +} + +/// A struct representing a path to a pallet. `PalletPath` is almost identical to the standard +/// Rust path with a few restrictions: +/// - No leading colons allowed +/// - Path segments can only consist of identifers separated by colons +#[derive(Debug, Clone)] +pub struct PalletPath { + pub inner: Path, +} + +impl PalletPath { + pub fn module_name(&self) -> String { + self.inner + .segments + .iter() + .fold(String::new(), |mut acc, segment| { + if !acc.is_empty() { + acc.push_str("::"); + } + acc.push_str(&segment.ident.to_string()); + acc + }) + } +} + +impl Parse for PalletPath { + fn parse(input: ParseStream) -> Result { + let mut res = PalletPath { + inner: Path { + leading_colon: None, + segments: Punctuated::new(), + }, + }; + + let lookahead = input.lookahead1(); + if lookahead.peek(Token![crate]) + || lookahead.peek(Token![self]) + || lookahead.peek(Token![super]) + || lookahead.peek(Ident) + { + let ident = input.call(Ident::parse_any)?; + res.inner.segments.push(ident.into()); + } else { + return Err(lookahead.error()); + } + + while input.peek(Token![::]) && input.peek3(Ident) { + input.parse::()?; + let ident = input.parse::()?; + res.inner.segments.push(ident.into()); + } + Ok(res) + } +} + +impl quote::ToTokens for PalletPath { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.inner.to_tokens(tokens); + } +} + +/// Parse [`PalletPart`]'s from a braces enclosed list that is split by commas, e.g. +/// +/// `{ Call, Event }` +fn parse_pallet_parts(input: ParseStream) -> Result> { + let pallet_parts: ext::Braces> = input.parse()?; + + let mut resolved = HashSet::new(); + for part in pallet_parts.content.inner.iter() { + if !resolved.insert(part.name()) { + let msg = format!( + "`{}` was already declared before. Please remove the duplicate declaration", + part.name(), + ); + return Err(Error::new(part.keyword.span(), msg)); + } + } + + Ok(pallet_parts.content.inner.into_iter().collect()) +} + +#[derive(Debug, Clone)] +pub enum PalletPartKeyword { + Pallet(keyword::Pallet), + Call(keyword::Call), + Storage(keyword::Storage), + Event(keyword::Event), + Error(keyword::Error), + Config(keyword::Config), + Origin(keyword::Origin), + Inherent(keyword::Inherent), + ValidateUnsigned(keyword::ValidateUnsigned), + FreezeReason(keyword::FreezeReason), + HoldReason(keyword::HoldReason), + Task(keyword::Task), + LockId(keyword::LockId), + SlashReason(keyword::SlashReason), +} + +impl Parse for PalletPartKeyword { + fn parse(input: ParseStream) -> Result { + let lookahead = input.lookahead1(); + + if lookahead.peek(keyword::Pallet) { + Ok(Self::Pallet(input.parse()?)) + } else if lookahead.peek(keyword::Call) { + Ok(Self::Call(input.parse()?)) + } else if lookahead.peek(keyword::Storage) { + Ok(Self::Storage(input.parse()?)) + } else if lookahead.peek(keyword::Event) { + Ok(Self::Event(input.parse()?)) + } else if lookahead.peek(keyword::Error) { + Ok(Self::Error(input.parse()?)) + } else if lookahead.peek(keyword::Config) { + Ok(Self::Config(input.parse()?)) + } else if lookahead.peek(keyword::Origin) { + Ok(Self::Origin(input.parse()?)) + } else if lookahead.peek(keyword::Inherent) { + Ok(Self::Inherent(input.parse()?)) + } else if lookahead.peek(keyword::ValidateUnsigned) { + Ok(Self::ValidateUnsigned(input.parse()?)) + } else if lookahead.peek(keyword::FreezeReason) { + Ok(Self::FreezeReason(input.parse()?)) + } else if lookahead.peek(keyword::HoldReason) { + Ok(Self::HoldReason(input.parse()?)) + } else if lookahead.peek(keyword::Task) { + Ok(Self::Task(input.parse()?)) + } else if lookahead.peek(keyword::LockId) { + Ok(Self::LockId(input.parse()?)) + } else if lookahead.peek(keyword::SlashReason) { + Ok(Self::SlashReason(input.parse()?)) + } else { + Err(lookahead.error()) + } + } +} + +impl PalletPartKeyword { + /// Returns the name of `Self`. + fn name(&self) -> &'static str { + match self { + Self::Pallet(_) => "Pallet", + Self::Call(_) => "Call", + Self::Storage(_) => "Storage", + Self::Event(_) => "Event", + Self::Error(_) => "Error", + Self::Config(_) => "Config", + Self::Origin(_) => "Origin", + Self::Inherent(_) => "Inherent", + Self::ValidateUnsigned(_) => "ValidateUnsigned", + Self::FreezeReason(_) => "FreezeReason", + Self::HoldReason(_) => "HoldReason", + Self::Task(_) => "Task", + Self::LockId(_) => "LockId", + Self::SlashReason(_) => "SlashReason", + } + } + + /// Returns `true` if this pallet part is allowed to have generic arguments. + fn allows_generic(&self) -> bool { + Self::all_generic_arg().iter().any(|n| *n == self.name()) + } + + /// Returns the names of all pallet parts that allow to have a generic argument. + fn all_generic_arg() -> &'static [&'static str] { + &["Event", "Error", "Origin", "Config", "Task"] + } +} + +impl ToTokens for PalletPartKeyword { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + Self::Pallet(inner) => inner.to_tokens(tokens), + Self::Call(inner) => inner.to_tokens(tokens), + Self::Storage(inner) => inner.to_tokens(tokens), + Self::Event(inner) => inner.to_tokens(tokens), + Self::Error(inner) => inner.to_tokens(tokens), + Self::Config(inner) => inner.to_tokens(tokens), + Self::Origin(inner) => inner.to_tokens(tokens), + Self::Inherent(inner) => inner.to_tokens(tokens), + Self::ValidateUnsigned(inner) => inner.to_tokens(tokens), + Self::FreezeReason(inner) => inner.to_tokens(tokens), + Self::HoldReason(inner) => inner.to_tokens(tokens), + Self::Task(inner) => inner.to_tokens(tokens), + Self::LockId(inner) => inner.to_tokens(tokens), + Self::SlashReason(inner) => inner.to_tokens(tokens), + } + } +} + +#[derive(Debug, Clone)] +pub struct PalletPart { + pub keyword: PalletPartKeyword, + pub generics: syn::Generics, +} + +impl Parse for PalletPart { + fn parse(input: ParseStream) -> Result { + let keyword: PalletPartKeyword = input.parse()?; + + let generics: syn::Generics = input.parse()?; + if !generics.params.is_empty() && !keyword.allows_generic() { + let valid_generics = PalletPart::format_names(PalletPartKeyword::all_generic_arg()); + let msg = format!( + "`{}` is not allowed to have generics. \ + Only the following pallets are allowed to have generics: {}.", + keyword.name(), + valid_generics, + ); + return Err(syn::Error::new(keyword.span(), msg)); + } + + Ok(Self { keyword, generics }) + } +} + +impl PalletPart { + pub fn format_names(names: &[&'static str]) -> String { + let res: Vec<_> = names.iter().map(|s| format!("`{}`", s)).collect(); + res.join(", ") + } + + /// The name of this pallet part. + pub fn name(&self) -> &'static str { + self.keyword.name() + } +} + +fn remove_kind( + input: ParseStream, + kind: WhereKind, + definitions: &mut Vec, +) -> Result { + if let Some(pos) = definitions.iter().position(|d| d.kind == kind) { + Ok(definitions.remove(pos)) + } else { + let msg = format!( + "Missing associated type for `{:?}`. Add `{:?}` = ... to where section.", + kind, kind + ); + Err(input.error(msg)) + } +} + +/// The declaration of a part without its generics +#[derive(Debug, Clone)] +pub struct PalletPartNoGeneric { + keyword: PalletPartKeyword, +} + +impl Parse for PalletPartNoGeneric { + fn parse(input: ParseStream) -> Result { + Ok(Self { + keyword: input.parse()?, + }) + } +} + +/// Parse [`PalletPartNoGeneric`]'s from a braces enclosed list that is split by commas, e.g. +/// +/// `{ Call, Event }` +fn parse_pallet_parts_no_generic(input: ParseStream) -> Result> { + let pallet_parts: ext::Braces> = + input.parse()?; + + let mut resolved = HashSet::new(); + for part in pallet_parts.content.inner.iter() { + if !resolved.insert(part.keyword.name()) { + let msg = format!( + "`{}` was already declared before. Please remove the duplicate declaration", + part.keyword.name(), + ); + return Err(Error::new(part.keyword.span(), msg)); + } + } + + Ok(pallet_parts.content.inner.into_iter().collect()) +} + +/// The final definition of a pallet with the resulting fixed index and explicit parts. +#[derive(Debug, Clone)] +pub struct Pallet { + /// Is this pallet fully expanded? + pub is_expanded: bool, + /// The name of the pallet, e.g.`System` in `System: frame_system`. + pub name: Ident, + /// Either automatically infered, or defined (e.g. `MyPallet ... = 3,`). + pub index: u8, + /// The path of the pallet, e.g. `frame_system` in `System: frame_system`. + pub path: PalletPath, + /// The instance of the pallet, e.g. `Instance1` in `Council: pallet_collective::`. + pub instance: Option, + /// The pallet parts to use for the pallet. + pub pallet_parts: Vec, + /// Expressions specified inside of a #[cfg] attribute. + pub cfg_pattern: Vec, +} + +impl Pallet { + /// Get resolved pallet parts + pub fn pallet_parts(&self) -> &[PalletPart] { + &self.pallet_parts + } + + /// Find matching parts + pub fn find_part(&self, name: &str) -> Option<&PalletPart> { + self.pallet_parts.iter().find(|part| part.name() == name) + } + + /// Return whether pallet contains part + pub fn exists_part(&self, name: &str) -> bool { + self.find_part(name).is_some() + } +} + +/// Result of a conversion of a declaration of pallets. +/// +/// # State Transitions +/// +/// ```ignore +/// +----------+ +----------+ +------------------+ +/// | Implicit | -> | Explicit | -> | ExplicitExpanded | +/// +----------+ +----------+ +------------------+ +/// ``` +enum PalletsConversion { + /// Pallets implicitely declare parts. + /// + /// `System: frame_system`. + Implicit(Vec), + /// Pallets explicitly declare parts. + /// + /// `System: frame_system::{Pallet, Call}` + /// + /// However, for backwards compatibility with Polkadot/Kusama + /// we must propagate some other parts to the pallet by default. + Explicit(Vec), + /// Pallets explicitly declare parts that are fully expanded. + /// + /// This is the end state that contains extra parts included by + /// default by Subtrate. + /// + /// `System: frame_system expanded::{Error} ::{Pallet, Call}` + /// + /// For this example, the `Pallet`, `Call` and `Error` parts are collected. + ExplicitExpanded(Vec), +} + +/// Convert from the parsed pallet declaration to their final information. +/// +/// Check if all pallet have explicit declaration of their parts, if so then assign index to each +/// pallet using same rules as rust for fieldless enum. I.e. implicit are assigned number +/// incrementedly from last explicit or 0. +fn convert_pallets(pallets: Vec) -> syn::Result { + if pallets.iter().any(|pallet| pallet.pallet_parts.is_none()) { + return Ok(PalletsConversion::Implicit(pallets)); + } + + let mut indices = HashMap::new(); + let mut last_index: Option = None; + let mut names = HashMap::new(); + let mut is_expanded = true; + + let pallets = pallets + .into_iter() + .map(|pallet| { + let final_index = match pallet.index { + Some(i) => i, + None => last_index + .map_or(Some(0), |i| i.checked_add(1)) + .ok_or_else(|| { + let msg = "Pallet index doesn't fit into u8, index is 256"; + syn::Error::new(pallet.name.span(), msg) + })?, + }; + + last_index = Some(final_index); + + if let Some(used_pallet) = indices.insert(final_index, pallet.name.clone()) { + let msg = format!( + "Pallet indices are conflicting: Both pallets {} and {} are at index {}", + used_pallet, pallet.name, final_index, + ); + let mut err = syn::Error::new(used_pallet.span(), &msg); + err.combine(syn::Error::new(pallet.name.span(), msg)); + return Err(err); + } + + if let Some(used_pallet) = names.insert(pallet.name.clone(), pallet.name.span()) { + let msg = "Two pallets with the same name!"; + + let mut err = syn::Error::new(used_pallet, &msg); + err.combine(syn::Error::new(pallet.name.span(), &msg)); + return Err(err); + } + + let mut pallet_parts = pallet.pallet_parts.expect("Checked above"); + + let available_parts = pallet_parts + .iter() + .map(|part| part.keyword.name()) + .collect::>(); + + // Check parts are correctly specified + match &pallet.specified_parts { + SpecifiedParts::Exclude(parts) | SpecifiedParts::Use(parts) => { + for part in parts { + if !available_parts.contains(part.keyword.name()) { + let msg = format!( + "Invalid pallet part specified, the pallet `{}` doesn't have the \ + `{}` part. Available parts are: {}.", + pallet.name, + part.keyword.name(), + pallet_parts.iter().fold(String::new(), |fold, part| { + if fold.is_empty() { + format!("`{}`", part.keyword.name()) + } else { + format!("{}, `{}`", fold, part.keyword.name()) + } + }) + ); + return Err(syn::Error::new(part.keyword.span(), msg)); + } + } + } + SpecifiedParts::All => (), + } + + // Set only specified parts. + match pallet.specified_parts { + SpecifiedParts::Exclude(excluded_parts) => pallet_parts.retain(|part| { + !excluded_parts + .iter() + .any(|excluded_part| excluded_part.keyword.name() == part.keyword.name()) + }), + SpecifiedParts::Use(used_parts) => pallet_parts.retain(|part| { + used_parts + .iter() + .any(|use_part| use_part.keyword.name() == part.keyword.name()) + }), + SpecifiedParts::All => (), + } + + let cfg_pattern = pallet + .attrs + .iter() + .map(|attr| { + if attr + .path() + .segments + .first() + .map_or(false, |s| s.ident != "cfg") + { + let msg = "Unsupported attribute, only #[cfg] is supported on pallet \ + declarations in `construct_runtime_modified`"; + return Err(syn::Error::new(attr.span(), msg)); + } + + attr.parse_args_with(|input: syn::parse::ParseStream| { + // Required, otherwise the parse stream doesn't advance and will result in + // an error. + let input = input.parse::()?; + cfg_expr::Expression::parse(&input.to_string()) + .map_err(|e| syn::Error::new(attr.span(), e.to_string())) + }) + }) + .collect::>>()?; + + is_expanded &= pallet.is_expanded; + + Ok(Pallet { + is_expanded: pallet.is_expanded, + name: pallet.name, + index: final_index, + path: pallet.path, + instance: pallet.instance, + cfg_pattern, + pallet_parts, + }) + }) + .collect::>>()?; + + if is_expanded { + Ok(PalletsConversion::ExplicitExpanded(pallets)) + } else { + Ok(PalletsConversion::Explicit(pallets)) + } +} diff --git a/new-modified-construct-runtime/src/lib.rs b/new-modified-construct-runtime/src/lib.rs new file mode 100644 index 00000000..59ec2c1b --- /dev/null +++ b/new-modified-construct-runtime/src/lib.rs @@ -0,0 +1,28 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Proc macro of Support code for the runtime. + +#![recursion_limit = "512"] +mod construct_runtime; + +use proc_macro::TokenStream; + +#[proc_macro] +pub fn construct_runtime_modified(input: TokenStream) -> TokenStream { + construct_runtime::construct_runtime_modified(input) +} diff --git a/new-modified-construct-runtime/tools/Cargo.toml b/new-modified-construct-runtime/tools/Cargo.toml new file mode 100644 index 00000000..4eeedbdd --- /dev/null +++ b/new-modified-construct-runtime/tools/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "Proc macro helpers for procedural macros" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +proc-macro-crate = "1.1.3" +proc-macro2 = "1.0.56" +quote = "1.0.26" +syn = { version = "2.0.16", features = ["full", "visit", "extra-traits"] } +frame-support-procedural-tools-derive = { version = "3.0.0", path = "./derive" } diff --git a/new-modified-construct-runtime/tools/derive/Cargo.toml b/new-modified-construct-runtime/tools/derive/Cargo.toml new file mode 100644 index 00000000..70fb0a9b --- /dev/null +++ b/new-modified-construct-runtime/tools/derive/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/polkadot-sdk.git/" +description = "Use to derive parsing for parsing struct." + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[lib] +proc-macro = true + +[dependencies] +proc-macro2 = "1.0.56" +quote = { version = "1.0.28", features = ["proc-macro"] } +syn = { version = "2.0.48", features = ["extra-traits", "full", "parsing", "proc-macro"] } diff --git a/new-modified-construct-runtime/tools/derive/src/lib.rs b/new-modified-construct-runtime/tools/derive/src/lib.rs new file mode 100644 index 00000000..93c03ca3 --- /dev/null +++ b/new-modified-construct-runtime/tools/derive/src/lib.rs @@ -0,0 +1,172 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// tag::description[] +//! Use to derive parsing for parsing struct. +// end::description[] + +#![recursion_limit = "128"] + +use proc_macro::TokenStream; +use proc_macro2::Span; +use quote::quote; +use syn::parse_macro_input; + +pub(crate) fn fields_idents( + fields: impl Iterator, +) -> impl Iterator { + fields.enumerate().map(|(ix, field)| { + field.ident.map(|i| quote! {#i}).unwrap_or_else(|| { + let f_ix: syn::Ident = syn::Ident::new(&format!("f_{}", ix), Span::call_site()); + quote!( #f_ix ) + }) + }) +} + +pub(crate) fn fields_access( + fields: impl Iterator, +) -> impl Iterator { + fields.enumerate().map(|(ix, field)| { + field.ident.map(|i| quote!( #i )).unwrap_or_else(|| { + let f_ix: syn::Index = syn::Index { + index: ix as u32, + span: Span::call_site(), + }; + quote!( #f_ix ) + }) + }) +} + +/// self defined parsing struct. +/// not meant for any struct, just for fast +/// parse implementation. +#[proc_macro_derive(Parse)] +pub fn derive_parse(input: TokenStream) -> TokenStream { + let item = parse_macro_input!(input as syn::Item); + match item { + syn::Item::Struct(input) => derive_parse_struct(input), + _ => TokenStream::new(), // ignore + } +} + +fn derive_parse_struct(input: syn::ItemStruct) -> TokenStream { + let syn::ItemStruct { + ident, + generics, + fields, + .. + } = input; + let field_names = { + let name = fields_idents(fields.iter().map(Clone::clone)); + quote! { + #( + #name, + )* + } + }; + let field = fields_idents(fields.iter().map(Clone::clone)); + let tokens = quote! { + impl #generics syn::parse::Parse for #ident #generics { + fn parse(input: syn::parse::ParseStream) -> syn::parse::Result { + #( + let #field = input.parse()?; + )* + Ok(Self { + #field_names + }) + } + } + }; + tokens.into() +} + +/// self defined parsing struct or enum. +/// not meant for any struct/enum, just for fast +/// parse implementation. +/// For enum: +/// it only output fields (empty field act as a None). +#[proc_macro_derive(ToTokens)] +pub fn derive_totokens(input: TokenStream) -> TokenStream { + let item = parse_macro_input!(input as syn::Item); + match item { + syn::Item::Enum(input) => derive_totokens_enum(input), + syn::Item::Struct(input) => derive_totokens_struct(input), + _ => TokenStream::new(), // ignore + } +} + +fn derive_totokens_struct(input: syn::ItemStruct) -> TokenStream { + let syn::ItemStruct { + ident, + generics, + fields, + .. + } = input; + + let fields = fields_access(fields.iter().map(Clone::clone)); + let tokens = quote! { + + impl #generics quote::ToTokens for #ident #generics { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + #( + self.#fields.to_tokens(tokens); + )* + } + } + + }; + tokens.into() +} + +fn derive_totokens_enum(input: syn::ItemEnum) -> TokenStream { + let syn::ItemEnum { + ident, + generics, + variants, + .. + } = input; + let variants = variants.iter().map(|v| { + let v_ident = v.ident.clone(); + let fields_build = if v.fields.iter().count() > 0 { + let fields_id = fields_idents(v.fields.iter().map(Clone::clone)); + quote!( (#(#fields_id), *) ) + } else { + quote!() + }; + let field = fields_idents(v.fields.iter().map(Clone::clone)); + quote! { + #ident::#v_ident #fields_build => { + #( + #field.to_tokens(tokens); + )* + }, + } + }); + let tokens = quote! { + impl #generics quote::ToTokens for #ident #generics { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + match self { + #( + #variants + )* + } + } + } + }; + + tokens.into() +} diff --git a/new-modified-construct-runtime/tools/src/lib.rs b/new-modified-construct-runtime/tools/src/lib.rs new file mode 100644 index 00000000..4d15163c --- /dev/null +++ b/new-modified-construct-runtime/tools/src/lib.rs @@ -0,0 +1,169 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// tag::description[] +//! Proc macro helpers for procedural macros +// end::description[] + +// reexport proc macros +pub use frame_support_procedural_tools_derive::*; + +use proc_macro_crate::{crate_name, FoundCrate}; +use quote::quote; +use syn::parse::Error; + +pub mod syn_ext; + +// FIXME #1569, remove the following functions, which are copied from sp-api-macros +use proc_macro2::{Span, TokenStream}; +use syn::Ident; + +fn generate_hidden_includes_mod_name(unique_id: &str) -> Ident { + Ident::new( + &format!("sp_api_hidden_includes_{}", unique_id), + Span::call_site(), + ) +} + +/// Generates the access to the `frame-support` crate. +pub fn generate_crate_access(unique_id: &str, def_crate: &str) -> TokenStream { + if std::env::var("CARGO_PKG_NAME").unwrap() == def_crate { + let frame_support = match generate_access_from_frame_or_crate("frame-support") { + Ok(c) => c, + Err(e) => return e.into_compile_error().into(), + }; + quote::quote!(#frame_support) + } else { + let mod_name = generate_hidden_includes_mod_name(unique_id); + quote::quote!( self::#mod_name::hidden_include ) + } +} + +/// Check if a path is using the `frame` crate or not. +/// +/// This will usually check the output of [`generate_access_from_frame_or_crate`]. +/// We want to know if whatever the `path` takes us to, is exported from `frame` or not. In that +/// case `path` would start with `frame`, something like `frame::x::y:z`. +pub fn is_using_frame_crate(path: &syn::Path) -> bool { + path.segments + .first() + .map(|s| s.ident == "frame") + .unwrap_or(false) +} + +/// Generate the crate access for the crate using 2018 syntax. +/// +/// If `frame` is in scope, it will use `frame::deps::`. Else, it will try and find +/// `` directly. +pub fn generate_access_from_frame_or_crate(def_crate: &str) -> Result { + if let Some(path) = get_frame_crate_path(def_crate) { + Ok(path) + } else { + let ident = match crate_name(def_crate) { + Ok(FoundCrate::Itself) => { + let name = def_crate.to_string().replace("-", "_"); + Ok(syn::Ident::new(&name, Span::call_site())) + } + Ok(FoundCrate::Name(name)) => Ok(Ident::new(&name, Span::call_site())), + Err(e) => Err(Error::new(Span::call_site(), e)), + }?; + + Ok(syn::Path::from(ident)) + } +} + +/// Generates the hidden includes that are required to make the macro independent from its scope. +pub fn generate_hidden_includes(unique_id: &str, def_crate: &str) -> TokenStream { + let mod_name = generate_hidden_includes_mod_name(unique_id); + + if let Some(path) = get_frame_crate_path(def_crate) { + quote::quote!( + #[doc(hidden)] + mod #mod_name { + pub use #path as hidden_include; + } + ) + } else { + match crate_name(def_crate) { + Ok(FoundCrate::Itself) => quote!(), + Ok(FoundCrate::Name(name)) => { + let name = Ident::new(&name, Span::call_site()); + quote::quote!( + #[doc(hidden)] + mod #mod_name { + pub use #name as hidden_include; + } + ) + } + Err(e) => { + let err = Error::new(Span::call_site(), e).to_compile_error(); + quote!( #err ) + } + } + } +} + +/// Generates the path to the frame crate deps. +fn get_frame_crate_path(def_crate: &str) -> Option { + // This does not work if the frame crate is renamed. + if let Ok(FoundCrate::Name(name)) = crate_name(&"frame") { + let path = format!( + "{}::deps::{}", + name, + def_crate.to_string().replace("-", "_") + ); + Some(syn::parse_str::(&path).expect("is a valid path; qed")) + } else { + None + } +} + +// fn to remove white spaces around string types +// (basically whitespaces around tokens) +pub fn clean_type_string(input: &str) -> String { + input + .replace(" ::", "::") + .replace(":: ", "::") + .replace(" ,", ",") + .replace(" ;", ";") + .replace(" [", "[") + .replace("[ ", "[") + .replace(" ]", "]") + .replace(" (", "(") + .replace("( ", "(") + .replace(" )", ")") + .replace(" <", "<") + .replace("< ", "<") + .replace(" >", ">") +} + +/// Return all doc attributes literals found. +pub fn get_doc_literals(attrs: &[syn::Attribute]) -> Vec { + attrs + .iter() + .filter_map(|attr| { + if let syn::Meta::NameValue(meta) = &attr.meta { + meta.path + .get_ident() + .filter(|ident| *ident == "doc") + .map(|_| meta.value.clone()) + } else { + None + } + }) + .collect() +} diff --git a/new-modified-construct-runtime/tools/src/syn_ext.rs b/new-modified-construct-runtime/tools/src/syn_ext.rs new file mode 100644 index 00000000..4d4d6a31 --- /dev/null +++ b/new-modified-construct-runtime/tools/src/syn_ext.rs @@ -0,0 +1,241 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// tag::description[] +//! Extension to syn types, mainly for parsing +// end::description[] + +use frame_support_procedural_tools_derive::{Parse, ToTokens}; +use proc_macro2::{TokenStream, TokenTree}; +use quote::ToTokens; +use std::iter::once; +use syn::{ + parse::{Parse, ParseStream, Result}, + visit::{self, Visit}, + Ident, +}; + +/// stop parsing here getting remaining token as content +/// Warn duplicate stream (part of) +#[derive(Parse, ToTokens, Debug)] +pub struct StopParse { + pub inner: TokenStream, +} + +// inner macro really dependant on syn naming convention, do not export +macro_rules! groups_impl { + ($name:ident, $tok:ident, $deli:ident, $parse:ident) => { + #[derive(Debug)] + pub struct $name

{ + pub token: syn::token::$tok, + pub content: P, + } + + impl Parse for $name

{ + fn parse(input: ParseStream) -> Result { + let content; + let token = syn::$parse!(content in input); + let content = content.parse()?; + Ok($name { token, content }) + } + } + + impl ToTokens for $name

{ + fn to_tokens(&self, tokens: &mut TokenStream) { + let mut inner_stream = TokenStream::new(); + self.content.to_tokens(&mut inner_stream); + let token_tree: proc_macro2::TokenTree = + proc_macro2::Group::new(proc_macro2::Delimiter::$deli, inner_stream).into(); + tokens.extend(once(token_tree)); + } + } + + impl Clone for $name

{ + fn clone(&self) -> Self { + Self { token: self.token.clone(), content: self.content.clone() } + } + } + }; +} + +groups_impl!(Braces, Brace, Brace, braced); +groups_impl!(Brackets, Bracket, Bracket, bracketed); +groups_impl!(Parens, Paren, Parenthesis, parenthesized); + +#[derive(Debug)] +pub struct PunctuatedInner { + pub inner: syn::punctuated::Punctuated, + pub variant: V, +} + +#[derive(Debug, Clone)] +pub struct NoTrailing; + +#[derive(Debug, Clone)] +pub struct Trailing; + +pub type Punctuated = PunctuatedInner; + +pub type PunctuatedTrailing = PunctuatedInner; + +impl Parse for PunctuatedInner { + fn parse(input: ParseStream) -> Result { + Ok(PunctuatedInner { + inner: syn::punctuated::Punctuated::parse_separated_nonempty(input)?, + variant: Trailing, + }) + } +} + +impl Parse for PunctuatedInner { + fn parse(input: ParseStream) -> Result { + Ok(PunctuatedInner { + inner: syn::punctuated::Punctuated::parse_terminated(input)?, + variant: NoTrailing, + }) + } +} + +impl ToTokens for PunctuatedInner { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.inner.to_tokens(tokens) + } +} + +impl Clone for PunctuatedInner { + fn clone(&self) -> Self { + Self { + inner: self.inner.clone(), + variant: self.variant.clone(), + } + } +} + +/// Note that syn Meta is almost fine for use case (lacks only `ToToken`) +#[derive(Debug, Clone)] +pub struct Meta { + pub inner: syn::Meta, +} + +impl Parse for Meta { + fn parse(input: ParseStream) -> Result { + Ok(Meta { + inner: syn::Meta::parse(input)?, + }) + } +} + +impl ToTokens for Meta { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self.inner { + syn::Meta::Path(ref path) => path.to_tokens(tokens), + syn::Meta::List(ref l) => l.to_tokens(tokens), + syn::Meta::NameValue(ref n) => n.to_tokens(tokens), + } + } +} + +#[derive(Debug)] +pub struct OuterAttributes { + pub inner: Vec, +} + +impl Parse for OuterAttributes { + fn parse(input: ParseStream) -> Result { + let inner = syn::Attribute::parse_outer(input)?; + Ok(OuterAttributes { inner }) + } +} + +impl ToTokens for OuterAttributes { + fn to_tokens(&self, tokens: &mut TokenStream) { + for att in self.inner.iter() { + att.to_tokens(tokens); + } + } +} + +pub fn extract_type_option(typ: &syn::Type) -> Option { + if let syn::Type::Path(ref path) = typ { + let v = path.path.segments.last()?; + if v.ident == "Option" { + // Option has only one type argument in angle bracket. + if let syn::PathArguments::AngleBracketed(a) = &v.arguments { + if let syn::GenericArgument::Type(typ) = a.args.last()? { + return Some(typ.clone()); + } + } + } + } + + None +} + +/// Auxiliary structure to check if a given `Ident` is contained in an ast. +struct ContainsIdent<'a> { + ident: &'a Ident, + result: bool, +} + +impl<'ast> ContainsIdent<'ast> { + fn visit_tokenstream(&mut self, stream: TokenStream) { + stream.into_iter().for_each(|tt| match tt { + TokenTree::Ident(id) => self.visit_ident(&id), + TokenTree::Group(ref group) => self.visit_tokenstream(group.stream()), + _ => {} + }) + } + + fn visit_ident(&mut self, ident: &Ident) { + if ident == self.ident { + self.result = true; + } + } +} + +impl<'ast> Visit<'ast> for ContainsIdent<'ast> { + fn visit_ident(&mut self, input: &'ast Ident) { + self.visit_ident(input); + } + + fn visit_macro(&mut self, input: &'ast syn::Macro) { + self.visit_tokenstream(input.tokens.clone()); + visit::visit_macro(self, input); + } +} + +/// Check if a `Type` contains the given `Ident`. +pub fn type_contains_ident(typ: &syn::Type, ident: &Ident) -> bool { + let mut visit = ContainsIdent { + result: false, + ident, + }; + + visit::visit_type(&mut visit, typ); + visit.result +} + +/// Check if a `Expr` contains the given `Ident`. +pub fn expr_contains_ident(expr: &syn::Expr, ident: &Ident) -> bool { + let mut visit = ContainsIdent { + result: false, + ident, + }; + + visit::visit_expr(&mut visit, expr); + visit.result +} diff --git a/tinkernet/Cargo.lock b/tinkernet/Cargo.lock index f897eb7d..fe609f81 100644 --- a/tinkernet/Cargo.lock +++ b/tinkernet/Cargo.lock @@ -36,25 +36,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", -] - [[package]] name = "aead" version = "0.5.2" @@ -65,29 +46,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", -] - [[package]] name = "aes" version = "0.8.3" @@ -99,59 +57,25 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", -] - [[package]] name = "aes-gcm" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" dependencies = [ - "aead 0.5.2", - "aes 0.8.3", + "aead", + "aes", "cipher 0.4.4", - "ctr 0.9.2", - "ghash 0.5.0", - "subtle", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", + "ctr", + "ghash", + "subtle 2.4.1", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom 0.2.10", "once_cell", @@ -160,14 +84,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "getrandom 0.2.10", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -179,6 +104,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "always-assert" version = "0.1.3" @@ -211,16 +142,15 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] @@ -250,12 +180,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -274,10 +204,305 @@ dependencies = [ ] [[package]] -name = "arc-swap" -version = "1.6.0" +name = "aquamarine" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" +dependencies = [ + "include_dir", + "itertools 0.10.5", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-models-ext", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-models-ext", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-models-ext", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff", + "ark-models-ext", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-models-ext", + "ark-std", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-scale" +version = "0.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-secret-scalar" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "ark-transcript", + "digest 0.10.7", + "getrandom_or_panic", + "zeroize", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "ark-transcript" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] [[package]] name = "array-bytes" @@ -297,6 +522,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -309,48 +543,20 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" -[[package]] -name = "asn1-rs" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" -dependencies = [ - "asn1-rs-derive 0.1.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.25", -] - [[package]] name = "asn1-rs" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive 0.4.0", + "asn1-rs-derive", "asn1-rs-impl", "displaydoc", "nom", "num-traits", "rusticata-macros", "thiserror", - "time 0.3.25", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", + "time", ] [[package]] @@ -389,8 +595,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +dependencies = [ + "concurrent-queue", + "event-listener 5.2.0", + "event-listener-strategy 0.5.1", "futures-core", + "pin-project-lite 0.2.14", +] + +[[package]] +name = "async-executor" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +dependencies = [ + "async-lock 2.7.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.0", + "futures-lite 1.13.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.7.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", ] [[package]] @@ -399,49 +644,120 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.7.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", + "polling 2.8.0", "rustix 0.37.23", "slab", "socket2 0.4.9", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.2.0", + "parking", + "polling 3.5.0", + "rustix 0.38.32", + "slab", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "async-lock" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ - "event-listener", + "event-listener 2.5.3", ] [[package]] -name = "async-recursion" -version = "1.0.4" +name = "async-lock" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.28", + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite 0.2.14", +] + +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.7.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.32", + "windows-sys 0.48.0", ] +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.2", + "async-lock 2.7.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.32", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + [[package]] name = "async-trait" -version = "0.1.72" +version = "0.1.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" +checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -454,25 +770,20 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", ] [[package]] -name = "atomic-waker" -version = "1.1.1" +name = "atomic-take" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" [[package]] -name = "atty" -version = "0.2.14" +name = "atomic-waker" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "autocfg" @@ -495,18 +806,35 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "bandersnatch_vrfs" +version = "0.0.4" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-serialize", + "ark-std", + "dleq_vrf", + "fflonk", + "merlin 3.0.0", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "ring 0.1.0", + "sha2 0.10.7", + "sp-ark-bls12-381", + "sp-ark-ed-on-bls12-381-bandersnatch", + "zeroize", +] + [[package]] name = "base-x" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "base16ct" version = "0.2.0" @@ -543,7 +871,7 @@ dependencies = [ [[package]] name = "binary-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "hash-db", "log", @@ -576,9 +904,28 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.28", + "syn 2.0.58", +] + +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", ] +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitflags" version = "1.3.2" @@ -587,9 +934,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitvec" @@ -599,10 +946,23 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac 0.7.0", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + [[package]] name = "blake2" version = "0.10.6" @@ -612,6 +972,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.1" @@ -636,16 +1006,15 @@ dependencies = [ [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", "arrayvec 0.7.4", "cc", "cfg-if", "constant_time_eq 0.3.0", - "digest 0.10.7", ] [[package]] @@ -654,7 +1023,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -678,16 +1047,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - [[package]] name = "block-padding" version = "0.1.5" @@ -698,16 +1057,26 @@ dependencies = [ ] [[package]] -name = "block-padding" -version = "0.2.1" +name = "blocking" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel 2.2.0", + "async-lock 3.3.0", + "async-task", + "fastrand 2.0.0", + "futures-io", + "futures-lite 2.2.0", + "piper", + "tracing", +] [[package]] name = "bounded-collections" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6" +checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" dependencies = [ "log", "parity-scale-codec", @@ -724,12 +1093,32 @@ dependencies = [ "thiserror", ] +[[package]] +name = "bp-xcm-bridge-hub-router" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + [[package]] name = "bs58" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" version = "1.6.0" @@ -796,6 +1185,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c2-chacha" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" +dependencies = [ + "cipher 0.2.5", + "ppv-lite86", +] + [[package]] name = "camino" version = "1.1.6" @@ -830,25 +1229,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.81" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c6b2562119bf28c3439f7f02db99faf0aa1a8cdfe5772a2ee155d32227239f0" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" dependencies = [ "jobserver", "libc", ] -[[package]] -name = "ccm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" -dependencies = [ - "aead 0.3.2", - "cipher 0.2.5", - "subtle", -] - [[package]] name = "cexpr" version = "0.6.0" @@ -860,9 +1248,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.4" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" dependencies = [ "smallvec", ] @@ -879,55 +1267,63 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + [[package]] name = "chacha20" -version = "0.8.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher 0.4.4", "cpufeatures", - "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ - "aead 0.4.3", + "aead", "chacha20", - "cipher 0.3.0", + "cipher 0.4.4", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.52.4", ] [[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 0.17.0", "serde", "unsigned-varint", ] @@ -941,15 +1337,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.7", -] - [[package]] name = "cipher" version = "0.4.4" @@ -958,6 +1345,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] @@ -982,44 +1370,44 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.19" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", + "terminal_size", ] [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "coarsetime" @@ -1051,15 +1439,37 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "6.2.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686" dependencies = [ - "strum", - "strum_macros", + "strum 0.25.0", + "strum_macros 0.25.3", "unicode-width", ] +[[package]] +name = "common" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "fflonk", + "getrandom_or_panic", + "merlin 3.0.0", + "rand_chacha 0.3.1", +] + +[[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" @@ -1088,6 +1498,32 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.2.6" @@ -1100,6 +1536,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + [[package]] name = "convert_case" version = "0.4.0" @@ -1250,28 +1692,13 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "itertools", + "itertools 0.10.5", "log", "smallvec", "wasmparser", "wasmtime-types", ] -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" - [[package]] name = "crc32fast" version = "1.3.2" @@ -1340,18 +1767,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-bigint" version = "0.5.2" @@ -1360,7 +1775,7 @@ checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", - "subtle", + "subtle 2.4.1", "zeroize", ] @@ -1377,31 +1792,32 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.8.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "generic-array 0.14.7", - "subtle", + "generic-array 0.12.4", + "subtle 1.0.0", ] [[package]] name = "crypto-mac" -version = "0.11.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.7", - "subtle", + "subtle 2.4.1", ] [[package]] -name = "ctr" -version = "0.8.0" +name = "crypto-mac" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "cipher 0.3.0", + "generic-array 0.14.7", + "subtle 2.4.1", ] [[package]] @@ -1416,13 +1832,15 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "clap", "parity-scale-codec", "sc-chain-spec", "sc-cli", + "sc-client-api", "sc-service", + "sp-blockchain", "sp-core", "sp-runtime", "url", @@ -1431,7 +1849,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -1454,25 +1872,29 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-client-collator", "cumulus-client-consensus-common", "cumulus-client-consensus-proposer", + "cumulus-client-parachain-inherent", + "cumulus-primitives-aura", "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", "cumulus-relay-chain-interface", "futures", "parity-scale-codec", "polkadot-node-primitives", + "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", "sc-client-api", "sc-consensus", "sc-consensus-aura", + "sc-consensus-babe", "sc-consensus-slots", "sc-telemetry", + "schnellru", "sp-api", "sp-application-crypto", "sp-block-builder", @@ -1492,7 +1914,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -1505,11 +1927,14 @@ dependencies = [ "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", @@ -1518,7 +1943,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-proposer" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "anyhow", "async-trait", @@ -1533,7 +1958,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -1542,7 +1967,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "polkadot-node-primitives", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "sc-client-api", "sp-blockchain", @@ -1553,10 +1978,34 @@ dependencies = [ "tracing", ] +[[package]] +name = "cumulus-client-parachain-inherent" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", + "parity-scale-codec", + "sc-client-api", + "scale-info", + "sp-api", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std 8.0.0", + "sp-storage 13.0.0", + "sp-trie", + "tracing", +] + [[package]] name = "cumulus-client-pov-recovery" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1580,7 +2029,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", @@ -1588,6 +2037,7 @@ dependencies = [ "cumulus-client-network", "cumulus-client-pov-recovery", "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", "cumulus-relay-chain-minimal-node", @@ -1615,25 +2065,28 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "cumulus-pallet-parachain-system", "frame-support", "frame-system", "pallet-aura", + "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-consensus-aura", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "cumulus-pallet-dmp-queue" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", + "frame-benchmarking", "frame-support", "frame-system", "log", @@ -1641,54 +2094,59 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "cumulus-pallet-parachain-system" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", "environmental", + "frame-benchmarking", "frame-support", "frame-system", "impl-trait-for-tuples", "log", + "pallet-message-queue", "parity-scale-codec", - "polkadot-parachain", + "polkadot-parachain-primitives", + "polkadot-runtime-parachains", "scale-info", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-inherents", "sp-io", "sp-runtime", "sp-state-machine", - "sp-std", + "sp-std 8.0.0", "sp-trie", "sp-version", - "xcm", + "staging-xcm", + "trie-db", ] [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "cumulus-pallet-session-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -1696,13 +2154,13 @@ dependencies = [ "pallet-session", "parity-scale-codec", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "cumulus-pallet-xcm" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1711,106 +2169,128 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "bounded-collections", + "bp-xcm-bridge-hub-router", "cumulus-primitives-core", "frame-benchmarking", "frame-support", "frame-system", "log", + "pallet-message-queue", "parity-scale-codec", "polkadot-runtime-common", - "rand_chacha 0.3.1", + "polkadot-runtime-parachains", "scale-info", + "sp-core", "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "cumulus-primitives-aura" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-primitives", + "sp-api", + "sp-consensus-aura", + "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "cumulus-primitives-core" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "scale-info", "sp-api", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-trie", - "xcm", + "staging-xcm", ] [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "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-std 8.0.0", + "sp-trie", +] + +[[package]] +name = "cumulus-primitives-proof-size-hostfunction" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "sp-externalities 0.19.0", + "sp-runtime-interface 17.0.0", "sp-trie", - "tracing", ] [[package]] name = "cumulus-primitives-timestamp" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", "futures", "parity-scale-codec", "sp-inherents", - "sp-std", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "cumulus-primitives-utility" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", "frame-support", "log", + "pallet-xcm-benchmarks", "parity-scale-codec", "polkadot-runtime-common", + "polkadot-runtime-parachains", "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-builder", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1818,7 +2298,6 @@ dependencies = [ "futures", "futures-timer", "polkadot-cli", - "polkadot-client", "polkadot-service", "sc-cli", "sc-client-api", @@ -1835,7 +2314,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1853,7 +2332,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "array-bytes 6.1.0", "async-trait", @@ -1861,12 +2340,14 @@ dependencies = [ "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "lru 0.9.0", + "parking_lot 0.12.1", "polkadot-availability-recovery", "polkadot-collator-protocol", "polkadot-core-primitives", "polkadot-network-bridge", "polkadot-node-collation-generation", + "polkadot-node-core-chain-api", + "polkadot-node-core-prospective-parachains", "polkadot-node-core-runtime-api", "polkadot-node-network-protocol", "polkadot-node-subsystem-util", @@ -1884,6 +2365,7 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-runtime", + "substrate-prometheus-endpoint", "tokio", "tracing", ] @@ -1891,29 +2373,38 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", + "either", "futures", "futures-timer", "jsonrpsee", - "lru 0.9.0", "parity-scale-codec", + "pin-project", "polkadot-overseer", + "rand 0.8.5", "sc-client-api", "sc-rpc-api", "sc-service", + "schnellru", "serde", "serde_json", + "smoldot", + "smoldot-light", "sp-api", "sp-authority-discovery", "sp-consensus-babe", "sp-core", + "sp-runtime", "sp-state-machine", - "sp-storage", + "sp-storage 13.0.0", + "sp-version", + "thiserror", "tokio", + "tokio-util", "tracing", "url", ] @@ -1921,14 +2412,15 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "polkadot-primitives", "sp-runtime", "sp-state-machine", - "sp-std", + "sp-std 8.0.0", + "sp-trie", ] [[package]] @@ -1940,7 +2432,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle", + "subtle 2.4.1", "zeroize", ] @@ -1953,21 +2445,48 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle", + "subtle 2.4.1", "zeroize", ] [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", - "subtle", + "platforms", + "rustc_version", + "subtle 2.4.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", "zeroize", ] @@ -1995,7 +2514,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -2012,42 +2531,7 @@ checksum = "b8fcfa71f66c8563c4fa9dd2bb68368d50267856f831ac5d85367e0805f9606c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[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", + "syn 2.0.58", ] [[package]] @@ -2076,17 +2560,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - [[package]] name = "der" version = "0.7.7" @@ -2097,27 +2570,13 @@ dependencies = [ "zeroize", ] -[[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" -dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der-parser" version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", "displaydoc", "nom", "num-bigint", @@ -2144,44 +2603,24 @@ dependencies = [ [[package]] name = "derive-syn-parse" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "darling", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "derive_builder_macro" -version = "0.11.2" +name = "derive-syn-parse" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ - "derive_builder_core", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.58", ] [[package]] @@ -2230,14 +2669,14 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle", + "subtle 2.4.1", ] [[package]] name = "directories" -version = "4.0.1" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ "dirs-sys", ] @@ -2254,13 +2693,14 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.7" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -2282,7 +2722,50 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", +] + +[[package]] +name = "dleq_vrf" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-scale", + "ark-secret-scalar", + "ark-serialize", + "ark-std", + "ark-transcript", + "arrayvec 0.7.4", + "zeroize", +] + +[[package]] +name = "docify" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +dependencies = [ + "common-path", + "derive-syn-parse 0.2.0", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.58", + "termcolor", + "toml 0.8.12", + "walkdir", ] [[package]] @@ -2326,21 +2809,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" - -[[package]] -name = "ecdsa" -version = "0.14.8" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" @@ -2348,34 +2819,36 @@ version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "der 0.7.7", + "der", "digest 0.10.7", - "elliptic-curve 0.13.5", - "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "signature 1.6.4", + "pkcs8", + "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.2", "ed25519", - "rand 0.7.3", + "rand_core 0.6.4", "serde", - "sha2 0.9.9", + "sha2 0.10.7", + "subtle 2.4.1", "zeroize", ] @@ -2394,49 +2867,42 @@ dependencies = [ ] [[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" +name = "ed25519-zebra" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" 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", + "curve25519-dalek 4.1.2", + "ed25519", + "hashbrown 0.14.0", + "hex", "rand_core 0.6.4", - "sec1 0.3.0", - "subtle", + "sha2 0.10.7", "zeroize", ] +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + [[package]] name = "elliptic-curve" version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.2", + "base16ct", + "crypto-bigint", "digest 0.10.7", - "ff 0.13.0", + "ff", "generic-array 0.14.7", - "group 0.13.0", - "pkcs8 0.10.2", + "group", + "pkcs8", "rand_core 0.6.4", - "sec1 0.7.3", - "subtle", + "sec1", + "subtle 2.4.1", "zeroize", ] @@ -2452,7 +2918,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2475,31 +2941,18 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "enumn" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b893c4eb2dc092c811165f84dc7447fae16fb66521717968c34c509b39b1a5c5" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "syn 2.0.58", ] [[package]] @@ -2529,75 +2982,92 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "cc", - "libc", + "concurrent-queue", + "parking", + "pin-project-lite 0.2.14", ] [[package]] name = "event-listener" -version = "2.5.3" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.14", +] [[package]] -name = "exit-future" -version = "0.2.0" +name = "event-listener" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" dependencies = [ - "futures", + "concurrent-queue", + "parking", + "pin-project-lite 0.2.14", ] [[package]] -name = "expander" -version = "0.0.4" +name = "event-listener-strategy" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" dependencies = [ - "blake3", - "fs-err", - "proc-macro2", - "quote", + "event-listener 4.0.3", + "pin-project-lite 0.2.14", ] [[package]] -name = "expander" -version = "0.0.6" +name = "event-listener-strategy" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3774182a5df13c3d1690311ad32fbe913feef26baba609fa2dd5f72042bd2ab6" +checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" dependencies = [ - "blake2", - "fs-err", - "proc-macro2", - "quote", + "event-listener 5.2.0", + "pin-project-lite 0.2.14", +] + +[[package]] +name = "exit-future" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +dependencies = [ + "futures", ] [[package]] name = "expander" -version = "1.0.0" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" +checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" dependencies = [ - "blake2", + "blake3", "fs-err", "proc-macro2", "quote", - "syn 1.0.109", ] [[package]] @@ -2606,11 +3076,11 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7" dependencies = [ - "blake2", + "blake2 0.10.6", "fs-err", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -2658,7 +3128,7 @@ checksum = "f5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bd" dependencies = [ "expander 0.0.4", "indexmap 1.9.3", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2667,38 +3137,42 @@ dependencies = [ [[package]] name = "fdlimit" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", + "thiserror", ] [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", - "subtle", + "subtle 2.4.1", ] [[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +name = "fflonk" +version = "0.1.0" +source = "git+https://github.com/w3f/fflonk#1e854f35e9a65d08b11a86291405cdc95baa0a35" dependencies = [ - "rand_core 0.6.4", - "subtle", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "merlin 3.0.0", ] [[package]] name = "fiat-crypto" -version = "0.1.20" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "c007b1ae3abe1cb6f85a16305acd418b7ca6343b953633fee2b76d8f108b830f" [[package]] name = "file-per-thread-logger" @@ -2706,7 +3180,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger 0.10.0", + "env_logger", "log", ] @@ -2785,7 +3259,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", ] @@ -2808,7 +3282,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-support-procedural", @@ -2824,19 +3298,19 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", "static_assertions", ] [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "Inflector", - "array-bytes 4.2.0", + "array-bytes 6.1.0", "chrono", "clap", "comfy-table", @@ -2845,7 +3319,7 @@ dependencies = [ "frame-system", "gethostname", "handlebars", - "itertools", + "itertools 0.10.5", "lazy_static", "linked-hash-map", "log", @@ -2865,14 +3339,15 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-database", - "sp-externalities", + "sp-externalities 0.19.0", "sp-inherents", + "sp-io", "sp-keystore", "sp-runtime", "sp-state-machine", - "sp-std", - "sp-storage", + "sp-storage 13.0.0", "sp-trie", + "sp-wasm-interface 14.0.0", "thiserror", "thousands", ] @@ -2880,18 +3355,18 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2902,31 +3377,32 @@ dependencies = [ "sp-core", "sp-npos-elections", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", "frame-try-runtime", + "log", "parity-scale-codec", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 8.0.0", + "sp-tracing 10.0.0", ] [[package]] name = "frame-metadata" -version = "15.1.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2937,9 +3413,8 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "async-recursion", "futures", "indicatif", "jsonrpsee", @@ -2949,6 +3424,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", + "sp-state-machine", "spinners", "substrate-rpc-client", "tokio", @@ -2958,51 +3434,61 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "aquamarine", + "array-bytes 6.1.0", "bitflags 1.3.2", + "docify", "environmental", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", "log", - "once_cell", + "macro_magic", "parity-scale-codec", "paste", "scale-info", "serde", + "serde_json", "smallvec", "sp-api", "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", - "sp-debug-derive", + "sp-debug-derive 8.0.0", + "sp-genesis-builder", "sp-inherents", "sp-io", + "sp-metadata-ir", "sp-runtime", "sp-staking", "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-std 8.0.0", + "sp-tracing 10.0.0", "sp-weights", + "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "Inflector", "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43)", - "itertools", + "derive-syn-parse 0.1.5", + "expander 2.0.0", + "frame-support-procedural-tools 4.0.0-dev (git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0)", + "itertools 0.10.5", + "macro_magic", "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.28", + "sp-core-hashing", + "syn 2.0.58", ] [[package]] @@ -3010,22 +3496,22 @@ name = "frame-support-procedural-tools" version = "4.0.0-dev" dependencies = [ "frame-support-procedural-tools-derive 3.0.0", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43)", - "proc-macro-crate", + "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0)", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -3034,25 +3520,26 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cfg-if", + "docify", "frame-support", "log", "parity-scale-codec", @@ -3061,7 +3548,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-version", "sp-weights", ] @@ -3069,7 +3556,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3078,13 +3565,13 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "sp-api", @@ -3093,13 +3580,13 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "parity-scale-codec", "sp-api", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] @@ -3120,11 +3607,11 @@ dependencies = [ [[package]] name = "fs4" -version = "0.6.6" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" +checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" dependencies = [ - "rustix 0.38.6", + "rustix 0.38.32", "windows-sys 0.48.0", ] @@ -3194,10 +3681,20 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.14", +] + [[package]] name = "futures-macro" version = "0.3.28" @@ -3206,7 +3703,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -3217,7 +3714,7 @@ checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", "rustls 0.20.8", - "webpki 0.22.0", + "webpki", ] [[package]] @@ -3251,7 +3748,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "pin-utils", "slab", ] @@ -3320,13 +3817,13 @@ dependencies = [ ] [[package]] -name = "ghash" -version = "0.4.4" +name = "getrandom_or_panic" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", + "rand 0.8.5", + "rand_core 0.6.4", ] [[package]] @@ -3336,7 +3833,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.6.1", + "polyval", ] [[package]] @@ -3369,26 +3866,15 @@ dependencies = [ "regex", ] -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff", "rand_core 0.6.4", - "subtle", + "subtle 2.4.1", ] [[package]] @@ -3445,7 +3931,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.8", ] [[package]] @@ -3454,7 +3940,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", ] [[package]] @@ -3462,6 +3948,20 @@ name = "hashbrown" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", + "serde", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.0", +] [[package]] name = "heck" @@ -3470,13 +3970,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -3581,7 +4078,7 @@ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", ] [[package]] @@ -3624,7 +4121,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "socket2 0.4.9", "tokio", "tower-service", @@ -3644,10 +4141,26 @@ dependencies = [ "rustls 0.20.8", "rustls-native-certs", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", "webpki-roots", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.10", + "rustls-native-certs", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -3671,12 +4184,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.2.3" @@ -3714,7 +4221,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" dependencies = [ - "async-io", + "async-io 1.13.0", "core-foundation", "fnv", "futures", @@ -3756,6 +4263,25 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2", + "quote", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -3777,6 +4303,12 @@ dependencies = [ "hashbrown 0.14.0", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "indicatif" version = "0.17.6" @@ -3823,29 +4355,10 @@ dependencies = [ "num-traits", ] -[[package]] -name = "interceptor" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" -dependencies = [ - "async-trait", - "bytes", - "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] - [[package]] name = "invarch-primitives" version = "0.1.0-dev" -source = "git+https://github.com/InvArch/InvArch-Frames?rev=07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f#07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f" +source = "git+https://github.com/InvArch/InvArch-Frames?rev=cd32136741df27328818a76dd979bad55f837396#cd32136741df27328818a76dd979bad55f837396" dependencies = [ "frame-system", "parity-scale-codec", @@ -3853,7 +4366,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] @@ -3862,7 +4375,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", "windows-sys 0.48.0", ] @@ -3892,14 +4405,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] -name = "is-terminal" -version = "0.4.9" +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.32", + "windows-sys 0.48.0", +] + +[[package]] +name = "is_executable" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8" dependencies = [ - "hermit-abi 0.3.2", - "rustix 0.38.6", - "windows-sys 0.48.0", + "winapi", ] [[package]] @@ -3911,6 +4433,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -3965,7 +4496,7 @@ dependencies = [ "soketto", "thiserror", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", "tokio-util", "tracing", "webpki-roots", @@ -3979,7 +4510,7 @@ checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" dependencies = [ "anyhow", "arrayvec 0.7.4", - "async-lock", + "async-lock 2.7.0", "async-trait", "beef", "futures-channel", @@ -4007,7 +4538,7 @@ checksum = "cc345b0a43c6bc49b947ebeb936e886a419ee3d894421790c969cc56040542ad" dependencies = [ "async-trait", "hyper", - "hyper-rustls", + "hyper-rustls 0.23.2", "jsonrpsee-core", "jsonrpsee-types", "rustc-hash", @@ -4024,8 +4555,8 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" dependencies = [ - "heck", - "proc-macro-crate", + "heck 0.4.1", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -4086,8 +4617,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", - "ecdsa 0.16.8", - "elliptic-curve 0.13.5", + "ecdsa", + "elliptic-curve", "once_cell", "sha2 0.10.7", ] @@ -4102,117 +4633,10 @@ dependencies = [ ] [[package]] -name = "kusama-runtime" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -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", - "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-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 = "kusama-runtime-constants" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -dependencies = [ - "frame-support", - "polkadot-primitives", - "polkadot-runtime-common", - "smallvec", - "sp-core", - "sp-runtime", - "sp-weights", -] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" [[package]] name = "kvdb" @@ -4247,6 +4671,17 @@ dependencies = [ "smallvec", ] +[[package]] +name = "landlock" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9baa9eeb6e315942429397e617a190f4fdc696ef1ee0342939d641029cbb4ea7" +dependencies = [ + "enumflags2", + "libc", + "thiserror", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -4261,9 +4696,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -4275,12 +4710,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "libm" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" - [[package]] name = "libm" version = "0.2.7" @@ -4289,9 +4718,9 @@ checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "libp2p" -version = "0.51.3" +version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" +checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" dependencies = [ "bytes", "futures", @@ -4314,7 +4743,6 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-wasm-ext", - "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", "multiaddr", @@ -4411,11 +4839,11 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d584751cecb2aabaa56106be6be91338a60a0f4e420cf2af639204f596fc1" +checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" dependencies = [ - "bs58", + "bs58 0.4.0", "ed25519-dalek", "log", "multiaddr", @@ -4595,7 +5023,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ - "heck", + "heck 0.4.1", "quote", "syn 1.0.109", ] @@ -4626,12 +5054,12 @@ dependencies = [ "futures-rustls", "libp2p-core", "libp2p-identity", - "rcgen 0.10.0", - "ring", + "rcgen", + "ring 0.16.20", "rustls 0.20.8", "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", + "webpki", + "x509-parser", "yasna", ] @@ -4649,37 +5077,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8" -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", - "thiserror", - "tinytemplate", - "tokio", - "tokio-util", - "webrtc", -] - [[package]] name = "libp2p-websocket" version = "0.41.0" @@ -4754,7 +5151,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ "crunchy", "digest 0.9.0", - "subtle", + "subtle 2.4.1", ] [[package]] @@ -4833,9 +5230,21 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lioness" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] [[package]] name = "lock_api" @@ -4849,36 +5258,24 @@ dependencies = [ [[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" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" -dependencies = [ - "hashbrown 0.12.3", -] +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "lru" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ "hashbrown 0.13.2", ] [[package]] name = "lru" -version = "0.10.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" -dependencies = [ - "hashbrown 0.13.2", -] +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" [[package]] name = "lru-cache" @@ -4918,6 +5315,54 @@ dependencies = [ "libc", ] +[[package]] +name = "macro_magic" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" +dependencies = [ + "const-random", + "derive-syn-parse 0.1.5", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.58", +] + [[package]] name = "maplit" version = "1.0.2" @@ -4955,15 +5400,6 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "memchr" version = "2.5.0" @@ -4988,15 +5424,6 @@ dependencies = [ "libc", ] -[[package]] -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" @@ -5024,12 +5451,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "merlin" version = "2.0.1" @@ -5042,6 +5463,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "mick-jaeger" version = "0.1.8" @@ -5079,10 +5512,35 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mixnet" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "bitflags 1.3.2", + "blake2 0.10.6", + "c2-chacha", + "curve25519-dalek 4.1.2", + "either", + "hashlink", + "lioness", + "log", + "parking_lot 0.12.1", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "subtle 2.4.1", + "thiserror", + "zeroize", +] + [[package]] name = "mmr-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "log", @@ -5101,7 +5559,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "anyhow", "jsonrpsee", @@ -5141,21 +5599,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "modified-construct-runtime" -version = "4.0.0-dev" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools 4.0.0-dev", - "itertools", - "proc-macro-warning", - "proc-macro2", - "quote", - "syn 2.0.28", -] - [[package]] name = "multiaddr" version = "0.17.1" @@ -5188,16 +5631,16 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", "digest 0.10.7", - "multihash-derive", + "multihash-derive 0.8.0", "sha2 0.10.7", "sha3", "unsigned-varint", @@ -5205,24 +5648,79 @@ dependencies = [ [[package]] name = "multihash" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" dependencies = [ "core2", "digest 0.10.7", - "multihash-derive", + "multihash-derive 0.8.0", "sha2 0.10.7", "unsigned-varint", ] +[[package]] +name = "multihash" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" +dependencies = [ + "core2", + "unsigned-varint", +] + +[[package]] +name = "multihash-codetable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d815ecb3c8238d00647f8630ede7060a642c9f704761cd6082cb4028af6935" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive 0.9.0", + "ripemd", + "serde", + "sha1", + "sha2 0.10.7", + "sha3", + "strobe-rs", +] + [[package]] name = "multihash-derive" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "multihash-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "890e72cb7396cb99ed98c1246a97b243cc16394470d94e0bc8b0c2c11d84290e" +dependencies = [ + "core2", + "multihash 0.19.1", + "multihash-derive-impl", +] + +[[package]] +name = "multihash-derive-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38685e08adb338659871ecfc6ee47ba9b22dcc8abcf6975d379cc49145c3040" +dependencies = [ + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", @@ -5279,9 +5777,9 @@ dependencies = [ [[package]] name = "names" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" dependencies = [ "rand 0.8.5", ] @@ -5358,6 +5856,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "new-modified-construct-runtime" +version = "4.0.0-dev" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse 0.1.5", + "expander 2.0.0", + "frame-support-procedural-tools 4.0.0-dev", + "itertools 0.10.5", + "macro_magic", + "proc-macro-warning", + "proc-macro2", + "quote", + "sp-core-hashing", + "syn 2.0.58", +] + [[package]] name = "nix" version = "0.24.3" @@ -5367,9 +5883,20 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5446,11 +5973,12 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -5459,7 +5987,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", ] @@ -5490,22 +6018,13 @@ 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", + "asn1-rs", ] [[package]] @@ -5532,11 +6051,17 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orchestra" -version = "0.0.5" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227585216d05ba65c7ab0a0450a3cf2cbd81a98862a54c4df8e14d5ac6adb015" +checksum = "2356622ffdfe72362a45a1e5e87bb113b8327e596e39b91f11f0ef4395c8da79" dependencies = [ "async-trait", "dyn-clonable", @@ -5544,21 +6069,22 @@ dependencies = [ "futures-timer", "orchestra-proc-macro", "pin-project", - "prioritized-metered-channel", + "prioritized-metered-channel 0.6.1", "thiserror", "tracing", ] [[package]] name = "orchestra-proc-macro" -version = "0.0.5" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2871aadd82a2c216ee68a69837a526dfe788ecbe74c4c5038a6acdbff6653066" +checksum = "eedb646674596266dc9bb2b5c7eea7c36b32ecc7777eba0d510196972d72c4fd" dependencies = [ - "expander 0.0.6", - "itertools", + "expander 2.0.0", + "indexmap 2.0.0", + "itertools 0.11.0", "petgraph", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -5575,114 +6101,121 @@ dependencies = [ [[package]] name = "orml-asset-registry" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "log", + "orml-traits 0.7.1", "pallet-xcm", "parity-scale-codec", + "polkadot-runtime-common", "scale-info", "serde", + "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-builder", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "orml-currencies" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", - "orml-utilities 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-traits 0.7.1", + "orml-utilities 0.7.1", "parity-scale-codec", "scale-info", "serde", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-tokens" -version = "0.4.1-dev" -source = "git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.0" +source = "git+https://github.com/arrudagates/open-runtime-module-library.git?rev=bc6b41e8a9539971a2da5d62cf8f550cde985f00#bc6b41e8a9539971a2da5d62cf8f550cde985f00" dependencies = [ "frame-support", "frame-system", - "orml-traits 0.4.1-dev (git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "log", + "orml-traits 0.7.0", "parity-scale-codec", "scale-info", "serde", "sp-arithmetic", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-tokens" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "log", + "orml-traits 0.7.1", "parity-scale-codec", "scale-info", "serde", "sp-arithmetic", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-traits" -version = "0.4.1-dev" -source = "git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.0" +source = "git+https://github.com/arrudagates/open-runtime-module-library.git?rev=bc6b41e8a9539971a2da5d62cf8f550cde985f00#bc6b41e8a9539971a2da5d62cf8f550cde985f00" dependencies = [ "frame-support", "impl-trait-for-tuples", "num-traits", - "orml-utilities 0.4.1-dev (git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-utilities 0.7.0", "parity-scale-codec", + "paste", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "orml-traits" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "impl-trait-for-tuples", "num-traits", - "orml-utilities 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-utilities 0.7.1", "parity-scale-codec", + "paste", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "orml-unknown-tokens" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", @@ -5690,42 +6223,44 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "orml-utilities" -version = "0.4.1-dev" -source = "git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.0" +source = "git+https://github.com/arrudagates/open-runtime-module-library.git?rev=bc6b41e8a9539971a2da5d62cf8f550cde985f00#bc6b41e8a9539971a2da5d62cf8f550cde985f00" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", "serde", + "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-utilities" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", "serde", + "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-vesting" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", @@ -5734,46 +6269,46 @@ dependencies = [ "serde", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "orml-xcm" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", "frame-system", "pallet-xcm", "parity-scale-codec", "scale-info", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "orml-xcm-support" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ "frame-support", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-traits 0.7.1", "parity-scale-codec", "sp-runtime", - "sp-std", - "xcm", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-executor", ] [[package]] name = "orml-xtokens" -version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae#7ecebeab7e3dbc2226ed58d32ee159271a8176ae" +version = "0.7.1" +source = "git+https://github.com/InvArch/open-runtime-module-library.git?branch=polkadot-v1.6.0#74a0efb69072bd3e9263c2e56bb1adc11945c3da" dependencies = [ - "cumulus-primitives-core", "frame-support", "frame-system", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "log", + "orml-traits 0.7.1", "orml-xcm-support", "pallet-xcm", "parity-scale-codec", @@ -5781,47 +6316,30 @@ dependencies = [ "serde", "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-executor", -] - -[[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", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-executor", ] [[package]] -name = "packed_simd_2" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +name = "pallet-asset-rate" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "cfg-if", - "libm 0.1.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -5833,44 +6351,46 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", + "log", "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-consensus-aura", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -5880,13 +6400,13 @@ dependencies = [ "sp-application-crypto", "sp-authority-discovery", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -5894,13 +6414,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -5918,14 +6438,16 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "aquamarine", + "docify", "frame-benchmarking", "frame-election-provider-support", "frame-support", @@ -5937,14 +6459,14 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", - "sp-tracing", + "sp-std 8.0.0", + "sp-tracing 10.0.0", ] [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -5953,16 +6475,17 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", + "log", "pallet-authorship", "pallet-session", "parity-scale-codec", @@ -5972,15 +6495,15 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", "binary-merkle-tree", "frame-support", "frame-system", @@ -5996,13 +6519,14 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-state-machine", + "sp-std 8.0.0", ] [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6014,13 +6538,30 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-broker" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "pallet-checked-inflation" version = "0.1.0-dev" -source = "git+https://github.com/InvArch/InvArch-Frames?rev=07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f#07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f" +source = "git+https://github.com/InvArch/InvArch-Frames?rev=cd32136741df27328818a76dd979bad55f837396#cd32136741df27328818a76dd979bad55f837396" dependencies = [ "frame-benchmarking", "frame-support", @@ -6035,13 +6576,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6054,13 +6595,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-collator-selection" version = "3.0.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6073,13 +6614,13 @@ dependencies = [ "scale-info", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6090,13 +6631,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6107,13 +6648,13 @@ dependencies = [ "serde", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6125,13 +6666,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6147,14 +6688,14 @@ dependencies = [ "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std", - "strum", + "sp-std 8.0.0", + "strum 0.24.1", ] [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6162,12 +6703,13 @@ dependencies = [ "parity-scale-codec", "sp-npos-elections", "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6179,14 +6721,16 @@ dependencies = [ "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std", + "sp-staking", + "sp-std 8.0.0", ] [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "frame-benchmarking", "frame-election-provider-support", "frame-support", @@ -6197,13 +6741,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6220,29 +6764,30 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "enumflags2", "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6256,13 +6801,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6273,20 +6818,20 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-inv4" version = "0.1.0-dev" -source = "git+https://github.com/InvArch/InvArch-Frames?rev=07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f#07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f" +source = "git+https://github.com/InvArch/InvArch-Frames?rev=cd32136741df27328818a76dd979bad55f837396#cd32136741df27328818a76dd979bad55f837396" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "invarch-primitives", "log", - "orml-tokens 0.4.1-dev (git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-tokens 0.7.0", "pallet-balances", "parity-scale-codec", "scale-info", @@ -6297,14 +6842,14 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", - "xcm", + "sp-std 8.0.0", + "staging-xcm", ] [[package]] name = "pallet-maintenance-mode" version = "0.1.0" -source = "git+https://github.com/Moonsong-Labs/moonkit?rev=51e3068808fb58f30ffb16bfdaa81d0890f98fd8#51e3068808fb58f30ffb16bfdaa81d0890f98fd8" +source = "git+https://github.com/Moonsong-Labs/moonkit?rev=c6ed5d19a90ef175e8464d026cd40a4e0891b926#c6ed5d19a90ef175e8464d026cd40a4e0891b926" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -6313,14 +6858,14 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "xcm-primitives", ] [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6331,14 +6876,15 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-message-queue" version = "7.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "environmental", "frame-benchmarking", "frame-support", "frame-system", @@ -6349,31 +6895,32 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-weights", ] [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-core", "sp-io", "sp-mmr-primitives", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6383,13 +6930,13 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-nis" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6399,30 +6946,32 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", "log", + "pallet-balances", "parity-scale-codec", "scale-info", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", + "sp-tracing 10.0.0", ] [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6434,26 +6983,26 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-runtime-interface", + "sp-runtime-interface 17.0.0", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", "sp-api", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-ocif-staking" version = "0.1.0-dev" -source = "git+https://github.com/InvArch/InvArch-Frames?rev=07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f#07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f" +source = "git+https://github.com/InvArch/InvArch-Frames?rev=cd32136741df27328818a76dd979bad55f837396#cd32136741df27328818a76dd979bad55f837396" dependencies = [ "frame-benchmarking", "frame-support", @@ -6471,13 +7020,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -6488,13 +7037,13 @@ dependencies = [ "serde", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6512,13 +7061,13 @@ dependencies = [ "scale-info", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6529,13 +7078,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6544,13 +7093,13 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6562,13 +7111,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6577,13 +7126,13 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6596,13 +7145,13 @@ dependencies = [ "sp-arithmetic", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-rings" version = "0.1.0-dev" -source = "git+https://github.com/InvArch/InvArch-Frames?rev=07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f#07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f" +source = "git+https://github.com/InvArch/InvArch-Frames?rev=cd32136741df27328818a76dd979bad55f837396#cd32136741df27328818a76dd979bad55f837396" dependencies = [ "frame-benchmarking", "frame-support", @@ -6622,16 +7171,32 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", - "xcm", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "pallet-root-testing" +version = "1.0.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -6640,14 +7205,14 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-weights", ] [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -6661,44 +7226,50 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-state-machine", + "sp-std 8.0.0", "sp-trie", ] [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "pallet-session", "pallet-staking", + "parity-scale-codec", "rand 0.8.5", "sp-runtime", "sp-session", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "rand_chacha 0.2.2", "scale-info", + "sp-arithmetic", + "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6715,24 +7286,24 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "log", "sp-arithmetic", @@ -6741,16 +7312,17 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "sp-api", + "sp-staking", ] [[package]] name = "pallet-state-trie-migration" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6761,14 +7333,15 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -6776,14 +7349,15 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -6793,14 +7367,15 @@ dependencies = [ "sp-inherents", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", + "sp-storage 13.0.0", "sp-timestamp", ] [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6813,13 +7388,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -6829,13 +7404,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6851,7 +7426,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6863,8 +7438,9 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -6873,14 +7449,15 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "frame-system", @@ -6888,13 +7465,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6904,13 +7481,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6919,13 +7496,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6934,34 +7511,36 @@ dependencies = [ "scale-info", "sp-api", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "pallet-xcm" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bounded-collections", "frame-benchmarking", "frame-support", "frame-system", "log", + "pallet-balances", "parity-scale-codec", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6971,31 +7550,56 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", - "xcm", - "xcm-builder", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "parachain-info" -version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.43#b8999fce0f61fb757f9e57e326cda48e70137019" +name = "parachains-common" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "cumulus-primitives-core", + "cumulus-primitives-utility", "frame-support", "frame-system", + "log", + "num-traits", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-xcm", "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-primitives", + "rococo-runtime-constants", "scale-info", + "smallvec", + "sp-consensus-aura", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "westend-runtime-constants", ] [[package]] name = "parity-db" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78f19d20a0d2cc52327a88d131fa1c4ea81ea4a04714aedcfeca2dd410049cf8" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ - "blake2", + "blake2 0.10.6", "crc32fast", "fs2", "hex", @@ -7007,13 +7611,14 @@ dependencies = [ "rand 0.8.5", "siphasher", "snap", + "winapi", ] [[package]] name = "parity-scale-codec" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec 0.7.4", "bitvec", @@ -7026,11 +7631,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 1.0.109", @@ -7125,9 +7730,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.11.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", ] @@ -7147,15 +7752,6 @@ 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" @@ -7192,7 +7788,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -7218,22 +7814,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -7244,9 +7840,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -7255,13 +7851,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "pkcs8" -version = "0.9.0" +name = "piper" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" dependencies = [ - "der 0.6.1", - "spki 0.6.0", + "atomic-waker", + "fastrand 2.0.0", + "futures-io", ] [[package]] @@ -7270,8 +7867,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.7", - "spki 0.7.2", + "der", + "spki", ] [[package]] @@ -7280,12 +7877,6 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" -[[package]] -name = "platforms" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" - [[package]] name = "platforms" version = "3.0.2" @@ -7294,15 +7885,19 @@ checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "polkadot-approval-distribution" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "bitvec", "futures", + "futures-timer", + "itertools 0.10.5", "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", @@ -7310,10 +7905,12 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "always-assert", "futures", + "futures-timer", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -7324,13 +7921,12 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "derive_more", "fatality", "futures", - "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7339,6 +7935,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "rand 0.8.5", + "schnellru", "sp-core", "sp-keystore", "thiserror", @@ -7347,12 +7944,12 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "async-trait", "fatality", "futures", - "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7362,23 +7959,24 @@ dependencies = [ "polkadot-primitives", "rand 0.8.5", "sc-network", + "schnellru", "thiserror", + "tokio", "tracing-gum", ] [[package]] name = "polkadot-cli" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "cfg-if", "clap", "frame-benchmarking-cli", "futures", "log", - "polkadot-client", - "polkadot-node-core-pvf-worker", "polkadot-node-metrics", - "polkadot-performance-test", + "polkadot-node-primitives", "polkadot-service", "sc-cli", "sc-executor", @@ -7395,55 +7993,11 @@ dependencies = [ "try-runtime-cli", ] -[[package]] -name = "polkadot-client" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -dependencies = [ - "async-trait", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-system", - "frame-system-rpc-runtime-api", - "futures", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "polkadot-core-primitives", - "polkadot-node-core-parachains-inherent", - "polkadot-primitives", - "polkadot-runtime", - "polkadot-runtime-common", - "rococo-runtime", - "sc-client-api", - "sc-consensus", - "sc-executor", - "sc-service", - "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-keyring", - "sp-mmr-primitives", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-storage", - "sp-timestamp", - "sp-transaction-pool", -] - [[package]] name = "polkadot-collator-protocol" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "always-assert", "bitvec", "fatality", "futures", @@ -7457,32 +8011,32 @@ dependencies = [ "sp-keystore", "sp-runtime", "thiserror", + "tokio-util", "tracing-gum", ] [[package]] name = "polkadot-core-primitives" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "polkadot-dispute-distribution" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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", @@ -7491,6 +8045,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sc-network", + "schnellru", "sp-application-crypto", "sp-keystore", "thiserror", @@ -7499,8 +8054,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7513,8 +8068,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "futures-timer", @@ -7525,6 +8080,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "sc-network", + "sc-network-common", "sp-application-crypto", "sp-core", "sp-keystore", @@ -7533,8 +8089,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "always-assert", "async-trait", @@ -7556,8 +8112,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "parity-scale-codec", @@ -7574,16 +8130,16 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "derive_more", "futures", "futures-timer", + "itertools 0.10.5", "kvdb", - "lru 0.9.0", - "merlin", + "merlin 3.0.0", "parity-scale-codec", "polkadot-node-jaeger", "polkadot-node-primitives", @@ -7591,8 +8147,12 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-primitives", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", "sc-keystore", - "schnorrkel", + "schnellru", + "schnorrkel 0.11.4", "sp-application-crypto", "sp-consensus", "sp-consensus-slots", @@ -7603,8 +8163,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "futures", @@ -7612,6 +8172,7 @@ dependencies = [ "kvdb", "parity-scale-codec", "polkadot-erasure-coding", + "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -7624,8 +8185,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "fatality", @@ -7643,8 +8204,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7658,8 +8219,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -7670,7 +8231,8 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", - "polkadot-parachain", + "polkadot-overseer", + "polkadot-parachain-primitives", "polkadot-primitives", "sp-maybe-compressed-blob", "tracing-gum", @@ -7678,23 +8240,22 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "polkadot-node-metrics", "polkadot-node-subsystem", - "polkadot-primitives", + "polkadot-node-subsystem-types", "sc-client-api", "sc-consensus-babe", - "sp-blockchain", "tracing-gum", ] [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "futures-timer", @@ -7710,27 +8271,27 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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", + "schnellru", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -7744,10 +8305,27 @@ dependencies = [ "tracing-gum", ] +[[package]] +name = "polkadot-node-core-prospective-parachains" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "bitvec", + "fatality", + "futures", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "thiserror", + "tracing-gum", +] + [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "fatality", @@ -7757,42 +8335,47 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand 0.8.5", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "always-assert", + "array-bytes 6.1.0", + "blake3", + "cfg-if", "futures", "futures-timer", + "is_executable", "libc", "parity-scale-codec", "pin-project", "polkadot-core-primitives", + "polkadot-node-core-pvf-common", "polkadot-node-metrics", "polkadot-node-primitives", - "polkadot-parachain", + "polkadot-node-subsystem", + "polkadot-parachain-primitives", "polkadot-primitives", "rand 0.8.5", "slotmap", "sp-core", "sp-maybe-compressed-blob", - "sp-tracing", - "sp-wasm-interface", - "substrate-build-script-utils", + "sp-wasm-interface 14.0.0", + "tempfile", + "thiserror", "tokio", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "polkadot-node-primitives", @@ -7806,53 +8389,49 @@ dependencies = [ ] [[package]] -name = "polkadot-node-core-pvf-worker" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +name = "polkadot-node-core-pvf-common" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "assert_matches", + "cfg-if", "cpu-time", "futures", + "landlock", "libc", "parity-scale-codec", - "polkadot-node-core-pvf", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", - "rayon", "sc-executor", "sc-executor-common", "sc-executor-wasmtime", + "seccompiler", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-io", - "sp-maybe-compressed-blob", - "sp-tracing", - "substrate-build-script-utils", - "tempfile", - "tikv-jemalloc-ctl", - "tokio", + "sp-tracing 10.0.0", + "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", - "lru 0.9.0", "polkadot-node-metrics", "polkadot-node-subsystem", "polkadot-node-subsystem-types", "polkadot-primitives", + "schnellru", "sp-consensus-babe", "tracing-gum", ] [[package]] name = "polkadot-node-jaeger" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "lazy_static", "log", @@ -7869,16 +8448,16 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "bs58", + "bs58 0.5.1", "futures", "futures-timer", "log", "parity-scale-codec", "polkadot-primitives", - "prioritized-metered-channel", + "prioritized-metered-channel 0.5.1", "sc-cli", "sc-service", "sc-tracing", @@ -7888,11 +8467,12 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-trait", + "bitvec", "derive_more", "fatality", "futures", @@ -7904,22 +8484,23 @@ dependencies = [ "rand 0.8.5", "sc-authority-discovery", "sc-network", - "strum", + "strum 0.24.1", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-primitives" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "bitvec", "bounded-vec", "futures", "parity-scale-codec", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", - "schnorrkel", + "schnorrkel 0.11.4", "serde", "sp-application-crypto", "sp-consensus-babe", @@ -7928,13 +8509,13 @@ dependencies = [ "sp-maybe-compressed-blob", "sp-runtime", "thiserror", - "zstd 0.11.2+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] name = "polkadot-node-subsystem" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7943,10 +8524,11 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", + "bitvec", "derive_more", "futures", "orchestra", @@ -7955,41 +8537,47 @@ dependencies = [ "polkadot-node-primitives", "polkadot-primitives", "polkadot-statement-table", + "sc-client-api", "sc-network", + "sc-transaction-pool-api", "smallvec", "sp-api", "sp-authority-discovery", + "sp-blockchain", "sp-consensus-babe", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "derive_more", "fatality", "futures", "futures-channel", - "itertools", + "itertools 0.10.5", "kvdb", - "lru 0.9.0", "parity-db", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "pin-project", "polkadot-node-jaeger", "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", + "polkadot-node-subsystem-types", "polkadot-overseer", "polkadot-primitives", - "prioritized-metered-channel", + "prioritized-metered-channel 0.5.1", "rand 0.8.5", + "sc-client-api", + "schnellru", "sp-application-crypto", "sp-core", "sp-keystore", @@ -7999,13 +8587,12 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", "futures-timer", - "lru 0.9.0", "orchestra", "parking_lot 0.12.1", "polkadot-node-metrics", @@ -8021,50 +8608,32 @@ dependencies = [ ] [[package]] -name = "polkadot-parachain" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +name = "polkadot-parachain-primitives" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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 = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -dependencies = [ - "env_logger 0.9.3", - "kusama-runtime", - "log", - "polkadot-erasure-coding", - "polkadot-node-core-pvf-worker", - "polkadot-node-primitives", - "polkadot-primitives", - "quote", - "sc-executor-common", - "sp-maybe-compressed-blob", - "thiserror", + "sp-std 8.0.0", + "sp-weights", ] [[package]] name = "polkadot-primitives" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "hex-literal 0.4.1", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain", + "polkadot-parachain-primitives", "scale-info", "serde", "sp-api", @@ -8078,13 +8647,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "polkadot-rpc" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -8100,6 +8669,7 @@ dependencies = [ "sc-consensus-grandpa", "sc-consensus-grandpa-rpc", "sc-rpc", + "sc-rpc-spec-v2", "sc-sync-state-rpc", "sc-transaction-pool-api", "sp-api", @@ -8113,105 +8683,10 @@ dependencies = [ "substrate-state-trie-migration-rpc", ] -[[package]] -name = "polkadot-runtime" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -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 = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitvec", "frame-benchmarking", @@ -8221,11 +8696,14 @@ dependencies = [ "impl-trait-for-tuples", "libsecp256k1", "log", + "pallet-asset-rate", "pallet-authorship", "pallet-babe", "pallet-balances", + "pallet-broker", "pallet-election-provider-multi-phase", "pallet-fast-unstake", + "pallet-identity", "pallet-session", "pallet-staking", "pallet-staking-reward-fn", @@ -8233,6 +8711,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-treasury", "pallet-vesting", + "pallet-xcm-benchmarks", "parity-scale-codec", "polkadot-primitives", "polkadot-runtime-parachains", @@ -8249,41 +8728,30 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", "static_assertions", - "xcm", -] - -[[package]] -name = "polkadot-runtime-constants" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -dependencies = [ - "frame-support", - "polkadot-primitives", - "polkadot-runtime-common", - "smallvec", - "sp-core", - "sp-runtime", - "sp-weights", ] [[package]] name = "polkadot-runtime-metrics" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "bs58", + "bs58 0.5.1", + "frame-benchmarking", "parity-scale-codec", "polkadot-primitives", - "sp-std", - "sp-tracing", + "sp-std 8.0.0", + "sp-tracing 10.0.0", ] [[package]] name = "polkadot-runtime-parachains" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -8291,18 +8759,21 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", "pallet-balances", + "pallet-broker", "pallet-message-queue", "pallet-session", "pallet-staking", "pallet-timestamp", "pallet-vesting", "parity-scale-codec", - "polkadot-parachain", + "polkadot-core-primitives", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-runtime-metrics", "rand 0.8.5", @@ -8312,6 +8783,7 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", + "sp-arithmetic", "sp-core", "sp-inherents", "sp-io", @@ -8319,40 +8791,44 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-executor", "static_assertions", - "xcm", - "xcm-executor", ] [[package]] name = "polkadot-service" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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", + "is_executable", "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", + "parking_lot 0.12.1", "polkadot-approval-distribution", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", "polkadot-availability-recovery", - "polkadot-client", "polkadot-collator-protocol", + "polkadot-core-primitives", "polkadot-dispute-distribution", "polkadot-gossip-support", "polkadot-network-bridge", @@ -8366,7 +8842,9 @@ dependencies = [ "polkadot-node-core-chain-selection", "polkadot-node-core-dispute-coordinator", "polkadot-node-core-parachains-inherent", + "polkadot-node-core-prospective-parachains", "polkadot-node-core-provisioner", + "polkadot-node-core-pvf", "polkadot-node-core-pvf-checker", "polkadot-node-core-runtime-api", "polkadot-node-network-protocol", @@ -8375,11 +8853,9 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-rpc", - "polkadot-runtime", - "polkadot-runtime-constants", "polkadot-runtime-parachains", "polkadot-statement-distribution", "rococo-runtime", @@ -8406,6 +8882,8 @@ dependencies = [ "sc-sysinfo", "sc-telemetry", "sc-transaction-pool", + "sc-transaction-pool-api", + "schnellru", "serde", "serde_json", "sp-api", @@ -8419,16 +8897,18 @@ dependencies = [ "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-storage 13.0.0", "sp-timestamp", "sp-transaction-pool", - "sp-trie", + "sp-version", + "sp-weights", "substrate-prometheus-endpoint", "thiserror", "tracing-gum", @@ -8437,12 +8917,14 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "arrayvec 0.5.2", + "arrayvec 0.7.4", + "bitvec", "fatality", "futures", + "futures-timer", "indexmap 1.9.3", "parity-scale-codec", "polkadot-node-network-protocol", @@ -8458,14 +8940,51 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "polkadot-primitives", "sp-core", ] +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.58", +] + [[package]] name = "polling" version = "2.8.0" @@ -8478,31 +8997,33 @@ dependencies = [ "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "windows-sys 0.48.0", ] [[package]] -name = "poly1305" -version = "0.7.2" +name = "polling" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" dependencies = [ - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.4.1", + "cfg-if", + "concurrent-queue", + "pin-project-lite 0.2.14", + "rustix 0.38.32", + "tracing", + "windows-sys 0.52.0", ] [[package]] -name = "polyval" -version = "0.5.3" +name = "poly1305" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash 0.4.1", + "universal-hash", ] [[package]] @@ -8514,7 +9035,7 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash 0.5.1", + "universal-hash", ] [[package]] @@ -8537,7 +9058,7 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools", + "itertools 0.10.5", "normalize-line-endings", "predicates-core", "regex", @@ -8576,7 +9097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" dependencies = [ "proc-macro2", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -8594,9 +9115,25 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" -version = "0.2.0" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e99f0c89bd88f393aab44a4ab949351f7bc7e7e1179d11ecbfe50cbe4c47e342" +dependencies = [ + "coarsetime", + "crossbeam-queue", + "derive_more", + "futures", + "futures-timer", + "nanorand", + "thiserror", + "tracing", +] + +[[package]] +name = "prioritized-metered-channel" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4" +checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8615,7 +9152,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.14", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", ] [[package]] @@ -8644,20 +9199,20 @@ dependencies = [ [[package]] name = "proc-macro-warning" -version = "0.3.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" +checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -8716,8 +9271,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", - "heck", - "itertools", + "heck 0.4.1", + "itertools 0.10.5", "lazy_static", "log", "multimap", @@ -8738,7 +9293,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", @@ -8809,21 +9364,21 @@ checksum = "f31999cfc7927c4e212e60fd50934ab40e8e8bfd2d493d6095d2d306bc0764d9" dependencies = [ "bytes", "rand 0.8.5", - "ring", + "ring 0.16.20", "rustc-hash", "rustls 0.20.8", "slab", "thiserror", "tinyvec", "tracing", - "webpki 0.22.0", + "webpki", ] [[package]] name = "quote" -version = "1.0.32" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -8896,6 +9451,16 @@ dependencies = [ "getrandom 0.2.10", ] +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -8942,19 +9507,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem", - "ring", - "time 0.3.25", - "x509-parser 0.13.2", - "yasna", -] - [[package]] name = "rcgen" version = "0.10.0" @@ -8962,8 +9514,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", - "ring", - "time 0.3.25", + "ring 0.16.20", + "time", "yasna", ] @@ -9004,7 +9556,7 @@ checksum = "3bd8f48b2066e9f69ab192797d66da804d1935bf22763204ed3675740cb0f221" dependencies = [ "derive_more", "fs-err", - "itertools", + "itertools 0.10.5", "static_init 0.5.2", "thiserror", ] @@ -9026,7 +9578,7 @@ checksum = "2dfaf0c85b766276c797f3791f5bc6d5bd116b41d53049af2789666b0c0bc9fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -9097,23 +9649,28 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint 0.4.9", "hmac 0.12.1", - "zeroize", + "subtle 2.4.1", ] [[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +name = "ring" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224" dependencies = [ - "hmac 0.12.1", - "subtle", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "blake2 0.10.6", + "common", + "fflonk", + "merlin 3.0.0", ] [[package]] @@ -9125,12 +9682,36 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.10", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "rocksdb" version = "0.21.0" @@ -9143,8 +9724,8 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "binary-merkle-tree", "frame-benchmarking", @@ -9156,6 +9737,7 @@ dependencies = [ "frame-try-runtime", "hex-literal 0.4.1", "log", + "pallet-asset-rate", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -9165,6 +9747,7 @@ dependencies = [ "pallet-bounties", "pallet-child-bounties", "pallet-collective", + "pallet-conviction-voting", "pallet-democracy", "pallet-elections-phragmen", "pallet-grandpa", @@ -9179,7 +9762,10 @@ dependencies = [ "pallet-offences", "pallet-preimage", "pallet-proxy", + "pallet-ranked-collective", "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", "pallet-scheduler", "pallet-session", "pallet-society", @@ -9193,10 +9779,11 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-vesting", + "pallet-whitelist", "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -9206,11 +9793,13 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-beefy", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-mmr-primitives", @@ -9218,20 +9807,21 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", + "sp-storage 13.0.0", "sp-transaction-pool", "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", "static_assertions", "substrate-wasm-builder", - "xcm", - "xcm-builder", - "xcm-executor", ] [[package]] name = "rococo-runtime-constants" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "polkadot-primitives", @@ -9240,6 +9830,8 @@ dependencies = [ "sp-core", "sp-runtime", "sp-weights", + "staging-xcm", + "staging-xcm-builder", ] [[package]] @@ -9253,17 +9845,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rtcp" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" -dependencies = [ - "bytes", - "thiserror", - "webrtc-util", -] - [[package]] name = "rtnetlink" version = "0.10.1" @@ -9289,20 +9870,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rtp" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" -dependencies = [ - "async-trait", - "bytes", - "rand 0.8.5", - "serde", - "thiserror", - "webrtc-util", -] - [[package]] name = "rustc-demangle" version = "0.1.23" @@ -9369,40 +9936,39 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.6" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee020b1716f0a80e2ace9b03441a749e402e86712f15f16fe8a8f75afac732f" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.5", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.19.1" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ - "base64 0.13.1", "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", + "ring 0.16.20", + "sct", + "webpki", ] [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", + "ring 0.17.8", + "rustls-webpki", + "sct", ] [[package]] @@ -9426,12 +9992,33 @@ dependencies = [ "base64 0.21.2", ] +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + [[package]] name = "rw-stream-sink" version = "0.3.0" @@ -9470,18 +10057,18 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "log", "sp-core", - "sp-wasm-interface", + "sp-wasm-interface 14.0.0", "thiserror", ] [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -9489,14 +10076,14 @@ dependencies = [ "ip_network", "libp2p", "log", - "multihash 0.17.0", + "multihash 0.18.1", + "multihash-codetable", "parity-scale-codec", "prost", "prost-build", "rand 0.8.5", "sc-client-api", "sc-network", - "sc-network-common", "sp-api", "sp-authority-discovery", "sp-blockchain", @@ -9510,14 +10097,13 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "futures-timer", "log", "parity-scale-codec", "sc-block-builder", - "sc-client-api", "sc-proposer-metrics", "sc-telemetry", "sc-transaction-pool-api", @@ -9533,24 +10119,28 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", - "sc-client-api", "sp-api", "sp-block-builder", "sp-blockchain", "sp-core", "sp-inherents", "sp-runtime", + "sp-trie", ] [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "array-bytes 6.1.0", + "docify", + "log", "memmap2", + "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", "sc-executor", @@ -9560,6 +10150,8 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", + "sp-genesis-builder", + "sp-io", "sp-runtime", "sp-state-machine", ] @@ -9567,24 +10159,26 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", + "bip39", "chrono", "clap", "fdlimit", "futures", + "itertools 0.10.5", "libp2p-identity", "log", "names", @@ -9595,8 +10189,8 @@ dependencies = [ "sc-client-api", "sc-client-db", "sc-keystore", + "sc-mixnet", "sc-network", - "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -9611,14 +10205,13 @@ dependencies = [ "sp-runtime", "sp-version", "thiserror", - "tiny-bip39", "tokio", ] [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "fnv", "futures", @@ -9633,19 +10226,19 @@ dependencies = [ "sp-consensus", "sp-core", "sp-database", - "sp-externalities", - "sp-keystore", + "sp-externalities 0.19.0", "sp-runtime", "sp-state-machine", "sp-statement-store", - "sp-storage", + "sp-storage 13.0.0", + "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "hash-db", "kvdb", @@ -9671,7 +10264,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -9696,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -9725,7 +10318,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "fork-tree", @@ -9740,9 +10333,8 @@ dependencies = [ "sc-consensus", "sc-consensus-epochs", "sc-consensus-slots", - "sc-keystore", "sc-telemetry", - "scale-info", + "sc-transaction-pool-api", "sp-api", "sp-application-crypto", "sp-block-builder", @@ -9761,7 +10353,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "jsonrpsee", @@ -9783,10 +10375,10 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", - "async-channel", + "array-bytes 6.1.0", + "async-channel 1.9.0", "async-trait", "fnv", "futures", @@ -9795,9 +10387,7 @@ dependencies = [ "parking_lot 0.12.1", "sc-client-api", "sc-consensus", - "sc-keystore", "sc-network", - "sc-network-common", "sc-network-gossip", "sc-network-sync", "sc-utils", @@ -9813,13 +10403,14 @@ dependencies = [ "sp-runtime", "substrate-prometheus-endpoint", "thiserror", + "tokio", "wasm-timer", ] [[package]] name = "sc-consensus-beefy-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "jsonrpsee", @@ -9838,7 +10429,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9851,10 +10442,10 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "ahash 0.8.3", - "array-bytes 4.2.0", + "ahash 0.8.11", + "array-bytes 6.1.0", "async-trait", "dyn-clone", "finality-grandpa", @@ -9872,7 +10463,9 @@ dependencies = [ "sc-network", "sc-network-common", "sc-network-gossip", + "sc-network-sync", "sc-telemetry", + "sc-transaction-pool-api", "sc-utils", "serde_json", "sp-api", @@ -9891,7 +10484,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "finality-grandpa", "futures", @@ -9911,7 +10504,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "assert_matches", "async-trait", @@ -9946,7 +10539,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -9969,33 +10562,33 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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", + "sp-externalities 0.19.0", "sp-io", "sp-panic-handler", - "sp-runtime-interface", + "sp-runtime-interface 17.0.0", "sp-trie", "sp-version", - "sp-wasm-interface", + "sp-wasm-interface 14.0.0", "tracing", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface", + "sp-wasm-interface 14.0.0", "thiserror", "wasm-instrument", ] @@ -10003,25 +10596,25 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "once_cell", + "parking_lot 0.12.1", "rustix 0.36.15", "sc-allocator", "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-runtime-interface 17.0.0", + "sp-wasm-interface 14.0.0", "wasmtime", ] [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "ansi_term", "futures", @@ -10030,6 +10623,7 @@ dependencies = [ "sc-client-api", "sc-network", "sc-network-common", + "sc-network-sync", "sp-blockchain", "sp-runtime", ] @@ -10037,9 +10631,9 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -10048,13 +10642,42 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-mixnet" +version = "0.1.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "array-bytes 4.2.0", + "arrayvec 0.7.4", + "blake2 0.10.6", + "bytes", + "futures", + "futures-timer", + "libp2p-identity", + "log", + "mixnet", + "multiaddr", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-network", + "sc-transaction-pool-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-keystore", + "sp-mixnet", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", - "async-channel", + "array-bytes 6.1.0", + "async-channel 1.9.0", "async-trait", "asynchronous-codec", "bytes", @@ -10066,39 +10689,37 @@ 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", + "tokio", + "tokio-stream", "unsigned-varint", + "wasm-timer", "zeroize", ] [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "cid", "futures", "libp2p-identity", @@ -10107,7 +10728,6 @@ dependencies = [ "prost-build", "sc-client-api", "sc-network", - "sc-network-common", "sp-blockchain", "sp-runtime", "thiserror", @@ -10117,45 +10737,34 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", "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", + "prost-build", + "sc-consensus", "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?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "futures", "futures-timer", "libp2p", "log", - "lru 0.8.1", "sc-network", "sc-network-common", - "sc-peerset", + "sc-network-sync", + "schnellru", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -10164,10 +10773,10 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", - "async-channel", + "array-bytes 6.1.0", + "async-channel 1.9.0", "futures", "libp2p-identity", "log", @@ -10176,8 +10785,6 @@ dependencies = [ "prost-build", "sc-client-api", "sc-network", - "sc-network-common", - "sc-peerset", "sp-blockchain", "sp-core", "sp-runtime", @@ -10187,17 +10794,16 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", - "async-channel", + "array-bytes 6.1.0", + "async-channel 1.9.0", "async-trait", "fork-tree", "futures", "futures-timer", "libp2p", "log", - "lru 0.8.1", "mockall", "parity-scale-codec", "prost", @@ -10206,8 +10812,8 @@ dependencies = [ "sc-consensus", "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", + "schnellru", "smallvec", "sp-arithmetic", "sp-blockchain", @@ -10217,22 +10823,23 @@ dependencies = [ "sp-runtime", "substrate-prometheus-endpoint", "thiserror", + "tokio", + "tokio-stream", ] [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", "futures", "libp2p", "log", "parity-scale-codec", - "pin-project", "sc-network", "sc-network-common", - "sc-peerset", + "sc-network-sync", "sc-utils", "sp-consensus", "sp-runtime", @@ -10242,16 +10849,17 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", "bytes", "fnv", "futures", "futures-timer", "hyper", - "hyper-rustls", + "hyper-rustls 0.24.2", "libp2p", + "log", "num_cpus", "once_cell", "parity-scale-codec", @@ -10260,36 +10868,22 @@ dependencies = [ "sc-client-api", "sc-network", "sc-network-common", - "sc-peerset", + "sc-transaction-pool-api", "sc-utils", "sp-api", "sp-core", + "sp-externalities 0.19.0", + "sp-keystore", "sp-offchain", "sp-runtime", "threadpool", "tracing", ] -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?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?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10298,7 +10892,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "jsonrpsee", @@ -10308,6 +10902,7 @@ dependencies = [ "sc-block-builder", "sc-chain-spec", "sc-client-api", + "sc-mixnet", "sc-rpc-api", "sc-tracing", "sc-transaction-pool-api", @@ -10329,11 +10924,12 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "jsonrpsee", "parity-scale-codec", "sc-chain-spec", + "sc-mixnet", "sc-transaction-pool-api", "scale-info", "serde", @@ -10348,7 +10944,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "http", "jsonrpsee", @@ -10363,9 +10959,9 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", "futures", "futures-util", "hex", @@ -10376,20 +10972,23 @@ dependencies = [ "sc-chain-spec", "sc-client-api", "sc-transaction-pool-api", + "sc-utils", "serde", "sp-api", "sp-blockchain", "sp-core", + "sp-rpc", "sp-runtime", "sp-version", "thiserror", + "tokio", "tokio-stream", ] [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "directories", @@ -10402,7 +11001,6 @@ dependencies = [ "parking_lot 0.12.1", "pin-project", "rand 0.8.5", - "sc-block-builder", "sc-chain-spec", "sc-client-api", "sc-client-db", @@ -10416,11 +11014,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", @@ -10433,12 +11029,12 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-keystore", "sp-runtime", "sp-session", "sp-state-machine", - "sp-storage", + "sp-storage 13.0.0", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", @@ -10455,7 +11051,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "log", "parity-scale-codec", @@ -10466,14 +11062,11 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "clap", "fs4", - "futures", "log", - "sc-client-db", - "sc-utils", "sp-core", "thiserror", "tokio", @@ -10482,7 +11075,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10501,8 +11094,9 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "derive_more", "futures", "libc", "log", @@ -10514,13 +11108,13 @@ dependencies = [ "serde_json", "sp-core", "sp-io", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "chrono", "futures", @@ -10539,20 +11133,19 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "ansi_term", - "atty", "chrono", + "is-terminal", "lazy_static", "libc", "log", - "once_cell", + "parity-scale-codec", "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", - "sc-rpc-server", "sc-tracing-proc-macro", "serde", "sp-api", @@ -10560,7 +11153,7 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", - "sp-tracing", + "sp-tracing 10.0.0", "thiserror", "tracing", "tracing-log", @@ -10570,25 +11163,24 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -10599,7 +11191,7 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-runtime", - "sp-tracing", + "sp-tracing 10.0.0", "sp-transaction-pool", "substrate-prometheus-endpoint", "thiserror", @@ -10608,13 +11200,15 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec", "serde", "sp-blockchain", + "sp-core", "sp-runtime", "thiserror", ] @@ -10622,9 +11216,9 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "futures", "futures-timer", "lazy_static", @@ -10636,9 +11230,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "788745a868b0e751750388f4e6546eb921ef714a4317fa6954f7cde114eb2eb7" dependencies = [ "bitvec", "cfg-if", @@ -10650,11 +11244,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "7dc2f4e8bc344b9fc3d5f74f72c2e55bfc38d28dc2ebc69c194a3df424e4d9ac" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -10675,7 +11269,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "cfg-if", "hashbrown 0.13.2", ] @@ -10690,11 +11284,46 @@ dependencies = [ "arrayvec 0.5.2", "curve25519-dalek 2.1.3", "getrandom 0.1.16", - "merlin", + "merlin 2.0.1", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle", + "subtle 2.4.1", + "zeroize", +] + +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek-ng", + "merlin 3.0.0", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.4", + "curve25519-dalek 4.1.2", + "getrandom_or_panic", + "merlin 3.0.0", + "rand_core 0.6.4", + "serde_bytes", + "sha2 0.10.7", + "subtle 2.4.1", "zeroize", ] @@ -10710,80 +11339,53 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sct" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sdp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" -dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "base16ct 0.1.1", - "der 0.6.1", + "base16ct", + "der", "generic-array 0.14.7", - "pkcs8 0.9.0", - "subtle", + "pkcs8", + "subtle 2.4.1", "zeroize", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "seccompiler" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "345a3e4dddf721a478089d4697b83c6c0a8f5bf16086f6c13397e4534eb6e2e5" dependencies = [ - "base16ct 0.2.0", - "der 0.7.7", - "generic-array 0.14.7", - "pkcs8 0.10.2", - "subtle", - "zeroize", + "libc", ] [[package]] name = "secp256k1" -version = "0.24.3" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.6.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" dependencies = [ "cc", ] @@ -10846,29 +11448,38 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.180" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" -version = "1.0.180" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "serde_json" -version = "1.0.104" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu", @@ -10877,9 +11488,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -10978,16 +11589,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - [[package]] name = "signature" version = "2.1.0" @@ -11011,6 +11612,11 @@ dependencies = [ "wide", ] +[[package]] +name = "simple-mermaid" +version = "0.1.0" +source = "git+https://github.com/kianenigma/simple-mermaid.git?rev=e48b187bcfd5cc75111acd9d241f1bd36604344b#e48b187bcfd5cc75111acd9d241f1bd36604344b" + [[package]] name = "siphasher" version = "0.3.10" @@ -11034,14 +11640,14 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "enumn", "parity-scale-codec", "paste", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] @@ -11059,6 +11665,113 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel 1.9.0", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.7.0", + "async-net", + "async-process", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "smoldot" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5" +dependencies = [ + "arrayvec 0.7.4", + "async-lock 2.7.0", + "atomic-take", + "base64 0.21.2", + "bip39", + "blake2-rfc", + "bs58 0.5.1", + "chacha20", + "crossbeam-queue", + "derive_more", + "ed25519-zebra 4.0.3", + "either", + "event-listener 2.5.3", + "fnv", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.0", + "hex", + "hmac 0.12.1", + "itertools 0.11.0", + "libsecp256k1", + "merlin 3.0.0", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2 0.12.2", + "pin-project", + "poly1305", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd", + "schnorrkel 0.10.2", + "serde", + "serde_json", + "sha2 0.10.7", + "sha3", + "siphasher", + "slab", + "smallvec", + "soketto", + "twox-hash", + "wasmi", + "x25519-dalek 2.0.1", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33" +dependencies = [ + "async-channel 1.9.0", + "async-lock 2.7.0", + "base64 0.21.2", + "blake2-rfc", + "derive_more", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.0", + "hex", + "itertools 0.11.0", + "log", + "lru 0.11.1", + "no-std-net", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", + "zeroize", +] + [[package]] name = "snap" version = "1.1.0" @@ -11067,19 +11780,19 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ - "aes-gcm 0.9.4", - "blake2", + "aes-gcm", + "blake2 0.10.6", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.1", + "curve25519-dalek 4.1.2", "rand_core 0.6.4", - "ring", + "ring 0.17.8", "rustc_version", "sha2 0.10.7", - "subtle", + "subtle 2.4.1", ] [[package]] @@ -11122,7 +11835,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "hash-db", "log", @@ -11130,10 +11843,11 @@ dependencies = [ "scale-info", "sp-api-proc-macro", "sp-core", + "sp-externalities 0.19.0", "sp-metadata-ir", "sp-runtime", "sp-state-machine", - "sp-std", + "sp-std 8.0.0", "sp-trie", "sp-version", "thiserror", @@ -11142,79 +11856,96 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "Inflector", - "blake2", - "expander 1.0.0", - "proc-macro-crate", + "blake2 0.10.6", + "expander 2.0.0", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", "serde", "sp-core", "sp-io", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 8.0.0", "static_assertions", ] +[[package]] +name = "sp-ark-bls12-381" +version = "0.4.2" +source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f" +dependencies = [ + "ark-bls12-381-ext", + "sp-crypto-ec-utils", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381-bandersnatch" +version = "0.4.2" +source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f" +dependencies = [ + "ark-ed-on-bls12-381-bandersnatch-ext", + "sp-crypto-ec-utils", +] + [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "parity-scale-codec", "sp-api", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "futures", "log", - "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", + "schnellru", "sp-api", "sp-consensus", "sp-database", @@ -11226,7 +11957,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "futures", @@ -11241,25 +11972,24 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "parity-scale-codec", @@ -11267,20 +11997,18 @@ dependencies = [ "serde", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-core", "sp-inherents", - "sp-keystore", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-consensus-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "lazy_static", "parity-scale-codec", @@ -11292,14 +12020,14 @@ dependencies = [ "sp-io", "sp-mmr-primitives", "sp-runtime", - "sp-std", - "strum", + "sp-std 8.0.0", + "strum 0.24.1", ] [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "finality-grandpa", "log", @@ -11311,94 +12039,114 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "array-bytes 4.2.0", + "array-bytes 6.1.0", + "bandersnatch_vrfs", + "bip39", "bitflags 1.3.2", - "blake2", + "blake2 0.10.6", "bounded-collections", - "bs58", + "bs58 0.5.1", "dyn-clonable", - "ed25519-zebra", + "ed25519-zebra 3.1.0", "futures", "hash-db", "hash256-std-hasher", "impl-serde", - "lazy_static", + "itertools 0.10.5", "libsecp256k1", "log", - "merlin", + "merlin 3.0.0", "parity-scale-codec", "parking_lot 0.12.1", "paste", "primitive-types", "rand 0.8.5", - "regex", "scale-info", - "schnorrkel", + "schnorrkel 0.11.4", "secp256k1", "secrecy", "serde", "sp-core-hashing", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-debug-derive 8.0.0", + "sp-externalities 0.19.0", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", "ss58-registry", "substrate-bip39", "thiserror", - "tiny-bip39", + "tracing", + "w3f-bls", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" 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?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.28", + "syn 2.0.58", +] + +[[package]] +name = "sp-crypto-ec-utils" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface 24.0.0", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11406,61 +12154,89 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std 8.0.0", + "sp-storage 13.0.0", +] + +[[package]] +name = "sp-externalities" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "environmental", "parity-scale-codec", - "sp-std", - "sp-storage", + "sp-storage 19.0.0", +] + +[[package]] +name = "sp-genesis-builder" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "serde_json", + "sp-api", + "sp-runtime", + "sp-std 8.0.0", ] [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "thiserror", ] [[package]] name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "bytes", - "ed25519", "ed25519-dalek", - "futures", "libsecp256k1", "log", "parity-scale-codec", "rustversion", "secp256k1", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-keystore", - "sp-runtime-interface", + "sp-runtime-interface 17.0.0", "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-std 8.0.0", + "sp-tracing 10.0.0", "sp-trie", "tracing", "tracing-core", @@ -11468,33 +12244,30 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "lazy_static", "sp-core", "sp-runtime", - "strum", + "strum 0.24.1", ] [[package]] name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.27.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "futures", "parity-scale-codec", "parking_lot 0.12.1", - "serde", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "thiserror", ] [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "thiserror", "zstd 0.12.4", @@ -11503,18 +12276,30 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-mixnet" +version = "0.1.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-std 8.0.0", ] [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "ckb-merkle-mountain-range", "log", @@ -11523,16 +12308,16 @@ dependencies = [ "serde", "sp-api", "sp-core", - "sp-debug-derive", + "sp-debug-derive 8.0.0", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "thiserror", ] [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", @@ -11540,13 +12325,13 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "sp-api", "sp-core", @@ -11555,8 +12340,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "backtrace", "lazy_static", @@ -11566,7 +12351,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "rustc-hash", "serde", @@ -11575,9 +12360,10 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "docify", "either", "hash256-std-hasher", "impl-trait-for-tuples", @@ -11587,75 +12373,111 @@ dependencies = [ "rand 0.8.5", "scale-info", "serde", + "simple-mermaid", "sp-application-crypto", "sp-arithmetic", "sp-core", "sp-io", - "sp-std", + "sp-std 8.0.0", "sp-weights", ] [[package]] name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "sp-externalities 0.19.0", + "sp-runtime-interface-proc-macro 11.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", + "sp-tracing 10.0.0", + "sp-wasm-interface 14.0.0", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", + "polkavm-derive", "primitive-types", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", + "sp-externalities 0.25.0", + "sp-runtime-interface-proc-macro 17.0.0", + "sp-std 14.0.0", + "sp-storage 19.0.0", + "sp-tracing 16.0.0", + "sp-wasm-interface 20.0.0", "static_assertions", ] [[package]] name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "Inflector", + "expander 2.0.0", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "Inflector", - "proc-macro-crate", + "expander 2.0.0", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", + "sp-keystore", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", "sp-core", "sp-runtime", - "sp-std", + "sp-std 8.0.0", ] [[package]] name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "0.28.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "hash-db", "log", @@ -11664,72 +12486,105 @@ dependencies = [ "rand 0.8.5", "smallvec", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-panic-handler", - "sp-std", + "sp-std 8.0.0", "sp-trie", "thiserror", "tracing", + "trie-db", ] [[package]] name = "sp-statement-store" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "log", + "aes-gcm", + "curve25519-dalek 4.1.2", + "ed25519-dalek", + "hkdf", "parity-scale-codec", + "rand 0.8.5", "scale-info", + "sha2 0.10.7", "sp-api", "sp-application-crypto", "sp-core", - "sp-externalities", + "sp-externalities 0.19.0", "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", "thiserror", + "x25519-dalek 2.0.1", ] [[package]] name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" + +[[package]] +name = "sp-storage" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive 8.0.0", + "sp-std 8.0.0", +] [[package]] name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 14.0.0", ] [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", - "futures-timer", - "log", "parity-scale-codec", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "thiserror", ] [[package]] name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "parity-scale-codec", + "sp-std 8.0.0", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-tracing" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" dependencies = [ "parity-scale-codec", - "sp-std", "tracing", "tracing-core", "tracing-subscriber", @@ -11738,7 +12593,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "sp-api", "sp-runtime", @@ -11747,36 +12602,36 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", - "log", "parity-scale-codec", "scale-info", "sp-core", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-trie", ] [[package]] name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "hash-db", - "hashbrown 0.13.2", "lazy_static", "memory-db", "nohash-hasher", "parity-scale-codec", "parking_lot 0.12.1", + "rand 0.8.5", "scale-info", "schnellru", "sp-core", - "sp-std", + "sp-externalities 0.19.0", + "sp-std 8.0.0", "thiserror", "tracing", "trie-db", @@ -11785,8 +12640,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11795,49 +12650,58 @@ dependencies = [ "serde", "sp-core-hashing-proc-macro", "sp-runtime", - "sp-std", + "sp-std 8.0.0", "sp-version-proc-macro", "thiserror", ] [[package]] name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std", - "wasmi", + "sp-std 8.0.0", "wasmtime", ] +[[package]] +name = "sp-wasm-interface" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#0f4e849e0ac2de8c9880077c085985c5f656329c" +dependencies = [ + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + [[package]] name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "bounded-collections", "parity-scale-codec", "scale-info", "serde", "smallvec", "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 8.0.0", + "sp-std 8.0.0", ] [[package]] @@ -11846,6 +12710,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spinners" version = "4.1.0" @@ -11854,17 +12724,7 @@ checksum = "08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcab" dependencies = [ "lazy_static", "maplit", - "strum", -] - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der 0.6.1", + "strum 0.24.1", ] [[package]] @@ -11874,7 +12734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", - "der 0.7.7", + "der", ] [[package]] @@ -11898,6 +12758,81 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "staging-parachain-info" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "staging-xcm" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "array-bytes 6.1.0", + "bounded-collections", + "derivative", + "environmental", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-weights", + "xcm-procedural", +] + +[[package]] +name = "staging-xcm-builder" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-transaction-payment", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "sp-arithmetic", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "sp-weights", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "staging-xcm-executor" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "sp-weights", + "staging-xcm", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -11957,11 +12892,24 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strobe-rs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabb238a1cccccfa4c4fb703670c0d157e1256c1ba695abf1b93bd2bb14bab2d" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "keccak", + "subtle 2.4.1", + "zeroize", +] + [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" @@ -11969,16 +12917,22 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", ] +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + [[package]] name = "strum_macros" version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "rustversion", @@ -11986,22 +12940,16 @@ dependencies = [ ] [[package]] -name = "stun" -version = "0.4.4" +name = "strum_macros" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.58", ] [[package]] @@ -12012,7 +12960,7 @@ checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel", + "schnorrkel 0.9.1", "sha2 0.9.9", "zeroize", ] @@ -12020,15 +12968,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" -dependencies = [ - "platforms 2.0.0", -] +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12047,7 +12992,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "hyper", "log", @@ -12059,7 +13004,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "jsonrpsee", @@ -12072,14 +13017,12 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "jsonrpsee", - "log", "parity-scale-codec", "sc-client-api", "sc-rpc-api", - "scale-info", "serde", "sp-core", "sp-runtime", @@ -12091,28 +13034,26 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", + "parity-wasm", "sp-maybe-compressed-blob", - "strum", + "strum 0.24.1", "tempfile", - "toml 0.7.6", + "toml 0.8.12", "walkdir", "wasm-opt", ] [[package]] -name = "substring" -version = "1.4.5" +name = "subtle" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" [[package]] name = "subtle" @@ -12120,6 +13061,12 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "syn" version = "1.0.109" @@ -12133,9 +13080,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -12196,7 +13143,7 @@ dependencies = [ "cfg-if", "fastrand 2.0.0", "redox_syscall 0.3.5", - "rustix 0.38.6", + "rustix 0.38.32", "windows-sys 0.48.0", ] @@ -12209,6 +13156,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix 0.38.32", + "windows-sys 0.48.0", +] + [[package]] name = "termtree" version = "0.4.1" @@ -12217,22 +13174,42 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.44" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + [[package]] name = "thiserror-impl" -version = "1.0.44" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -12294,17 +13271,6 @@ dependencies = [ "libc", ] -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "time" version = "0.3.25" @@ -12343,7 +13309,9 @@ dependencies = [ "cumulus-client-collator", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", "cumulus-client-network", + "cumulus-client-parachain-inherent", "cumulus-client-service", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", @@ -12361,7 +13329,7 @@ dependencies = [ "pallet-transaction-payment-rpc", "parity-scale-codec", "polkadot-cli", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-service", "sc-basic-authorship", @@ -12385,6 +13353,7 @@ dependencies = [ "sc-transaction-pool-api", "scale-info", "serde", + "serde_json", "sp-api", "sp-block-builder", "sp-blockchain", @@ -12399,12 +13368,12 @@ dependencies = [ "sp-session", "sp-timestamp", "sp-transaction-pool", + "staging-xcm", "substrate-build-script-utils", "substrate-frame-rpc-system", "substrate-prometheus-endpoint", "tinkernet-runtime", "try-runtime-cli", - "xcm", ] [[package]] @@ -12430,13 +13399,13 @@ dependencies = [ "getrandom 0.2.10", "hex-literal 0.3.4", "log", - "modified-construct-runtime", + "new-modified-construct-runtime", "orml-asset-registry", "orml-currencies", - "orml-tokens 0.4.1-dev (git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", - "orml-tokens 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", - "orml-traits 0.4.1-dev (git+https://github.com/arrudagates//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", - "orml-traits 0.4.1-dev (git+https://github.com/open-web3-stack//open-runtime-module-library?rev=7ecebeab7e3dbc2226ed58d32ee159271a8176ae)", + "orml-tokens 0.7.0", + "orml-tokens 0.7.1", + "orml-traits 0.7.0", + "orml-traits 0.7.1", "orml-unknown-tokens", "orml-vesting", "orml-xcm", @@ -12467,61 +13436,43 @@ dependencies = [ "pallet-uniques", "pallet-utility", "pallet-xcm", - "parachain-info", + "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-version", - "substrate-wasm-builder", - "xcm", - "xcm-builder", - "xcm-executor", - "xcm-simulator", -] - -[[package]] -name = "tiny-bip39" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" -dependencies = [ - "anyhow", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.11.0", - "rand 0.8.5", - "rustc-hash", - "sha2 0.10.7", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", + "serde", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-std 8.0.0", + "sp-transaction-pool", + "sp-version", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "xcm-simulator", ] [[package]] -name = "tinytemplate" -version = "1.2.1" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "serde", - "serde_json", + "crunchy", ] [[package]] @@ -12541,20 +13492,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "signal-hook-registry", - "socket2 0.4.9", + "socket2 0.5.3", "tokio-macros", "windows-sys 0.48.0", ] @@ -12567,7 +13517,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -12589,7 +13539,17 @@ checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls 0.20.8", "tokio", - "webpki 0.22.0", + "webpki", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.10", + "tokio", ] [[package]] @@ -12599,7 +13559,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.14", "tokio", "tokio-util", ] @@ -12614,7 +13574,7 @@ dependencies = [ "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "tokio", "tracing", ] @@ -12630,21 +13590,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.9", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -12654,12 +13614,45 @@ name = "toml_edit" version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap 2.0.0", + "toml_datetime", + "winnow 0.5.3", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.0.0", + "toml_datetime", + "winnow 0.5.3", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.0.0", + "toml_datetime", + "winnow 0.5.3", +] + +[[package]] +name = "toml_edit" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" dependencies = [ "indexmap 2.0.0", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.5", ] [[package]] @@ -12679,14 +13672,14 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.5.0", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "tower-layer", "tower-service", ] @@ -12711,7 +13704,7 @@ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.14", "tracing-attributes", "tracing-core", ] @@ -12724,14 +13717,14 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -12749,10 +13742,10 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ - "polkadot-node-jaeger", + "coarsetime", "polkadot-primitives", "tracing", "tracing-gum-proc-macro", @@ -12760,14 +13753,14 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "expander 2.0.0", - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] @@ -12816,9 +13809,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" +checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -12891,7 +13884,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.43#5e49f6e44820affccaf517fd22af564f4b495d40" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "async-trait", "clap", @@ -12902,15 +13895,14 @@ dependencies = [ "parity-scale-codec", "sc-cli", "sc-executor", - "sc-service", "serde", "serde_json", "sp-api", "sp-consensus-aura", "sp-consensus-babe", "sp-core", - "sp-debug-derive", - "sp-externalities", + "sp-debug-derive 8.0.0", + "sp-externalities 0.19.0", "sp-inherents", "sp-io", "sp-keystore", @@ -12931,25 +13923,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" -[[package]] -name = "turn" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "futures", - "log", - "md-5", - "rand 0.8.5", - "ring", - "stun", - "thiserror", - "tokio", - "webrtc-util", -] - [[package]] name = "twox-hash" version = "1.6.3" @@ -13019,16 +13992,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - [[package]] name = "universal-hash" version = "0.5.1" @@ -13036,7 +13999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle", + "subtle 2.4.1", ] [[package]] @@ -13057,6 +14020,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.4.0" @@ -13074,15 +14043,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "uuid" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" -dependencies = [ - "getrandom 0.2.10", -] - [[package]] name = "valuable" version = "0.1.0" @@ -13108,12 +14068,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] -name = "waitgroup" -version = "0.1.2" +name = "w3f-bls" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331" dependencies = [ - "atomic-waker", + "ark-bls12-377", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-serialize-derive", + "arrayref", + "constcat", + "digest 0.10.7", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sha2 0.10.7", + "sha3", + "thiserror", + "zeroize", ] [[package]] @@ -13147,12 +14122,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" @@ -13180,7 +14149,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", "wasm-bindgen-shared", ] @@ -13214,7 +14183,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13236,14 +14205,14 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.112.0" +version = "0.116.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" +checksum = "2fd87a4c135535ffed86123b6fb0f0a5a0bc89e50416c942c5f0662c645f679c" dependencies = [ "anyhow", "libc", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "tempfile", "thiserror", "wasm-opt-cxx-sys", @@ -13252,9 +14221,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.112.0" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" +checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e" dependencies = [ "anyhow", "cxx", @@ -13264,9 +14233,9 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.112.0" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" +checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe" dependencies = [ "anyhow", "cc", @@ -13291,35 +14260,33 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.13.2" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" dependencies = [ - "parity-wasm", - "wasmi-validation", + "smallvec", + "spin 0.9.8", + "wasmi_arena", "wasmi_core", + "wasmparser-nostd", ] [[package]] -name = "wasmi-validation" -version = "0.5.0" +name = "wasmi_arena" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" [[package]] name = "wasmi_core" -version = "0.2.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" dependencies = [ "downcast-rs", - "libm 0.2.7", - "memory_units", - "num-rational", + "libm", "num-traits", + "paste", ] [[package]] @@ -13332,6 +14299,15 @@ dependencies = [ "url", ] +[[package]] +name = "wasmparser-nostd" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "wasmtime" version = "8.0.1" @@ -13453,333 +14429,115 @@ checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" dependencies = [ "addr2line 0.19.0", "anyhow", - "bincode", - "cfg-if", - "cpp_demangle", - "gimli", - "log", - "object 0.30.4", - "rustc-demangle", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys 0.45.0", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" -dependencies = [ - "object 0.30.4", - "once_cell", - "rustix 0.36.15", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" -dependencies = [ - "cfg-if", - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "wasmtime-runtime" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" -dependencies = [ - "anyhow", - "cc", - "cfg-if", - "indexmap 1.9.3", - "libc", - "log", - "mach", - "memfd", - "memoffset 0.8.0", - "paste", - "rand 0.8.5", - "rustix 0.36.15", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.45.0", -] - -[[package]] -name = "wasmtime-types" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - -[[package]] -name = "web-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "webrtc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "hex", - "interceptor", - "lazy_static", - "log", - "rand 0.8.5", - "rcgen 0.9.3", - "regex", - "ring", - "rtcp", - "rtp", - "rustls 0.19.1", - "sdp", - "serde", - "serde_json", - "sha2 0.10.7", - "stun", - "thiserror", - "time 0.3.25", - "tokio", - "turn", - "url", - "waitgroup", - "webrtc-data", - "webrtc-dtls", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "webrtc-data" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" -dependencies = [ - "bytes", - "derive_builder", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli", "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", + "object 0.30.4", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.45.0", ] [[package]] -name = "webrtc-dtls" -version = "0.7.1" +name = "wasmtime-jit-debug" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" dependencies = [ - "aes 0.6.0", - "aes-gcm 0.10.2", - "async-trait", - "bincode", - "block-modes", - "byteorder", - "ccm", - "curve25519-dalek 3.2.0", - "der-parser 8.2.0", - "elliptic-curve 0.12.3", - "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", - "ring", - "rustls 0.19.1", - "sec1 0.3.0", - "serde", - "sha1", - "sha2 0.10.7", - "signature 1.6.4", - "subtle", - "thiserror", - "tokio", - "webpki 0.21.4", - "webrtc-util", - "x25519-dalek 2.0.0-pre.1", - "x509-parser 0.13.2", + "object 0.30.4", + "once_cell", + "rustix 0.36.15", ] [[package]] -name = "webrtc-ice" -version = "0.9.1" +name = "wasmtime-jit-icache-coherence" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", + "cfg-if", + "libc", + "windows-sys 0.45.0", ] [[package]] -name = "webrtc-mdns" -version = "0.5.2" +name = "wasmtime-runtime" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap 1.9.3", + "libc", "log", - "socket2 0.4.9", - "thiserror", - "tokio", - "webrtc-util", + "mach", + "memfd", + "memoffset 0.8.0", + "paste", + "rand 0.8.5", + "rustix 0.36.15", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.45.0", ] [[package]] -name = "webrtc-media" -version = "0.5.1" +name = "wasmtime-types" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ - "byteorder", - "bytes", - "rand 0.8.5", - "rtp", + "cranelift-entity", + "serde", "thiserror", + "wasmparser", ] [[package]] -name = "webrtc-sctp" -version = "0.7.0" +name = "web-sys" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "webrtc-srtp" -version = "0.9.1" +name = "webpki" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "aes-gcm 0.9.4", - "async-trait", - "byteorder", - "bytes", - "ctr 0.8.0", - "hmac 0.11.0", - "log", - "rtcp", - "rtp", - "sha-1", - "subtle", - "thiserror", - "tokio", - "webrtc-util", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] -name = "webrtc-util" -version = "0.7.0" +name = "webpki-roots" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "async-trait", - "bitflags 1.3.2", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", + "webpki", ] [[package]] name = "westend-runtime" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ + "binary-merkle-tree", "bitvec", "frame-benchmarking", "frame-election-provider-support", @@ -13791,12 +14549,16 @@ dependencies = [ "frame-try-runtime", "hex-literal 0.4.1", "log", + "pallet-asset-rate", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", "pallet-bags-list", "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", "pallet-collective", + "pallet-conviction-voting", "pallet-democracy", "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", @@ -13808,6 +14570,7 @@ dependencies = [ "pallet-indices", "pallet-membership", "pallet-message-queue", + "pallet-mmr", "pallet-multisig", "pallet-nomination-pools", "pallet-nomination-pools-benchmarking", @@ -13817,6 +14580,8 @@ dependencies = [ "pallet-preimage", "pallet-proxy", "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", "pallet-scheduler", "pallet-session", "pallet-session-benchmarking", @@ -13832,10 +14597,11 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-vesting", + "pallet-whitelist", "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -13845,11 +14611,14 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-beefy", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-mmr-primitives", @@ -13858,20 +14627,21 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", + "sp-std 8.0.0", + "sp-storage 13.0.0", "sp-transaction-pool", "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", "substrate-wasm-builder", "westend-runtime-constants", - "xcm", - "xcm-builder", - "xcm-executor", ] [[package]] name = "westend-runtime-constants" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "polkadot-primitives", @@ -13880,6 +14650,8 @@ dependencies = [ "sp-core", "sp-runtime", "sp-weights", + "staging-xcm", + "staging-xcm-builder", ] [[package]] @@ -13980,6 +14752,15 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -14010,6 +14791,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -14022,6 +14818,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.34.0" @@ -14040,6 +14842,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.34.0" @@ -14058,6 +14866,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.34.0" @@ -14076,6 +14890,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.34.0" @@ -14094,6 +14914,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -14106,6 +14932,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.34.0" @@ -14124,6 +14956,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winnow" version = "0.5.3" @@ -14133,6 +14971,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -14165,145 +15012,69 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0-pre.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.2", "rand_core 0.6.4", + "serde", "zeroize", ] -[[package]] -name = "x509-parser" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" -dependencies = [ - "asn1-rs 0.3.1", - "base64 0.13.1", - "data-encoding", - "der-parser 7.0.0", - "lazy_static", - "nom", - "oid-registry 0.4.0", - "ring", - "rusticata-macros", - "thiserror", - "time 0.3.25", -] - [[package]] name = "x509-parser" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", "base64 0.13.1", "data-encoding", - "der-parser 8.2.0", + "der-parser", "lazy_static", "nom", - "oid-registry 0.6.1", + "oid-registry", "rusticata-macros", "thiserror", - "time 0.3.25", -] - -[[package]] -name = "xcm" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -dependencies = [ - "bounded-collections", - "derivative", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-weights", - "xcm-procedural", -] - -[[package]] -name = "xcm-builder" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -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 = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" -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", + "time", ] [[package]] name = "xcm-primitives" version = "0.1.0" -source = "git+https://github.com/Moonsong-Labs/moonkit?rev=51e3068808fb58f30ffb16bfdaa81d0890f98fd8#51e3068808fb58f30ffb16bfdaa81d0890f98fd8" +source = "git+https://github.com/Moonsong-Labs/moonkit?rev=c6ed5d19a90ef175e8464d026cd40a4e0891b926#c6ed5d19a90ef175e8464d026cd40a4e0891b926" dependencies = [ "sp-runtime", ] [[package]] name = "xcm-procedural" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] name = "xcm-simulator" -version = "0.9.43" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.43#ba42b9ce51d25bdaf52d2c61e0763a6e3da50d25" +version = "1.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?branch=release-polkadot-v1.6.0#61801ce324f18eacb9c29e2f674f0d262a00bd4d" dependencies = [ "frame-support", "parity-scale-codec", "paste", "polkadot-core-primitives", - "polkadot-parachain", + "polkadot-parachain-primitives", "polkadot-runtime-parachains", "sp-io", - "sp-std", - "xcm", - "xcm-builder", - "xcm-executor", + "sp-std 8.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] @@ -14326,7 +15097,27 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.25", + "time", +] + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", ] [[package]] @@ -14346,7 +15137,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.58", ] [[package]] diff --git a/tinkernet/Cargo.toml b/tinkernet/Cargo.toml index 47cc5f6d..74808f36 100644 --- a/tinkernet/Cargo.toml +++ b/tinkernet/Cargo.toml @@ -19,17 +19,188 @@ homepage = "https://invarch.network" [profile.release] panic = 'unwind' -[patch.'https://github.com/arrudagates/open-runtime-module-library'] -orml-traits2 = { package = "orml-traits", git = "https://github.com/arrudagates//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-tokens2 = { package = "orml-tokens", git = "https://github.com/arrudagates//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } - -[patch.'https://github.com/open-web3-stack/open-runtime-module-library'] -orml-traits = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xcm = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-vesting = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-asset-registry = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xtokens = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xcm-support = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-unknown-tokens = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-currencies = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-tokens = { git = "https://github.com/open-web3-stack//open-runtime-module-library", rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } +[workspace.dependencies] + +## Crates.io dependencies +codec = { package = "parity-scale-codec", version = "3.6.5", features = [ + "derive", +], default-features = false } +hex-literal = { version = "0.3.4" } +log = { version = "0.4.20", default-features = false } +scale-info = { version = "2.10.0", features = [ + "derive", +], default-features = false } +serde = { version = "1.0.189", features = ["derive"] } +serde_json = "1.0.111" +smallvec = "1.6.1" +getrandom = { version = "0.2.4", features = ["js"], default-features = false } +async-trait = "0.1.48" +clap = { version = "4.0.29", features = ["derive"] } +# RPC related Dependencies +jsonrpsee = { version = "0.16.2", features = ["server"] } +futures = "0.3.25" +derive_more = "0.99.2" + + +## InvArch Pallets +pallet-inv4 = { git = "https://github.com/InvArch/InvArch-Frames", rev = "cd32136741df27328818a76dd979bad55f837396", default-features = false } +pallet-ocif-staking = { git = "https://github.com/InvArch/InvArch-Frames", rev = "cd32136741df27328818a76dd979bad55f837396", default-features = false } +pallet-checked-inflation = { git = "https://github.com/InvArch/InvArch-Frames", rev = "cd32136741df27328818a76dd979bad55f837396", default-features = false } +pallet-rings = { git = "https://github.com/InvArch/InvArch-Frames", rev = "cd32136741df27328818a76dd979bad55f837396", default-features = false } + +new-modified-construct-runtime = { path = "../new-modified-construct-runtime", default-features = false } + +pallet-maintenance-mode = { git = "https://github.com/Moonsong-Labs/moonkit", default-features = false, features = [ + "xcm-support", +], rev = "c6ed5d19a90ef175e8464d026cd40a4e0891b926" } + +### Runtime Dependencies + +## Parity's Unique +pallet-uniques = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +## ORML Pallets +orml-traits = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-xcm = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-vesting = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-asset-registry = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-xtokens = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-xcm-support = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-unknown-tokens = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-currencies = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } +orml-tokens = { git = "https://github.com/InvArch/open-runtime-module-library.git", branch = "polkadot-v1.6.0", default-features = false } + +orml-traits2 = { package = "orml-traits", git = "https://github.com/arrudagates/open-runtime-module-library.git", rev = "bc6b41e8a9539971a2da5d62cf8f550cde985f00", default-features = false } +orml-tokens2 = { package = "orml-tokens", git = "https://github.com/arrudagates/open-runtime-module-library.git", rev = "bc6b41e8a9539971a2da5d62cf8f550cde985f00", default-features = false } + +## Substrate Dependencies +# Substrate FRAME Dependencies +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +# Substrate Pallet Dependencies +pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +# Substrate Primitive Dependencies +sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +# Polkadot Dependencies +pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +polkadot-parachain = { package = "polkadot-parachain-primitives", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +xcm = { package = "staging-xcm", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +xcm-builder = { package = "staging-xcm-builder", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +xcm-executor = { package = "staging-xcm-executor", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +# Cumulus dependencies +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +parachains-common = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +xcm-simulator = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } +pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", default-features = false } + +### Node Dependencies + +## Substrate Dependencies +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +## Substrate Client Dependencies +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-tracing = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +## Substrate Primitive +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +try-runtime-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +## Polkadot dependencies Dependencies +polkadot-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0", features = [ + "rococo-native", +] } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +polkadot-service = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + +## Cumulus dependencies Dependencies +cumulus-client-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-collator = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-consensus-common = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-consensus-proposer = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-network = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-service = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-client-parachain-inherent = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-relay-chain-interface = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +cumulus-relay-chain-rpc-interface = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } + + +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "release-polkadot-v1.6.0" } diff --git a/tinkernet/node/Cargo.toml b/tinkernet/node/Cargo.toml index 5ca6a435..56f83ef9 100644 --- a/tinkernet/node/Cargo.toml +++ b/tinkernet/node/Cargo.toml @@ -15,104 +15,101 @@ name = "tinkernet-collator" path = "src/main.rs" [dependencies] -clap = { version = "4.0.29", features = ["derive"] } -derive_more = "0.99.2" -log = "0.4.17" -codec = { package = "parity-scale-codec", version = "3.0.0" } -serde = { version = "1.0.151", features = ["derive"] } -hex-literal = "0.3.4" -async-trait = { version = "0.1.48" } -scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } +async-trait = { workspace = true } +clap = { workspace = true } +codec = { workspace = true } +derive_more = { workspace = true } +hex-literal = { workspace = true } +log = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +# RPC related Dependencies + ## RPC related Dependencies -jsonrpsee = { version = "0.16.2", features = ["server"] } -futures = "0.3.25" +jsonrpsee = { workspace = true } +futures = { workspace = true } ## Local Dependencies -tinkernet-runtime = { path = "../runtime", optional = true } +tinkernet-runtime = { path = "../runtime" } ## Substrate Dependencies -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } +frame-benchmarking = { workspace = true, features = ["std"] } +frame-benchmarking-cli = { workspace = true } +pallet-transaction-payment-rpc = { workspace = true } ## Substrate Client Dependencies -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } +sc-basic-authorship = { workspace = true } +sc-chain-spec = { workspace = true } +sc-cli = { workspace = true } +sc-client-api = { workspace = true } +sc-consensus = { workspace = true } +sc-consensus-aura = { workspace = true } +sc-consensus-manual-seal = { workspace = true } +sc-executor = { workspace = true } +sc-keystore = { workspace = true } +sc-network = { workspace = true } +sc-network-sync = { workspace = true } +sc-rpc = { workspace = true } +sc-rpc-api = { workspace = true } +sc-service = { workspace = true } +sc-sysinfo = { workspace = true } +sc-telemetry = { workspace = true } +sc-tracing = { workspace = true } +sc-transaction-pool = { workspace = true } +sc-transaction-pool-api = { workspace = true } ## Substrate Primitive -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } - -substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", optional = true , branch = "polkadot-v0.9.43" } +sp-api = { workspace = true, features = ["std"] } +sp-io = { workspace = true, features = ["std"] } +sp-block-builder = { workspace = true, features = ["std"] } +sp-blockchain = { workspace = true } +sp-consensus = { workspace = true } +sp-consensus-aura = { workspace = true, features = ["std"] } +sp-core = { workspace = true, features = ["std"] } +sp-inherents = { workspace = true, features = ["std"] } +sp-keystore = { workspace = true } +sp-offchain = { workspace = true, features = ["std"] } +sp-runtime = { workspace = true, features = ["std"] } +sp-session = { workspace = true, features = ["std"] } +sp-timestamp = { workspace = true } +sp-transaction-pool = { workspace = true, features = ["std"] } + +substrate-frame-rpc-system = { workspace = true } +substrate-prometheus-endpoint = { workspace = true } +try-runtime-cli = { workspace = true, optional = true } ## Polkadot dependencies Dependencies -polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "release-v0.9.43" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.43" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.43" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.43" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } +polkadot-cli = { workspace = true, features = ["rococo-native"] } +polkadot-parachain = { workspace = true } +polkadot-primitives = { workspace = true } +polkadot-service = { workspace = true } +xcm = { workspace = true } ## Cumulus dependencies Dependencies -cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-client-collator = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } -cumulus-relay-chain-rpc-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.43" } +cumulus-client-cli = { workspace = true } +cumulus-client-collator = { workspace = true } +cumulus-client-consensus-aura = { workspace = true } +cumulus-client-consensus-common = { workspace = true } +cumulus-client-consensus-proposer = { workspace = true } +cumulus-client-network = { workspace = true } +cumulus-client-service = { workspace = true } +cumulus-primitives-core = { workspace = true, features = ["std"] } +cumulus-primitives-parachain-inherent = { workspace = true } +cumulus-relay-chain-inprocess-interface = { workspace = true } +cumulus-relay-chain-minimal-node = { workspace = true } +cumulus-relay-chain-interface = { workspace = true } +cumulus-relay-chain-rpc-interface = { workspace = true } +cumulus-client-parachain-inherent = { workspace = true } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } - +substrate-build-script-utils = { workspace = true } [features] -default = ["tinkernet"] - -tinkernet = ["tinkernet-runtime"] - runtime-benchmarks = [ - "tinkernet-runtime?/runtime-benchmarks", - "polkadot-cli/runtime-benchmarks" - ] - -try-runtime = [ - "tinkernet-runtime?/try-runtime", - "try-runtime-cli/try-runtime", + "tinkernet-runtime/runtime-benchmarks", + "polkadot-cli/runtime-benchmarks", ] + +try-runtime = ["tinkernet-runtime/try-runtime", "try-runtime-cli/try-runtime"] diff --git a/tinkernet/node/res/tinker-raw.json b/tinkernet/node/res/tinker-raw.json new file mode 100644 index 00000000..83a71217 --- /dev/null +++ b/tinkernet/node/res/tinker-raw.json @@ -0,0 +1,91 @@ +{ + "name": "InvArch Tinker Network", + "id": "invarch_tinker_kusama", + "chainType": "Live", + "bootNodes": [ + "/dns4/node-7035768434637967360-svc/tcp/20368/ws/p2p/12D3KooWHvCJfU4ECPycriYndXDiVGUbRChm7yqjYibp8naiKpuv", + "/ip4/51.89.42.188/tcp/30333/ws/p2p/12D3KooWJNV8QmahywWtP33M3u98FtfuaKCqkTAeWpVp8MV6YyA8", + "/ip4/198.27.67.139/tcp/30333/ws/p2p/12D3KooWGtNcSLuk5cAYqACFSEd9ikA8J9ZiG1eYm1znGF51cnv8", + "/dnsaddr/tinkernet-bootnode-01.bldnodes.org/p2p/12D3KooWJNV8QmahywWtP33M3u98FtfuaKCqkTAeWpVp8MV6YyA8", + "/dnsaddr/tinkernet-bootnode-02.bldnodes.org/p2p/12D3KooWGtNcSLuk5cAYqACFSEd9ikA8J9ZiG1eYm1znGF51cnv8" + ], + "telemetryEndpoints": [ + [ + "/dns/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ] + ], + "protocolId": null, + "properties": { + "ss58Format": 117, + "tokenDecimals": 12, + "tokenSymbol": "TNKR" + }, + "relay_chain": "kusama", + "para_id": 2125, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0x4d080000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x083c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x0000514a8d0e00000000000000000000", + "0x1f8bdc55dc469e3071666b4d031a661a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9290b5c744b1943f8fa57cab0b1cb5e983c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da979daff7f8e8c62a5ef45658cc6a5a8f16d6f646c69612f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000000001258b6d586690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9ba6e88986932e53f58982e26a47a41ecea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9bbf3b2df0c9c0af7179ef6f63d0ac1e5f430c3461d19cded0bb3195af29d2b0379a96836c714ceb8e64d3f10902cec55": "0x000000000000000001000000000000000080c6a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9c4d6f811c49fc0acab87b8a9ff90c5b5725bf57f1243bf4b06e911a79eb954d1fe1003f697ef5db9640e64d6e30f9a42": "0x00000000000000000100000000000000008039c3cd5cd4380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x042c74696e6b65725f6e6f6465", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00584cac045ead05d3115320d4324a07c6fff19b88fc3aae87e140d2150c1104569a733f0bce333adffa795602289b76a6e84aaddcea79790d489fe3c4988ca0a2985d342cf608625c10add80b371b2a57f67ff7b7bde5de724b29654a295113701041114f082e2d2d2d2da59e9f36c9fbe7408f7164015d5fa0ca4bdfcbc2b6ce4b429cd166f47cbff252ffae6c28e3f9d95973c232fc769597fe395d0dfa72589adc54d53fdf4d52a1fb30c11e764837bfbe6a7cd0d75df3438f83d972593676fe6d14d65943f27fbe1ad2f6afe3a5de82be261b3b04b63aa3162ddfdd26f8f3ecab35d9d8f7215fa1ab00066cd969bd87ee37000733387871c0768dc9018a540b1bf475ba1bd876c5c3153f80df9516399e2e0936e8d1df0e689eacb0c3ea59d6f389febc9d872566b642141ebac014642b0548a8d0a8ea4f1a55815668543d456954dd5c6854350d35aa2e99870e1d028de2871ed4a85da560e9a19fd04231757ddd3373c9c0617ddd3a1efa362a7eddf91af4d08d34aa3e6f877e6ad4f3610297e0bfad979e9d35253b6669e9b9b382b46a96963e29e7a33f2b49d9c7179eb382c480ef3dc29e247f9d3650a39078cdb743ceca7a92fce8ac3581f2ed91431af2edcb2131e0798fb0aff600d577b76b841f8d1a0454593cc9fedef3a1a68fabcfa553c9d5137cf42c31c4a06429b592f657551fb3f85d23b3abed4656579fafd7a824faf3a17e1a93d7f934697ffeba1ac3b7efc7aef2f7e3d89d36f79cb2a6c2d0ef1aa9196b4adad99da87da89f37e1d835616f53a3a443ffa121cd476ed9e16a07177ce4a243e834729c843df6e0356b643d72bce6577b802a8befa535b23ed491eba55f8d49cbf0dca876e859a39e435f20d819ad9adf125491af28e80e6dcfdbd97358c2414d2f806ea67a40341acc7c9ddfeddddd61bebbbbdb17a8abd0e5c0d6ee8d7afefcd4a80aff3d076a14ffa381cb3fcf5ae8a5de57235f7ffef9f3e70bf43aa3a023ba52b65dcd10c4ef6a298f03fcae6430f3da50bbf475d828cb7f9d5adcbee4f8e9a2367ecb5fc61a918480ca72ca1a13e95657a54ba7ad31d95efa6ab04fd057238a3ed4d2577b74b5d955d54fb7b83a2d1f7a1657e15bbe1ad1746a71d5016f395dedea2a0c7fb9c5d55dbde592abdb27185e7021ca0a6f79dd3ed5276f79952a3cc9ed5f1cd25bb3664d1e2fdde26a0a0f9d726671d09d586f4d0ec97ad9557eab43e2356bd6acf9aafa28931eb3d79de7c92f09747b9ec0e87260db950cabaff3772543985fcf5a8853eba646ed6a298fdfaf3fbfbe40cb00ba469ae3678e1f368a7df761a3dad72953ced86967cb384cbc08a24ffbcfa1b73f8da8bb5d1c265e18d1a77d76c86d9f9ae36f8d7db5d7c1d588669fdaf79be35f4d02cb62e87efbb6b3d775baedebafdd685f37d4aae6095076e620b0ad96d27c85df3ed9e7dc27b45da46ecf5eb787cc2cbceef7de33350afa73faa23f1823e4f8bbabed4f68a3370b54fddbb751cfd7b751ec8fa38bdad6619fda5923da6efb5427d1f6a97da851d8d8db4d8d7a1cffd6a8f69d46c1c7edaf067da8879a399f26f3d9e773e7d3e439fb73ee92f861b71a13f6d7555ea0ee8cfcb704d563b682ee2f50ddbe9d6ea32afb73e840b8301b7bcdbeb74fd00db0b13b61377addf6097675fefa5053e6e06b990d16a9e6b1e4dc70c65cffeab1488dbe6c37097b7dbe7d5a9f8daafccfd7e9e30ab03d5f5f6dc9f6a9c25f7fddecd3fa50d39731f75edb245678e99118f058e4b3b7679bc40aa7792cd9b3b7db6c122bbcf4480c78f6f6d69cc0a5a567678dc9b6f4ec59a3f6db5763c24bcf3ed4433dd4433dd4cb6d9fd617a83ba3edb704d5e38e836ed32db2b1afef4597001bfbfa5e748f6ceceb7b51f66d545de76efbb4beae62f64177b5e4e5d7a28b64635fdf8b83018721c60f30ae0b27049783cfe144701f381dbe8573e144f81543caf0225c066e850331e48e21451842046f624810860061c80f849c31c4cc1031869031040f5fc2b90c7963081c43863004cd103143c61812c6103386a031848a2167b81343ac1832c590278674e15ddccb102fbc06af620813436ce039b80d43b418b21aa2862b31e48b21690cd96208190733048c21590c69428899216584a031c4092169082123040c2162846021a40c212c103286901e8444c1d303213a084181901d84e410a408426a10b20ac2461022842c057123481b426c08c245903541c604f942080e41c8040123881742b20832459030824021844b102c825011248a205708b921481541ee0812832045081913c488203b101246902082d4100487205c82d8f093c78f117ed6fc98f1b3c50f163e42f0c9c3c7083e7af820c1870d1f397c92f053834f1c3e76f8fcc0a70e1f3a7ce6f0f1818f1b3e3bf079c347073e3df0c981cf9a1f1a7a70f859eac9c174049f21f8f0e0474b4f103d40f4bca0e7871e1f7a5cd0a3444f123d33e859a2874ccf173d52f444d123a687899e267abce8e9a2674c0f173d5bf468d1b3eac9a2078b9e2b7aace8a9a2878a9e303d53f420d1f3a5e7881e19f418d153440f113d31e8f1d203839e217a84e851414f0f3d2be8d9a187871e1498f43021c1b48729093d3798de30b1615ac37486c98c690c5313263026204c3e98b6f00c8147083c70f0b811038f0f78dee04983a70c1e333c67f08cc163068f0e786ec0b3060f1a3c64f0c4c19386470e9e1df0b0c1d3060f0e7872c013064f143c52f04cc1a3044f179e1c7870e0b9e1e6871b1f7ea0f1630d0a041f4908724357d1645a8c1f5f74b250fae165270cfa868f307c30e143091f4bf8a0810f323ec0f8a8818f277cd0a101c126091d1d60774c2d6c76a05ae4c821a5b88a9033065683cd1bd614338dab8ecb8dc78317870e0cb2377e18b153c6bf3c329e186f0c0c8a2065e870c1495c30b86eb876b874b886b856701d71c9e032e2f27211711571c5e04ac1c582abcbf58259c6e5c385c3f5c325c4a5820b888b8779c63433cd98645c28b87ab872b85a7005318398424c2074b4d0d9e25a3d3a681072dad80143870a1e1e0459e984617911c40a9d229870e019501efc10c36ef00e380deb80dbe01c301b8c03be01afc168580db601a7c167180d3e83cd60335c0693c16370991f37f8c1e12787b7454f97f7c693e3a2c347173633a06bd02e5e180e8379a66bc8dcb0d1e181915307a607b685df9859c8283435b407340e8c8b0e11571e6f8d9c38ae1d501df0cce0b531a48ecea2ad90629a0aba7a39e07901c5c11585cf607af1638c23e142e4943164073f6c7867fc58e2a5b164786e3c33d40dda86101e5036289a1f455854f85863d28156073684216e3c38ae391c87eb0e9a031e2ede992174bc2f7486f01758523c2e5c07ea831f4b9616b9b2963c091b37e80d7476a0d386c780a6793d78636cf6b8a1213e318bd0de681bbc32de0d1e1b2f8d878367c653c306053f5bac2d3e7b503a74f0b0c1c386083b44684de85421cf483434289e0f6c6ec84943d5ec208185d1ec785dd0347666b0c3445423d3f2a3065713960a7660f0bca0783c347684783ba049b068a03fc0aec0aac0acd08240ebc0a8985ea8999d224c5d84c011cde8e142cd9862d0327c68a1fd8082a14b501a502572748061814da1cd41d1e835ae27343a768ec0a4a067ec7ca167280d1713510c0c0d86066606560626841d31da062c0a9d2bb01f681258109810d80b22143939c8d9c185c515e6bae21233637051c1e3c5ce103c4198e8603c4c2a7836a072b4133b5e7878b89ce0d9e192a2a5f831f353c64f1cd71226c6d26112f1a3866b8a0b0a0a079d6307081f41a036d0310255c39ae107055618161816991f1de60c53061d1a7466b0cecc2db386a965da306998394c1c72f2c831420e1e3947c829428e1e3948d0b1c2fa42470a3a034c8bc90c0b0b2b0d1b1cac1d7e6478645e19ab088b0837820bc28a810d1d3e042f82b6ba6ab013039d384c58fccc601223d3481dc429a2143fbe903b9067fcf04247ccbc43670a78843403ca409a99438046e860018b805f640eae2c62145715b1060f0de3c0373c1d741a3e7e70ddc0d406dd412ca39387c908d916216f482a2c17f07c016dd0930298c4650515c2abe3cda113e6e971d18096f1710417818ae1a3085a0fa213340c931098087388a785e6839c3313063ef0b896e8b1818ea1c9f1b2906bdc870b0c2523078d9c33b438de2a870b9e394c39f0014297e9301a8ceea2d16835fa8c9ea2c334141d4583e927ba064d03d6a365e03d7eee682d3c78340d26327a064e42e3d03798a83055610ac377b01a1e020381c7082c06ffc03eb0174e24c059b0177601c78085e0179856c02d18800018089e3c4c3998ac305dc132f0d20b55a888e0e80311203a419328503280811446f0000da80e107482092bc81d50fe654d89ab5fd115291f80f282942217a040a1fc5aa05204050a863dc102942a20a0c2e4e8a84a039258283a3aaad28001604eec95a32952928a5a80525404022258135b050454a640298195a211204199f2c2275129124109a43c718c892d62814a152a50a44099f2c217b140a58a0492a88ca00a0b2c7c108c062d5461a1a885211898bd528222232857ae94a0a809952a53ae5c29aa00872db12498f2c25b2932b25225034e384c8985523482a2114cc0022d14852004522c30002c89bd62c442910b2ccc60af245129b252e40295298e2141650a087cb02fcbc2942b54a6584982a1084a098e5e78410a142b452d1c4d1941ca88852a47a91fec881501142949525a90925414011c4c0626987224654ad2142a537c60468c808522188a72b022d64a95066418117ba5684ad2142b555c481a81141d2c064ba5ca9424295646d00294a42a4757a04c79e1a55819c1fb884cac110b558e3e00a528494a0b538ea460b1592e3afa8094242a2300019424168aac4c6981ca1428507a7ec42ed60a0c2fc2fcaae8ae96969e55af474a37a41bfc025b9068c992eeee5ea244c991234444dd4a96b412a257c23a8065bc4a7825d0488047692c813eca2594105f09ef8a042881527e4c29bfc7911ff38b9499f9bdc7ccaf637c31bec7578cefbae87bfce29331522a97c6c9fc9ee477c58bf95dcc2fbe281fbd68bc4cb82e1963a4fc5e8c8fc678bd7e3afb1e33e5c774eebcae4835e6f722bd64b45ea4f4e2b7fb7623a597dc5dbee845a3bcf83d19df9392cac8d8bb9ebce2c5b4f9511b29e70500292dec7a9a15a38d7551aa5d549b313e4dd2b81ce3e36d005f2c8048314a2595cc1c24e3a5808b297d2fa210295ff43dfa3a5eef51ca52f27bd77551a692e9e3d4537a5d73324b795dd79c74ceebbade8b7162314e4c3eed5df18aef316b8f326b31c6cb8608a5911f7d4c849be945e9a431c6f82e7eef4566661adf2ba1044a995e1c197bfc68cb96524e79c5be364a63a42f520a215346e1a294089148e411e9c7fc9887284fbce4755df48a724a29af78c98b238d343e05c47d17b30dd59832c421c2364cc486528e942ef38c3066994d8c9232132192357d7497d2bd68093838ccf43180529a024d81d2145e0a94521ae31569a434d28b461a696466492f4adf0262966519550033a710af8b2fbe9a5eb1dfe3f7284b4a63945232b3c4ae8bca93bc64b4a264293bc678c5482307a170c518142f4963bc249554d22b5e941a71208e59c63cf18afd12101f4dc2acc394c613101029538a02120ae4096d2808a12644144421a2408013980091b3c97cedb2a42ca575492c5e97a4576c4a65bc268d4ce37b4c8908a1578c91295ff1001753be98a9bce42e4738dd007cc52ccb98b9004141442ee68b39524969c7bea2bcfa92d89c73caeb8accaf041aa39452c6f720a5915e534afade3321c6475f2440a48c6159c692e5f6db17e3a37cbd47e9eec6234ca9919f98c50829119e48f9451af91161e60150fa984216409113d34899469a6559468408a594c6a531d248e34523e547e97551ca94d2c7ef3d7e940680464a99be8b3253e678313333a5cc31527a454a2f7a31bde48559f29a00909aa6c528297df19a2ca98c4cdf15e3c5ef5dbdd715fbbadedb1837bef8a4e4472933735f2f524a63bc98298d915e0fe8c918637cddd67bafdf2ba1e3e2b6cbd8f23d2c521adf7befc53864e37bb0dfa34c29534ae97551fa68a454a3b15fa48f29a5bb948301178367b30528c2527404050629221822640b10822a47504240654a084250e5a8e7004747538c828210f939f99c728ce4100122809ea0ad85a3292eb00025e96804524050d442118d88014c5b802429568aa81485c0ca1500f0ac018aae5c29b2f28208aab000c54a11962a2c14598122e54a0b2c14412980110a0503bcc042d115211b17584892f201282e5c9942650a084e3f4030c54a1116280828000a2818a085222855925e288115164a70188a5aa032050a9529525c60010420a8d2f968a1c84a510b56aa4041a16080a22956920420822949544660a5c30141d20882e0c050e40294242a53acbc0085852b534460454ad21522db951eb806a852c50a102316a47ce0e8a88a1501ec4829b202a404454650926028a2224427a928043d375792ae4c81a1e847db0250a9322589052957a848b1920425698a084450e594b30680610a088aacbcd0e158915274c482cfd60295a2175e9002a5280452ac5449baf2b32210c24545564000c54a9524292c54393a92f273022a080c55489024048582016eb60050a8549972c54a111628480c5000280628329272f4012821a032c5852b525c809204439163a152f474b64b60a58a088a4420b150297a02d0b6e82c9c254b47d91825068e21868ea262a51838068e9285b3b092aa95942c28a3ac9292549a4a4a2a4b4949a5a4a4a4a452c1282a565252615156754551e28db22a25954a1555338a8a959454aca4a47a515649094651b192522bbd282a2525d58ba26295524751629592d28ba2c44a1c458995943aca2a71945552ea282a56e2282ade28bb51945849d55156a56a95156565141543952a46592556714751b14aa57a5156c55154ace2282ac01b7877590457a46c42be7d7b42aa2ac46c7184174ed4400f2fa9203fdf7fb5eefc877aeb4641cacc7ba495be9dad8ef7144f00ff5950be8fce6b42f48dce59befdfdd39ec70c6291d2b23aa4f77263a792dc59f4f42503c5ea23d25ba307935eda3df232f6e69840cb93e65b49dada04ee2acc9a6372aad0a53fcd491618a1b3c62486a83581ff960c144dfc73d53f6d89eaa1cf463d67a796bfaef65b59f75b4e67f63426f0353f9be9ab29793f3ba4f796ec763527d1578b40ec603755163f1b5e9dcf979b3b6c4be2ee493a6c14ecf6e1f3193522abe3a47ee9f05793d16387a51f76706b29de63c93185e62f16912523777cfc7290deed34a99f5d093bb343f8ac460ef0638cb1fb027db52f5c3c053ba5145260a009b83320dc141bfbfef3d554280ada4cee402723408db29cfd64e4ea26509fb61d7c72f083bfba3abba3a0bfaeebbadcf2bd661aee7d3a4daffe407d62cbb7278475fe8ab07357f9a7d7f9757beccae1ba7c9f90121a766871061b70a86183d4e5b3513f7ff9b6facb4d61fcd5d5a3a09f9dbbd59976363f3990f6bb3a6288af1e04e311280bc1d49261df7ac22f8cf0c8f4d2a1507b35f25b816d573208e2717e574634f1ab7199cefe53676739fbc5edf48977564b4b4b35a4eacfcf5405fae9fb84526c0cb1861721c0d401446afa6c94cf4fdf96f8e932a8e26757adee2868d3b2edd7ed1b35213bdbb0b16f4f68a6d84d4f8897969696b8a4d81fd7dc4e176137d16033fdae8ea8e1b1df950cf4f805e2cec89558c5ef7d09da1214048483e235aa85f615795ea35bded2a1d72313b5b8c96d0d5bf47de9433db9f9fb8466aa7d5a58f8b9eb44607ad919418f9c084c6ff43c5b023b6e1b4ca6f7de7befbd6ee8fd5ef31a1c9969d8eac6dcfc9d5e8052500acc17e98f4b7a4ff4858ba764a7149402133b1ff80ffa73c84aac82cd6b3c6fa7dd9ad327a34b7fce92db98418de8458d88bdb5f834a2a9023f66349c8412cfddae6fdc230df7483b1023bc18f1c3b36745dbae8480e26bf66d040bbe3d5bb8499eb7c74db2df2e7f5746ecf0a63e6d7c8420d3f7a951261ae4f8f69fd9a8baf3bdd32817d6b7eee66b16d402da64a3f17725c4982d40169fed1ea0faf52c9cb20149aa062429305754bf4e03af4981d96e074021e48c3623e844beb2b7ab64547ae8f58ac0bef1d2978b2e39c85955e9e5b4544ea849c56e69c9e0017abd9ec8535e6d0344fe29b1aa5f9f69920d806e0bd9789d9ad70df3ba43bd9a7efdd72bd06f3dd5147e558f719a4f4ef59452ea33fd72cde9cd72025a86afd90929fca6d66d36c9fe7a1012e95442874ea153aae2ecba2e0e290b75a4f7d4296794dba73e8d7c9a581edda23ed4d68dd5c4bab1a84fa717e6fb17d629997ef955c743c79c8d877e397d9951f42bf3c9f15f18867546d12bf42b2a2757549fb99174c89a139875970fbdbfa6cc56cbba9ae533979c0df7ba86dd02704a8b8dd7b05b00e99c1a7a19476526b9e736dca626d7e4ea8c3487aef96a44dc984df327a9cbae6a4e3b1fea964787ae753eb46b325dfaa492c3dc329ad36a32ad7975553a754ab99ab9cfe5fbd425e773754aa253a7ddbe0e651e3a75da99c49c7695bf4acf9cbe0ce332affc994725d42f5f8d09a5fefcea9078cd45bb8a511f7a91e397cc6f2de1870eaf97c180aedfacc316d272b916308f72d6ab983da7951f309b5ad89cda122a8fa4c4241bf29a04545e2e6d89cacb234579cc69966d9aa5a84120bbb84d5d5276946a0f50ed90694e8256cd634e3bd33427430f503de69ad6a4ebcdee72b4a94a3cbc74fafa3d1b9baae4e5a5631c7ba63969c726b729aa6593db94d498b4cbae2a7d97255efa36395fa2f4ca565bf25458cd49fb6302fd3de9f5b913c81ad27ba3e7d15953a2fa68c96ef7487dcecf884b109f94a14b0f6f099347e4a1f5e49372bda35b9c8fe5fbef593e25e7634de72725f7fef193d7256dd63709cfdc5be9d4dac716b459cee224b77be4c9d6327cecb63e11b1f8c5c10b4421d77df4ede6306f0d02aa2c5e738cb553c79ce7e5469953a71857a9b7a6694ee9664fab18d621dde0e0783f68352f8c96b4b9f1b88f23a530b31cf3e874e37c36dfafaadf1ce3ac043d123f96a4fecd6d389f8d7286718b84b7e1fadf63dc12e16db8f7f465361c7c6a2df783964cc2dbbcbfb1710a9721843637cbc60dd74b703ad8a7e7dcecd3731b4eba11e6d4ab53487db525ec94521f6a0a351586b0886118e694bf667be4f95c6e8636dd3dd9e0920caff9737a7115fee54fbbf1f7fe72edc66d6c2e4f926f53fb2fd7382b369e24ffc6576b02e5c686bb9c72a6711757f92f5f0d029773d7fab2d56d7dea3e76a61bb68a40df0d13b9e4b9f4a1b6bc9da73fcb27d172268be3aac4c26f592ea7cfce5f725667343d461feaf79e25a5bff7de7b4859bed9db1b696be78e1cbde17c9af379ded372f6c959964faefd71eb96e56fcee9ab31798149947fafdb35327da8a74be946cf2da7939bcfad2465ff3c49fef3f7423b89f273ce6ed7c8eba60f3dfab2d79363b76417b9dacefeb425fc4bf81fecb8ad4feb2ac9d615a61be81472fbacb553d65cc56c013abdaabe39cbdc5ddf99e5999b437a3fd4f4460599ab599696966478c85dcd625948d69a356bf4786e477acf1d12ecea8bbe5c4deac75c3ac5b2fd115c92e16b3b92a5870c6b1ecb3482fe7cb97ab974cbb7ab5bd68ec5fa76a4a9650619de0a16ebafa89edf72d29bdbb7b8ba2e7dbba47eac43623d1e5e5c523ff4ce8709affe796b44cf25b73ef42657d9a53f0e4b3f5c23edb2abf435d2be9a9207206579e85b9fafd555d55b9ce5a73757e1eb6e6ea7f315d5afb723bd7f2e911e13f8b0337a0eff79b7b308168e403f7003998f42d917a86e1fd8d8d735fe6c93b0b7678d5a1e0265a73732f37d5e558c719a12cc1fe5ddf7b87ddabcbdcebe47827e5d3299dcf4e9436dfae9d36a4a2e678ee96a44fb70b63e617e39adaa67ced4a7f58b831c7395392cfccc61e1c7309fdc3ea4aff93d1ba4f73e4ade5f7e75be47d6f927877546731f6a483302d3af2ebb890edda459d99e37d3c9d5e917d655d563ab1161b4ab599ec2d7f501ec970f3da42cfffc7affaee71787b46dff2ceec84b8eab3cb91a9ddde27cb843e29703f8d588d82db6c6a0cdc3436fce6833b29cc857abe32e7ddaefd2a87de8459bc44ad07f59576d0f9c7db78b9d961a8ea4a273d149b143e72e8dda9962ab47cf5dfa043d88074fb444671fea295be52e0fbd2e0f1e7a96f5ed1551a59608414c0183299a48b3b4948abe29e696a0123a1431031162525a6a389262e7a293d25243a7a47359408a3d725c1690ca02c602ec599ebc22d0d9cc438f9e058c05a4c72ecbd02b025d7659c058203a7759fc15811ebba07d45eafcbaab157b5d335b041bc0f8f2831b24b18333fca173526c9b52b1a08c982186d002cd1343486d6abd0659c0979652dca551449e79506a153fe885ee26a941aa1bc7a04b0895fec9371e76b2ce0bfad551995d9d7ea47242cdcb6e7a7d5dcdf2d0d9a73f0e92b1c3cfee4b945e95be1ea982f84945015a562fbdc2aec2f08fca92c1c34baf2678383b2a0bc7cbee09125898a0c616f08630fff3bbbae187a79d49ee4b967525551029ebcbd28f369ca0c1074bd0f9cb521014c8a0072f5600e08509324b492f2c1cff65c90435b658c2a2002d2b1896960c1e52ebd5042f7d3701bb26d45dd960c627f17f9961e14859ddd2c291da2ecbba12952162b0860c7a2c2da562b7a4656929b55eb3f8ebea0b1466915b87dcf3d63060821a5aac49adaf86019c1db471c41e34ac59935a1576feb5aa9558c54aacea28b3a00f422e3ab33563f4e793db62942d83a7451b9c78539f227d194397ddf62976fcb03b0d5db24fe726e16888839b78cebb47d6fcb5641fffe30ef669558f7988e710fafadc24d1d7697cd514f4a6bfcb9ff427fdf9257d4ae9cff2f7de7b1ea5d3ce1acc50b74b67e93ed0f9fb7d2013d2a325213f9cad866e74b849a4afc74dc2bf4e2577429f62111fd4a7e8abedc3c9faf4eafcc0f4278479f4d313a21efda751b04fd3a323d924be47a647a7dcd645a663dcec22d3e713327591e9d14d8dba3cf2ac6cd0f2f5848fce23a73f2fbcc6a73faf41cdfff469b236ddc7f2f7fd3e6ff9ae6cf8f2bbb241066fead3748904ffeab64fd3e2e21e595f0dee91f5a1961cbf52ab623f28e8aab0c5d88f007495f84d7746ebedccbd75760a33d694acaf376f0bdbbaf4a5ac29e1daa9e4f6a313e9ed166724bd9dc60c2e27fd691190debe9b849760ef92c9baec2a633ed414e32a96ad56a933463923cbd75b5362b915016bb5085cbe5d9d0f83961964587a2b985f513dd6618e5449808424acf92b6b06891e7078ea57544fbbed13d6d5f549596b6265515b82bd9432c608217cef7537f3474d09bfe56f3ac6ed47ba596b4ab0aef263be1e3525d8ef1ea9984f1f7a984f13cbd7d7ad0a4367341d29cbd7c764bee5553a37bde1c7c97e573604f1708fc4c8f5c5510eba1cd8a057d3470f6a549d481a15833e7af413a29beef8e83f2dd4a998c247231f7d6b547b7c1ed7237bf4058a9dd1ae94e82eef72730b74df8e2f61033dba35a3bf25bd2e9ab71cc9dc5c6894e52934ca7acb5768d4ae6a30f39677a08560ca5a343be62d0dc9f629fa50ff346add72ba9c0507d3f116d76ffac15b4eb7799f8d65f96c14bbe559a3da2d5f20ab335a350f092d689a031b7b35997e760b1bdf0e797b9c98d912bb49f89d01cff7f9dbe7dbdbf925f4cab6d1d5e8958d7d7d3c87dce3a6ec6a4b0fdf6e646bd4b3bedd9f675fb7dff9c7657dca28a00aa3c60e6184c08238e0c821b51027ebd34260ab27e8481a55b7d39632df6ea4853ad5297c7bd3efd7cd3e2d77d9ef6acb150f3b539f7857af06ba1d98d90600ba16d8da2945e2ef14a4599279f4e6aef0b7b7a6c2fed51945aef64767ce0aef91e849f39176cd536f4d49e69853ce2287f96a2aecd36e04a64f327df4ca1f9be3cf382c9bd325c1d69ef9e59446bada12cc2f67eee29ae337d4ccd5cb9fb7d6047ae6ab31b93cf3a15e623975e6a85f5ce64f6b327d3a77bb47d8873ae36a779753aef6b30f3d8c43e235bf7e71fb93c3321fe9edb1f4eb1657935825b9e1e8e12317ff8c78ffe8743db0ed4a082d7f83c45c74bada9266875ddd3d527735441938f420b71fb9aa7ae88ff36912b93062af5754df1d161fcf21d2ae59b3267a6b4ebc497becaa8ab97d0a392c3ecc281902b9c8c53f2ea99b0cf9268f33eacaff3cc62e89fef6a9ee4a88329fd4ffbada8e85fff9f37f9c7f73fbcc25d15f5745ee1fd06da10829e4f82d6084185f97ec9124c4d7a4a510a4f99ac4c312d2d72437cc585f4790822fc648934609a6668847da356bf6404203109e8928b03513bfab1ed27c7bf95da960f5a7df550ad4fcd328b03d297e573f14f1bcfa5db9e08d17c0efca053bfc73d69ccca5a5ce20f73e725ad60c982bd663e90f8115269ac086c4df447e3522a4eeec71ddb34684049796be9dbeec716bc753983d6e85f034668fdb3b9ec64c6a4a968d67e3e94629a5842de56329e7c9861d72fd8f0b7a2556753f306c5c407f575ababce987fa48b3831d63aca143cd0da9cd829e9fb24604fbc4be7de2ce877dbf26bd87cd1a11774ca02fb74fe96a4b6457fda5cfd6f6e1c03e7535e93de6a646517ffed3288b5ad7d5d5cb31bfac6cfbf5ad51d6e5cfa9c5f1d3ab4f99b3b6047bd8a7acab99636e71fb1997f4fe72cabdfc6c2c6e9f72fbd865faf5f9846ef0d47691dd23f5e7b7abf2ed42aef22331607d72499188d2ce56931d73cb3d6d1f4e9d0fb56d9cac4f407d7a6eb9f7e9f96a44d6931cec2abff4e536ae679f7afbe790dbf7190f5f6a44584250554fc5faa4f7edaa5f6d493b124fccdbb12e0258f8afcee7c87a2cefa7d56d0dc67c9dff449a8fd14dd15773226597a9a292544125565931670c0aa535af5fe72f36760ba314da40ed0931e4ad0e69c82689bf59489ce62d8a7184145a325bcba2d07b36ea29795f9f5f7e694da2bfd52260d1aebe499f633ec53cc6194ddfbf38a3d9f934811efbdf1206bcd52131e0b56c37c932ec076daef46391db3547d6d6d32ab029eb75d9642d861ca042a3f6a3bfe8a69f264ca68fd1d483733d3b2fafc6546e9f64f763e2621b7a424367c67491fda13365fa64a61ba221dd727ab3957a741a391ab9faf6f8e8adfacc679c0eb526b2c9db63e9ab920c1fd73c55faacabec18f576a829e9afec17edaaeaad59f3436fa851f09891e59d4f93e8d2a3cb0efeabfd37ec2a8c5b07ba43ddfee6b47c5f7ae468b03c8b2a65b965759633373b8b93d29fe604c6e843fd3c3207b9da5ded9c95387617f0270771337da87332a0d34318bdfe3cf4f1d0e4557be81e57e8c92bd23b0e1d6e121d875d7df2ecfb468c9c1a65f47ca52341af30f07448bbe6bf50a7ccf1f0fc901d1087b13d8eb7af76ead33a73275fd72141af3caeb97cd221417fee3cf3bb279bf7e6a66e37339bc73593e3fdb20c263dc3c06512e07f2f3c7795487aec8e82de08097ae5ccf79f6b1c0d9a6751a534cf38136848d0ab8faecef741a4699ad66dc1d8254f87f4a3fb9239f4c1edef705f34d7d1fc71f5c9cb0e88765c7a52597743e65bae2bcbfcda925dbe2573ea5b30cdb750cc5f78425a17f48ab463735edb9699be06a9e11c5f6d097fccb8d9396ecc6679509fd623bf12cb9170370e3d5660537376495da41d87db382bf1bb177ef0d8ea9cdd25f113416fe8fbd1bbcefaf3f306cdb7645a365d73ccb75cd8756d4fe806ea5b308a61aef9bae909dd60e35ba88de634d33230d135cf5c73eaebfe04125f8182ea094f78d1b88c9baf08748ae4a163dcbe2217b7af483d71bbd121b78b9345876d75b25b265e2cd1289fe8d0e33e44f3d077fe2e7d5c0d764cbc58a24f9892a5924f670cf569ef276eb97514f4586784f4bcb66379ff25fafed2003d8b2a053d7226808ef4bcceaece9fde4f6ae0d4e5170536052147030d5994d664a10320e0818424ac4941dfa24ac16e8bf4abdb2d52db2d1f7ab33e794b895334ec9a14979e14f4e690bec0ee06e811763798525ba0c7ee8699da325f91f52ddb1661df02bb2c180c6210c50f2cc8420c2f29a545834412b69c81238d3dc0a4f615598fbe6517b2c76e7b45d6b7ecc2cef48aac3f275aa5a7ea08bdd005820b89b8bb7e24cf417d62ad3b1eb3416f2fe802d5c8c33fa7417e70af415ac0d8685e4ff85753f8e7408dc2fc9dfe19f9b7496004dc86cbfca6c91b537fbafdcbb4993f5f27d4f4c5c1b7e1be6cae715fb8786a5b7d2ffddb3e7690ab199946594bfc6d1cc28734665a046cba6c720f1b16a49b8f7ed938e4ccb021c7bb63a98b0f46347105993369ea8079442d8dda382d6034afc153602c7f6428d49a44b7bada7d7683a55d5b3dc1c36b9e694dde98aeeef4e9b9d6dd70fb96b6f5b0d5b7fae95023b2b264a52fe1b7fc86ebb7e1764da899b3b3d6a45df3d59ac4f0990f35994669fe5ceb6a7fe6ad35895dd6552cfcf589a56fc798c01e6ada21f147c7b847262e2fc76863790c6f75dd33d3ef4c9fe23f337be439185b7d2b33dc8ddac883d6b30be8e59fd3d5887e387dfeef6ddc26d9bc89368ecdd823cf29e7a147ebd1a797c75bb199b77a631e9967e6b16132c3e3f5c1f1cf9999dbe4ad11f5786b443f4a72e2927d1c322fbd974c1548bcf4ae22cccbcd6b8f8e579ceb83783b50a3a4b71b6914106733afc8f3e66cc75923fa31c4c4b3ddbccf26791faf8d7a7bf271f65d216b8bf838f4f1c81a1766665db67d20aec41f8863196b4440dcc7897e7ca837ae6eee9ec3d51cd7593591c74bef9e1ee98ec515afe39d539d4c87e3778e9fae4634c4572372a7cbcbcfa6f3a11e6a1f3fdeaa13e2dc870851d2df39fde1fe43231ae23f3422f71fdd866d3e9d06d1f191060e39ea504377321de72a3f90d3d58802e0ab111171cad36ff5c6f4e9796b6fd5a7e7bcda2ae4218fc703ecc1874d9247a3dc9f3f3d1a35c485789d44bc422d01787900c02becf2cf9f9939b7cd645afffa4c59bf37f7b37107e2c3c11e22dea31105c07b342222dee3deffe383057e3bd2cd77a7759b03796b4a80dcc7dba705e43eee03f4b434aaf3e78fcb13e23cf31f9f4601f1e7cc46a37afc39a76994c99f331c8de2f1e744b8d7449f9e07807b50f4e93900b817c607a629716fd7e1dc697325382dc199c7b1c0efe931f5f4f4b88d5b3cb2c75442e7d3c4bdc77bbc1beaf691e5b88eb6c407891fc8b140771bf741e22fc1b1c0476235df39d2cd779d07f1a83991ee1d167ea0aeb66f0e35273ade7558f84be86abb0f1f7a391a518e8eb624a733da7cba910f4fe2d771ca936dd37db079a34d7bc73d1ffaf49ce35e105de4b973cf883e3d1fc23d24faf45c08f796e8d30be235af4167faf43c08c768faf45c876336faf4dc07c769faf4fc876338faf4dc876339faf41c08c775f4e9790fc76afaf4dcc4f11d7d7acec3711e385ce5c7f1a9b1992d36247d7abee33fb813faf4a2c6669e4f1f5d9d9b4e57b7addbe9822ec79cd7d82448aca61d4d6b4e6413e9661a65e3cff94ca3d06c926d82c4af83855fa7ab397ee35bf4b75b4d3ff472b87d1c6e7fe36ebac96d653dfe79c655d35736f3cf2957f98e7f8e253192ece0ac37cfd08b9007840b0a831e866d574d70f9e8fe32ab3d38dfedbc42ed441df4d4ca2c8d28fad388de955d1ad1f328ad1d8e1c509fa05f38d0db839883db456d897fcc88383677079be318ba1dbbbb772f38638c17b77172c6f7a064e2c2e9003b76510cc3ae2cca97c785d3429cd735b5e86ddbac15a6afa9771ad5fea4d454e8c86d3b77dba28c2c48ea07dfee2e77bfed65287ea095657d82965f1ad1945607afeec2f981520c0cc7027dda4e17865dd9e43530da219f65354e0a7d829694eb644d94f14118a113104268cd18ad0bfae4a0c48100844cfab534779c81d685e3803ebd18637469f99cd239b350114a8650caa8faababf0baa2b4248c51c60e8a89dbb6c1cb638c382ef489623dbd5d4ac96d1da1c6443a86c13937594646dfb62de2acd027ccdb2f59e774e8746a44504a93e5dd4ea5a5a9b0163fc66d7d59d65afc9cac99bb6d4a16f6c5b20ec639da071f77bf6626224e9425fb735adcee11276bb278104a0e89ff8aeae7738b8313e7499f1eb4ac7ecd9a7dc2839921c70aa343ee0a3f8c0eb95d9c17babb9fc6047a6cf85ed77ee8dc901ff37bb1ab593e7a0f753ff8b8fb354b8e50a8f0d4e8ed8edeef456e2d9ca1e732ebd39b7d7a1a93e8b31f364ae3b625c7f175b0613bdc6e08adaec28f56b74f3e18e1ee6ebfb72d0698159826ba98ee3843a59c7325cea94f5b9fbcbdc2d7669fa0eaa3efb2e644fa95e56b52bf847021677d624e6b62ad59b3668f870e1b253b085b68be22cfe3b38f0962fb5dd1008ea70114bf2b26babce97745833b9e7636fb14b3bce57076154e1f6a9584dcec53f45641c6d93ec1ed135b1cd5a0ec0de5c4329b2d6727636e7797b56849020f66eef7c3080861943c55589665cdeb871934c3300ca31916874da6699a6673238380936ddbb6e1e4e4fcae94c06327d3d1d1d1d9f16173034ff6e3c78f1f3c26e80220594f4f4f0f101f1c2082643f1ad1eecf8fb6840ba251211973cb4d106cbb52a287af7c6d92fdb949aedfd5124bbca94f43325e228a372dc5ae69c9085ff366de3e7a80c1171f8e5062881b245ea0c3b511f1460eaa583387124ab8010039f29873f6e070c40e6080c8c38e24d4d004d0972ebeb4a143960295137464e104184cb8c1022494f005892f50e80003147e57496cf13f7e57492c6119b19b247e85cf6bfcb7499e1697ec477efc9807f044104b4644f1033c84b073cca1851045b8808b1e700097d27c3b7dbe35fe3e8d4bf65ff451d2ff9153d2cf11899ffd713e4ab89f7f350b6c4b4b4b4bdbcb38763b31c66ea74f1becb64f2b0758a051f584a132dfbeed7dc2a239e1db4fd856e8a521861a682c8179638c54bb6985543d9869838c0aa4a8411567a4da7d8554400c61843dced430c30c8648b59f56a8023894b14497367050c511360dabe083616c12c9ccfd1466cc65db8e89665e81fe0b74ee674fcf31ceb4a7e717b7b3a73d3db7b86c4fcf2537f7f43c7270774fcf29cca046f4053a6b4bfcc7b4b365fff0b943caf2ccdd7bfc5e07fd7735833a7e9bef0d1ebeddfa375f6a4429f4a9558000cec6396c69449b53247dea14e8afc7cde8cca646a4617fc31ee9ecba5e037b04cb4c585504980a40bd024dafa75f155e915e24599115323900360198af13d92457e68bb3e9e8f89327392a3c59321078127370746e6e7ca8557842f3c98d571b2da7ab593ec78786fad426af4878bc06fdf07af2e1d5ffed783509adf08ab4d70d88d7f93d5e331d7f0e3749107f1e37c98f3f979c001f7f5d3d4ae19f23e1eae38678d89e57244b52180ac271973dd2fec3310af648bb0fc73ab009ed4038e6a14fed3d1cf7d0a7f615a4f7e9a59bba7af297ced35537bdf41f5d3549f7d1d54dfa4e0789d876b88e4dd2bfc3b1191b361d1b975c0e97d41f913ca1ed1569140ab66d1c6ee3b64f373d30973dd28e06cd0a262e1b7be993c66d9fb415f648115b652e0fa626c766fa44a64f48b2af8c8699afb8a10750a4c183a517ccb17a3871c5194b4ae86026cc06a1054b48b1031270d821c49259c28c253d942863694b07fad45a74c935970c72704fd28a12f848593e3a13f8b1fbc2c5f7b90b73e9537b9415980bb3c175301a6696bc6454a8410878fca006083db420826a052a1043863896cc7869c2023b10a18e2188d041114758c00e6a0c01891f7030042dca989e10737945daa1571ee975337d6f5c78be329a6fa7f399cb13da54ea2bc3e0dbb14c72fc445fba35a22f96536ef788748ce33541fac5bd3d227d72708f48672e4f286e11e9fd03031f3e7c6b2fbd320fdf56b7af0874296507fad42bb0993eb5bf8ec974a61db6ba68da3bd0a8ca5c8e1a5591acd02886e3db91f876d8a17932727cabf9eee12b926faf4be6db91348acb0aa978b063071acc604c0dec7823d5ce3cac50f6032bf000c20f46306208a976f661855442b83187165dbe88d9638c543b7b59a1a2218a48e30b1e9430238b54fbe3d84bf3f05b82ea8712abe2f339822e50eda58741465f94825260a4f30b1f933e1a6179ffc504d39786e95954a939b92d74b50974d39b8b1dc7d518969c3ccf2667f96a13d894e5434d836a69e585072e5a66906129b545957a5c95dd7cee801e6e35f2d0fb047da8e13312ebe5eba689384cbcd0b22b2466f095d33c745e4d329b1946f3903feb53c763dae156374d175bdd34b1abf3eba6e9a5d771061abb4d42f9315b5e27ec2270fbc4b077ba48f4d688b8db56b0d5d91ab360abf3e302e20e3777773bdbe6dccf09ba4075d57002f8d7e126e9df6c91980ab015a99cd0be22d16bcf6f9dd9b549daabe92d0ef6099ea05f1cc66d7d82de9a927ee8fb847c6c11e8273cf43ae4c843af260004894fe8f48a44cfbc4eea75fb5dd4eea90ea9433e127d913ed4a727f4e415893eb3ae4edad5edebe915815d357d3d7d7c027dcebafd16a9a6875df5f1ecd5f43426fed5e861db74b7b34778db13fbc5657b629fdcdc13bbc5c1dd13ef3cdcb2a9047e774dc49d052afc0af4ec74a105fa14899ef42992a99be6d9a594836e532d96f8e24d374b8cb17b64fbb4534c2a309952600263eb5ed58225225c918422b6dc4046aa39f958236aa76fa81fafd3dad5a3ec239c9994976571430fc97ae9437d7155e9ade62e5f93faa7bfe7ab59b30ce5ac35268c039bf09e4bcef291ce5d9eaff8a1a691632e6c42bbc5557ef9bac7e1c026b44719b9ac4f33600389249ef6bee69858cd71973eb5ec90acf89a9bcdbdcf067aa39ae3cefb24cdd0ed6edf7ea858b2cf4e3522f6a711f1e3d7fefaedbbe2e9cd0251a16d69694986d47a6b44dd3d845d043217dbf61c3a74c854dcfc7ec1c5120b54b72450c89796966648d569ca62db59837efdf484545eba488213761cb1440ad2a40291e3c30e0611216f9a80a1890aa9d8e09165e6fbb1ac38ffbcf2c3ae1e59661ec21d3d3608bb09840bb359657cf48a335f76569a3df25ca7898ddd0a7fb5d2fc9b2eb93bb2cc4c9f26542c330ffb74d304bf2d706032e1000739b0018515c8f1058d3b5630043652f2cc9923341b7d83edfa5d9d3173660d1a3a0768727e5767e438c3461ba6d32369143c1949814daf089f64d009d3257c1a5174d3eaf2ee9a8c0dfeaece88f9d3ebee33547c37d0694f4f089ebc4f3fa6a0131ac5ddbe9d09f3ed3b91fb79455e67329d8cc827febd288599327ea8b2d2438923fc200424d4a081c60bd028c2da4cdbceb6652b68f28224f028421c3d940923759d710612d0b0418b33417cdd1c9eb1a6654d1d74d84c96659d99e12dcbb22ccbea31369bdf151a77bc99ec7785861c1f7f5768bc2186ce4635fb7233ab9a398c8b5ed2c801bcd0a00b1f3c7105193aa4a0196498cc74195719973b905334d7256520f3d00c321e5e735a329e8ca0e106a351e6b7df151a578441eb17d82d29815907637474b4de1d9567573226a8b9080a92524ad902d95bd0f073461ead8511bc3f419ba98c2b0629c870c60f3a18d30589d445c619649ca1c6f493160ee47e75710376861566b4f8ea41479835b8ae24e69c9a0e1228e2081a70400334b430628c33763823082d6ccc40c219376861e6e4404fc86065464b9b31238c9931ba8cc702231cf20063851720e2d0416a9631e30d337ad05a98d9f95d9919c20c126abebdbdd86a182e4f48c6b0af88942ebb18247df284cc989ed0eb7c30f0a4bf4d6daafa043895050c06d88e28c2584a45879e4549faf3083b25d96da350f98a678f41e9754b8f0d3a7a584a4997619ed0832e3b9f0970ca0703b15f7b77ade6b70425a8e27e46a0fb9b24cc73f4760cbc2e86e80ddb2dcbbb8beef36457a745b36656cde6b169568ee7569030003d3a069e477f127d350cf86020c6003d763ed2a3ab529bf279925a0de9c964a7c07279769f27483c7b1655aa8967574aad66011fd93df1e1d9a39767df5416c84bddcd57847da8955ac54af0411ee8f6ca645a0505ad5664fc7003192ab061c8ef6a8c213cfd5d8d2147993bc64053a64b991ebe17a899d8aa7f5b7e793b507b772fb161be8f39bb85596e0469d4882e7831b12c670d66579dbfd6cc82de114c49984c41ad4450901843e002042d25fcaec428234616dbb663fad931fd6cd64e9f2211d666da76b60d7631c41463da766e9af8ba393c631333b5f080072eb8e8424c1d5bd688d1850aba78c1755dd7155160e40b1ade68a3064790a38d30ba58ea628bf41973c7982388393990184640b9b49980b8a137d35c4b0c1e721003871ac248c28b2e08a38d19c2484343cfa0c5fcf85d8511c7c3df55186f7018ab30ccd841b7df1a36810f40c6bb11e2dd7e5de525adc90d16f8b0db7dbb47962b43d7b91a400eee11ce856d575d34f10be1136faa29fcee98df135a68a6c6c0c1451ebfda1551c6286d8812c0820644c8238f951a3a48c52f3efad6c5978f5d858d84f6bb0243cbcfdf151829800d06c5d9e9938fe5fb05107a7c741fab53f2451075bcf4939133dfbe420b2df4da4f68d4aec894095a325ae01219385ef3b2ab2fca7c5d3638c5c48b2638265cac987031a64fefbd5e7c3b132fa0586e9fdb3d9976c674e956c385a2da6537a79c72ca29a79cd26b5b163f25d21fa4b35146ed96f3b42c296384f0bddad09f479f4964b7af66d4fe9ec31cd0ed27f475fb35f10ccdcdcf0e1bc287455090c9d4b1bf84a9bb6ff7d1c0dcfd1e843166cb69445c0532f5b06dd72bd8b693416cebd146ebec5188c54b6673d67dfedc2876fb98e7af655361f8877a5ee7fefac388c05ed62dcbb22ccbb2acb5164d5d34dd7235859f73db4c75d61914f475ae37101be675c9cc337fb90abc5981ec05d6409f04317714f42208faed8cace99653ae023dad3b4fbdfe3cf5a76e6a548e53cf9a521ba79cb3e33eb8eaefc3879e0f2e674747c791deebf86a443a5d0a39dc09dc7ec97cb19bce66dbd67b4e8cbb7afabad5ed837ebb0d7b1009b4bd87586a71947626b9ed2a7361b61dd32fd8a6d74d239de5b4ba9deecbf3a18e707691c92b7ecc03ba40d333b7b8acaba7b736cd4d6536cc2fcfa6c69d5e91de792b7bcb81b67fde9a4f48cbbc2d678d28eb26e5aae9b9abd9d7edaf2e83b4db8aa093c5b2678f4498e5c107e18359ef005110bef762d6560780527004f4d025d399457115c4873f7d9a36a63db2fec206832438e79c7226bd49d5644850d80e81fa24cb0b49a787c051d0779f19ea53774852404384a44ffc5c049be6bb33e24e05f941b15d75000b36f6dd31465cb0b1bf574fabbae2a1bfe7edc3c6fe8e76cc43fa3a2f1b0f3d087d6e3d8666379bd7a01330df45b2492c148e2f8e2fa50e71bc355f8d89e643ddefb5aeccb303562721245d047b9ecde7170735ca61a632fedcc4414ff608bbdc58251f9aa9ad997f27ecf4d02659618fb0db9c901869a1d3fb6994e6eb40934e8ebf313f15b1d58d76411be6417336d0190870669e6fae4e3395d9b26c9fd04e1779fe7cc788ad22f9e72723485268d4f4e7430e40f3985ffe5c059baefe3cfab40cc33a32cf3ee6d9ad149e919cb066e413d9e5bcfae88be6a3d793a98554c85a08c92b12ddf4c46665c17ca84d4e6c262f36671f1ad5de1d449846f974f4fdf2bcebf2c213daa6c4babafdaae94c9ca9cc165d85153609f5e81d832d4a0b8dca3c46e7a54631e6d161c8d2a87a747a0834caf2987575cf7cb4b22e097e7bef32147b2462dcc599ca6c957d601fdeeceaacdbbf2662ababe663f41792180936a251f568d33c3bf481836894f4e8ec258546f1f4e84357f7e579bf4e69c7a4c0c0b738f890db9d16dad44cc58d4626afac2286f6c83a85294018218c483a00d48223a08f319e80aaf34f0bb1b1476729a394d1f2826e57b7dee1f57bccdddc9de492e0b3f30de2937223dc755395524a683d232c071279c0d8a43f67a367c9c8d509a53cc1886549cb9227da3bfcfc46695d7b44fad0bbde8ee46afa6d14f4add92f8470c93e12e896252dabdb6a60a44f3be6db3b00f49b65d7ebcf1b3902fadd1376b88b6e24c88132877c94c2af43d38e89fc74a06f8d7c077d23f9a63ba6cde68c16e771358e4f5853527c76d92769aafe9265b71c37850d216fb4d93dd23b7deaae47489ebd5593e3995d2bae5beb4656dc2ec2f5b73b476c3b6cecb08fd8d8b907945abe91078c2dba349270df47873f3b7d925ea36f8cd0f7c84669156cec30c6ce17faf3ca0306bb918ccdc3e3de15ddcdbdb7efbdd7db4b03ba40401a055b0d3209f1527b50a3d895b2702a7a1630d0952c3952cfd9e72e0efbfca1066a549d3fa7271414c6071a7c01441467dc916a678edb576413da543b731b5a2cf1febbca0208417cd0ef6a35c77321c7166cfc8c717ddff63d5d6a4db07feb515b62b97cfb6ff7d7190e8d68276771f275195097ed3484e4096d27b8425b175987be44f07159cb866b6ca1e5b3d771d95b9479147e575bf4f05ac0a1c515bfd2e28ea70cc7d39b6afaf9dd2ea1ccc6257765369e71d1318edde22e6fcee6c635a72f036a148e66e3943e0cb31cc392fa714653fae660984b29fd59984e8e5bb2779ce874b57ffa8ed5dde570957fe678f52ea7337a3ebdbbf7b5bbed5559942473272babf96ae3496d94e34adf5c7d8fb56497cd5596e36b526b44951f7352fb739c6db0fee735a9bb77941df5eb8ca4e778770cc7db34ecaa8df49c1c6f8eabfcbd42d98bc0b4daea7ca6b3db6c7e1301e9ddd576d69c482e9c80f6eeef6ae395e1d8b4253ade9d517b8edfe850dfda6d7cecb8db684ba41b599d8e6bd2b2da7d7415be8d538f3b36b2ab3aec9b6944dcc3d3c76dbff8cdc597de4ee2cb1c1b97525b62f9e5369cdc5f1caecae850ebea7cd8f92b02b7eea6dbbcce69c36d9fe8f47a94596ccdce48fa73abb370e004547eab4ad85857657794bd8d744e7a6fd319758c397795bb7c77635d658bab307a4d7aac3179ecdce5b9f379fe84825e11e8903b78943d7b3dcadec635aff0b1a4f7ec36de5eb9cb632eb525ec4636d4a3e6247bf6201b8736966b19b75be4310e9c00b69c7618e65023c2e0f88b8bf26b09ba6dea095e32892fe14f26f4ad8e716013babb9498e30e190b7f17d55edf63dff7f5bde7cc28f8bac94b00ec6f7e232bfc49fdedafc9ae59f3db3c606ccc80efee11f1761083831814fc58c3e43bb76dc7f403219cb0872b45f0a0082a64b08289a514e4420845989b69a74fbcc10d5a39fca48963b364dce12cc87868ca428acff95d6561c4d7cd8bf0efdec9ccdcd59e6e348d9c90025043d4f4fae0bff746afa15753dde6f3d9550b8ccd7fbfb3e79d678f5ddd7e56086e11f6b78d7a4230f5a0156b6e98734e2ccc1861c2356d3b59ace0ebe640acd199c1a2f1528711609085154990b1c55f58f4f017165ffeeaeabcaeebba2e209c600184171821840c3fe841ead2428c1c628c60041c165c3fec400c2d7bec004511a9cba7982dc4a0618479e302a23476b054c6120af4a88101628210a3841100f0bbc2c20e2cd6380276b54e30b67608bbd9396c2f8311c20abf0737ce6be084b073a03e65346011c6c3ae5edd51d0430821c39e128c10b33a32fcf050c4c3ae1a615e17855c204ca28a20d4308319b418210729b88087578cf1f00a340f2784bea5e0a1ef98a07ba37e1eaeac50c14337c2f3bbaae208cff346104292544117a89f18f103316284b101171c520af8ba013109ae58b262051ff45fa4c10612664fa151293c7f91469967076aa14ef109cfbe572fc5f82e0ec8fbc4a71d2b522003357e78820a35a9047cfb66f2539fd8086fdad996babf7907dfbe637a424c86408298324b5c72108454bb372ac9b79fdc7886dc8e89097620f6ed5d55b1c6dc95846b4c47309982901014848027000e744471861d3cc06307243f8115a840065b64918321c248adaf8ed0aba878828826d6c863084358228f3c4ca6f7f200a2c4e5a30573ce396bf0a162890a1eb61f353a9873ce69e3060e0d3f6484d1c10d988b0e6ccc755d94061784806289076e9c5982032585169da6e587238eb0470b7e9005166250082383304fcc39e7440108ea0062c90e2eab14c47142181fae303bfc70c1ec4208532021851541d892588116678020a30a21c84089034c91c6143ca02376d9b83451841ecc6007117a30c01463a600830e795d42a6083305167408c1c7efaa8a19f4d088c0569ddd11d04f2aeab82135e7ec7ce774b84f68ab938a3966a8036e42e8f95d5161c667bf2b2aba8040d8f18302fc22210c316d4441841c4b65a4d67727d691430e47d0a38b314c04cd31c71c4040710ed8831e34ec0110900fa0e4b952baf49d168229e9be4918e8c4d2974858839452be7453142f6337e5d8f6a143222873cdbeb8411d5facb18769358f807e5a0cc7b6fdaea490c15f5d9d5f3d33fd5c49e1e5a7c3de929a3fbb7a04f471401e00f95d4951c3cbdf95144bd633030c84d05f11e87cc5566f1efa06df7b379b24c88a56b4788aadfa5bd666e4f4966f8d8a6ef98ec9f218638c32480f5e828c8ebdedbc8d62abf399de7b8f0d2cb6ba3d84be03638c5ab0742a8958cc564d2f4d8d92fed3a876e9408d822e4f2fa567d297e3c25816b3c5328d39197329dd72ab33b2bc5d7ab53a1f265663ec3b7d9a73cee973ce39e7755db3330a6a2cba519b125b756f54f4e8408d7a1e237392a507c9a1e60530a68a28a07823bfab28b83c6ff37b34d8945027362150d460abf3df33792032135bdd3e46376d3b33038a59e8b635b1d59bef9b4dc2567474c9fe76526cec1b4417e83ddf17e602748156e3273638d40bb3094091c703fdae6a70e6e98db4807061369f26d028d6d8f93089ce1e7d3ec9542c185c9079e90b243ba38d9b93a0f3774d18c62d0c4b4b4b32fc746af9368af70965d1b27bac49654ec316558a8b95caba7d4530c728cc66a38ca45fce26b7e1ea93b731b5a97b9c7206c4312018100c08060403e2f5f49869cdf7389d0f72ef31ac35afac7518d6d5e9b44eb779f294ab418fad790d6e8e64c10e4bcf439fae71bb4726c66dce1a93f948965f319a6e72a3e9bd599be5986fd327c6cd0e09fab88ecfcd8def0cb50f57b7bf31f93e8f03e14cbe2dfdee919eae9abaf6cd87da86db9c87ab4f7e9b0e8483629bbe799dbfd5e99b4fd7984cc7bc9958ef6462dead04f339b7cd64f2c7bcfae9b17abaa2fa76884147d2bcc28075587adec62bec0e49f38a650e35c71cd676cc875e67588764d37db9e187fff0ec478e673eda757ccb169cde7cc735a73eb81dcef48a3cd7e1b6e4e0741b579f3c659f8dba99379c91740d72dc149b8df39aaf9a634e043522e818379f356ca3460435efaeda74753e75adfb92f96a19e57c9804a279a894ea55ea63454d42c710d1c88c000848d31440303020120c47a4214d94651f14000f9eb04852a18a834914c3288a428618640831040002404044a688b60ad9d1a4d81f7d332ea9f87ad57ca99a0e27b415f533ed6ba68df9c00b99ab9c4e6e210a672419c48cd9cb2bd140e0c0b5743e9a037b510bb4d775c50bdc677388fbcdedd380e506baf8a3cba4f475af12c8695fff19d1869e4b4233f8d3f9f5b445f532e6a67ea1f429e3a4f758e3578d1cc4e129f738eb034c0cf4efb72749ffcbbd28ca2e67cf9ddb438d552958fb21c4f4afd43bed1051ef4244a997883f7fd0c15dd218db37dade7a155ddc7d66ef3e0241f9a2c97b62dd81a31b4000e8590a5196152d87c981ecaade490c849573cb21087364938de8d0b01cd3a80d3667639b8f124dcb35d0db5010773919d72310e917d4994e8c83928ed9cfd90168a368c3fe6268ca1e4a24b491c3861cb24a6404563640ed3b9ec8d191e524910c6a59d0f37df060fc88b2c8122e3b91cc2b4e79b5609757fd6b68f0c7b1361d1979700852b882fb38d43c46203105ee428308a08f634a5760d5e6ed21b29d7d9cbe6a3c1da4996c2c3668eb802f94c462872e1138186a22d06255427dea5b45840983f1cca42772ed6ad3b0aedfef2b94a74d2279151d48333aa167ea37c65088042ca7ecf7a41a48c677d1e2ba3cbfdb2ef45dc65f46fe14cc1b820d34a406f3421da9c12f1c48d5654800b8a7cdbfd061a3803ad8c0d5b5aef31ba75802ffd517fda888f7397396f10a3112fe07b54ef83536b111534140ed07746400ca2e04697ced2422ae88da41b4b43d042641e954261c5142e845ea4170c3e413352a1f6127e4ae8ef0ff838854a86721c84188e9f96e89d335f6d345cf8dc99d2e9390cfcc5f5c2fe07924f36fb326ea3abaa5a30378edff45483cb6513a846c460e30f453ca2ae445392300eb10228827302f21d0fd2b3a97db9d07c076108bf83104e83a76c4841b094ad38f07a03f82d6ecc6805382d79e8e4c5b4178406e02a499deb5db13484a21f3b36f7a4863e92fd9c52fb6db947ceae0f805b927c59426da459218e62da36e61fbe0d855c8757bc81d820367d707b29d53d218daffd995fedbc8525b6c0402a044eadbdc03f0889062c89f7292c0fe372cc1ee99b16f506c67042be2bb58968620c998f6d523a43a923fe0ce0301a055bf4a1b54db50b6b0244dd6659df379e23e1d1f344af0c31cd29613c379b36a1d2678f7580bc8bc9b412b8fc6eb936330a38adf9c78634f5194e067a7050404b3cabeb7a6e01b845955dedd042fe8c6056fd55a37335146ac885560a8e32a59e7db7a4495ece3789f738e40b7aeed34dba4f65a3d7c73898f1540e5cd279c53712adb6005efcdee7ae3145950c704ba5e43e58596ca14343a9ff3173000b36d57a2a2fa4102e94407c74f3ba864b83cd5b1980388f0245d223619a532f0f80fb46b2f4220964019f2ce0a1a09fedcbc5b4015f64740a62b4baaea20e8ac7dcebf8339e4f3c21d62d8de33e044563f0c43a56620f25ba2569abfe96a611415e8b8f5b74bd402fc53be0ea4ad0ef87aad4fa11405e97ca7a7dcc9737731c3038a3433974f3dfb85fc15ef70f869257ffe62282699218014c2db678425d58f0693ee51cfb32ac546efce3ef73862c13d47b280d0aa57735433f791b4bcd7efac9682875761353d33a06029c67b4a1c815ede153162bdae75439a59a87768ba2d6ce2085ec6d68d8bd4a680bea1cfd80ddec8d640cdcdcaff4eddff2d21a2f1aa41cbfd789b4757cd85c007bcde00ab8bc783e41d450207a7e58ab3e09f788c174d8591560b150912683991c594088383018da83d82faeb0d4d42e15dde3d7e3903e44c4b5d87af4a77d92d077b692134c753d3a9eff8bbda921a50ba733c980f4668713dc5b74e0236b30901d94a3f52a5dbe5d23c6e114931122e01e8523aba0ce3223644193a2f4386885fb95570548a65f2b14e54747a176fa5e23fb2e0e2f29b7c0f4a5d3c26b54141d485926bca8fd232931b6ab5a79255456a40ed098848a8ea3c86c9489cb0915fb63f5cd6c9e36b3dd11fb07f2a021fc00085210db2af8ad46368904fda11e7e484610833b6178c38d1e418f4db501500d649ecf95862d64af3652a3889dc7cf250af7f1de3378d2a3546d6aa895ca7f0796b23b75a34a930d210cf35999cdfcbaf2355c16091a5d1af6485a382cd13b59d81486f6862da827338380251f68ffd7094ee749670b3f5bdc39d4bda5a532bbd167b95b511232d22f62b0a686d79305fb695c21ec4da41bf04cc7d4dc1d0d0290ce5ee26b67fada131a014940331e351f73d756814c10d105d0a17c3ec0933a69d8e6881a6d238677d7063d32ed0afa723af0a4d29dcca5901cbaceba856aa7550d3b69ea85a0ced144b5c2cba0e2ac5bba070b0d27c3576fe464dd1f9c2038f332dd6e330d72224069ae2adaea6308ab0fd3e27a2375d0c688ab8580d61fcd9d7c314f5667744111ab542809d7b08eb62775deda24ac60c51ab87a8a3c6f92a9f0eb5619363dfc26a314107cb61eaaacf5b72c3d744aadedfb118eb7da52aa3289319c288962042338a4811c14c6166802865e53a7d1df4e0c5e28cecc06760407bf450a42a22cb80d8e830f65abae1793741c98d60618d1aa21c5b4b164a9cce61a5bce2708b6e53978186ccf112b98117f9440c6589b27cb8155dc379b7c48f0038349ed78ce5b41046c4cd49cd29b16ae4e21c8fbc815a07fa4cd30c6f782b48b01da8eea872814d11821849e3c6dd50bbf383fc52821056d7868cb25eb02109018a2b80176b8d298b7963ebc4113b99bcb17d0003a0290f49c28789579f8a77e71c099a63ceb6492be5d906e8dde78ca916c8433644fb37a06512166abf24515c00f69c5e2c92cca564930c1d260c809394b53e7d08716296cb67d180ec8a06cda2d42e39a18a124c3b706bb34932dac12af70e8b9d2f34a41a2f5986b947995e54b3a40128e4db69f20db030e07c089d5d1458c8bab16c281516b09dd6af02a027bf037ab622419df14202decceb7c4e5a2aab822f1c7fb23585b6071e85893a10a4925460cafc5a7c16c8f706eda4751884bbee3470d7e8515ea6d8629758100373cd19100c3d2b6eb695364bba263cf5d5d6c77bccde272f43ab19e985f2ec52b3b6c304b85a599703882bea5d6223a70dfe40b7bafae622d63484af77043103460bde2c487f732502a6558e073169f49da2690cb31ee59f0883195e8afdda129c88323737baa6932fd40b2a2c84cefd1d85000e8e079c2323ec748ef009cc8abd4a209ab079ac211747b8a184daae8bbb33ea80f4ba8985f4525a5197c4cb493859f348eb2cb7f454d0dd2cd0c1d3d3ac1b32c8769c2a747701e40abb51fb206e701fd4cdd80f7113fbe076633ef8c7f92e8cf5e83d586f73a7d4456e5337e95bed6f5e55da78c3576745d7ca466190f9f087ad0d0bc8e4b20d86f9a38e147d352f7d5dbb9979d4e44b7cb90296abbf7048dae69540be412df87cc8e1ac40358ad1b5255b50d699010718ff0655e4f5b243efd7bf75596c1c534f691036248750733011d38d501b39a028576a71f64130355752b78fe02957ca9517248fe07f9b3445c15def69e288c93d66a346a5611e13a01f877779c3afb24839d302d6ea3784ce4cf9c8faaedbba3ad0daec415220a11ca87092c6b7e4c348ccd7d4fa898a2a37bcb8e50943e8cb4f5cb4002a34d844b0ee67932dbf0a7ee3c690d80e5589d484d75e81bc955d71f1c70ac03aca30c114682514ef12ae03ababf37c08c8ec5bb8bbb374f42cc117b96ef35faf1b935ea627ab01ddc1f1fc4fd72d17d9793e930976206747973c00539c4171ec345d8570f76f36df063df51c1616a9e2b3e171bd4591ef91e48e2936bde6d44ad0fe098408fbc5103ab96829f6cd0e6f94edddd2105048a8aff959c98110a1003e6b2d3b02ad0ed0aa97019a1cb177dc56b82e05966d6d214329dd83be1a5a70d98fc366592784db1c2751a1202e282f6b4258fb10ac0458bb3acaaa6aeeb75fbde1aa544f23a6cbb34e4047311fe9d7c929632bf6988499e9584a068e8becf690e9ead32f9d2c3c03ae2125971a016e214758f381ee91b18666a30d64a9b00d5639955ed181e0dbe08aea13350635a597c9a23825d0dfefa23f2265a5e77f191aa338428edd79a8feeecc07c293c00b69ec027908154568787404f0d28a845078facf629c2cc7a410e88a20bd531f545e273309e20c8201c60fac99e6d109cd864ab6668eac44ea416e2e5fc0bbd99bd5fa48cc4616976d7637cb434b513f38e940f68cdab0625e60000ea4f8704305e3f08bc112bf0c23945884e15384bedd715c2a0adaa2dbd3c13e01a7fb27b516a0de3fe2397e142f3c3a4640b2511d513c219d232e1c9d8e0a8f741dc307c1e73bbfa1357c6e70502d50b8a845e9b73ca967f0e6cca3247cc5000189257f2ec6fc2966e1f61d1d4256cd50bc35cf30eb6f7cbed7b6c3f0dafaee9ef849a1c1d45996158029d360e2afd070191fea41aa2fd4733e9e5d6e674056fb8dfdf7d7289e94b725dfc434303da4bc5bed335211edb5f223e775df793054ced0ffd4aaaf5ad4bc5ea2e531386299228785957cb68f52b9e25c430035a788c3ab25117eb04ecf6658ad8645e90fb5a534ed0dd343dcaf417d297f924557644c9ceca28544495753b65b30d732eb420942938cd5341fc83aac0572e980df14096ce3ef0a1ade0e063dbaabefcecf76b19eba8e780337693039b91bc42ec2eaba4edc1af63946e9b4fc88f5557586c1f34bb6840c57b68d2fb94218cbe80ea84eed0ae9465f122cd2f758ec42e90bddf6cf2ee0bd73182b5c162a4e27d481153c8d0673034cba0a727847d22d7716cad1fc1471f5e23729e126ff0e893ce79536b1114aa1a7379572d5b9eea2a4475112d5257cc8533bc6e41ede82e59e8a0519bd11e6817a9cde951aeda8688d886e25a1215f89496eb4ef6dc57dc3028a1d5b9d4a668103c77853ea9c846e7e7fdf26e8191a37793a13bfb617442af8524345a526847c6c29082ff4299c5c7ac7548680f97481b42837dee2bd07c021fb213c1320ed3d7fe56d564fdcb08a3e598491f82a8ee63627e365a96687e4875ea3ca7562d182740a1b95dc2114dec06cbf573a7f8f28076dca81458d73a42ff837612fd42e8a421812d0a3d93b5eed99fb47b83ca7b879f1d730c4416ae50376a5fa81204779d92b56b98f5248e75b84873f0ad271268f411e0765908e32a689a77cbd65c0b8e9b952bc39985b86e2185ab8aecf46ef2b8a4da4389d875dec716b11b2002e1f1211f269bde13958de628fbdad093e038d0a5740db43b824e6cc3dcb19bfe2a5c72beb3268cd028fdb7fa7f957b234cab1b26493abc1e80a57b9a73a708115b32e07852d834c9c68f018cec3cb8c8deca39c494e308e48c885c39541c8bb971964496b6072943135f6e7dcfaef334a8dba1fc703062c6491c419c1e91f1d98aa3a650108cb69ba50de44a03b63a3e26e13d01bcf89853220315ad2e2470d03d9705285efeeabcbd7648af60c0a0a3cd33a1f83c7ff8976923743af02fa45aa436588fd2f879a237570883b5c1660d67c71b88b1171567958562b6d2a90e9e9d540fabe76eaf93fb45020851001d0716f030a785dcfcc9572813ffe64f0e4ed5cae2621c33db329c5b16b7aaf81bd4de569dfcb3fd772fae4bdbe8a4a39d096a48ebf210473a8fa4ba818b4c9f9e2722261384b239924a91d56837c1181934682c652b4dbaabe7f1151593c765ac928095bc383bf8ab152e293d5acb662fc69615a22d7e616bb8ec6058df148ea573bf4660e72606a7b3634d1a3bb911b538eab4da3a4306bfad1d6889431c3a83002e8dd256ee40bddc4ca3756846924ceb1a1da141e931e64ac822e287731c20fb4ea6d8614943a618d847ac9ae473896ab842ea39a513ab5707edc959744c9de5b1e3c7578a1ccae6db5782caaf222491cf58388c2aada5c6351d54b69477296e01c0b0447157d7a96852ba3ae0d47cfa892b11288540c7bc82eb109af325915daa9c20e388f43bf0de1ecc47b6a4fb00d2d5e73bef87699021216b5765c660810d08ca6e4d5df653edb30e5683203ef0a26bca80b553572d4a379d46b40352be10f8921e5a887eb6f39f0c7866997d2950621ffac6d7b2d8844ba07cc409250e902606e79c0b200b8f4274615c92f2b680cb7affbe8b9f0b0c484e039599cf9a9d9631250feaa3ca747a270f67ef3fbb6f38612737c9115a33f3b1ed65d2416e375c0ceaa7cbe6689ebd163e1ab6cb328d01028ec2562b54dd4ac83c36d3e9c8ec25e7877b2156f783561e97474880b30f217041d4745f92a9ea5d6719e9893c24c315144edb7a4d18e86e5b008fa39de0038865d67e4f940438c00cc3afbb06778a91d30df280b59968e74d4457de51d994deba68d9e43b6ca33d8be2d67a3825ae4b04bc7b05af347d02b512e0318e32cc0b353ecfdd6f071b2248fd4a957fc18c574996a711de207dcba9cb0ae89fba3c46ad3841de858b0889d9daf59b8acc8b7b9a1dd2233fcbadcec761855bc942b6e3d692d76ba2483d03bb90800ec925c22f60eb02d07c7a5a713231f64b0eafe039f09d40999e080cb6c73134eaba05d7958e323c583e30e28557da5961088a086cf197e234315a726203c75f1fe4341e7fa6e3fff316e40aa076ce64a660c11a46955bb7eb3c97e0e01d1a75600603f0d3a20881cd6ac622046925b7c6ebdb445d026946a3158a4d3849d1a107223fa5d864d49e683369c2607c0f127faa3e23bc40ca3f85f625de340ba48f6ac2e18c61da12c49bc5080394668e9adc00fcdfc365ba27e2f23cd876ab110002b0afcc3c9d91370e82efeefccc6238dbea57da47d212254033f4e5acb7ea9c0204da99a2a29ddad890e28d087c5b0573276c44a58099bc2dc291b44c20ff642e796e116f436541cee9b63a0cf21f7f5a46de18de7fa8d35710cec4122cb232eecceaa168837f4476e3ed06a68b694792b2993dbf5497160ba2d6c988a9cefad1b32344c49deca84ba078b9239945b9868064df9b34fbebbe19e2c1c629ec2aaf624ac440da57a54de1e5b01025995df8305dab250d3f1e893d2948759e91573060927aa9a34eca90a2a9d6fd3ca5d47c682b050bbe9172981a5b1fce70cebcb0f393a2d916a79f0bd8bf027040a82f0f449237429c3ff9788f023ac953d9aff1f9799914696a67a1f16ef2b64ca8104651b0392d5c44afd896b414ca3d0789b931f477c28b8798ddb8a4c962942ca995a921dadb4a312ab37bb7222b8a2fc10459bb2d367d71ce715fc9d4d1641478f8610c201c5931a6be840cf568e4e021074c6307fcb66791ece4a828a8da7220bc2e89204960e6e29af019866bbf76f0e83742a8aa79ae97068e800b1370c53852aae0a2284edd2792dd093e0db05950f365c3ca822d386e1e730ccf8211dc41f0efcc415eecf7b3fd021c05717e708c625999adbea7c3346cbe0966e08f1e7b372c811d85aa3e829d8242e0b956465fc2d90bb1c09cf672ec57924b4bccee53679ff18bd75843eb077d2ac47b588cde69f603da969d981570e73b214d590baf7f0e91b23d65841a5335de565b61e1856627737ed66628f5b24fa91f4afc1dc5ab0ab6a8d5ab28d8bb0bdde8eee88e73332df07d08eb61b6aeaaa83388d3fb03c817d74abd162163a4f981072ce349590db5e51033ac280a380979664c2c64524d65af3dff70e14579c1a49d62af6083d4003e94baa72f85036942ecea262f5d2f974c581fbb10872d9c9243a1aaad63618101eb6c54962e98046f828c8eba2d2fbad12fdd673250f5ecfb3e200ca2497ab6802e97e85c1a04445bdaac923d5a600a0b3ef07bc8af036d78fe07542a1476866c4b27eadd9d4b656a921114b210685f009cd292b58b4664a33529d96a858d1e81abccc34032b1bb599fc9cac2ff569010b8289ca390d6f9228f119dfe5036bf10442a50e5937ef39416447d3025d4dbded17fb0410bea4eb4e3a08e70540294e247f1e2473f183a76fa8ef981baf8773c7bf75b0fc745d592bda8f9a3b23f8f2b6d4c980180a1a2fdb5e8b787afc830c6e6988e412f68495db1dc3e4697b18dfc2aaebc8652bb6ffdd963e0f9e55c67de19beb54cb989f8bba00f71cba0e2c734a8b01a7ca90ec303e5f8a3fb25bcaba0c6bce3454cbd8e4a61db60ee4dea37fc541f5c9423ab7cacb7fa284982504a25111a9b8272effe2bf560bdd06e90e787a198ec9bfac37500003e178a816f3d62de92108838bac194f914b66db841306f4935a6d997f7f09c82f9ae865bec1e43080417611251f220ed3f8433afff41af1e20ec611ef5b774ecf4c7e5b9783e94ec2b9303975c92c74bb0f487bfe4f37cdb3e9ba27354e857ec337e2f5a11911e702d5d09a0823ca7dfed4b3d8d1b6c8fd0090b88c86030df98451089d85ab0ba16b96a077784c6fa758ae2402774700102c120ba07b4dad2d34a55b30ce018a6a8ed30747a6b1bd1c804db437a14a2b4a338e6ec768ac60544ca404a87e48e72b95f811129bbfe18696a21ba04e8bf45ff4f5d3393c3a3951ccf287b734bb927ea62cd2f9aff687a25ef9de7d8bcd7d1f0d58433430e2e5071489e127442a2bed88380c3c7a41e9aecaed302467e9a55f24280694c743d7cd222459ec64dddadb004645f149c002b357cef64046d8fc29be72cfc1697c89d82f40335c175f4c506b4e565286e4eef35e7552e974b27df02451c88decb7cb2ef2ce45200541d44f31e23ad46dbb636525fbb70e050a5584e10bee6a8ca9b622a2bd7f9770e398156074419e7b4ce926f21d8ef3032e0b0b2844c24d232a9048df09809b289ce1d4f7bc3c677f811aa94bfded47db242256de65ba6ea5757e12dc99888d31eda20e26e8390249ed2da809921f918542f724100eb8cf7256048288d93daedc8b18b9c6c14e45e692fd534726b6928a112dfaf234c235c71732ee4e286f36d7c3481335e518e643b0a3de17f5bd6c1b32e0406b7f2bb8968deb0b640502a81ba2a6aad9d4d14d3125991aa117d6066f93bb9aa82495a2a0b5ae539c43f355b7faf37a895ef740fd50b3a390371ea7547699215a29c41e5173aa4a4406015eaf611e0eb03748c90c7a5e9592507b21dbd3591655d531dc258b899b4622b7e7df0e974e15e63498c91b7af1b2cfc04dffeb4d4c9b264858bacc78ad6c6e8729114391fdf08eb777843fe11f7830a0ff8422e339a72949421a2c8e504c41221f40b4c63fcc004f356d3fea98e05d038b887d4301468b4c572ae75a699e54391b620b56de706d2fda836e153230d72bc8ec6b2c8fe6de0bb310152f64d8066851fc2def2234151bf77db570fbb0acea0878d7428ff58f9780d7651b142ee799bb7a9d206eaa54cfa43b347eb1f091aaccc1a2dcf2ca3bca58ab4b6c43b8b4bb7b4e737a1a6a6618236c1034a42528f83b15785076297284b7054052627c334c06a6da2c8220bf9ec9a7510af1defa002d064c88feeb86922372df8fb6b31072a6a7711534e5dbef5825b1e04922ce99d0e12bdfbe6bfbc0f1b62371ea27742a728a3f4ab0265ecbea3faa4b4cfecd622bd18203861b8dffc79a320ebc860498519a5ab96c2e037c93dfe1fa3ce045f4350033e4f1923efb4cc5b8757f69075f630f51801e659041624b372ce78995cccebe74d1ace4aad85e8085ba10c33e23a67756f22064a9bd543784d8d32eaf9eca0575c8f6d9c363a2916dfdb08cc80f5307fd1c972d3e4cb222fcab23056ba7cf48e0a6e21f4422a9937012a0cf899f1c012233a0f24a9322ab16e7681be019f5ededd675fc9eb1d7954af09c804c120eb744ef6f1d2d740e8231ad0b6f6de018e6d3ae0ccfcf0b5b4aaad382b5fa8f30ab46f46bd44b53866b0b9dae2c2817df2da115412b07280e6dc0ba3157810cc06fe26f2eef77350575d6bfbb3f696ccffea508a504415154b04b38918559592d4e6e65ecca6f805edbf70f2a4a84d338fcf75b3008ba90dd7037bf4fdd0edacee99761294f50c25094dd8e4a715268d4ddc5f5eb26d59bd1dc5793b6b61be6774dce8df5c24847ff41df35e1a4eb5862141871290e7199a4935d1534a20d005c325d7c868ac0f416ac97bbf044532fd689e012d2db81979fd7e95de9b14bf940f9bdbea445c32c2d4ecacd34a9759bae1293fb8808fd5074dccd5e47dd670804528aeb9a08cde642cc1589f78dc0e807785329cef55f83b6950d061fbf5370b0f5869078fb1577001db8bc3233dae1f8ca0f4acac84387c4bb80bc8ef07960c26af49e81cd0eabd60ce30d641fef036610bcbc9455def56d1eb0c531254ae9825f36dead26b329161f90909e7992aeeb1b3475dc95d21998ee653afb6ca948e2c5888bd6cbd1043f47649b9b876e4ee8b1731396ba869337d8e4fdbfeca58cd9d57e603f0feb0499106ddde46a533a6f6b3d2cf5feb9b08b8e039fce16fcbe0e7f0aed22eee5a79271dea123443d37141677246fdc335382f1d45e22b3c4ca63767173d90283e4a0d57710ff8a89beae4d6154ada0e3953a66b4dc72605a4a8bf1c3123decf3fa653d5b2537af63719f011becb9a8c7daf02c7c09d4604a85e2f2a175e3d7202cf6f9448acbc88a629c679a8ab9497533b8c3318f3c77eeb79655e89ea42fe4b9d68a8f10bc1f6fb203b7fbb5e6097cb7f3262294e9769369b9bf4191a45b6036caaa6e0ec01febec81e2542cd3f8cdd8f6b748c79c72be92d399e3df76a0028f038385e94cbbb8e71a080e47f3ca0cbc39c605578a26aec68688e619b1ec4776853a3218f4f80c0e40e11794468bf588a1c79a4fff42e2025cb3303406b5b65954a71aaafd8a3aaa8a58f140305534ccad7af73f93d688cf15252002a9f79e9a6311016ba5148d6937a64052dd755500cc3153bb0c2bb9c24a6831be4b668219514e89e3bd0408c5c8f2a0327c7bf1467e8606f757b5ccc67fe1c21b4a75c2014c125ab52341ae333cf9280398af31219d77d87180f5e44502b5126d519724ea1fe57ec22af6e4cb8897b0035ca7afc0e8b44ea393935ec4e6d84c00ae49cbe1112ac01c58c35ba0b50917cb56eb30e960e3c1f1782f8cffa07b4a81d350f29c9da4f416f13d44dd69279b16251d23dae7707063aff4c6d3cba6a870da5e69cc86543485f4cab67e54caa237b08c232d8aef21fa837f3cb022eae70fd315e6a2526aa17ef11a1a2de377fb879abc10df3d835b05c852b09ee9b88a46b0422940fc75605f0636ee56b95e4d7017cc44715c21e7ce3c4d6f6c4888eafd734f71896eae907515033b6785a528b964f7ed02155cf8e32763ff8c78568fa123c438db508bb03a80003fbbaa6e659822750c86f68691a594395bdb3bb4171df3c32275320a0422e7e29e26476a0176ed9f1b505462207de823f08c2da992c4586e882c12afba4050d33140dfaddaf6a7ba5d72272b625cf1cbe8c850de923980aad7f672b4aca895fc112616ba5e0c64df84c50b172ab212d5750fdeb45c736c055306a45f93d27906d93759861e9fc463068450f9e0084d4d2499436c0248176dca41f1a818921002d3d3ad9592b436eedfccdcace970ca7110b81a3123b021addf3316359005b4bd520b5b5166602348e61e33cfa906ece3c1e2a5328d775b6b6a39d84ab9fd2831c6d2217b0af03a13c315c4f3581122baa6789910bb9a13f54e5ec72cbce8de6525bf32c30c79022798e8fa7ce2d1ef062a1e04ccc916c1685553816ca86f08c910f980cb30ff07a27f18c37e3d88854d3a6d1c8e521fed9e84532837fc9c6a963b9068016dc3a5f0b6d9127a0951c0fb5006192df9683b0d2a3e0cb935a47ca924e13672cc787cfff19166f3f2f74df1c5d1acfcf5fd4891e7b5e5f60ca4a8376bf6dbdf24abb2d008540923911ee0dafae77a01554d73cb556d00083d2ed750f1c6a5d53f83e2aa30a0fafccdd6c713cbeb845b2c6cac8b77652a587b9ff337dc62644b305794012e158f8c847576af3767826a65aca7f49712a8ebde908e9f154341abfb71a4d4d609f8f934fd43f9de062a307c575d209b8183f80c515a795d315c17a3897cbf55f42f91cf69259e8ea4b6046cae2d50b1233f1e1d2454aa6adae11dac8e8f17ee31858c997dec8aa3e35833906ad1621cc333a75c973a0574f64d80c522f5bcdfdb271efabc0bb891a546bbf0f84f7071a58c339ef7e76320df3f37ab24801ded513d2d26cb69c141fcc557a196fc056e5060e4544e69917a95e0e923a3fadad03e536eb3fd758f7bf66a241768fe2873ace76deefec1b91982fb9ff44fe9b01d74aec07ed03016fea77a0fd2d3000ff9f856ef9c7a2a787f078fd0b8f5e18231ac5152c22543642398c252a11f91cf834c664dbca0106f401c5b0cc1471bf9b5d98791d3a0f79ad0608c211948aaf85e7f2ad4f5fa1705f30f72648d549c2329e01b97c7ae0211d19a3ce50af1c9baae42f2613378073fe2dfeee076d0b5308554ecd1a1ffa7b23ac4e8319aa425b5c0f203737fc40b2afff2b896c8b04199f112ae13ae9f855259ffe1b2bbccc1c05423684f51071d04d7aba23474f8d2d7079c3da74415b312cecb565b7d18ae0ae11d0589657b3f8c80eabf4f3958c5e74708b8e9f5129be9df5961918764fa77906382340a29398c048092d33f07ff522f67d733fd2fa2fee2e7f49f984d528f4ae1f8b6b7dbda170b33cc59a6724f8a044fab9f05b7f5ab9267f32adfdd486ce04ea6284925798d1a31bd539a2d699734ee29a0fafcf1605d6d6a83116c161062843254ab7c3c4d17baccaef69e5a2e9c974390e08833a20484047c09e9eaed76cdd0ad6e61731b5e554035e464f5a4f9500092ddc297c55215c4270bd90d35fca532dd18eee550bfe18b0e04b8319604c6e45ce66b35d0d9bddd9003b3c6b3343f177d302f776db1eede535ad98ae0a5f63d3e553e2065147f9943711b92c1d3651d3cad4f98796f9cb99eae9dcc1fd34dd79173540c39effd36a9a2fa9d0fc93172ffbba963008967aaf71698acbe5d14155a09b20472e97aad1f36524ab69e959600021257fdb1bb396f0f0422124abbf123ac44a75404c7c858256c71cc0e95962052d14dcd8679f75e85c7d74a3eac0d3eeab2dde37616b1aa24b567022310bd955ff72286871db22fa433e25b0ef4c85591c9f426b2cf1edc74a1d3dc906f0b0c5f6e9fc1455a927de73c1c40cd2c314f90402e254e4218ce355cbe849d1515d02bc391982265794d0168f75ed3db25014c2fa77be8e64082473258b552c18f2e2ea2b3f96672ee97fe08f5896e60398859cf964f15be94aa311dd28212dcab5b19823af941649d1fda2e64b5e61227d33009c935df6fc9b87fbb913b868ff1b3ce47deb3ca8a9601f3a6302d8fbb750a3ef0de6833afd5d8d02b3a447549edc18b656beecf5b7420651203b977043392b3c00b832193f46da5b1ff2ce11ad8a025ec9d37bcec3d7c66e62980c4530b495e9cd8ab47fa2acb567ad302e7ed06627cb54443eb35e4083e2c9213a1d433ca080f0bf9cb6c4f7aa4c24f7e8a7bc9a4796aef5403c989f9ac9796d4574afffe66e2ecd3fc41d043b481f49aedafae8939d77e250da07d5969f8ecd5b80620b3d384f66f3417c367e8383d612cfafa558491718355a0961674d4ed45fe44ae2ca7e8e63b1c26e6ebff41ba1e824785864ef3cffd4d6a8da16a2b16132af0dec8141493fa80a6c183d283b05e418c58124fccd3beb033b16867b84660575391771c67bc9bf73a0e12336796ad8d7a6651d17b9aea1e692b92f46ab09367c876835805a14c0a10d0f9e3ccfee6612e1a07f5378146ac273604cdd5243ef7bac4253e62d0b7fc30060c780283ddeccd165e84e352e007ce62fa3b1330498e56f8d27990d4ef80149899af128a6b60d862044a164712aeddfd65e98cab20e0f6a6e87240066a4a8001449ebb982284494ebfc4acb4ef01e1c3a8994290e8594bfd822a636585ad0cd9852b305df6d710ed2774ad7c651718ee3c269f0728ebb44289d3973edca7bf7ddea94c1dd75f3fcc9131fb15157f37844798d841d64382987322d74cdb9c5ee34a5cc2f3caf19f30fd1feec9bd861bf049d01bfceb93b869d260ae159630640994523c119b2d44540b4d829f73a61ab988c155c309c444643a5daa5b9c48668ff11d67f84eb716354c277c4a21f7988a865039ab518506c2c1841d13a05ce7c90d4e3306f0f33efe9c56a9f571c2d4d03ea0b0373b0daa2b1ad1085a79aa20f4a852e1b983f2cb535c41e800e08a85a2df062ec919013eaf9c3401acfe015b8ad5e84d3c40dc52b92bb196482f7e058dbab9c53c4da8823203316e208eef4e4db76663f0a39a541ca1e252351fe59c204762ff5c677feae4ea36813e46abea53dda8c40f5e042046800830b6836e3b351fc4098e33aeee061c9293e5d93a9f8630d3daba5b045240f7ef79ce57da2cf180adc60620728444665cb828ccfec67d09d410c7ce52ec3c1283ec1bbda5fb1716a4f468450be7e7539abaa88083ae5b26a73cc2566e81e7f598330cc208aa452007b9c8a3bc3f336da220a9e8bb9016cbd7e3b11d0164893d64bedd18152af2ea39fcd9281f971ee101fb53c07127310ecdf732825b24ee790caea19025c3fc649e1b76b9f041023934f1b0061c911cccb65ea264eda74d0183d00225209723d7667d631d11ab781af8c4bdccbb46c048ae56f4b10d10c2d1b738ef8c1012292c4914048e1f74182d848438f9ff6bb2eb8091573d56177e21bc1d7e4c71fbf07f62d737ff6f97faf75c40cb47acfb0fa43be3484f27e02e587f8afb4df3c5867fd05b8e65c2649cb131f2379a37869fa345ecdd483426c8abb998c1be47e83b77307be6a2e180265e6640a58227986c6c894bae5cade44c4dcd480b929b658ec101fa00c153455caf1e42653326bd50f3de68262423ca26a3a3c2daca258360b7f4d3c0e61d9852d3f4bd9df02e18c40fe221333a1fb076dedcb6aafa8ab79dc2c0d31dd46804320e76a56b799da60587cc47648b311984e0efa456537ba2aa2c14ab9207b087b7400cd266c8a308fe1f390fedf88fb8601f9a404a59a2825e3630c023b123f60f70858a862f65da686687e31915001761c2632c171c1884c558470a4368420f76b8f3f5f7f19fd0cee39f96057e53916a3a0bc964323013e00434b43fa01cbc5a5ff0edb777f0911503bd8063bac014082b235b626ae63152deb29a6ea70fdd65c7712aca5037b625be0e63d5f86e8a8bc3b539aa56909f27d092dfebe4022b423385f61671f78bd6f9d78beddf72681207095438c5cc0b8c909d522209f069055e2594ba85b80a4c9f70dd8253daf6217d83f9aca6822efec3a2704c9a69fa62bfa313c534f4f7c96b7a1e6a3cf9465f6f87ce3db9faceb220814ae9111aab4bd68e3201b05720e303305a04a0ee6d09cec337009a2e4dcacd7b4a6cca02da9a5581cfaff68023175201cab5d75cd185463315de0af5df79d03fcdc542403883aeec279b21ae7331acf20633a04774651260b551a2506cbc0a31118cc71cfa246363336c6f444069d597b411d4dd67d463d42137d6748ec0f8f01687401c4e3d47243d690a975942d87432beec4236daac2a5ab556fdebb0897c1cee24bb74bf03feff0c64f19e86e0fe2afa341db3b44fb99a20460c94ee1471aff5cf8cd0ba533216b6e25d20c473f6aed85d873d191532289a21fef19153f15a10a40ab480c8ceff4bcc76c095e3181f161275ec1dc2f47e6e1f3963604e58aa5f4387ce1449a006a06f12a259d2f9d0b0463b7dad2c26c968b694a3149936873c7e5525feec885ce7ef5402e0cbcda59a6080a1ca276d56d21d9839bd217d17c8e9d44c438223a8012e1ddb66a42c700fbeab80571aa69d8f397d1006b80411b90bd06fda5c3fd36cd3d476444d54aa23f6bd0a3bad776591e6b51ee5c8bd3a3f2baa947ca39080f7946964bf8775b832a95db0488d0a5f82688efeba01a9548eb4e054c11bd343519bb3928bed1e4d1c0fbdb58c5bc11a8bd610c3a255f100b597c7e7f7fa56b48d63612ea7168ffbdb3becf1c7d781ccc57ae6ef4c5a56e84447424666111e7ed40e9ad9f99d3c169829761fc38b01009d7229e46e1dea2e7a54b8d034513707b4770273aaad142e3e6a9b3a52937faad13fe58e31c77f87ce3310b43b52ae28e939e8f336abe00b5d75bf246340a2bd255367cbbf2e19368c9c99cc4a8eed16db5ca16ca9757a1a1e19719d44de74c4804785506eb7db381e7a1b3d79c8a7326a2c1115151b9caea9c86c7b4a12a031bf27e8e42ab2c2a8508cc832dbe6c80a3b8a34a56f22c764b20a7aa663706b149df3309f52777b579b651b0624afe83182830f9126d8fb340ccc8e5188b0c7c210f1c40ac8f04177014178e9e71553540f6ab8e5c2e717821677b1f70dca150c91503338ce6009bcb746de3372f79038dc5037a8438dd420cd05562299030d15b16ac70004c480455f899825f794e120dace4e3110aa47cbd222590531d01b03809eac974d154f2ee2e053b5cbdc923f04d4f2686547f03d81ed9b9072f4acb205c695fc8bf88cdcf780baaf2cba352e839b57051c41683e7778bf71fb5dc0e8ebd8e86fd6bf3ed2d0a651762fa61312ef00303b978ce5f7b11e817b9356ea7f014b29218fa911f062f2e57b38328ae19520f0594c9fb16a6164229ff117f4e0c4e2665c01c09695c8a09850dd4c8dfbd832cfe6f9572461f0d761e6128c33e6dc52a3a140750c7a7f4152fb9d02ac239d372770abe9a2f44024840f0cc5960c8508c34ceff7a969278a2fd74349261302edadbc45e0664bb899838272897299bb5b37ba2354aeaf9601da12ade2ae9a817cc86b0a6e2cc2020bea3e7c33a7d3a6d33c138ff6a8745e0b124e415dbd7ddd925dd11a907af34884ecb72c210a9a620ac1406fcfa5831dfd0d35995c8d37e5586ed1985dbcb987ac07302ec5ecf47737a042b32d5231c23f8be3ecd4f8b6277d27d0e72390d124614a6fbdd9ed5a91210baa0d51e591ec11cf0def7fd252461d3bedac694aad36fe55887a41d7d0956d0f9b2d7238d0f54d0860a32160d542901b595ecfbe2fc5d0709960009dfbf40e7a72656a03bf328b311bc12e07233f3e148322191e1aa35f91e54dcbfb30e78899725c20ea967a670c6a58a2e6a3df4d8064d416899634236f646971814e77ee1dda08260e1304b13a8927d87b0693ab5d97ce65286a300fa1903be12ee35eee920d6839fd3f54f5389508fe034bfcd685f4d71f4da20641279c2f9a09d9e5c07532eedbd33b1a1806cb704b34fb40d7e86f6d03bab68e48405405d960c2fbca07f7b13ec8c7fbf83ee483fa90f990dd3a8e620d4a665bb4ac7fe5f752f3d30d929968f71f52de1b3271de46bdb99eac93ef98a1d5b64dd0269a55fac0c9174307b6fa057edac8b37ceee7e08454f8042a6df4b51dc00b89826b5e60a78c3c17238f7ded159c8411673db2b1ad3c839f19752ec618bbe2371033a3e95eba64854f40248cdc7bb38eadfc1d5cae916361d258573d824a3672af3ca8d74829cc540f0372cc9f2b824499684954ef62bccf4606e29402e094fddbf4e7daec55c35004918c9aa73dd946db570ff7e426fb8ff82013a99273af5f5c4323733eb9903eb12a2a850519c8a183da12761ac743a6929af3c642a8e3c8adecff5afba9d106659af3b58b6f442ddf988e579a380925205ed4b22e1e50444ff1e2d148c30e42175be30a608c72e8b90462fd4015e9758b9af40e9a10e0eb0e4e4aed7eca653e0f00dd0f4d8227f802771364c00cef09672345a1e195a736d404ad9d60b12608b8ab103061bebc49fe0e5adaefa92ba06b3fdef385160646a631cb8192d18b0fab7da5e28a10442ed087c352a942a560a9e9f8309a848f94f0a9d8217c89b95e97b680680304805035a4f72f7644acd7f80fe9a25deb15c590521286c0275b35ae657d2d23939bdd68f127e8444218b0238430254a8ff0362f7a46e7e633901ae3c6a5f45bc8bb12077b5f7b5264d69a45e9bcb59b909aa0b8f5eb68aa4981d48f81058563c11b140ea144a64b34ccc12e5c2324264636add62bc7fe37506cf67fc2656a56bccc391ec15f0f4224554ea16b38d55adf347b1d3b83e75689c92ee09107abcc98517bc861ffc5a55209f1906233990fc205f1b4b573ab65731fdcf5fac8f4da4cd31bdf27d583f7177b6ff8341c4069c1413af3565720ed5b6c8ceabbe74fc4f9c26b3fe7874a4ab315ccf9d61dec0d513a135af93dedf10ce770e6b354a9ba713193ad752a586bbbc1010900318fdfb58ea2aecfcc0a38215495e32a6bba0a96fa1acb407f7b44b69e571e437ab23682f792a5d2456a0e836a4b0842ea1f00304ee04ae3f54d0f859b4f1be7cf50459e02e0a000880ffab0165bab3aada0e0261a5b9c7cbcc5123b4f6a49c44dfffe9a085f02d08e6f18e2f204ba1ce83ba5bb8a88d0106384a2304f1f27074e61537fae30801b5febf90766d4b9678bc2985b8a5f012cf79a833946d6693e14a68549fafa17ba398bb2c887a70451505d31b5ac16de1c8e729251de64fdb10161089931b90d401eab6575d28f6f969d4081411f4a8f940bf7305ea19330176853219f17ec7bca0c596d4a500f16810b20a1a081bca9827727f30e5a7be13c333616cf3c898bb33c1a5d2004dd3752455493c7f688c4a5791f7e248439f2f96bb4d219a4e94d8784146304165faccbc22d88e98a59682f52ba16d9d55f0d4b029d8859509373c52002968ee532d40504217d4b50b05eedb5b1e238fe209c51f74c653d85aac5540e5439ab3c7719ebba3433a2aa1e561539bd9cd446b0db5692935e1978b87e98b6ba9d2ceb160e3c33a966d3d2adf87d5650e6722b0bef342c7c9203a6b41a148a260912b29a1c3a9784b9f28e723bdbebe9be3394e522bccc35da4a280c04198ca882be64b2cc11fdee2e9b8b47e2f19d05668c86ef0895d0b8da19ad8448f70594b17fb5fa26677411cbade429e2a343221a0acdfd1711ade8be45b4b3f7b8d9d4579a4f2a6c404c617e4a9b028406a0897410efb4376f1e0471c5ca623e65d60fb8009eda89bfab58d7ae99415325572dc4d9a4954479ca5f5b4226b71958f195c835c568d52d98bb7e33d7c0e9bf34b6a511079063bf9699005aae481b5030ba89385ce5c9427caba934989d6973ebb0331f58f9103c5a707ec6de2590eaf5d291de562d1d4e3994c33c5597fb8c514ae62e6caa26f4fc28decede2b9935f307efc767501e491cc405ad9c592a41a3c4715963d09516083dc2712546b9d90a49ef69cb3939ff0c9741985193f77011d08900e472b9a2ff4760222b72ceb502b5fc8a4c2a209a80a942e3456933976a27bc7b01da5fad26ade2c515c89cd7ccc0593b2350f06354b493b4dfaf514e2b5dd03042f9da9c874d9549d63a6449102a2d68b5d7f422517ef6e2b7e827dcebcd1bb6e2c6ee02767b5a3fa67c0380c47bd9c6ab8d0486e4a38e6ff5dc971941c662495e097a886436972560ce526de0e4d22ea33ccf59536c920c209005b4ca140637f0bd01e475a70d6d9a8f5c2e270742ab04f32738a1910c881a5e7dd2f19e1cf9632b6c77dfdf55afb3269c14aebb4fed7456b2a3e633be8dc2255a105990c7316ec7333f6fd425a24a464f494ed834e52c8b73262b125700d64364d87bcd70a1834bd37e59016c1bf38b4a27b8225764f79c61a0a99aa8fc7966eb0dd896f3b7aba41baf485074d071ed79ef973a6af759815bc4167182de649421e280f4cc09562cd6af04dda5eda66d4f191d2de9841b1e57ef82389256ac484697896968f6509750b85d37d6ce82525c0a3c6e5cca8f9636178b66be7558506dfffea8b436cb69a986cfb1a1a7b73a9754a76b02f49ab8905100098d2a50f0e875284551353a6f1443ec49e4855b4b2eb71d8bea468f99d866f19b5d08d7ecb3acece4e97998dcfd859907fbee612104c13941026aaf8c199df29480db50779b68926fd17fc4c509a808849a01ae18c8de85463658ada2b65b0b445262773740a5de1172672469e77560234ea01050e5666f32620c2add120f375e961d0b345a495e8321e12330e90bf0e553f003e166218f8213e0610133cfb05a7dd3c48675ba2956934efc110062b0e1058c7def274d563fd619d0c0fafcd7ec34fa968ab95494f186c2ad04bf1ba17e10ce9867906206842f79fb925eb4b936fff0d24ddf1058064011e469f48943add33aa903f1bb986e2596698f8c7b26b8ed81cdce1d755b6931b3e548e3d4c5f389225118f6f9fafaddcbe35a4b41c0ffd8b3e09ed1f17a5e4cb86b7977a62de2103299b9dd4443368224cfcabd138c498022b980605c2c9ec245ea7c7aa3e4618663a438d14eb5eb4214920edc2e10dc713eb9064bcf24ae12132917728eec8e514f9b8ab952a609eae41f7355129612912e224c3b39de24c79ea03444cd4aca0c622b5e1a172649b3fbae313e1383a9110e1ae0704503de2a67d42ba063dfe51f7d798d4f2b557d337eaec626bc3ef6a983a3e335e769e90e7e19e92d84f08ad901902279de345dd2c86d84c222358c9bbd930d27557ac4858fc6644704c185388f1938b8252f0e411664d447cacd7994f1fffc97d4baa48766748ee01a51a48e8519a21922df35c5cb6ccd71c9a4e6b0a66a5ba31ba5d31dd4b72e913bf4e5151f0be9c5474c3ebe9aebf26a56b8f84ebc5a0cf5659a9c3711c828eff94656350ed8da84035abe675239e5dc854ddf89b6cbbc7449d23c3d1435ac8b1f08638708236f062f380584ad558c7852f6f961b0e9dd3cb0f70100b09bb06970c662adedbc1f972f76964b243c85312043a2a538a1b0508dc5f515a38e287ff7dc6423c489742d51f733f083245731c81eea1f4f4d6097915ecf2d7e1e51a50656c3ec9e74f9694d5ca6918381fef1284b8488c304c61a4a3425648ab0dc0a97aaf4302e4d53d97d9bbb3d8a6fa2c18550ae055f55f95560783ecc9d9d8de268e7564cafc592d8251bc40a9f38a8cbf45ded4dd9006b18b428be50bf8907796ad553d03628a5360bdd245edd501c563bc15230ca6d22c778a13e0213072a3e1b56fdc0e9912f1facccb602f85cbd96327dc40053af8a5fbefe1927777ae1d25ff47030852741afc9df7fb407e93b043f2f12da96b14648d005196770e2ffcc99c31881802eb39eb46d2381342cfd3a94ff9ee614f08845b3c0cb0c3c23c1f618600b69080e30c40bc0de52b21f1500504446ebc1c59f5186e96e9621980fd6f8c992c0bbe1d1ddc7e875423002b73ab4940e8514dae7c592c53b4d0be99ca867977bff9e62d02ceec44b90f136bc3790c076330ec8e4ba50f3ab7567f5b0f7c4e7ca31dce00a42f25525e187614bb6242563201e9f183a97f0de94e9012582ecb8b031907b704c5d1f924cc8ed44cee725288eb8f38e540dc2970ac93e5806b8148b6432ea02be3cdb5c92bb2ad7f8a839ca812789e4d628e0df037a1ee61202cb263d54541acc39ed95c88fcf888b32b0a25a0dea0f4b49b926ae96d1698b6040c1742c123c28d4202cdff77d1bd3ece5837545586faf87a7a1164c599d6e7a4975059f4cb6d470d7b8982c767259528c0866edb32bf7073d836566edc0e2e5b6986a06b9af5b49507fd5d11fcb1f6f8aa30b78e9fda8745879270b6f4fed65a1b147bc3b66b5bc3fd178d3f37be68aacee05294b103d62acda88e04644b42487459f24481d9e3900af8f427f88c7585cd4f9e3815736122cf7a7603d33d48837ed2b8d695a90c42ce8175a052936b00ca51878fce9057e449c529882833bd97ad4c8ca06efe5ad6941aa47589502eab5c2b1aa463e8877115848fa042da16f037f4b38c2ee6be8b5d55845e51430a3681f57fb6b722112002013c87439306564981804ba2192fc1a523d222b882c58506edc56a615feb267c4b003408b6c3cd433c8b8d9af78b0c94515b4cf0f20cf803a038f08409316b6fa77d93293ff4abe19a458fe1f2b6d673096e68259d6e685da393f6ad7656f01805c59859fc1a8aa66181bda374e02d2ebe7f0b127dc7e2b46b78ee86bd47685f6cbe237012de7910ba8b07778312cd751fa174725da6e0008acccc81e617d32c51317a8a156a5889d40232aee9eddcfb159720a68077e8975be65179cf4d3c4240eff16c2e72075d7d89b7514290b3f5586841f9f9db32b9a649565671aec382453a62ba525959e63702688d07413062fec4b4e5c85a2a315cb2f6f82488aa291e92f08c597a8673e83ecea05d652868482908f8f897e730510b7351e06c398c12a18db86f920546c68d00c7cce07908961778dfba3c4606ac74f10b79ae4ff73d161b26030cbde1d99e03884c61dc423391e75ca0c78171b6c3427a8c6404d927294667614604ace46c95c23e7ee25a993dcce983883c53bf108103b0ad66ff8362cfe1e0cbc9c95094585b1f4653156bc1732c22b2ba39e67dc75266535afbf1f4bb206e74075a3f06c604ae15c1a103e66a631e0fb622f4927dc42329d86ea1f81c8405d1bb7b0d86b36992c801a07936718436c32e2b34819a1946dcdfb6715147cf84cba71eff6578fd3f07cc6ea0d76907fc50bbb2e56f2570a3d4e8a50ada1f37ae3a8f3654893e45c169bce08838c9992582233d99b3f7e21ce65b9d0866354bffd726d4d24d3b2d0108420d43077e589a99c6c0979d505322130d7c46834a20f34aaa568e4bec1a6738eab054a1718182d4f7e92dc022b30d19301ff49c77ac595962d8e04dfcc56d906502f2796b33d7ed59dfdea753b20afe6f9630602cd0532c067c11da4063e81f4d9074766691c06368fbb38efff50c3036696b4e724c2ce48560b7157e8dfe397e1ffd0021a6fbb7bf09514b21390a54db00ab3119a430499054ce916c74f44daec7185e50751508be80f611d44cf035e1294e0bf7b2147de25a5e3c47fd875d59d85240a0b3568549828a228c64999278d77f1e4e736c3e2a4cd538c24e45cf16d354d289c79ca471aa61929ffcef9083293b5643877a0d1cdc6430e9ca9a144ab4ff67c82fb9056bbe065f56e76d1bb3740ec097efcc6cfee07e95357768df7f56ca3351fe068d6e20919fb2d107bee74a6c64203c015cd18dd78d99b758c46a9ce9a2f58044d923e7c4231845bb36959c35855bb468f4d0847fe906ea4a9a2d036454d18592c728f0792775ab087ed00ab2acb27f8e66ae34be3dd1ef77e48190c6e141ca56cdf02b2dec21587a3043f388f30d811504f668b740a139588f483deafe6e64684ab142e13ef3c40b9018e66a582a2f5fc0317471d2f0891fb46c5cf0d9afffa0b1e0e4f048eca5856af9892d4c192e769e5847c2785db21966d942507971fd2ed060d78f25a1ea800465c629f174e9a2691a300bb3996f86475cc158ba830e1ba188422951033a3a5a5a97c28d0249844e866ffff4048f4544a9c222d46d6c609336c91f85d4a824155262c64993312d3c39e3dab4189347b242291ffe3b98e0a7cdf5dc6071ddd7e7c14510c44eed99111b1a071f3de2adc9d16724a1fdd2bb5ec067ee85071367b660035bf8216184612abdd3493ff5c1acd0c630ba473e0d74db9723ab2662d1fd6eed4f821d443e47558cadaa64fedd13db0d2fa030970150e8e6b3e254814b7a6f53709284b262c46ce22d6e36454615fa747d8b72c961295ba5b20279d5f2a90bd565d7d40ae03d7e95b1a829961b3cd2c65ee71eec5acde808765d6012c2f64ae154f581aebc94f2e0a5a9830d5f60a36539beea173651ec75f86fb14c3796b3e5f6beb1489749f845af28fbab79f006928e0b450512270b58d6f952a23a2e12116eab28a439139f4b8154eace07b256da9b3b0ae5e4f35a0634616b590e7866783fa4c37633e899d884e271c7cdabf9c7a1520d29b91c01ab67be040bcba9ba82d2795a80233b91088663af60b698a3c669f54d77b9bde9700f6a6d767c2ee6dace506e9ef4faf1cfe8cd260f1afed9bc556de5658c4d1b44f0f0ea85fa7b735c756d4e11e9093af38e1c43b1faa0e60cce5c687f9918b7b014923288fe87c5998c4240e04cf02654188de7f1d10fa94bccd6e6888471cdf209d5e9062eb943144582befac1925e39ff59eebcbe7edb60d951145d75897d2e9a44107a9d94764883936a0a408540b0e082fc04fbd24fb03300b60a5ee0d0a928267eb9061251c853d672609e150c8ea2cb77e07c01b01fb26cdb061f2c272c4dd64e0e2f529160428df900a05c23bc6c8577c1efc1370cadec6331940c40c7ddc81314eb8b1be8d2a73477c4cc1ba43c0cb69c4979eaea0be01220d60aa061f80907d6136aeb71aa1ebd88742d531341ccd9b17be05ffb686e62d0f96d2afb75ce6f2ea2429c640ea2c57f22a1ce517a10375d52aabf1b3003ffc9d82f88844d23b78d460a610552c92a0782696e2b1c0a6046d5b5cd9ae227552a978ad67c3989b0f432857c33a72b79c16d065ce1d4edd4afa698caf1523ea52268e117069ad34e17c3a07014308a117025dd336c8eefef6045831b5d2c944145d2d59edba2897ef1d20df1091e961ef0b773e7e93f51335b4453c7fc13dcc0899e87aaf1eeacc0f963918ae2e6f4972b5993c72619ed86827b932b1aa6e5ffb59fd871ebdac0b79311deb7400eefc8f90fd22c16a9c16d9da9d2fa38430a4471da3e67e20162d602d53b4f7c82e8570591e95364ce6ef9e977c13173af880c30ed83b40a1e7eec03de568d7f8ff00ac853a7359c28d5c5074a955a35ddf780e3e42a47ff5c3dba7b471d53bd5a96734fbd35336fe1ece40492ed6e21bc51e72de1e26f360ada6b5c73ec65b08177e81799c778ad5aa38ea96bc64fe31be3c8f793c6e99b59fe34ed636619408c8829fcc207fc67b36f8c130c00d7a6b291d7be4075c5b3fac6ee40b46a061156823e2929035ecd33763d148a00e897682d6bf04b49d1e6d1b207bcd1f5ebc2d84b24059159612c3a72c356eaed52227ca5ae67d4be8893a29feb9dbedceab6a6ec61d84009d2964774c5d6dbbf90f99c250d674c76f28fe3518a566f19e5c0f3d0939b87b93ac0f54bbf06c2c78d4dcfabd3f2d0d21033bb7e0aea91d0ae2aa293a438e7c6058b50e415cfa16a5db868d7d86d81ec73469597be3c2ba743bde95ff74f0d315b07b4f065f64f463ba0a9f28dfc924db1f85af7e2a58848c7c250f13e9cecc3aaac324ca9d4b0c2382d41c1414e15996a13f7889ed4a30606e85afb572c1d16b5f9ba4cb90f4425bf432bd07f957202fe409d11e032aae7eb15738a90360c1e89d7fb8366679e2e57ac05bfe318856706d78f355388bb22759c99eb878c8501327e19af87301861e10ec6e1e5369275e3fa0a265343f0bec0d3a5586b0bb914ff38ca8f2416f0063193a8e486179a549bfbc9c42e6ad8b88c12e291a10aad07d2974805e9e35ffb0e1424365c33bb2e91ce7078984284cd04d0672d77d6d180100a6109b617780e3e4d2eb31ca21610017650401a84811c8b78c27ad4dd20656e75f0062129d88432ab0cd0dbdbd5b899f79cb2465fdbf202e12d4f72d36b2e686af928c0841b2ea397c05808b819f2c85625219a50982682f1e12b762ec24bbf838e9dd6b69dd4b7e82fdc896ccee2c4d96704e886a2630ed40f95d34aa0f41294d57c21401102cbf844cf6c2e467226073431e4e4b572097e4f2c345498aa8f4eeea7d9b67ee5a5db3ff55c677702d4fad8ed7d4773ba24a4b561a411e4a68496bf4eef964bd85754eb899f12ba91fb81f7b15b9efa8954b226f917dd1df97a4cf258d52dd9b9535c6e3fc3a39e9a15793ee9a049dd827fa294a5f13ed57b38aa57cbc705ee627858f391e0b28ce3ef8d0ff8796d77b3474ad50de53c4aa04ebd7f42d33ae5ac1cb597c63085cf4c80fac89812114d8c253e9cccea086c861c1dd94dc97c30a91ea4b3d568472932cd4287241bc940b839931532d238ac476a04a943364c664580f3289d3cf9a0e0b9a54e66bff0e8945f9abcbc43839b2cf22accba412bcfb5559641439f5d8998a18cf9c84b131fbe72c456f1ed8994ca0990330e0a393db6ca4b0f75afa58ef96a2eb3f28c6be84e056fff3354c2b94f3351815bbfeca9152118fc8fd2d0132e275793ec13a6f0ef25e97d92ceee0616f6f8d92d5cb41ef0d562403892c727aa15cc0b58ebaf4f70ff3130f6e9789380aca588fd2f074b8ddd51bcc2042d2dd8251661a8b7ffea3309e21ae4913b67cccde1c7a96a7b9314df3f384af4c9e8b4e9fbd10ecbb5079fe45673cfa0e5717c1aeea340062b9e7c545a6121e77175114f6f6c1b7c6ef95e9a291cb496fdc4f220efb3ab78236f307f8fb5f8d2722b8840f2524f998c9600317fae040637e58696f2573dfef12fca1f38af624e57c5878dbf25443dd717578761ab57c5cb805e20149bc8674525ca410bf8f538d9a99507c5953ccf3558aad9822c65f71061616c0c4a3eeea6956c2c4b5c46d2c1d8a05fe376c29d94a7db1cae7410f417312c7164763f5f189bb5d3f2865c4cbb34e2bddf5f88684b0558008db75e2dcd80e79cd771895b7fe9e2f94a945ebae27dca90db1913142acf7df29af5f97246632a63648dfd167cc70799ae65bf728b0d0136641ac64d8fd8c74b84f8368db3fb00946585c8984e37819fc1c073f7b3c2be64ce5049c51ccf436c31cf4f486e1fd2636906785ecb4350b57913c692289862dc40fb4024dc6be73de43ef1eb44e1f72a6930d152a08cb3a39a7971208530e6ecfdc4a0819d57348275c1252c2c7a66a352f4c24361409b04b057b14e67acf96cb3a51deca61b69a9459921348ef3440a7a85e04a88b9de76ee8b5f0f525dd2666e4e882ec4c211f57b6f84162b31b90d9e79583e0ce1872732cc0ea557037477903168ee463d0c7a55ce8f6699e8c32c4389313a8b92257cdb5eacc8361ada596b07b1048125d101010ee0d66b5a167c2b4ad1243e935c2663db69ba55befd170f27cb8cd784109d0d1846a5a5cb7c85f677c2cb13c99bd02530b530a7199f3248121547c985384531b400143cba13dfdf8192bc025a7d0b1e19cfb92a4a5fb9f17830f78e936be572a32e1dac9321016e1de348fa42fbe82582bc220961fe67e4a9fae5ec3042797c8a5b9d97f7131d30aacb87c41d3f8ff12803bc2ac1ae51dd0707c5199d0a3841939ad4b529f84866ba14d790e120356c250d2f725182fc15bbd530331aab247edfa5ae076049e5258443d0bba3dc4f42acb133c89bc0649e476af0cc254e73eccadcfa49c3266ddb2c1f453e3d2283673a3dd30547806f429c4a1957e7b39cc5df4a54a14ac586a8cc49faf8cd1fbe18f6fe4abc82fd0718a67e1f5aa126993337a124536e9c9884de358d29cd045924c7e0bf556296ec492f6f5dcbf78ebddc67b0873b9b9100a34f86e843c3bb9e16f520b2cd229eff26741c63ac44b7755695824ae22bff699046491dd9bae6a6dc1d795fea96b9a2e645c76b174a3e7b6eb0ef818309092c9c5c6c874970ddbc6e6a1217d448ec3e4e75fe872df2695dfd8050aad8335a7cc14a8c94858a8fa2b8ac6edd30926a6e6bd623d4859eb5fc5997d28841e7fe91d87447dba4024361dd89f4c29320213d1e020fe821cb0cae7e6067759743f62820888183449166116656f344b7cc042ffbc3e008c1b6e21a54f249835a91acb008d69fb023bc8cc7994a8893cca78e903ecb418a32113572671fdeadaee00fa2cf9e063d481e864b74723e500ed4c6b4046bd07e873e783ec29d7521e75cb94f1108ff5ac98748050cb5ceacfdd376e2c3c2dd5f816ee2349c488acd0e6b630bbe4ad61020592e73b538444b21d668254519cf401f19ccae361453b2159b97167c70a83734fb28ac86ec27c58aa5b764461c92bb4cc5d2896ece5e686072f7b309808b7017c277824f692b43fbcdaa9730c30c82de495c4e00ec8b3b8b7eca53222a4430233b864045a14ed1cca81d0b831cc33206486d9cfa3c09c1b7301a056f5da498e2539843ae7c0fafb51a5af76dfd18b2db73e29d22fe0094a3296c013a3b957358ce1668826750e48c77c7492a8a8130490ae5934fe827d20d2bc62f6f46b9ac788a097beb854a9a21fbc77a08a05fdb843cfb3dbc79b3e44d0a7d7be732b9b65834db57fd490032acd8a8b56305c8ed20111992c7af34d3a05983c03410dc56eef19c567df7f66ddd268639584de37eb968426dde2805835aa4fef8be341899f19e0aa3df0367b2122ee3e9adc5176ecfbc2587f1dac7dd908d97b6f29a59429a51442084609b00831ba941e5f853e966baeeae60dcdf5fb90d5eb0f7c47cbb02e2d9f9794c59f51e37104ed7e1996e4635dfadbc7927639ff6143f93b597deb568bda3f7bd4b82636a70fd7c3a19ad814653d405d9818742b285607e57f3317336fedcfdecb3397bb2f11662264640800007ab0c4b092a9c0c043948272424d4220ecb2aa29237cdefbb22f3be7ee5281d6cbc4098feff7a9a8495d2a954a3631dbb4c65dc89b6f4ca4d98c2e40ae5be8d0ddf7392bb9f67df70272ee7bcffd73dbeb753f9453eb82f065900cdc0d885783f0ee01ed62490b78b3a0fbefddbf9ef427467dc02a5f3c7e8fb79f6b5b3a0bfab39b3dbc6baa13215c58c17352da65fbce27184929e37773ca09671a8f5f4e46421bc9efb8594637b66b0adadff1fb8b9bd6f8dac239b77db31b22629fb73d8e5246c88288843c623e9e725cfe17688daf989e550a5d20ac16c23c184f23a5c68d4b3c903037c618278c3146281f4e9c187503c21e4508e1bf38447c51882923941046196923d918e7c218e3c6cd80db977331e4870de1cab0f38a988426a1ef7e5453895f97f7216dd7855a12c21caa94201927aabf1874015aad8771c72e98b7753b08f95a43bbf847904cdc605c40f967bf19a3777cd20842e811c17840164885299971014ccc5c05c09f99ef828fb1ac22e22a00ce22aa6a83fb023f56f8ae18e102207c1806df33a20852fcfc9c70e62c79ca51fee33e6ba291c19c94665997d577638234f5fd1322877597ce7d8658220bda0d8153dfeb863cb849d463e275ef6662948606e739a442083da2137627045596b4645549f86455a1a0c67f12c648f95de1cab8caf261c34e24e1465bfbc165907e943ecee802794f7a08e32efe98d4606a28bfed4519a7a26c88e8954014c5b7ccffc793bef7de65bd39aaf7a6104fb64bc1e6477d30dc7b414425405a0e0e73655f65d9c42097ea7b2f9aa60c5487e6eca013a3cd41c4798208a7b03e67c440a88d3831fac446f9be85136d615a9a002afc405ceed0ef0b1441e42a8cb004dcab79fefab7be7edb0d84222f5008dfbe4439c4abcfbdbeedb1b1e3c4117ac427c0fc7fb734e77f49eedf4f275dffac7fef3d07fdd218e4c4ccc25c0e068155da9b0c12f26a557d0b0733fb1959de772d36a77c1407ee86103248e6fda3dbfeb051048389f277d44132157841bc3a3b1e9c24ff6dacd3343518e59bbed1a944a42abf2ba11ddf74d7bebc5f10063ae66d3da469eafb7e5e0a5da16fbabe699aa641814aa0274a25140aa5b34f02494001407b755ee16faf2d10ece1cf25c1eca87a089fd7060ab00f7f58078c937ca000dbc035ec2333d9425b96c1cc6ec3a8f1adb71c7c1f9c34b9866dd8f531df3f4355efb8a6fa631a57b6b97e2f9bbd6cba598f549845c4366d5fe0b5755b08643411bce46dd609f1ec82ffbdb3333f33f3db768c8dffb418213353c894cac8aa9a1fe1c7974fc218e43f908cf4f86212904c3fa4a24ca7458d65a22f74531eb2fa8664759b5c7336dcbe99bdac3e8f834e27550f9f3a69814468f34013e81ab76c5fe00a114b9beb02bfd2b2071242eb9b42cc0a8b7022b0dd073c4dbea3a1efb20a2187f21d4c8527b1ca8fa22e5009fa149493adfb613dddba79bdc9d651ec435bb5759f8393401b9665d706bd9ad5acbefab95f6110914f101f11e9908ccb08d4dfe11afbe69a6a7055b8792a8af8228c1a979a730821430821649e41f1e17e300a57e4f71824232d2965fcb74523688c9755c5871fc42f8881847c8ddb06e9c810422c9894b68e534a6837f7058dcabfcfa7f277455279ebe0f7d6a70d79a9391f06b787aaf0df8f93b287641bf25215c2242884d026421c6ae38ea47610a7fabf2d34c3a0fc9d4553fd89845015a3435eaa46195faabeed9994a014d7c4de9c0f93a114f4dd0f04b8d4a775222c5ba9efbb2c06b90106591027714086da6535cb7c7c2aad2ffe3020812ef7dec25123bce1dd509fcddbc27684df89b01ab7475304f24c9695452377a8f29f9496ac2cf964f524fc27e303c940875bf4f802d9e3234f3c62e08373ca823e23947f4119583f4d9a818e919ba3dcc53f48cb1c5475d4e9545f8f4fd1f3a8a0fe17bfee861a68a8afa53e517da0e5425487ffa434bbb62e7b6beb9eabb68e8381a91dfd51a7d69466d93fc7c1c0b4116ce32efe73529a65ff1c0703d3b10d0c3a873929cdb2ff8eebb6876d9af3876106ca7f3632fd0f348129978bb75cd4d7dcdbb6a7ee0c442eae8880c917237737f7335cad9b95b717b7d9652ff8a9f2bbac96669af34731a33431da6f63cdb523faef3d25f4bd27630c115e0f13c167f890e1463bdb30f830acfa3be3e558a147b03f3ea8c5572fc61ee8024f3302f57ebe3d66264cd30a7edecd10decdbb61c1bbc1cc9969e4e4bc9b77334d30dc0f81a1c12e0b3e90908f9a4758e383bb801857f0e2d6553556f02fab231c0253021898079b604515f0c48a9db3c24d9e52861091d818e3f74308e30f1e618c1156b8713288dc1cb3a4c453223a5cc910349eaaef5f159ec22adc1e8d658347f3683ce5a9593addfc4cf1d3c60f0ddab86adc3c9562c4539efaf93931aafa5f9352386989627493d4f89d6862446c1655dfbb92454d9a52e1c6251e47a0fc1d97aa03f16ac7a589d145cd45d5c7329872c64aca23a87c77f8e20cdc05c06f810f95c6cbc115485e97aa42144c909059e35f9537ef0bf17b115686113ee8af0a936b5ff52ce231034d4cded6235b667ea20a5f377977878824cbf6ef444feb6d3d6edce45af444754d3b1235848da3741ce5281e2d703940356eaf0402c22bbd92a31c2551ee90999bd6d67aa3da0f2bff7a985310dcb297556feb8278153e855a7607156d59735e043502670ff0a54c8c108284c00d34e1a0fcdd5c8e1f7dbd05f15826d02778156eefd5874b308ccfef66f51ded321275972060852f97871114426bebb26aeba8ff773275695d415aa9fabf25d7a3a9837df83fcd97f09b79347835de057af228e8f5e83ddd1717e9d077811e4808f6262698a3a8d6956a5c41df28ecc3ffd24420ad47f52f40cb09a5a193ef68b081bfd3ea0966a829200858fd20100804ea567242f3445b770100cdcace4acebeb8a79adb02ed284fac1efea6eafb8ef220e9110e5b57a468eeb440ba9e3aca4379567628cf6981acc124ca73a9b140f84f75f86481f6b8c13c4e5a81825dfcabe83982cfca91d3ca13fbb2124327d2c9e9dadddf2253f5b702009aeb64c502b1de7fe5891528d806d0fbaf48d123ec577484983cdd329be6bc71d8ea44e83a85de43dabacb7572d24acebc4eb5aba80af6e18f69222b5672b0a8fe2e0263a508222eaaafe4541751b12f6e695b453afbe25f4d29d2819a08bef8a70b5a600a2c5202633ceca016dbf066b61a43ed5f46b94e846c91a4b9ad145302f50d8b755f72d15c4b1e696aaeb12450fe4e9a648f17b9eca040f87fb00d3d9345818251f997f748651729c17fdc7043e55a7991e5b0eec2ad71edd11c3f9604badf6512e53c9017336374abeae4a45b213916d685ff675fc8a0cc1b7f9f9a6d90df42acbfaccd4fae75c5c19d980fc4abfdfdae05ea3f4e5aef42b5bb9ed6cb3ea2c750f9bb503779db43bc2ffcd5599aa00fae6de92aec7a18d0b683bbf863945e5956fd5b1c070353453a94590b2b3b62d472de345dd345aa3fd3ec8bff0537e66a4ca44361ed9aa6474cb23a1aded25adac55d3a1a2060d5df177f9f8376ebf30ba42b2cab315f77631c7506e540753af95954d32c90ae221dfa6ad734926d66728ee0547734289606adbca0f3adefd6677d78c75dfce7e480cfd951cbe724d2a1be202726a8ff7baa374fe78060878d0349a01ddb7460d7677dbaf5e1c0fad83889d7859f4f6c2ecb02c9c0bfb01d9cb4313d43c34baab39276f1ef3655fdaf6b724eda986c0342866df6c59f871db4a1e0ce611bde913e42f55fee2aaa3fc604daf10e164d9a3102df051f333f6edd9c72ebedd271d2c6285920effd790b4bea27d6c5bfa9f042ed9d19ec09ddd33cd5bb6b9feabdc33bbcb35be7eccb17b4da8630a243f5d60f7189613aa2548aa9b6dd80e0b7869152ccc6cc77910eed8aea9ce6dcc87b196ba8c48e3016cdf9fb89102e664cbcd39c3fb644e738a9699aa6739aa6739ae6d1547f0b2423034b25236c16c80c96c457ac8b7f559d9cacd46e8577f6450eda754e75ef3a673b22b53ad59da18848047676e4fd98efbd20934138c40d32d662f9f5fc2d18b6d1c09636b14fb983f2770dcd553fb16e40b5b57052c21f7ca8f1e59452ceadf3016ab207f9f1e7b6d100d3225dfe2441a17e7e7e90fcfc9c4ea7987d178b0ef0f9791ba29f45031cb3576bee061af562ac1f76b26ba2c2a9fad605d1f5fdc075df5b5b13157c6a114dc49b6facf006136a13a855d7f4861658bc7105ce1b3a6fe464546411db908206a636b2b8814c0b526d8c4183d306156c646678322a3e4a3be6a0b2ae898d2e4cd850c30b740814d635b161626307090f143f4132fe518d396a201938520d2f20f1c8404517d078193f30064934cd3a5a45994fce5b1dd4cc39068fd3359ca8f3dfdc3a79b8802ee90165e0b80bcd9098acd0533bfad13ae308661cc1840a27502a288686c98c9f132a68ac6b32830bf40974d63599b124a3e20a74f82c71828452215023a8495d934f16f584083e4da82a39c8c26404970b9afd6726490345837a5dd31956a841acc0e32e5be1ecd1aeb1e45ba6f0c51a29678116bc3892841b28818535e0509282326688420b3d2524c8b8c10e8ed0420a789230a10328e82881b3832c84e0082586a085530dac70638e1f3e3f3be8a2a7053674a0ea38c2051c6b9051841cd821470a6a9e70859c19a08890454f1c138918cc60a19304182f8063005494ec10630c2d8e5892a48a9b1b2c24810b57a84214de48c1ca11268061c3c5164dc8c20d2998e02207494e5960010b42ccec44018510d83872c4167e52a022032f968086115ab08326da6814f080041186a0059312b4387205d1124dc891831e3376e660238d266ae838d154810e244234008b19253ea61634e10a2b08b15d24718336d878420d2bb458e3055c98f1011098b8c1923ad44841018c60832448c8620c366e4e4270713011861b5af8400e3ad22882184d48c2107ee458c306552001175f54418512286e60a2821068d0a004460ee66003064098c114ace8a28919237a6004133a6710e141183228638b1c40f1042fcc58329450230a4be078c2b4b33e2938423b498849cb58cff19d1bb7a9fbfb6094f3cde9cd33caf97656d6853d0cf366ccba3050e88542de1cdac5408b61ab6d0855f7af10b65ae7a5d5ba3ed5fd13948782e2cd283e757f87a7731aa74b6d83fae1f1d9611db6611c2ea5fcf9cff2746baadcedfe1e8c2f466f8edceeef4118e593d29be583314a3967653dcbf2664bceaab2acebc2400f04f2669075611808140a99d047a9375310c6218c4d4c30a614e31394949792e2cd292b5aada30b030cd8aa642fcbbc393bc15843c1584bb95244201c980708071e186b308070e0ba2a4f45c59b556668f298a19738ae6de9309bda489a6bffa9eda71c66f571d2fb8d11e3d4248946bbf423f9498252527be592d276b3485d528b74cca3119568d752795b9ae318fcd77ddcc5696af7687e9c244f2e51b5456d50510b287ffb3866f3947024d053a38e7ce173b2011d0923082cfc7be40b292a3f0b6f3c7848819a94be20638c9d205cef2b2868556a540e4e3e68945177dff959dceb9aa63053f723a0439360c059d3194b6a80a176ffa3ae97a64045bd5067cc786b42b6306942b6e0624446dd25c4e18451b5271a2ce18c9b6a80ba4bf0c1a95c73edff3af7e72ef93b1aeac20dc508343a896384a8ebd383f80fb2ee13c15ce3fc39fc7eecad44c2b709d3c38324e048028e9adaff30942568ec8660fd3035553406addeb5ccda3afff9d7ec01e5caddef61b5d27a70da71f549a2f2e7945a4bbb346f8f43b1e6be7612ca177026b068003eff3ad4a6bb743ff6a959d2ddceddfedfdd8d730dc16ee8c4c487ef028e31e201f9f039466e2c0740c50c710054ccf488047dafbb4511386af7d56bea2e218e9dda51976e08564692cad53595c1451956d435cd31f352d744464ea527eb75085641b409ba263270ea8330dd1dc5b50b4486ea0fbdd0e2a7c227522fc718b501c1ff0391520d82f77981f077b192965dfabbae5b9b9747db5c67d57e0698c0dcd0a31da3b6c954fb5b566a832440a4f2b64b43f7de1f736d02fe70c3b6e9846b5bba21fc3d5ad369a6f2bb18ed2747522dab7beb7e80823465efd143cfd7020e316a02ea6a91040af5ba5ce45c39c77ffc8081e1b8ff2cf38d61f0851b6ad45dae4b41dd9db54773bd4ec4871a2fd1a4f8fc7cd3a316a35d986f9c717ab46feb1eb805fd7ad5dd42091bd4ce4f95d1a01dadec26273d93bbb0f7744fcf92bafcaf074bf5c5901f1d34632a5cdbd2c9a053f937ad0283ee63ef2d9b925ce24272ba86c0122c55df7ab8dee4af4b33f9ebda0b0ea0c2ae08f7c1bf3493b740389894aa3b21809fe15b3e6edbe559d0005cae84b2fc823838d31c6fb0242dcb92b1a848cac0223de287353de20a6bac0d16b1698e618d1d5ef95596eccb40d3235963d3a3013c7f56648158cfd577265524120de0515efe1507f0700003d8204d732c51365812e138492515c3af545b67523b118e66edec0bbf4a4ae559e53b13958fe12f0b732514f382a6a46ac755161de26fbf6d43b0580f7ae28e9b9806dc200c9b98f844622af9327cf56f472c27bf15e565cacb87201959692a2919b4ac74a2a168d80b680a2c599a551924938300340bc75df85b342bc75df879fcd04e25e5d0c463878a7044382b2b221c11ce8a084784a3817e161d5a5e002f806d88ed5b36161de2b77ccb36c40c1f9f480c91cb54e1cdbef0b3583dfbc23f840d4da8c214b3fdf6908ca8c3e30b7aa92ce11fa8a4164857feacd423ce5149710c6ff538a9e5f95d0b34000f806fd138c75d54522a5dc8b20c00df4d92d5e32efcd95f52eb6af5f4e8f100e8f1564f8fefb226f68519675f78064d2575041e1831c534e0c88e29e6e23796d0014fccca0145117c62d808183c3c31087823f513b3200870959bc652fd7a21678d530c9bb1844f0c8320c03cae203558d31c343128a55a3d3f94e5a5cf4155524e8238ff31a8a4b2ba20ed2b8d2bc4719275e32efcf3b76e9e6c100765ebb21aa4a38e7563dd5837d68db64120a58a703a8853f9210efc418fb2d2bfa6b2a4b9a8c32d10f951c749d0e42e3c51a24ead3695541db483a60a4dce275b37a984a6caa8cae361f805c9a5a3beefac1e6e5f58466549735969534935c78fe1d0102c3557d323f973d2cf2c19e496a4fa73bd3e88bb86fda56da5ef27a475b054f903a00140eb660fade31e547e166d45c3a9fc990644d74e25655d0104c3a075b2f2d03a593baba7cb6ac0226489d414eca3b6476c8c986216e4af75be612f2a835a8f894af562ccffbd4a4a658918953fcbc9ac68d20070b2991eade90a6154ae5d56baa99ce154cea4a89cd154feedb222955f3ed7846cc185906650051250adc7b4a8537d909ef3e34e8fac13945f94df4e52515050b66e082c55eb437f3516d2a20e0f2857ebbba88383f5d18ae6f8c4c43796cdf544ebb252f7aa5b2f55a54eb48243ff504e5249b90b7fe85f921e5d1fb27a6a28242ad520ad92faa9ae62f5547e2aa9ab31abfa200d9af5c52ff812ee965bfef2b75e2478a9ea5b0f72fe0a68aa7c291cba5e3feceff5da5c8396c94e7522fed43ab90d79a9ea04cdd3d01cab2c69177e1b0355521107f46d309c4aaaf2633474bfe3782c81caa0f388b014c12c09f0836b5b6610e87e280ab48d252affb651a4f23f7e2a02f5f3772c42bf3213a89925722c214791ea2f6a12c7784bf5f77881f0d78e3a8935c0bfa01ce0c6d25bc8c0a7f606c5a0f495965cd65f3babaa472dcd59bf966561118b3e2dcb72ebb16a62ff76343796797d555598f652adc112d69cf5539b2fa0fe9817d4bfeae9d125864f8fb0b7be4203be152d69cdaf567569da0ec5befffacb413217866d13fe0418135d41b976af2e0434aeaa0fd2125401ec5984f85f7fb108c1fc31ccb22ccbdab2e6ace77106ed32ecaf25182c3567fdb5bd5473d6633894addf166beb01d391365062899a80ba4bf8421c15d3a9d55f52b6f48baea0fe755faafab764816cadb68ec84cadaaeab117d07ecc0bda5ff57c85468ff8abaf4e3d7a5f55486ad5553f3e5fab5395f32f4beb88fc80c3d6f713e00a5174e75bdffccc22c4fafede88542296c6429babbe7a7807fddabd54acbbc50c70503b4853ab1ecd556f7df752b5ca9aab3e48f338836e4bb5f580e93c265c6c22d32019770ca623f23290cc13b4a3558a392b904c6f969094bafbd2e382ef6a5e2cc61b6a8069f94ccaf476c30f181a5a7ef6d683566b593d64403248eafea382f663eb4345a1504846187a1e0a8542a1663a9fce14b49bb585d01102ed0fe2ccdfafb943fbfa5d6bf7adb99b9bbb1fff7bf2bd4ef47cc8a26a555596755d586b184c837ad60b84036739b46b396108c264444868b762d40d4394cd37e9de214a42772e6df67de9de2e93178514262f0adacde7cd8f7dec9b507effb0fa9ef683df71c24356bbb3cadf22941491090f18188649afdd9313132ad375533cd411a9957561a0939390c93cf166140064e1da96ce4db5d76dfcc6713cc775764c3ea71ffdf303f523f5c34b3f9cc60777c199adb3a81dd3a27816d593f39383ca49e57429a76972da26a76ff8c43a7cdae193894f3c7ceae1930f9f4e37a959a23499cddf7038379c0383e27efe94f9d09e1e981f1ccc73d9d3ee7117a771179e05e243f9a7dbf854fe21dba7712a7f2f2a36ce4f6dcf813f1d9f6a3f3e3dd649d586379e6aadeb9e8e61edf9509718d43aa7a931ac75b3aa4231ae39cfbef03b8392f08661d31ff3d8e191b32f2eda11e9ec8bbbf479349e9248fc31b641aab13eac10dae429ca931010ad876d789b3cb18faba74aa1fbd74a142b3957c44457d0ae8e85348e7990f74d4e42f1242499a7a85ddc459ed88693f5e19fb22ffe9d5ce344da2153bdd17d09024d61d7b5c685e4fae911a43d3d8a94c75774ae13e571d2757217a73c2b50ac4871b2a2f215c70a16d59cb04d30d02532bd0b64418a9d842cec2404e202caa7bcfcb5440f1d4268895250b4aa07efcbcb939356a46817ff152c240a93a7fed04a4df50f81f8432099de56684e0bc45ac9f1ba40b85a6134776154a0dd4aced6add054ff159ae67c0e0a04af14e9115f0f557b6e40106824d7290045aaffd5f35001c0e901e2d54ea4b382dd50abc344393deaae3028cf02b9de9f7e41c1601bfafd69183d7a571862041da483b40e2e9896efef2182906bc9e0363f28ae4b87db0a9e93619456f09473ce0bf484ebe267846246a83f189999df14d4c89c33b4fb22955ccced49eabebbffd47d5ffa88403d0bf8e2ecd493f3118176744e6cbe52f68840311350f7844087c81efa9e0515996422a62728dd63666e666e7edf5e0a4aca094d49494949892b21d10c4e3ea90aab42154a85fae1d9f1d9790a4363251f8c51ca39ad0a54515aa55459a5521d8006ae8412b171257303d7f6e5eeeeeecb7c809d4fe291c0bef0c10fbef0c1cd1684d0913d3943644fe57177f717e3bf0cb0624a4dde9b53ba3bdcefdcdddd1dc62eeccee8ee510d9c241246197f8787cfd4073a8598cbcc30469805b82323e498089bd89808b3a0036f1f82644e6ba1a107b7c3eaf7bbaac64a6af2c404d59f84f057c61ec18ece299d90523e3baefeeb331ff79393e0738ff4e171178d63a0e6a829796ca8e491d5513c7022ce4199971d856aae71707221bc1e507e18bb00773703bb7fc17ff041f6087beadeec2fd7137487ee303ee78906e5f7173bf7a94eebc20fd2ef3d0edcd80a5275df0e28ff1bf268eafe7bcfdff38e4ce02481708ed765400837661d747577df41921d48efa94d721e9e247a491103554cdc9cc75dfaa71cb41fbe4d77716d4b77d9d4fe9d979f9ac33c0bdaf98f9fdeb672e724777040973bc45d11af4958bbbc11f4e4489a24b16897fe963b35903b7dd93ce6ae1fd5b47e3889870888787896862a846fa22494219c5f555535ab5fed879d413a650e4a7393d3a34be35273fd353d82cf4b748c2344733d84a7a0b00b6b8e6baa5e838a280f4e12625328b882f673911e754b07d3f4a8a647d5f7b30d0a16c8f6682e835acb72f323d065b4ee7ce6403fd374856d7f6d3b4150e1f37c75b986a6a5b9fee6fa89606cf1409484ca5f51f67369fc7d2bc6dec0d5b0a6e5c2190787fbd13ffa47ffe81f3f86b4cb2aa9fdcc4316240f4850ec87719cc43acd3a385594844eb12ffdbe43bbfda9cd53f030c4871e4db140e890e6fa7fccbee1b8ff2ca33c34d7306441a515baf8024f5d33ea7621474ebd4ce66f4b1a53cc9462fa39b6811b8b2742b65042e261c6df752f6c40537bab895b37e1d651df98b31eda653ff81d7754ffd93cec9022759f6f7ed0243705d1a33579a1a6e399ca34cf0b3fa84b6a6ac74bd4dda147ddf28ca047cb85baeb8375686e3f87e63aae2e47811ebd1a68d4ee47dd161e3db47bd66122b3231bdff9afcc9bf0f7bdf92eabc39f32b2dff684d7bdf7deca08274e129c24a2876f4594ce09e3f3718cd19b448aea9ee48eea65c04146f517791c46aa7f8f1e71d5977400544c3ff70cd31dba80dad15a830c7c9c5feea8cd523b5a5f77437d303d7affe301392c10ae6f7b8f4711fade2e6963a6f082f0dc0485a708ede6fe4b39d1ee55a63f961db47b6ed21352e2f9a401a606bf96ebfd6a47b3b9a6bc1c77bdff0502c938f65e0d91866e6a5d2f0803aafb286ed06e46c6fc85aacbb56ad6908cf569aec1579fc466a8b2b60a7544aa6f13dbce3ea3cc35861048e69930edaeb0edd1155a58bd56dabad6156a33d5bbe063aacd08f6d7f57587ea26ff426fa2853417c75044a0086cf52d0858b1178170c0fe0707dc71c71d5c2f87cd7b4d0b9bac758b226253e15f94f608f4fd6f0dda3dd04f76a23ebe26fac363e41cd6851f263e3ba6c9bfb4f951339d80782090cca44e544fabad8845c518915362d7a434cbfe390e866a01c3b6a315166837abd511be7db8364cf6b1402caf576393565e1fef5b2af7e8f73efe950292892a70f2f315c244302d35fb17c5d0a81d4d69e235d606ed9e93a8d30c864539a12621107659d54c09c997c9a0e2ea53b5b518e1cc7a4c092b2f9059457f55f57cf69cb27aaf7afd4a94f5b0342a7ad5c7b74011d85a6db3d2ba6e63b3ce399dc48caa40c8da25415966a6aad4b4c8280c07d7eef6836ff6ab666f58e5297550fededd7dbb2f3cfed59cb17b5f6dbbbdb8c17ecfdff33679efeff9e3f5f7fc3def9d59b820bf66f797eef1fd7ba975a2f7608f76bef720842e5a82f28b9adb877d41f9237c08dfc6082386f35e655da1f8709280ac0a5696c38893c4df9496d520196b0954ca291f4e92110fe1fc9240e172d0a54b97cbd23d7482ed0f46392beb0ac51e598681ac0a56162844805f979e6149410c10845ea090c90299ef23c8eed2ff327ff991fec3a08f932019df3e897ed9d85b0ef24531d004bc2edd1e4551a5158405e50fd252ce692d073f0444f5b81cb44e302b1855509d975b4175212fbe5831280da6754f75999fd65141953febc1dfc2c1708fcaa6378ea8fc0fe891a8f2ebc001fe0850c08d17d4e8458d6e38a1c6c77a44aa719480fa26145ceac342a9be5d52bf3b4886f75483740d9c50d9e0c764aa411b70d496c2e979559d70cbf86bed351a9767ee0eddaf5d20cddceeedcfedde91fd0be7a6bb75efbd27b76ec6f5adcb785df62184d0e7f36210f6f4013ff718e36a22d824e0e07e3cb8f871bbbfe55ddee55d76de79225a124c733d2a4c07e3aff9350154230501d47e06d1808ad698a2b6d48ea9c2058455433ed379604139271151bdbff5ffc3491c6311614487eafd89906fb1ecfb43eb7763c140fcf91af868fd8585cca019e018f9cbb21f045716ec75905f3d88659f0823d71351bd7c228c80361ddecf2742b2ecc6826d3a542f3796a5d7a6c3fcf744bc8dc5fa8d995f95413786e5da583050bd7c0d542f37228ce8e03f9f88f7d56b60ba13f283b493e45bd6af93aac91e050c1330303c9ad8a1f21f61c3270858fd674b1fa982923a43f5e991c2a747fc2d468f98a773245ba85da351398d9caad535a53153d310238d307a2a7f748276de754f0fd3b08df364f24408174882805fe1efa39441bb4c8a1eedf67868374454b1e6b6c9420705e255fe7112cf496996fd735cc73f2d3deac17af95c6defd60d1972aaa93d01a1d6a8448d9675450a15aa11000000000315002020140c8804a3e1704053f57d14000c7d96446e541b8aa35992c33088420619638831c40020040406886858002efa8b218b0582010d77bd6c2635f71c1051e829d60ac3cb8cb578925614eb821dd6cca85310d84f0937a0110a68af777f81db08a2b5740c9b0c4bfbcb1a7ac1c2e89f8d91bc7bbeb12429b756f8f21632ec345f687b5e4fa8a346c1c60f39aca967cdacb7f313d51eceee15f622f5a7bd675cb12293393b1ce4a9d7413d7986891e67ea0e6f39802a505e67c4592814ab664a6f72d91646469c303588a7e08bebdf815aabbc7702325962f547c1a29e8414869b8dd30e4dde00fa18523658d2db57c031831f2b02abb86b77f872cc9d6cc74a61c02b5a344c83abe5c7572634e167fdc0de28a6a0105de5de6abd1cdabda5a9210818f14a1bce6f69933719ff660a4efe8a320f2f2b5d9940b741f3a89c99337f79c052c1775b361d0ea06b3c03cc7565d5b8991a50c564365c0cd32831d741dcf0dd7d18923fffbf1d404e1a61b82103830ccd9663bdd2f12e0e702a58ff603b8123b3737d1643e8440498410e705d61c5e0c50a8a438c5a3e84e46fc4c7d10414cb08daaf83c67fe7991de0a32a593ffbc35982aec458bc02f4e45029bf67f9e71c93fb3a657857805a17aaa9032a16c50ea4210b5953b835b601065efac7d9d6a06391325a120cb6d47417a67bf72a0975004dc39787613fa319bd4e567f4a3165cf6e3abda26240072bc8268d5106b6957dd8ebe9aae2ca73e235bc4815c3af7908cb3699eb1b1ed1ad4744ad021ebdc982ae814b45fe48ac5f6415328ecf217c85fa4fe39c4372bbcc3b96a10e75cdcf747d3e3216fddd3c2187f82de238846eee714ce310056be16f8f4dc521ef89438ad33fa5ae4f937048f4c121764174a7d1cff00d513d6479ba37e42d50e73ecc7feae9987243426fc00db95798c8db905676507c94fcde3ab42ca614b521e206ab260ada10701325d3fb09d7ed0104c12cee64204fd4e651025b7c4ca00b10048d900d416f779ea1388c4f8f5750251a270e0a013684f5bed71022d10d8ef221bc7a17c6ba40700dc16d84d610df9ac01a5237a2d590295b988803b2a0af49bca56f692b91db16e6f31c9692f5364382142b7ad5cb3f2b828ec2488c24286768a63735ada052cdf270d8a88eafc53295bea07230ac93c207b9cb9d236918b761f43befad6330ed074b3732510c08b4d3483ffe60b60c92cb628056eb939018d13209e743a52423d87c1228cbdbae1aec9c803b751252ead53a1f48b24ce92e5d554c90921c468ab1c7565d3c43330597054637f4302f5cdf3b22c2a0e7acbb11fc44f75e44bd8c6c7f7a4809f49da6873b997b0f10c6386475aa8a2e16480dda142912c73bbf4efca916a6ba98d1638514c3371ed64be235622f8318de6cf835099eedac09c8a466bd7d201e3ea0c8f006277e75502e7e2f725a8e2aa79cff609a2b7b55d7d8a4076e428220c021ed11d336feed0b9da08231fe449db947f6097a442d495b0e39e84baf9abc80d669b2246a69f73cfe10ba538ce1205d1fa50b2dc47b2c161bfca322c63507bb9cf8a259ff8b50c6bbdc8aa44f23cecd59d38fbd3dda84b7011742874613772c7ea6b1ac0e6b1c2f8c121711cf63441a7a78b44ad248c63401f3567783ad61b00baad341b4393861db35d84fa083a1850319f08564ece681db43dc085f01782cd92772e8c0e427c104f9277437ce17ab7752d24aa74b567a51ac39d317fa0441dd0dc814dd1b8cb2db08aa71c4d42522c2bfaac387833816e729142714fc72f4176d1f8b4dabec3ffa714241ae766176fd555930341df901fe02e37211d1a4b004a52e6a647f3b05209c38e3a4d4c93ca62a7951b5b10c84c940a9a8e795912d83703506caa2eb1eb66a98ff3a868a24a93ec9fce27eb397934549dd4c05d60060df83e25c42e2717884b9e6da89f83b44b7a5948eeafdf92b71319e5590d84aa5db7bd4523011de6ad2232d51189a0a9a6331c13173b265435147f829da3f82e02f11d5714f51123409b10e676010929a3b950db6a206a6f597dd9e05dc00e2ea34e05bc00c09a216164ec43cc916812f4ba0bd3c31896472cb30308f0a109ab103cf3d86a102791fdfa0bf5db3fcb30917ae64607e208e006f3fe8bd458cb849e2e3b6ec26efaa9c1e98de895db73316f76112dbe557e69706df06486601b32e5f57634c956a4b317214c629ec3d29fa51143cb0272a04645c8756a82b076e74847beaf52745dd76785914aac87800e2b1af58736e1e0a0b824020ea81aa2fd1c7b6a7b5bb7e8930ace3ecaf5d29ce5a347c7681a78f81bcb60ee301ffd0a5384b36ce2bc5ef2eb7e1c776b7d5231b5d8fcd7a31e80d9e705bb5518e96294e21e1def2646c986a47646b6c008a0daa48636b667dab7dd431a868420739cadea49b2b6b03b774137744c7127a66006424e048ad0c85d2e629b5bda08ed328d746e7cdee22ef8c2ef23bd3c4c68a293e33bf5cf7b2122d612d3cc60b5b8721fa21636f24b6f8548d146d1678c1aa4b0b57541c35006d196a9818347c64a9eff5dda66797f33856f4d8cd5fe95e1fea49593fd7d3aa598a8262de8aeec85552fcf626977aa1492825cb9721d204c50b22b8fb57f5bbcf822ba02cd90b89c6c504bf56a15d38d92407f192f01e7a5440ee0c586445e960cd5f5dc823fd06c48784c8dc801606c1f22098318b61974c23e545c4a159b37464795dc0e8293139b93c8dbf1e3bdf6065e57a54e7a3920307192fe8a00b7bc2ecc46ab0c6b344c12bac7a6ef430342490497cc4b3d382101d759f8098e9e5213e7293bb96ab4f4498189876eb273b4850a8deccb2502506a21b23f363b0600b545f3bb30ded4d66182009d92b2c9961a7f151ef668f30ad7fbcfe56ba73b041cd20dbdec0bdc148282d0a3d0a05aaa10349093494cf7e8dde2a5ef91e1377b8f15caf6950c8de4989407b6c12f51624e7fd3a732f88eed95f3cf00829be2cc28b0010b2a9ea5facb85d14369716c36e8d69d6e1bd72c4a4062a17e2020470c23aa828903057b4f057c5d3a1f7cf1f9231c0775100b62ccdd8550164fc14473a47db242f42cfeb41faf9fcec0ce21f56289a34d058214bab3149bca03666715c1f2bb0b29ac8fcd764aa8fb74373d4ca544ad796f019a0918941c247fb48bac765c04c27dc44a377e870ff2b4021280df5a5de5aacf2c812f81dac8c03e708c2573ad4703c0958be6f001ae3b0bc850e6b1d4063ef9d348410700d8944b15e8f7cd2f07816b18f0ae890ca496f6211fc5a24b9c4da9e5222e49834cf4cc31197026d4dfc5b70499edd8a5903706fd0452764b9c808454869d373cf27b548c2e3ba4e20b2ade9b4d596c6d7a658ea88a9c83aa674300b5bbe18f52731a31be5162d142277d3ee910ac4743e519d1fde8f13d1648d386b219bfa5741c095dba78460083ce4bd8e83ef301fe2b1793c3ef090bd092bd72971b8af02cde69a36306e34ceac4a2e47fc8475157948015a7017468b35d0ff64681f919dfee6c9c0522d0b6e333e4d76a85be6149d359b1064e190d37927ea712ef95c517c5aac67a2ef96a4ba8ec0ddf74ac790f35357066aa1c0f7d8f7699db7002106194477434d6a5a39399b703bd10949dd2f30ad007a8fe6ea252b2d0b39afe87ae2ffcc8f8393350480803b066f1e52f02907f2e39d6c074c2adb17783d7de5d49271b357c9948a72049675428086e4503684c271da99fc69ad6c0759e3b6975909db0533441e0f706579a01b3419646bbf4caf57d440e1d7b42953901421ba9b8752950507928ac9282b15d8d166cb53c2007b5d27d10fd30222747d24a2639e7e955386ede34d28ed0fb9276a16458333a589afeb45499f45275690546757bfe12dbc86045ea2bd1b650a6cc8086299f649bf88f21dfdd3c786bcc29b3c39e0f4bac27f87424c14539caa3fa8bb8cdf8dffeeeba3ae9fba3c068dbd3e80088d0a18ac0a5f719e99682a3cd7696a75117b6f50e1e3dc4aef93f22bd9baf008a9b1195f3b6883f2671a6005c284c28fbddfadcdf1a85b6aab61f893296989f69138d9bf404fae5e1043a6c757a9f3ecfe1134ca10baa7939279e9ba7bea461d8647e4ebb9c834c4eeb811604f14f61994db85a0da2c11b96b614c43ccbb437de779452ea83d4e19b3baa66d4188d54a89400a1fda8ad7c684385ff21ef827813d9a826aa565745f4f968aa1d52bc2294aafe82f104e3c8e018e3da2a8198fd4fb6d25de0ec00275e7b21c2cd9ed1f439f08bc26831c11fc0e09329efa238fb29f83b3cbcf0d26408515d2cd72bf2cfcb7ebdd11b501e85ee60c9e0e3a2c76b2a74bcc843b99054df93dba95d66a70854c15fb58788ffbde29002c4ac0d4fe96987718c1af1e414949d6002372822c4282f7c872f0a96b176eddb8032357a1df007ac0ccbfeb2ae95ee1d68002e7f0482e1bae4097bbab6c3509c2caa9112f789f6065ff78a76aa0456644f9b53d3e15c6ba75e93001f299953cd1d69f3a96b5f53be196ae666edb3efefe5e1d532d11ce02d3638e4ef711fbf5c466122cd9a39d9d67f72a9dea6860106bcd1d2e22a3d38e23c54f569c4463fff043aee7a188ef9205fc441658d67b646197adb46881f9028e8ce88ffad0c68b02dcdf048a4bba69800cacc6231f64ac825cb6dcfeaa8a516bf263048b31bcf1bfe30f69e896a5601483fa7c302d29f1886ad6e728882b4fcbb56907a8d46a9bf7739f3fe3a389e4dcdc88b0c11169a58e711e56d0f0b38a914e012f8dd653f9f2187cbb9267ee322dd413590c398b7f57ab6dc4fa388f2b6233771ec8ab79ae679690c68109c0ecc8cfc78d9bfe350bc52ca723f29532e48e0e0319388c0e0eac5783b5997a3515d1a4efd4f1cd16d19e8838fe2f41dbcf56ef5bf808c66ce559297783b6200f96b93ab62fb7fccaf4cba5e5ebca01d5b9756e79c27c3c57ee84f6d8529c42310407f509e3a038e541453e2b4d59248b828e623000d0eb197709c0a43ee3c6e0dfa8f843d9810d496c8faa50dd2a52ec5b4f8570ecc875545e35b10c490969076e331b81cc168e79b441a6f9557bed4b5bcc985c122d8cd110c2ad0840ef0a4a2b6c6bfb8e17373c172b9f7b31214acb171b34ac4c6c73929d6accb000d7a026208976ada33ea62454306310dc4bcab3ad3681495bab2ca42745d7f0a7a5e1275e56cd5f5e2a7ca19bfcca3c61f15bcec2813a03a8f71a8baac021a266cc0634f7c6fee84d766a1b66465429bf3548bf79cd48a80217e5eacc2ed34cfb8aacfa20f4614c40943097843fcdd745806e459a55aae870cc29169b8325854e35628d4128f226a8552c762adf4281fca3fe385649189d3455989e6dea07aabb997d15f0a531c0e21d5a310fa1772a8078c8588f061fd82effbe43e49d829c60c5065bd196faf2daaff54cb80c425b407fd6514f0ed34484d82eb10f07d88f523b42b8694217d276499980082c0758d21fc61f43045c7d9dc68ffbf6cf7419a0a8d86d356865c1cd1396c701b0879d3bc6ce64f8153a20ac8a50b65f44a419e2cc37e7ba52b438938a20f476db9cebede5efad03aa8317d58db8a2b5bde62d0b65b86dc95760d42e2d458645f85db45fcd27b383cb5941ff84dae5016204ec9912a23df5b6b1e0eb1eacb73c1eb44d9f3226a4a1e08eba11d1e0f777ef15d84f710229d43e42fd8eb519501a2ce83278168e7b2062df92e05ecd66b85da7afd6a5c71c226c4da9571b29743507cdb398203f146a869afba119910c9278211a2a50856cd902f5e6810508390a801b10155227d709b293adceb7fb691b17f99efb0c56d1b9fec09d4aa3353246f43d8a9c7b0792608ab685eb29a94ab33723d53edc090bb36cfb381ff402d66d8ac4605a7068ae1c00b7936177475304b02022fab2886ba8b1c3b674a7cab4c04a50307c8e8df3f779cace6de44e5fe51c6e2d790e3e8145f23f774ff137ce03e3c53de77f3ab895ca806c1996d816cc5efd7fb1ccad004038c80b4009731886d5950568456f2853cf435d3870472c78b4eeb3aca59df638c1c1ef6ad644ff1d39a3c9471a54fb9f792af78645ff7ed8ebad1380c88d58799f6841146d45c4802bec31b959765b25b5e0ff20647ee4bc3f589c12f37fbda525b7f14b9dc78651e6a518a76b23a462d202bc08403c5911d073fa7087ec447dddb1c0d3435cbd3a0852cfa1f255bafd5e27373bdebf8c5134331ec872eb4977e4c14b2e106ad5e6cf13ce8b43e57d290056087fe4f4494ea05400ca2c7e1aa3748c7eac77ca61d33583454923f48ae8f6bcf4848912b80a6733ae23f7acd4b1c0e87d87572ef84765b1d3bd66623f4a33f75858238a2892a11c413c23ea29da73d391fdece7c22fe7ea0ea893ea156e5a2a2e1627d7805ed554f4b1238ec702302eb03745269d29f292085c60ae89e897a15ef6203f80f9c210ed4ec82393b7fcbcd13b1f94784af95959d266a74c8bc6428fa30dcd50129c0ce876d65c20078eb37d69dbacad0c4aaf64aaec428182c76b30602c314a07ebe258de26ff0df85eae37765716f0342193041d99c0ce2dcf308bef32dd2836c2dd00c704dea6f8f4d622a1e05a396a6f02123ff7fbd34f0ec33cae3ec4ea16e9bf99ed40ee35d78b896b373f9ca6cb36e07662a7755d40085c0d18047b966c956de59b14b1f1f89f792fa5c32c67ebf0b4b8b505bf3e4e1788fb7b560b87c3f69539398ca54721118e31ca7d9bef0e0e55e26038cfd0dccc39cae062d679fc9379712d0b19954347adfb11c6bcc4cde389beb11fcbeb06a4e022173c7033062ac79a835d4325636c64e2d09643aad99e5cf1433fbb189e4a9fba3955b598a5108742494ea0df1b2aee1b15c710235a1fd94aae12942160c894680b8024079226c965eb8bce364f3c4858e31e15b6183011c1f9b912120302793fea4635289a8f2a5a6a38c54c41e47ae675d14947e0843c56356e25c47b80826ca9b3701c224aa8c155a3828ea5040f71f064a866dec7de2708ad3864f0b49d303066d125774128846ebd930b8a08d478ffa9689e961cb3bc534cf272cf0fc68fb2e1ca47900df7a6cb22b727322fcd82314dd66f2eff7098ff0614b2d88eff6bb84cfd600469fc695f2fa1fe3da06a8b60d2cdee248c89a2daeed4f8ee814756fa40598060d500dc1fb4b56feeb18676ab40146fab6a14b343e81a681f91f7ce46fac6b52f4fda03b641b4431c52ed2b4fea165984b35e5cdee5aa5828f8ae77a39e021f949c7a68c44346f826ad9c15b1bd71276ea3c97052117398fafefc617b1ddcabe99ef97d5b0da9ddcfbe17f06e5e0cfd016903ae8a9e994f8fb1d61c053198988eab5073e00a716385a4bcbcb034c76058983b13909fea1df714b254921c0038e204a1907d3a7d6bf6d717cb8ee1bb873a1f312646fa75162df25f2b86e208793f5373c1a88c699624ee933b7e87f4885ec8326239f3c7fa690851bd9f959b8ae5dc6c7c2bfcb02a8979d50a834a769b6628808e08bd989e42e32dbaff00e2ffb0df64a48a5897c0bab899aacff1df96d616069a0fcd7378c9e61ce51ab17933b0763eca32fb22a14a13a5e17b6464a80d233142b910cfb3195fcd64a30a9f617febb75e172fd3c35553d1586a1ce01c14ba267f9a713ddb6c69ba1d120f8e0fe4f690cda268ccc80dd5da7cb7ce886888080fc25dc111df4b9d97a2c05bc230011d0c30ca22abef3a8088cb3bfdd3462b975984fb5f003b9cdc255b49f999f76749170ddc862d15386f37be5690574d6873d5ba46d430ab40c10547d66dbd81fe3f0e8818aff574558424567515bd42a3f5f54a02b216d82dc6b0306de29825df1fea646bba1f11b47c874097e0273f34bc846a399a6e0b7a29d5d78b27c5c88c5c334cd96cfc2170ce4e4817ad75b85cb91b6896de0a5e10bb6ca404e0ef5a2b81ba73411b612e343d94185c8253da7529b2880eb44fbf48b05ed765b0f2f9643271f69b1616952af9c695e167168d63cc9c886b66f760de57e5c1b64ff2ab4384baae17913824349a098fef199706eeb7c295354d508a84b08ba72d722729831c01f56beff2d83c04fae58882cee8ab464bca730c0ce97c7c1454130358af7d834318c6f00055d644263cc6ca82f580ea75f6847a1069107766a52fc2ba7ba2f4abdd1075f2751829ade4129b61ec7aa52375687752cf81d98c2d238162d06659b2ab51317dee1a7a10752b5a98436a01ff250a6c0fc43bc789692eed045be08b5562831ae8540d87f88e8999b701b5c3006ee4a459fa9e7c77e3d26c69a1ebcceca09c9b75db482f59124205eba40e365edc0d9b40717acac7efb507a0a245fc40999cc3eb3f6d62b16137c497e80ec729f15668ad0454d4515b86e81a9656f10b843232162d81db4609655c0ba25edd0413615deb462b4f80b5a460896f27e878b396e785eea0b421900ff821a1326225b9ea46aa441874f31f6b11c317060f0f912730cec734742229adbaa22d5456bcee477af208b379b46b0692a374c5e3fae24ebe0429343c650ec4272ed2de5bdd972336365895e1be00d60ba0b449e70a7450f287469e6e73448a4201d434ac788a737183e3013d64e16e83fb5e50cd42e49e7ad73cc398b869d669a6c8a503969080ef4c6c5c773af3dc93c070ec8d592bde3307ccac55d2b4e9b1cebe0b70104a2d0db72c7d3ead0305f7c42f5280544acb2e69bcff9912f8f49e144ff8fca280f41ab4666b85b3576127c0b8af0e086a4a5216c3901e6b9fd0258809253601cb1e6be79624fd92b3a0d585308d1eb8a58fa1bdffa502ab0dddc6ed4308f2665205d212f3331654637eab4ab35d2cb5c73c5c86ed1548fe9d974ad80bf954084307f78f4ec52cdb7eb278432420e080e54b160b5595e498e6df82a097f4afe0c12cebdd1ead6e7f2e40df92fab6a0cf048a86c4b8af9272e37222e9dc90c30e0012bbbdb1cd5dc861bd5b5fb619e45dedde5245fecdf04c0db95838d2b83af6b88515440eb3ee8f362f44152b8c469adffae31b3761cfdf8d4c58e3e1f2069ac517ddbb4786713c91c220199b7f4098ddb2a9a0a8ce281ca5b5ec87f5d926656fc16c7c6cd4e62f996b3511a9015b486d625a2b6bb87fbe67d4fdcfaa85b677b9b68399231b6dd93c88b3c5ca8072b148e98f5298a82c49d7bb9f73f2922bf698894ba15e446a072d9708a13ad05eb00fc153c04b4b174082a300a28a635984afe533d6468447bef33e675dbaf420d30e15780fd3d6dd7e39fca0a6053eaa4e53e0b4d124581372a6ada4f1aec0a77df9d5c01e83f5c6195e5243bad40471cfcb7da4d23abaf47fecb27479d28069eb361067e6f53509fa82760371221283162940d8850af1d2f88a29628e4624e97613e1e0c30804160c8e07194d5c6fd39c5bd5beb4b6dd3358ccc3531735b9e8f994b7506256170d90d3b5c8aa75813835a3d7a34b0d1ab8e5ad551668e123d52186184ac56f4d3190f19fa63461110a4d0a00c230d1b09b80abc8d13f8474bf420ba0b146f185ef75bf066665feb0cbf9f4165b5184d899f1873c16e6c753e03a3020952c257b7e67dd9af5199d4052c4b3ceb9d3a9bc487742601e326d00619c77df296a25cea98090baad5156404f5ce00834a15e22228b84d80f6ead4e39ea8386ec57943bb42ea8d0ccc4d888d9914f2a5805ca7e6c6556d419fca47cd067e48ef44535eb55d920a38552985886f7c101da0a2f69b28ac1f6478ea2ccfc9efcfd42e7b003e021018b8ff6dd0b0d276908583175860366199309fbd0db8893e8f774998427549eec268b2b9e3d497870c319acb32b4cff517e73930fc13e47ad8809917a509b956f251e7c5893541c4048cb245c747a61e1b811ee7e09c05c47f08273025a84adf512e6d1cdfec41de68cf3a2f7265e66cfff9bbcd7f7f78b294dcb04c4f73a0c360b8f660acbc408eb4ec4c4a0136dc482d21f2f1eb0420a07653368420b6fcfc0fe7427a8620ec00c6c56ce311b9f78466a1271cf56ef1c31d3d1f6eafdb9c9cee1bead57e69fa2ed80407ef627b7595f11b2d64befcb4693a080957fe2c2675c0863e20413c6964e2c482c004135a11cf346b4e38c767716072026d39667b10905af126bb70a70fd43fbd7ff126cac8e969dbe96700fa7fd70582cc7e19a1eab514327e84b4bdad7bbd20aa2529d1c8ba27a9974aa79aa4f53575c38f59cc2a5f5a7f6a83c2852cb97c15a6c1d8f2c7273e71e8166ebe68b08106e11d57af6920986719a4e72f2026d33655a66a7ee7789e298b1aa7ebe1ee3255a1baf5484cfeb3bba157951be2c1e7998a39000d73429ddf7f0e8f0c7b1b6101ddfb7a246ff680e9d56db6c92fd30db4e2d0a0ed8b5af7358b8408448e93f3c13bba67792fbf2abc63b992c71bcfd32a40d68c79bc0adc7b5fbaab4d1a68b0756c198ead12ad28db5996825519ceff3141d16df08062bd2bad5320be126265a0607b1423bf2652e692dc04e84f1ee9784bf944e7be36fb5436934e079dc27a96b291bc486309426cac56cc2e358e1e44a788275280103f773a971c490119405c237850fe3b18657913023ba3cc7842b27dcc8acbfb5e5a62b7a0167d16710ac30f1bf84c4b54b7901d5ff492688e9576884afbace9657712ff409e52fd5984eac142363ccf879f8ea93f96bb0001b1099b7fcc200ddb737a5daab938bcaeac70d5628d27efd8946c5bbbbcf94b858c1cc829a89c5a8a99a21cb20d6867a2238288a3288118be5d9a58c4ea869413ea214c34c1289f99d224790231e5e64160b169d7c4aba700f11aa627b0aef072f2efe42d545157f001471c39dd8de74d1442e10404c6c9ccd83e27b773082e9b6c28dd0fc06da8ef1ad4504f2de624882efec4c0d92df8073e91d5cf4990868541a079316b24c1e6f2fcce1a6abfc8cef1c591bb08694f015b90bd70b754fd2554eec908259c8f170b251af6f647b36b93b515337d9cf052ee528acdcd0e792bbabe0afd3010460d008f260364bf7ac9d5e41944b9ff0fbbce996e86584c6836c40f48be03226a44c838ac4b728bee511002b460dc7239885c0e17f36b2c7f1d3848e144fe288e181ed50c18c67eaa4d0aae260194a5a57cada5cc3b01ed4ae1f3e3b437fe1430271b0258ea152c0ba0308910cf295ac2dda2fa3857b1324f22011f00d08902a6889b4cf621fe840e5cf691ad0f1ba6378b8e9bc17fc67cc4c4dfb206516957dcfecb6e88ade9a884ebfdeaa9a063ad60bf5703de180476a19cd11bf16a81d6d3767e15c2c28fb0e75e4253ca03e07a3bc439d02e1887915f5b166caa47affd8d7fe92ce3eb5fcc103ff64c57e4a870c0f8c5b5341d23c461ae56b2a8431cb51164e67a87800f6b6eadc0eb95adf643e8d71056908b0eeba4ec21224d44f89b15710152cdc20b81575b6b0ab8d47d0b7db6aec56431f20ab282b1fc312538c94a3eec9e1f9002c5ae2e28d6bfd11e5322e52667e080a59bb08636ff3a0926b5898276ebabc329d03f248fd5264f2b29f5f69173125d34b843b62d6d734486b0587b51d3d8291468205de04eaa829a2c78995f3fdb980d300a9036660a96248f1aa2a03b66967fc8fb589a8486902f6660238d10e8786fa2c5e471fe8a56cec4b2d061df93fb073ff779125bd551fccb17d1daf3cf089dfa69cbfa53ba7623988cd1c68914e171cddc6d2e444348ea860e289b7115a630fac87f383b0475eadc6062699d56bc65d4144014e6c6125d74d1669bad175ee6ab2730ac46028f777dab62309c2e637fe41336d2b7fc1e2fde6e0a3137a407c1d73c072f6105a19dcfe1ba1e168c9f64e052c3a2e95f8d5a37f4e0d995074a86f0734344008a92ad9ffe753f9eaa23889a42e757ff9ec3806e35ca523d485509f485db8f45e99880fdaa1eae5ea8caf18116d56768dfc41b4436c749f634c5ead5601550bdae8bf8bb54c84dc6aab18abb63a7c2b8c186c45d1c6efe7a12271018e9eaf69ad0206e898807b898a6b3ced58ca9097bbd0a79ef63c152241eaa130e12af11e06c4b68d4e4231ae6ee92c852c74c3d49e7c1117b840be5d73be91696d2334a0081403f8c91e00418f7b9049e34c7914c314fc10b1ebe0e8191777deb7ee2ee65c1136e2ec7698dc27f27dff89171281aaac5774c459f5f79a2c91d9d5c6b3beeca71aeb365cc39f5043c711998b7e769c4dc488e11cbc26f78fcce772b681d79b57544990238247e0241e47b6aa0768f83b009c3b40b460aaaf9d89b9779a5cce17b04f81211dc4acd3274415ca0f06218435b9189fc9a760ee05b646f08b30b32dcfee1b4a6f39614e0f63056aef07b5bf03f0042c6d79f83ef82649c022c4469bbd386fdcf661f66c9c9a3789cb8af156ff88d4b04fda63de0210de7af11a76f2d2925964de887e66cb2488e45c9467b69f0a53aa5a34614a775f9b540aef8c8003635b4e7c8f731424a87a3b421a227b0a549cfaaabdcdd26502d6ed1a178e6a1b66a3ff58079068fa4fcc3dd6b995e6f1ff7c50dd5ea779ad1d43c0174cab421bef5a6350b0a66b9c7c95911c1b4a4e3139337a75c0aa376404637651943ece76e0519a484d79f09433afca2661201dfbde2a62ef9cfee978a92b73b87e66b94ca14c708bd6628dacbd20723e0eb91e34f6c8e1ab246f395c510cc50ef3bbb214f6e6ef012cd304706e90b922287e1cb4672d3c4f5efdf443858dde19fd930490a2d57e14243d2f48487d58199f4e68b67a61640a78da8281920803903af2a1a6f8ad6fb7572ac21f650a3beb1fe31b2343c7aa862f21bc019b8b3e48bcb68380bd5985e42f6c5bd1d29032a71a5adb0b49d1c00d0f9a061915ad30338adf1076c96fd203028e1a6d3c51469f269095d086025f180804a64928654b949b0916850ddd62c23518da8258e6a8336c9738796173a5859992611dac0ffc879a984ac83c083cbb6084f688afa157b04f0cc47829be31bf7019b0da018025d92121a3cfe9fd96e02f1afe8a13b3dd85bf5808a66a707166ccbe169e0d80f4b6bb1464f91b06a8e6b441f51d77131916310345e41ac45bf5702e2fc78c68b516494695837ea96efee2775465434b1e0085a2dd5ff26ed6023e16c3b325f9bc0f3095f6e269a25b46bae9b184aa625a56f6e81d106f899e4fc7584d1ae624ff84348bee4d9ed37e1600de1adbc8c731d00f1b49a50911f5decaee563b997082755aa32357d5d0c8edbf41ff7ad2a6eff5c284a5ff5dce3c46ba638c395f9307d3abcd04e06b94dc544f04d5a7d73a7ea05a603b2fda886bc8cd21b7ac41a3199693af0a9fba4ca39a689a75ff3bd53a4f4d1e75921d44b38a54302906359f08bba47b2706e5e48c1321bdbff562e9d53df4a37d8e827675fbe88b58b377a704c4d2db66e41734f05a1f1c7d0cf183983544e3ba18076a6ccd7d53f49ef1e7e084efe4aa616e21fd66381904597ac78f39099f11ad66a7055310cefd40b87f529fba732376810f2934d96ef6551f549b81c41090250305931d2f319f04f37c11e5d9cb0c1cb5a44150a678484f2c90b3331c8d9485f1e971820eb4a01347503b44fccd2741e9d1041c1c62653788b6c10c514462a436111d1a5f16f513e748d0d8948130584b381fc114a664fa8e7b743c87f27d1fbd3f1de5b0eda7a3a75a3518a1dbe4ca2392f474d031203fedf7e6c2e1c233672a3e4ae4205ff41960dbf56403de84d82b82c8d6989afb9d2d9049ea64886865d509ac4c39892cb485397ac664ff7f39baa5891406415162a6bfb8c4e10ffddbf1dbc8b97b207374eb02f57ae6773b25b899ab622bab92379dacd50c6158d5cbfd4fba10e611405c666bf069371a2e7cdc800befe4b03dafa2e7417a1616e08a68d39217fe498fde1c728234445bf4a937609a14f0245eba9822a4ea8be461f0503ed4308ae11ab0a892d554198c14e424187fd6b48c33beecacd739922c362b8c707eb9d4ae9e7a24eb088fa5d6109841539d724a438445fdb10249fa0662993e89cc7c80dabce955376b05612f88c84aba7e65f2d1ad16b17cf92f1c52605e1c6297b43519459099d69d79e25a3b01c408042afc3197f938ea5268f84876058fb009e6b0614c0ff6813f9316515605725e2614a5d20924f3ae0b37df5415fd6ca9aeb8df61a357e46a5682c961d1aa250625a96cc80d6f3aad50b3054395d216269265318526d56d53496baed6d99e444f2761ca0d407a2d032814ca6e2502e982c79b9e6cddbf6fab7f0b08ebfc02a7445572dafba8c2faae229c040dcf13d2203580b66e3e5514a3569377fac57feb190d44ab8f428f143577da3519975f7d15d2251d4c0e2007f251331a1f73cf181c6270ea407a75d8af32f04362a0f1784117a37b791397d6d908ae12a6739ec53a74fb9bb926b37a0904cee1bdb8d5607107c4b9c0d6aaec09a5490edc48125ae6d56e03bbac351fa4ba810533e510744e2951c1b799379b09bb208d3077b88baeb15c56b2f04bc5d6ab39ca5450e51a30468b1a580b21b66e7add447470a6eb688dab35e3be6ab20d3b306c63436eb26d445a863d6a3ea7240b5268043d6365caa1ebaed877da3289ad5ddbdb5a79c31b2148c785f0e32198525aa3f4937f807d709e752df03493087b31a5b77bacc436753b9839514e6c372775c3288d51cbc485c643171cdc73df17ec5a831891921746cf34bdb5c3ce4bac07e4b46d70ba2e14ddb87270075ec1e30dbc1663ae30f83612456fa6312a75ff0aba34c7dad1abf8a84289d7e1ec9534f39bf49dd7560082daa2e08707af8269b8edb61af008eb1cc9ececdf3d450a1d0f6a1eb9e874ea44876b55b00836b965183a0c6fb399b7388c2e3252802848d5854767260a533aa9cc18fc18f93464a7a829635ec413b2befe171dabe58e30d17f2cbecfb7adf5dfcc71a9f3a74628138333595281549c53938c070295e8c44b29777521236e4a9c174531a425b8ddde5a76fca80e66557e25171aef1b4ee68f8b1b04c6c26195ec4ddd37f975ad16fc720a04b7d14ecca61df6a13a369c2243c87e9e9e826906c02968764dd43cd48e42d3ac6e023d538fd6436f6e06993c9e4bc754d00a4a2e518bfc2082f2a41d70252dc51045060886a5fe455d22385112f70b4e131687913d822bc564a659c590cdf1c1b7ed62364582f3b2e891f6542e8c74fe8b151899e8731a0f4b32e78e85fb5ff16e801a2aae4c54ac43fc01466da68eb08870b014432460a378733588ce4add8c19731cad8a1c7be4542aa74d7f35d435304185ead5a20dc181fcbdc9e472686ccc8b593185b1d5785eeb50f5850e5facf58135164b5aa15b91a708677d5108267e30460f40ae5748c70a9ba2834f82cb07eedea2a331450539686c26e3584c1d05a56ce610090783d31a68a9a1d41f80804107e97c4f391e6915dd945b320b38e547e326e6be136dcb05ffb69af7ca123e3e63a594125dbbb81cce23ffcddcc6433b09be06cbbf1635721ec44b0ee54c647673003df53d420fedefbaba51a34131204fe416f780f72b8f5d00d3d411ab770d195538ad2faa401a981f6d45704c645e902b4c7ff064eae30f5ff2da8e1c347259b00fed536eef879d4fb86aa5371042d27c815c7a1f1a829092b4958a0cc62c8fe22866a1b8cb0f330cb5e2b43be869e1273a76ed42c791e75c701e83f160b368a34deea79f5f63fd6e1d9c0ecda80686b0bb3606b9bb740f4b782a39a39fbf990dba65df3bdfa9c799b49f6689bdd5edc09afa571350b1a16fc29e906a6c2e1bd6b51089b79fab98e8915b1a438f91828934c044cfa5538a2b14086f1bc3b96c394abf8e6ec7c46233c8f2311b8b0fb44a6a0cf28c726a314d90615876b331c4df3102d4c12eb2b8db353719a8736c69ea476d2668cceb11bbf901a8ef416d46b3eb47d0aab8ccf62a3a98973a46b1df639c603faf15dde7ab1cf8ace692110a459d0b875e4f081ee9f7ed17c9a77e849d168cffc7f6a90999acb0005c4007b3c3a4381ded4bed3b94e2543ab336db142131de511a52de19cccf3ea346e64485203ff832cac0d233a60293316309e4470736330b34f318cd78d0c8d649daacb80629baa4a02c6d0cc531ce964645e5132e82fa5139b32baf7727a985d8101f9958d5ad82d3bd5ff64c490d699a180eaae514aa8b70c30d0c28820dccd6dc46b93e2728f6b6259fd4da9d30aaa42cde30bc066c624eb9ed929c5799f6f68b7b00eb63bc88201056fb88fbfa2e2f0703a2bebecfb066ecac218b816bb255ff79af7d5f782a38f3bea497c671d7fcfcf12ff6f3f1672d100ea6dac81cb0fe15d162d04b6a073eb36a6ebde678c08be557ef7670e6983a64c0636110955434cb82f9974649e9d53c75a020881b11a2822078c9228a29f11a19f587e13a278e970e486515b5bea4d736b5958a675969c94e2b605f39388833dfa117532ea6b8aa89606001bc38e887b13c16d858a3e346c097828977dfb6eee77c528258f7e3da90505ec5f49baa15a7e6617bb40f5586a06e651655d4e9215228f29108bd215608bf1e1e55e29bdd3c300db34301b0d985379ca1756deaa52982e7a9b1cc17a07bca46275065c9836f4de9562a63bc1aecf37c95d156ad910069c1cae6403c25ba96773412174206d3794ec77512dc3e4f1437215c2f95a4eff0a172716990e4e3a8cfd226a4250b17aa3a2eb3852a3490c11f415e7e29a3b85c12c9303e9fe450f17951e28bcb1eda3aa5bb6ae932897a1a667fa74e116115973ec6d5a51061f1e532b05f4865ad170c8dda8959b62622aba42e55ac6cd33af4540d6cc4b57645181c51439e21eb7c6e39bd1b145aadc7901961ad6307cc8d112f3339fb58d1b5af043286605854e3177d8222d474aff70eb82524873b24990bbeffd773a63e8c02e3ca488c7df2f56cd4c2c2c8446cb00b151e10ba84670a821a29ac8961c676674516a89ee4ac8de232bae5cdcc80e761a455a932413109df8406a8aa61d562dc956318e34aa28371bbfefbc2d2c5c975140e94597121acaf4d0de2fb4e5f7f05cb7338c80e07d7e11b587c45af01eb236b6c29a35973c4d0a3fd438f5c996137fe6b71f5699570b640766e937579e064d6da293f7a5a09d9d51272c41e376c8d93c0e6583981b4748fbd2a1021dbaf928297aa2a0a75fc79a2eec5fbbbf94a8764bec7c30f492ef9136f21e08ab0004bd5f42c4b931d413131c2c9543ba0cd0545d255cca3534dff8313312cfdaf36b620656642f71eff581f8760b3c8c9f6de9de8a7443124581d4627f7c3f7c1e8c2eb72d3f23bb99ed08771f42d51ab6c5ae18b116eba86a197090f33593046047ef5dbfaf42babd716991b1981f828524519a38638843c6bbcc0664c5bd49808aa9453dbe9ceb1ce6b6db5ba976335e9db6e9a96045222289cc9f023310d80c118600435c7616e35c56b3412ad54a5dc069f5be1363b6e54fd33347672c6a5a8a90897e1e143866b6cc5206b124f9ba433f346565571f28b0fbff45bd0c9c7faf296abcb55e2d786693cefebfe89cdd0b8874a3905878e28221c7dc8f6aef8f799ad373914dd6eba283e70c3f17629cefbd963234037a4de8af3eda3625e71f2fb01e0434030bfc4a415db68f8df52fcc050b09a38dda8ef75f359acb25f2af97d00b02ca01fd05fc4f9ffd9eb6204f85c7b85037d88b3b8a1b05b8af37e7e540a51ade13072ba3bc3281c9db8fae2a037ba5feb2d71bf896fff718aeb1e0759b13a27eb5e1e9244e1b1dfa6fc0fbeb3c937bc23e4fab68274c78b80dc274ae342f8606f50e663c3e31c0abd69bc99f56452823bb957f020358950e7370b04385c832f05198afef6e53725af187822c581824b7b9053cf808cafdcd0d721d38ab28ba272f7032c15657f3b68af84bdf17c51ed43d2ccf389b173bc7a09ec1e3f8a8c18596877f5798d03c169c54793672aaa5a4607cb11172a14bec342ad956581ca3ff0d5288c498f63f0239279e6b82843d2b36eb322947e9d4c44d1ceb800ff56491500ab12faf67191aef86d8e2e48907d32ea69f399f3c731cc00b013ca8103edba0fc5c98d8c6e1058be22c63e940b083c011c00df8a100821ca01d93b253a67024d400a44f681d5b97e489eaacfc965a9792d55514660275aff68b03c344216f395b04e8023d0a9e4e10b8dd602f9b421eddf186c85b13c76442116eacd52079a81228c4171f302824167a4a9d50106a9f0cd0e698674551dc88012bedb41548159ca603fd2b34bf45e189b5b43f8550c3ffbd016f5e80d21c2d9859b5da51db168454a3c183d1136ed0ea5e78a394d2d2be37eea542bfec61dc0a78c98a978c1f8c0c1c317473364bb93a9f19f1c1e71aef52cef7d7faa5c4194a6965a74236069ebfb957d2d396bbb284efa2af228f6c2752ff649cdf2f1bacd3a8e0f7d7b80fdff3e060cb03d912ec8e0fc739b85054f3337897198718aa28ea93d0c6f7c0c5822377f5f86db2f2ba8c9d1660fa6e2ef3730a1612bdba27fb5c53d31f14e34eced017b41b0eb8319b984606e9e73d06f5d67bc38fb7f95be5d02411b93b966ee2aabc2a5df76e660eb70c63b41b05459f62e78a6aef8653582d8ab233c30a90e173faa548a93a4854d122f05c4edf118dd658133d159698ef71fee42f65001178d79f6d83d313f89a570119685dc5c9bbf3f9573aa7f0e23eecadec1af18f1a81c617e54d8e64f0503ea104e6b9c09c19524c868f0beadb7488f389ca3a0b813261e71ce0ee27094cdda7c1b15823322247eda268d63992a2df4f793897d248ea7c477635c48d011ac04ddac1c62df146f915dd42b15f8797a8ba988afa7c746406042304aad423d828921283449be7a30b0081f058518af8974dadac8bedeab4d44fc809d08c87333ee1021c6cbe4b01d057d3638b41b74181b3b871d45a844cb649e8e967765d77864f6b0d8f6b3968bcb8c5829c84b5bf25f358d2ae9ba6203efa29f99fe86b631404b6ac52ae1dcd9650fea9bb354d5ed9c1c7d6764e6c7c118007f89d83702a0ecb3cecd341fd06f880e25e67b745a7195dd614d823eb5c9292c1d0ad4874ae6a50ee5b32b5ecdfa0ed842d36aec3a8e0520c174d5a0c8c6006671a4a364e2a593a9ee6b88002b9b25fc3c77228292c6e8cba2d0251ae554eb695fcd3bc810110c1c0d1a78e8d82935f26cf7f4621ba53f6144e7570f945004accd889f0a45e42a4c5d9cac2f170a8c1edb2c0b09f6c303cffd74e27aa0d13c42342380c2fc811bbf5926afb95bf53c6fb89a31450c5378476a63a614f016d1ed3906d8e6241bfa8e699d86f28084e42429b5e181430c2cfe0bde607ae9710f135cf23760b93a9918f4fc768aa30258f2aa7a67b05e245e3cd5732204110581acdfeb4c2a06e7939b6901e39ac2242651fb61a42841f653b4e99e2d25fb41f65c6389516b4a28c3d79f8e6637e1a30cf0efce8861895614044ca5512672e29d6ed5dc6c87cb0564cb22c08e8925277d82dfdb01241392476dc0b8ad55241eef2702e2425459324c80c132e006a11aa4cbc00dcae0f26a4465c197e6d899fff3a7659fc8f3f2e14f85d977e3f00ae10fc406144e9b06ae7f2c67c355817ba21cad26aaa99fa9e34613d6d64a9b81da12375a794393c58d2858f0366d1c00887a1cd1634351fdec2d091d0297e75f2ea793b81727ac81d9bf245aa60a9e309a19af0bb2fb68adf3b892c535f823b5493c279a396f70dc3ea63fb7390467c3677fe577fe7bc01214ff67b3e01802b766a7ac649939ca14c138f3d28aead54f0278a9efb51e51382068f3b22237c73b7020971c31865e2541a23cf2fdb05855785a89f3eb2616ba38981787b6743b9835522f5180d47ba16a7ee1945f482fb754f565062a889c197a0c1553e59c4781e5d32161984f6c8ac1f6858a869224d6cfc0de700284d734db061da2a3ebc5a1bf19abefc2ba73db2ae8f3865ecc98cf23a1b19dd21d4a421d5900c6ad2de8c4cc398762873e1ca496913f88c8c3cdabb27d9304ea39496b58b59bbd838ef82c343d410a465cf5a6c34b6508719bd906205b96826a35b0860279f3a3c63cdeb4ec5d96e0bade3aa245cfa9322fe5bb3d251a5e2748adf7efe94a8702060648a1743f45395b410399b06904b5bd0877ad6b9e55457c27c8cdc54d9384cae8c834579f60703fc8c8a0c8fe0c78cd7a7b818852d260dc2e346f130ac16e21d9f514b7a9a14206a93e1dd13e2eb1b8b4c996c66716fd529907fd8df635b8b6246cf5725342750bafa450276a783cfbe2326f5f08d565fa8c450024f705c37b531d9016d914971b399041ccf6bebaea48c928f633b710003758885569a6f0b7424b91ea2e0faddf82a458802d4470ce85c1f572e52d01d3669235956b65146cef4023c5f0b1c264f2a0511717800dc8845b5bfdadb90c2e6d1599ca835d6edf9b8d6d55f5920bb514492cb4120e0063cb01bc37a7e7e817ce0a9f419504bc37c77b8ee74373f317a094e1e0cad56aa5e7dcad8682dd26986fc27e77c95cc3cb6694d6fccedac8e0cb405500cf0683cd840170fd284240a3cd18b8025b032cab39f2e089c1dd9227d714506776399a2e0f6457193036e099fcc809e54e754b5dcd659d803610328c29a17527722f36fadfffd07ce4943e67feccce0d0f82fba096bd74bc265b78b853a60428ba19acf41360164e710ed015940baca5b9f831faa9f37ab4d2ebe86f3f55ac8e78d1e7a04f6027718365b18349337d008256d20c1551c783ad01de7899d45cc9a921af5592c610c0f94f276bd63f2b1278c1ff18baac6acfdabf9b67713f1200c239222d69b5d14d2fcdbd489f65d12dc380e3cc84d633ee9632b255cc7490a855c856055652c24601f59b7e1902c891fc8e2b9b976f57f1b2c3d85f81f9b83f8a67f48a8d60c809d846a377dcff7ec71bfd7c14289d1099cf7dc942d9823c571ef356aeee650c1954a9cd0345273fb93a3e182f016975c059a11cb406d154ad98d19e8d3db580730127abc325e4ffee224c51c15d0d7cf781040bdf27d99092b07c7ed22cd8110a2950ebad47e0fcd2efd13c61f37e1c07c5c624c4830282f447fd86cabbc111089eec807e71691c33e605b74c4e9dfe7a3d215b1109d26f61bb3dc703119039c45278bbdd8195cc36f1c959df50f5466162f6754ebd2b4fc50125433ec516a9725e67cf8c4ba21acc242b2194d80fa93e8d897cb59ec4c5fd9041cfd977c124efa6f0255450cc84598347cb587f0b1064444d574104b105de0059b0fed403dbc78aadd9c924daf020c5052eea6b7423f61f289df1beb542c7cee3914af75c299d097abcd9e1f061997f34ffa5723ebd2ebcc181c1afa7d1452c0936521d81fe5e19e548ae974d904eb7646852a0bbad2380b3fceb5e57941c01fbfae620dfb713a3b4093c4d0e0a83412f309aa1e4d65fe20454d9b51c38517cde5a81dc21a312c93507e37f6a41a1156677685b7f8cd1b60ae081ef1ec1b06161000d4fd64cc931d7c529157486cf8741f053908ba4f0d5308b6ffc400874de5fbee2773570ba945e638856036b2733650893a54b6e91cdc05dcb0c015887d28c4e4e89b1d783a818172dc4030593a5404fe7f0878f360142fcbc4072fa9c14da141e712511d5a031c49963762bb27859d78322fc173193fd705df482f4b5ab316c27e99237b37b3287f3cefd55060f23fb28e9d205db228d1ada8ea8c3d016df130d15d9eeabbbe2b3937486eec0382d87954dfc32c1c450d7815b89bc839b2937d8c005c21c8d863353528b4945a9a0dbacf3f804f6d340421906de9892a65f62a523d9950248a6b941e74c04369c6be06b1b34860fb2dcaa98c6c4c312906d413a94c2976d10ee23f1a0389a39af7e2e8aa9b027d43e936dc3d683d9940fb2e6e0af71b0c410067db1047f4e30c254e9a4b0e2bf948369ca2713893e645b561f8870ee8edc06d45e46cf3855ef150d874e55465c55806e0b55bd3bfde4aae8824a0e5fcd8227893b4539ab8aa0ecb7d34d673548b7ebb53c2110a4fffad22670ee49712ae69d336c73d4e1333913d63e84fc79008824e50f49890618c0792fbc44967ed2be6c6564e98d61fe134cc0b6bc629580cfe3475663b747469e68a92a1b62aafcdda8c5edfc80e882e9d681393a8b07e20df33c13384c9ec29704131f2905d11c70065b9bdf923c9fb45b2aa7a91f276f9a3f21446bac63f29226a9302615192c57129ad0fb05eaf71bc413ce7ca820b7f47a55484f45e88a5a8f816553b0d72314a8d6c9654cbfd8326db6a2a6b96c66be36469ca0a91f3dbc4571e1ebccdce8c13f61cefc09344dd8e14b8b549bd1ae8cf6923c7ab45500aeeb41c2d5de7a203d5ea4363bf351b3265dac43ddfedb0ef692f812c28a8c91ec550204146c52c63c2f685dd325b605ad018591e1a02f950239ea189ecd8c8a50a27fc2b9bf19c5fc39f17000a4a37a9fc7aa20d26cdd33308e9c6d6e54dc6636bffe220e925d319bf6d799de212daceacaef0959388bc15c5a6c16e6c158391a2b2983169e2350db0523acce149d377af613a1a8163e65a9e01d22b3852b01122f275b011532787eee21a43b64dc79378e1d1191a106e85b110de282573ed145d7f5ff6331278c96295e348f3d5fa1e2b62d66278223b4a3f681a2dc62e50ab1e6f71cf60380d769bea12b0876262c1ec27b42ea7c317d24f4d3d940321e0c6dac4d3ef4ee91a8dc5a8b3776960d80ee8c38f45e5ba3936eab05821e031160ca35067b64e67a5fee33d7475a2718d8c95cf86adda511cf11eff0ed0b2828e9fa9bacc22b5ece01ee9d4200a3049d135f62674f500dd853a4f00b1223af87a62da59d5a4f17128aac881d7652767857437fdf00072c03f39319d5330473ef5448d4554390802b7573eedc7fc1d990ccc96935845c73024e3dd475938f1e82108d8d97600782db025960d59ab9bd0d167631ef15c16cabd483a62b219ecc51043a1be42efc9de946a7fa3f42f558e561f531bd621f054ea66efdbdb85636601787c59fd36b673281f030d4f6a25d2c7babd64d6db8bd20b9b165f0225d616881285c22768b464a3cb64c8ab3d2868775a21b06650e4027d2fb0065ba57a017e588cf893547b9941dbff3238b04121b43ae45d2acb86049b9712b6287b391c0d086e185c363c13ffd620243f414848d6b43efd04e382649737db5e9772ba91ebbf335fd0114a820c079a18bc8662602c5d8c1ba0ff8c41c82c0e3f2b51ab2d1277726c2c7cb28c643e77486530f2b316c47b9adeaad5605dd8e81a8686faa4773e7618a77206ba6abb8f3a092421a511b12926975f2ca1728b1e4378c4c1b472f2a4aa97d88a2b3c77aae087e313c3f6d8fb40c3eee7365af164cee1501337fa929789de703984d25017c1c14ff06011c6ff1c1ed426f529f9a9d4a4f162bbb26de5ec722895d93f5d24ed0e720886aa4e5cf4cdd73c4030f0bc67acdabc2b4a42ab6e0f8a2d613145d742af9ee96904e4d51dee400d964f216d952a23af2ccb92436e2bcc51cebbb64213e1b28da98ee0314273d7a35cbd334ab694fad30d79374bc7c207684428d4f90c4ddf0820cc84136f7987a698496932d4fb5d4dae787d49471497f29cb6dac0f552ef8015a7548360098a90bb16bb0729ce1407e2745b1ab8b0f30b660be26985ceb9b9f2c470946bb9976609d7cc3710522d68fdb4a94646f6c449d67c8d99bada0dc5bf7fbc5d946365108db8a16bd33f17e62dd5bbd0e9467d868d3aa93e93601bbfe4a923933b8e4a639d7150ba85c2abae9823741f46ec40a745c9771fe680944c9fdf7d29d756a55fae856debe8a0c43a735fb24d710b876f037b539e826dbbf9b29f33633a3ca548f119a8e94b2c50a098c58ace7e65b53dd1300d75aa855b2e975af75e7a771313835943a04eebc2f3878912a9ac753d6139bd08a3d732d803bdb1be2fc5a7a9481665251644fd310fc6efd4ae8791255ea703768b5dfee3cbea24d5bb14bc295dd602dc12c200e1787a35de2e9f604faa263a19f7a7339139ecd9f9176dfef53fe815fbc1444050ba9f70235ecca8e5be758f7c0d82cbe8e5a9f5c170b02a8c6c29028588fa56e7f57daf9642bba144fc395979453b372a31837ebe4c0f970ef007ce1ff33b351b21acc98799c62cde92e33e67bce2a5a9641834149058787705196ae4be048ccfd80411fff1258a5fd7859ee0d17d986a486e0e4ed01872127a73fea57d82cf3eeb5f17f69adb63e2fff689378b5c68310640cb6d94ac3548ac67c980c119f7b5ffd09050fc8f74abf876a015ec2a479ec648eb4b86cac7af622833b1a2cf220434468962139b07ff92c673946383462336aa5a7d73789b7dd9a9bc4e4cf02f62fb2f042cb7ce169f804b4e054c62d2dea342f6e3ef958e008620e729fb1043cb252ee81e8450aa87fe2491fbf86107480b86d4effa97a4c2331240cdc00b234daeffd8c5c6f180d0370c7eeff9fce1397184c8e5d1e6aa7c36863ed83e8c1205dc5b0b16086cb5ffbeb5fbc51b738846cb24f3cd8c4e3cd2d32ec006140ec6a6fbae8cc4aacfc70c92c9415d60719a64c2cb3199ceda5402b71251122ec9d611ccca8390e696ae269e581521b43afc1565551524c84abc2111befb2d0db8c06eb3442f494f19650d41608686f0f6480db8f72c175c006cfc8a89695208fd947e5be47d6d4a9ac3115906aa49ca08cb92036baa88647120f14229372e3aec691928f5fbe6d98ff41376cde3b5a93ed63e2c4a70b1e9ee49de1cdc6af8c77eb319c0cf09fbb330d5a56cdf9f0802351edde6a00ec5a0b00f62518447c78dfa7f3bd277dec5f5b5e95812da34c0fecfd236d901e05b5d9cc0ba16a303b4b43aecb1c81680e106d6552decdbd56ebb20dab50d853b7a5ce0860844204a7d91d1caa05c45801442c38186513d53c16dab548d549bb8ae3394cccd423360b8aa74bd57df4a3bec21dc556840c0aaae95ecc797921696a67d0ec90f044a03eced38213b454a05d39d03074546777159c79560200e7c87576b0e7572aa90d8847c1f669ff8cc1841571a514bb3eb2528bb7bd17fce258fed1b34dbad8d03d6d9fdef9fab28b8db3f92db8ed2cd665c58594fe3ad409e180ad3d5c10a8d9ea4d1f957c0870d7c4c58b6c7563ab081dbea0b371413a81d97a11123cb42e4f3ea22bd46dd3b7d6a677a141bde7dd66f9c6261087bc4c66fa1ddb8679b4e38928c7aac3939461b78c680be9d4908a8d278d25a19fb25949db2e122ede3687d777406236b8f78e00c793b780fb25b41ff97eb0a82cd531bc4fa14b95b76de34060da1ac779866ee5799b1a188ab3c12ba3df3d6843f470064e385bff550398f2d8b4e67e8b5a38fa0f180092e85cc63f3ebd9d5f1f8131aadde7187b040d373de0aa72ed194bd1e08bc71eaba9c53ff1a01eb27f3a77024abf92a73ae6344042eac7a4bb471630f577e03a8b645e92bf970a432cd9a598832d5da1f18271bbedac139f8fb4ea224380e5326ad006156f00667c567a66213ba0a3a3dd650593863284941b218c48a9ce379c6dd1334abd7f8dbae0bdb3047a35adbf67315af8e3e73564625eef5588056265b0b9a77cd95d80463567399690b8bfe0fbdcb3aa20370b7cc6cd36d780ba1a8c3e4484f43cf37926fe29f4ced7e5cee7529746204e62d8584bae8996ade460b784bb51794178dbd76637a40a220f48590d5dd98311dc66c5e487be53930b2c99c8f62fbd3a4fcae9b54f6a9e753677904a844ad93efc2222ea38df5854f2008322761ab8c8e7e3e300b671dddc24d0c613c1fe41e98fc296ba418ba622c952695928c490497fe9d90d5a142a9b0b029c025a1170ea862d676246c45caa00069f09009380b3ed6a521ea482c254d8745a86e5c61c9c4fc32892029be9224c0000c47a8c890b0fd426fe50de2199e7dc1ead19021891cefbd08bfa2729ff0e39ce9c8a6ce3cd04c3eb70759444891f058a514e8b38d8928cd3b0481f4d713b61e49ccadc79208b8682ab63cf201b8400529a594aaef5ba831aa0ce4f7e75f51cd425b742d79872d3bab9fc75246ee2f259636c4e4c861ffcc668812f7c52f370917016caa64ee82799b2bda2b0411eb311358f6dc25617e3ee08d0446db5e849d396a887dc122eaae5bf431b741af8753ba0d36515268862ca91dd8611855b8bf57256cda499b2e5707f6f28e81c4052676f53a6bc723a2986033c3ad26943d3278df623dd0248d0ae15a1608d1a2c5ac57980624978209f957108dc7ac02ca948b656244fa1514a464881d4c1387376a56e9a1654d486507fddd110689d7632265e59c798ee6a29d3800db96aa5824e246728af58cfc34a06fe3feb1a767b0911b5797088f856b13133e235e06b62b8866695564c173ae56c7fe3a7281b845a2350459dcdf563d464925642b452c8e1152e4ef36251fb5c42665917f4a8b4cb3cca6fcc704379ab9ce504868f186ef40f0eae8e80cdce69fa102f85b51aace1961fd3dc3d41f29b2483cc393eb866a29f2b29fb4d709d3e78277130ae8d45214484140aed308e227df9558b06130a7b483fe3cc1ab1a48f293d7fbf9738410577e42a8ea3825a2b3f3a770a06e9716028763c69a87dd709c1a6aa495a3371a65e2288d2e321f2884bfd7da3dc735ee43b102a6f530af8602bb25ded21829d7a8a273a06b843b72a543cce332f08ae300807d241e6c65151b43a2d1dda985465d81da5f4b7c51b37b80b8ce3c1f83299334066151a492cae2bd164914ee81cd38943ad10e7183698ead9e03f3c1973098031234c692c5a860a0ad6e619a3c2a2d66ba9a3f843fb9642c9d8db91ec59f0a1d9dc71b3bbdf097232e2ce8f6dede0fc7fabd5241c03b434f19dfbe278462fa2453c09196425ca8c97937c660193ae6292a0031ec4d82d70b7de7c62b3cd24a1eb433a18af353346fd9aea32120615137c33de817ee0e66e15a0a054d2f8ce6794dc785c97a86ea8beb02dabb74e2c26aa6543afc7853a032bd4c4db402c622dc74c825afddf48a79192fe0935a15453c4d41b4bb8020b7a2352b78001bf36f446181652de9f7e8bd3f70783b328f998efd82efe3cca4b6c22969c23509624a5d72d530da2a2b34cce711074c8fee9ed351ac4048eff0d33a2711efe6c264cb1bdef9a9b2cd4ab341171443d4ae9e6c836d12f43e8e27e0b5dec076c294e49773d0fc0815a3c3677cec8b8078e3f3180924d32de83162d8f8fdaae69d7309bdd4f01061cf2061580deae86bec02962da9a1410207dab87a26ac8580d0721012bfd5e6b1d6b78e53bfe5897865921dea436ac231d916144025c885d021b33fed591606e69f7f8f4e26feb2768be2d99cd593773a8b44be16036363291b3639031c7bd00ce74b53d881b142007a3f4e5ba5199631308b5304bfd8df41af83241e5fc762079d649d8be4bf994ff1af491b1670d038393e202c7982d23477ea412d302322d2902af0eddeb683df2334f78a81eb087d62adad126cc754cdfd2481891ea39fca659ac5a2a5c57a07d70658725082794c333b1ead490701771afdb2bc46bdc4713d0b90f2411973ee59446409460f29a0bfffa6ef101f9f4ae6825186734e1a442eb3d319ebc3cb1efe00cf9a0429097d820fa494c98f31b35d3bcd2f6c4a1c14efa172609f23c8e9c8fcfe2cd99d59f39b13c29ca532bc12aa76c474bcb750d37fa8e4b00a387394988315ce60e5946972954dd4c1ac8d68910d2d1aceed187245c65ca54ced1cf7cd8417e009f285fca5f15a9c4800e04112ca77347354484e92c5117b00b09bf296399473ad01049820f23181c51c12529a77b38a5ecbf4b7b948d54326cf0139b83e3a15129931359b163533ee657ddc834c373be2c8db62a20bcc7124dc294a7d4a367105eeb35cbe01a2f853ca2e0a8f94e0803f89d518353760aafb0d5534231df2581fb622e39a644ef2aa53a739f5050c54062c61d3abc5046226bd9838e2533551ed5046c02d94ae81f9d67f5e3330a118a8be48941fb9e78a59458645cb05950d8cc1ab07af04842dfc9d1f70f75f217e9803fca8c6087a9065ea806fc6a571823ed10e62401884c481992edc194bff9a6361340459e89a6850a353a34aefaf8def8cc61889a3dfcc95c008160ec3b760d03ee2e41889b740a317f53a8495eab5c54d9a4ca740b544b96a98d01506453c6590fc75bfd5c873e83055686847bbfcea6e95c2f1338319ce13e6c25fd1320eff89ae13de306dbce0e3c5683ac5a78b6523a5ecf8511e1d1287fd70a4124f3af8157ccdac7c7aef23e9b006b82b4e537797355d874d44a430e216d394d844a91b0f3e14e5e308889815b00061c88a587cb2c2022ffa80ee0175c86a117b9c1a8d560d86dbdaadb67bf6931c2f9ebc54a298cf619766645f223f0f0ac181463b2d818f62898d5542cf580b981d473e62bb7c8d7d68a800e3692a70b9ea300b92a002e63b2cda711f103a33673fe4b82873f8240ef01c8579a3ac714be3b44fc9eabb75097de9fdf9f1763915acd3543f57e36a2650359248c85d00842d5055385fefa2b64090523220a2c2e017e5ad4174c01e4c603ba16d39a50107068940ef09d96460d90e3ccd5dcb884fe370f55ed35076db83e1796016c55f24fbbac40cd5c2a3d908d24cee17c26e304e1f6eb4c76276ce5702b9aad3070d1305dbe6d92902d25d972ef9da44c293509a309bc09b5bfe4da742995b41a638cb3a46d17f42e761e619c6239666d4de0d14e15c8d03aa5d17da16adab1fa18f6f4e33238077ccc4138c963ed6cda445dbcdfa55258c34e6b85af8bae55fe92e6b24ee9e857ccb0ab494db8e735a4125de7db99b9cb79b6612ca395c21acb4db554b5ba70560bc39c44ea8c9461b599df92eba13f4d08742176b4d1461b1f3d7b9007929bf69c3ed2f9ac83c9d7e41d7cc65c6a75d6e8d32557e9b376f35f0e92539a49ca8ff4681dc2a5345d93ef52d2269cb30e5172219aa49e6a2edd548758429fe453ce5d1fdae46712848fd78a7eb9ceeb672d4874cbb24ead5d2b28e575c518b32c2391483123419b151aa2ffad511b050113b2fcaa4114138219a2ec9890101476e8b8812647cc0d9f4c27d60f73f3e2dde999c69fc7738fe71f31dee5cc78b7c3f3e532a6ee7099bac3b34ae3b2dee03e55321a7fa93e55e40d0eab4f95181d3a4c2e77b88c9b4c3b769876e4481d2ee3312e5d349e181dfea22346478f98ba7f83538d47dee02f37c81be689c644e32f3434590e8715e5b2de709f2aa61b7eaa3e556472388c743983c3635c9a349e1898181c39391c87cbb82c693c323972c8e4f881a387ccbe44c5c4b88c16e33031319c8cdff01837b99c1a8fe986c3dc30dda089d99f19e9655bf25efa8b26447a26df3c551787a99acf4afda596dce45365ba7461cf61f2e9526a3c9379b20d47dde452522a290fd3f6a52ccb503ed093f01db855999e433ac965d47848a7499a32c3dcf27e6b5ff7bc2652cbe2fbba2e66ebb2e6c5444fc71911b28f3129c3bc2f6ea78af59ed066ca17c2a19f9c6343b0e661da4bf5cf679811c4f1a9a239f5247ca7ca8b3fc7b6bc9b2184e0361e062b638110419f0cab43c99f63430bc4c40dfd2b7aa99a9beaf535886a2e1d0646f3a80dd9d75cf284d1b62adf34550b460b07718e7efa4bfd34d5fe973abdab11d58a7a52f85addf501b3ede368dd7f0f53b5fcf45205c34fdfcda18363fc74694d59f7c5c5bb1afd745a8568927a6d9be2b2b9c44ad2abdc884c3b58d1f4e79811c4995bc799a7de8df47937a59f76529aae79a9744d7e59f98267a0ab31e9727e187641f81353332b8ad0afebf2cc6ac933dbba59e7f57bc27a5dbfa0e82dbfba982541b10aafc7dcaa9d2ab0a3701751a2fe922412c92dcf6a0da2d1b318e3ac35884a8f4e72d91a0f49f2c82d3e8e3f0b722d6aa74af764cf08c3b0abfbd278b00bb31a5e1889070dea5d1886d12b5e8d750f1b2cd378ae89610d37628f9101d6ec2f8bbd3bbdbf2e3703ddbfea7bef3dde8795ae2d627021af0f7641d1380fc98306057f5f4338697c6fd93049e3e921d6c6592495ce8025c6c7ddc8a2c2924585e50c607cc1dac0f842117805843fcc09ca6f59974d10ab85a250ee1cb74540bc9b0823866118c63626d89ae746ec1a160d9b20bca01df704c648290a0519323f5961d8916965128a6c591b12b9cd299d1485f24b21d2e7e3dee5b0b4fcb0e8f23873904824d3ea7b891cd816a8750224965f5013527acebceb25202ce20d3bd2c6a09d2cfae75cb44038881c829fcb2293105f54c8bd914447942c995705e2712fb25f1e210e7644b544ccf42f47c19ae7eca3041e0122bab5faae39b006d640e0714f9b029fa043608c308b13704df2ab9238cd3b3aad485bc6a86d73ebb8bfb2a8f1cb82ac9021335b0ea16751b6c36a759dfb38d2436b097ccb8560abe90aae2d6e53326c838cef6605d65f9bb470ec4d748a5a20d12d99550a6be69cce9a9c8e63b9097f7aaca8f531b7d3e3f8fde5b292eac2ada1dbc2ab676f15f660f0592125b9c73ddf22cc20094ea8c11234c125d7a36ca4a079dc336d5d4e69eb6cb4ade3dce6ddf08f0fff0f9f7783f9730e420e452351927b29735efa2e8f4c7dc4e125b6e6f995cfa9e29f675b6763044e08ff1cdb3af741877ae21f37f198b78775413b16dab76f5f10b8cd29cd6d4c8d641605f95cea58fde5964729b3275e33b65dab74ac5eae01eb023d41ab1e49cc01ed30228c6881c4bf5c25247b8edec935346f3058d6471468370383e567545863441106cb3fc7b6d93bacac01764a1e328655182b567df625a08bdf58b7f59877771abe23c438afebd22e2d5e11c3de9c307a3f085f4b6845b794c86bc60a488fb1629ed52535bab56571a5703d2c833d48a87837247f4f5e10c4d1fca15026dfc531994e1cc3ec4c625c9cb767c7c53321ca40fe3ce382be78479939c66ce3089365a70a135d6ad3a2ee35f1ded9d6d9fb5920d7bf47c54b09e1c807464ffc2b6aa27b41ffdeca4bdeb313ad6d86029a97dc07cd4b1b932a9633895b177dd0bce4a58d89b6f5ecb4674274610db6bd8c0bbab0868360cdebf7e4fd3ccebbf703832a96c3a0e49a63d3e50c054aaeb90fa54ddbaccd87b931d0b6b0068bbca3f39c586bd0f7e4fd6c1494f45c0766305b754f06494dc8e5d16d5fd3089fc7e1378b54962c525e3ccd6f16292b2fdfb42cd45bd6866489656d339665d1e7bc34d297cd65e30d2e122b48bbf5f1f1d838076ba0db4c2739694382021275ba21a13f377ff8384c0b62599d3fe6ab15f1d1bc34437293f7ecc43a43da6628103d731fa26f4caa90361f32376d4c4a5be64c348fdeb303b520fc43f850726d63a2b32daca9c0ee0c8135d0776785b4adca4c0f24b7dcda90a0c0f2991ea44f9f1b12b93d69433d0ef3fddde1c188600f6cf27a2c2b266197bc874bde47a0b7d8df63314391cb83dfa2de4518efe8e9d53c3fd51aee7abeb39c9d24c32419ee3b5ebc38278f17eab3264f12fa5e2c7b450106a879ce65dcc54b2e65bc73ef5cbebdcbbebd3d429c93a3b66ec7632eb3753b34ea37228cc76c7083d9766b5eb62efe856dbb35a6adb4ed8509d1e4a3af103d70f260aba732c2c25156a88528e2af261f85803e86807e25e17e374607dbe4f53c12469a2233276d5d4b525d2bcb3cae93b6ddaccbe306390dabbb7b1fb41cf6c5ccfd92b016eeeeeeeeeeb6e47d63d9eeddddf8388bd79677dddd4bbc6dd870b9e19536745fddddbbdbdddd5cec5e10ee3614ae08adee96b4d5df6bc41cf0072bac70c23c51090ae22aaaa8820cd91b7999df83dbb44f2f286a15125a45bdab507824bb4ab7dc076757a196d5ddddbd492c5e6e26aa5602dd24cbcdfcb6e73a50b5a82329611a14867d7ef951d8d6eb2550de9470ad814d9c03294dcc8fe17beff17b8fdfe3d754f0f5c4c88a511abfbe46bf452714ea128294a69efcbc42e61714b50a098ff9e7e8088f2f26aa9e0216d523d0284572b4bef8750c13c22eab6394015a0f7025817406b16a93c317e07dbcb47a5c315f09800d20eb5a23e5ecca695d056032cdae38b8d400c0c0ccae3c62ba0240466676dd70e0985deb4c57bfe186d975c78e1db3ab8e5a67d71b000080d995260001985d67042080d935474dcdec8a830004985d513e7cccae3239e430bbde30800166d718042060763d3d56abb0cb1fb32bcccb04ccae2f2f6f6657979738b32b7d9933bb9a5e02e11bbf3edfaafbeb03c8ec2affb37f9d2777985de3cb05ccaed84b06ccaedd80d915eaccfef5f178783c1de4b29a10128790884c223cadde42878721efa6fda7a5ade101a51e280420f0128193046e4c000573dc40a3c37754006c3c700880006ab801f420808f1c0a607300032020013f6e727014a003901d18b08006bcce0e0f0ee0111264c80388f410010848a0c8042860810af880810b6440034636f003073af081092b7b40e3d13932f7e1e8f0a046102030c1dc77c338d15707e3c48d8757f31cdb70f8e722d0784c3be846c0032425d078747a9064368e092a0f5050cac3e390683c3a8f7b6e8a82b29f60766522bc44c1ecca43789982d99585f052c9ecca402f85985d79cacb2166570ec24b15ccae0c84974b665796f27205b32b4bf19288d9957ff09205b32bfbe06511b32b4779d982d9957bf0d205b32bf3e0e50b66578ee22513285ec26076e51dbc6c32bbb20e5ef6ccaefcc44b4ecdaeac7ac946ccae9c83977cc4ecca4ebce418ccae8c8397ec33bb3294978cc4ecca3778c949ccae6c8397acc4ecca4dbce49fd9959fbce4256657aec14b666276651abc6419ccae3c8397ec647665272f7906b32bcbe025d3607665265e720d66575ee2253f995df9e7253731bbb2122fd906b32b27f1926f30bb32122f19caecca3e2f1907b32bc7e0253b31bbf2112f3907b32b1bf19255b32ba75ef213b3ebb6f1927530bb6e1b5ef20e66d765c34b8662765d365e7214b3ebaef1927930bbae1a2fb907b3ebaee12547995df7e825fb60765d35bce41fccae9b86972cc5ecba6878c95266d74de325036176dd33bce420ccae6b86973c65765d345e32d0ecba462f5908b3eb96e1250f6176dd335e321166d735e32553995d77cb4bae32bb6e192fb908b3eb92f192a7985d970c2fd9caecba452fd908b3eb8ee1251f61765d31bc6424ccae1b86974cc5ecba5a5e721266d705c34b56c2ecba5f78c94b985d778c971c34bb2ed14bae62765d2fbc642b66d7edc24b66c2ecba62bce42b66d7cdf2929b30bb2e175eb21366d7ddc24b7ec2ecba61bce4d5ecba432ff9caecba60bc642c66d7d5c24bce6276dd2cbc642d66d7fde2254361765d2cbce42d66d7bdc24be662765d2bbc642cb3eb0abde428ccae5b85972c85d975a9f092bb985d770a2fd98bd975bd78c953985db78b974c85d975a5f092ab30bb6e145eb2d0ecba585eb21566d7e5e2255f6176dd2d5e321666d785c24bfe62765d2d5e721666d7cde2256b61765d2c5e3218b3eb5e79c943b3ebae5e7218b36b035ef216665706bc642eccae0b78c95966d71d5eb218b3ab0e2fb90bb32b9097ec85d955012f996876cd79c963ccae382ff90bb3ebcd4b06c3ec9a8097ac6576fdf192c330bb22e0258b61763dc04b1ec3ec6a80975c34bb965e32196657ed259331bb925e7219b3ebf592cd98bb40fa8cdd362d00fe39cdd63cb7d91c01e4f0cfdf0efda0c3c37ef1cf735820cca99e263060f20217b4a0081610b182252a184208249d098228010946008408420082231ff040077ee0c0063460240318b8800f16a800058a4c40021180400f0f20324448101e1e1cb0f33a0d60c00276d001880272706e12f003010730804d0e05f0d1830003a8e104804300780060abbe43c70d34333970a0646ec49c605e5ce8c546f0111c03f66124380956827f7809668265c04e78064c03ae013fe126d8067c0386c23860273807ace2275807bc038682a36066e601f780a3b00ff8072d054b810c040e024f797c0603b11078087c069fc1ab526f930a11881e0ab93ca077960e9877d7af53925b35f3abc626d5feaceeea0c505ebe6eebb9a2ac054244bc580722e8b75b57b64444c427395689a04f72894dd6328f75bbf8a74520abd1796c5bd7e39f978ca0ec9d7745113ddc1eb711c59647dd08cae3e1fcc0c18a7970c6963098f1d2006ff0c0b0053e31e38d610b44c28c57860ea00cd4b0a5688b111b8f0c33a013ab13040a25b963244949d2791db7cb79787c9f50bb75a85fce9c33ce9869de75c52c8bd7755dd8fab5d7755d31cbe2958466b32ccbb2edba2e99c52c8bd7b51786c51833231c47d2daaa6b554de389562df1a076b5294d2453666ac92f5bc8f7f808ccbbec057dbd0be305ed9a35e6dd9e43a844eaa5de8881f87db064e459f9f5d7444a967f0e95f4362c01f1dbdcdd04caf3967f1eb90df241f82a0c8c705c27a139639bbe25ddc5eeeeee42f8ba61c3860d217c4a9052ee26b7c7f798cb6fe8d748ce8ff5b170b394a06f39eb63fdc7e302f0f171dda599ae9f471276f2ec0b9fb07a5c635a9c861e0789e27b42e2f70945312c367c91e362a54e88ee9eb46d302cc6f68c845dd36af8784ba5aec9b51716676693fd589bde5dee1ea4292774025d971a05b29d8535bbcdd93edbdaddddddddb568784c546996e8ee7616b1cb323534994ca6c76b2a753d7f5d97a6f150de77590d638cf1c5c831c6a5a50e06bfeba3640509c426a14901ea9fd596d533098acbd86dd4e3dab22e3e2de6a7c7ad63ab05e9f96ba3d775cdc7ede5fc508f6bd779bbe46d41abac763b7ce69d019e5fbcab79aecf389ed9543ab9f8697398edc5bb1dfe72e952f91de2ecaeaf671ebd43a1a8a954b53a2badd963de41eb4e5d6480385115050259095a0101010101010129b131e28a9c68080ae5e42c74c8411bf824071b222a323a8229f803040404040404a404429833a402ca79179095a0151621954aa552a954404040404040404a8c8c5e142068a9542a954aa5020202020202022a82412b2c4243442a954aa552a9988889d8ca910a0ca21d954aa552a9544711e2bc1d1b23aec889504354282e16f8f3849ed0137a424fe809ed0a8c27142945a1dcb90623624c00366ec4944cbd6f85e250c7e5ac6c56b0e679c7412193d4aa7c98187feeb23ac4f8b3026b1e90938bcbf873d48b6b2ff5869feaf5257771cd45ba946ab5645cbec0ac401c2bffbcff461648a4bd0c9d2a7c9171d9f67132cf25060bbf5638557e99ba7f83e8659b02b30dc9546d3bd57dd2538863c1f87358f3b2874327d762fcddf0177f0eb140fd39b4c2ea40fdc12258f316888bd71877a9d7bf50bfe15acc0ded864bb560d1dafcbad4fe986a80ceb513caa5c2d7767dbcfc8dbaeb83c2fcbabccb7e0c8c5b553b6d5360b685355849736d73a94b9a303e14823824ada75631ad5eaf82458f7b4e2bdcb28242a4158445b48b4516c526ad25d70246566a1268f496c3fc943fb046fefc8bf23c73c89fece5afa3a294d10f3c7a92527558946fa0ef3a8a17f189eaaaa6d7f2dd89ca3fb77881d0bc7531d61b4ba628b40b79e3f7e5b7f44bfaf5ed1edcea389ebabc469df0dd06b53c8e757c8edf2704e01f17b5bd2951ef6ed0613787aedff22ee65fb7e39fcbfc03a27947a9eb3c93c96432797c9cc94dbe9acbb6eb834db5a44de9e2a3abff48ff9283b25524f7dd10713d92e5180072717c6bd6d45d290a2e802d5a9250b4458b968dc90c0660d0ceed3d3bb2eb4e979920d0e16621010d44bf9a905da141cbbfad5bf284e05da121cb37793def710d50cef484a2e18edd403698a16c30a14a83f6ef1526a01851d2ef152698f8cd9848312193848bcf1268a031a0a6df2b4b88218bdb1261cce0443405202c71c5450b94fe5e59c208540854e6f7ca123aa04a2c318330d430b581ce334c2b2ac130841f2d3c7b47bbaffc74f1dd7e227d77b78b12f4a50a1319142608940b8ae3f7cacf0c9840e3ef951f247a404fbf579440c3082d5bc0f82fe88ddf2b4a5cf92834e6f78a12549edd5444b5df2b4af4e01b6b36d0138ae64a0cc468ecf78a1233b8a204149293172c8e484257be60643d092aa5ae9431c6952f6ce105ba9e8616695cd168d892062765f02282802e175940f1cb051650bcfc7281059597269f2aed49f88ec99318c18e34491a471eb7bbbb0be191e554e59f9780e73269a01d5fc157c044413b4e9526e94ac19ae7a5ad8b73eb2869eb5028e7b854cecba84153cbbed21ed603b910e70c43bf04feae0fd661875c1e1da79efcbba416352db6f452e9b268cb0c314d77226d1d296a1efd51cf5cc60a04aa79d41c499c39ba89693d482ff9a511d17c3ad48868db0c11e754eab50dc9dce61653a9dfef28478c527aba7660fac294c534548420cc28a8b12c98168ca80841d6163a8cacb0c20a2b80acb0c20acb09922f487208bb588a1eb78e149da033443237b929b3a4eb3ccc4b5b87d2b68ece8bea40e97fa17874a44bd39965d936047f965d31fee5fdd7b605f138e83d6f6d14c7e2240902e2e8c01ae8ec63809a4de3a177f5a1a350ab229d952ebd4d8c06393b0c111203ed7260d840bb1ccb6d4cbc44118b317ebe8341ef66b11823f5cfe115585001e89f17462eef38214766679ac327ef8635288e409c224c1ba94454dfd1e3641110877f7e8ea6d1e3f86889a4b0e10a7a105e62a0418f7bd614daf10f0c72c2db127e1ea0b77e2e1804718e04fd730c0d4af45a1ed12b7adc937cf45b1ef786be7b3ecf8f3cef8e7fa4b08142210b9286e412e85bd22f7dfa731edbd6a3a95b5554fafe66c972069f7f5c48e3df7b6fff955c6e5da954b2341ed779da94b365b346443a6fdd0afa91aca05fcaba827e24986b75e2c4e8ab91e2ac6d869414c78181763936f3e272a0b9668493d223a51d819ba6cdccb5fa7e9c907cd6eea5acaba25ed66e7eb7462fd5e57cce6398c3f5b0f1181f6aa78ae560a09db272722cebb27eaed4bf9fd44c2959f26a52306da0cf9f432b4e6159112a722aa21dfbb0cf690cb45ba223d187c74123398a48a1427586c8c552ae9920f0313ff2b8e7f3b8ee9f7f1a05601368b744457c30f26ef8bad6ea1a0472303eaec7e35e11ed7afceb711a839582354dc06259794e48235280a844c13076b2454174fde171a7b7cca0dd161dd98282828c409fe12840541ec74e188a6a87faf44fe3e19519415d34f2c391a2c70962af9ed1e9b1827e243daf850e37335b96f736f73a92ce41039a51b45e3cbb2c638d62108febbe604e14d163104196d9b22cb62c8d070e29f26ee0420b02451ef7863cee7910ef6608162c1e9963f48ecfe67a96e597c6c39665b105216c6835cc7861893eee514a236759b8499956a6d5ea4843071b3a8efee93092896212badc84e5dd40b88309d3aa33ad4c5aec60028730ac02001500687d3cdf9132ad4c5ae01046771700088730d844e59f6362d01360428f043a15ff1c9aacbc09e871101b2a02ede20e935001804c424da0a6a0041c99844c4137292870c08c302358f352b43309fd134ae9b02cc78eb09ec7b6ce72cce84ac3759e898ca769ef64aab8302b7cd721f877988830232c8d6e874c15ff5274a8ad1042c7eb78dee2fa785108cdf310fcdd8e9fbfe1798ba9f5f1fc0a8a15e130947aac0807a22e923da423f40c4b10aec02265f571ae7474a0d71922ecab0405a8479265451ef77c89101e24d64bd88b78dc5b228bbc1bf88d45b762ec2539eff4fa60e4719712258f7b4586e82230464a513a3c0c899967d0b3ac99d97b1e05a847d2def35c7fc41767fcf16e7e3c8ebe1b8861db627ed5c51e87f5365f924025bda693c7b59f1e87d9f036c5729d4729a52938c5c0a2882a33b02cc33c8b9e6511539901d5c067505844d5ac92b30e992132d343173143e4f2be36f6e114b34af38ead30151cc457f08ab5602c5e30c936268f4b651c54598bc7b5956d71631fa6e271573c6ec5a7d76ac750feed108c915214ca9de36c6c8640a0085b9956e694726b72daa90299b919228fc4e6cf602b68a0dd0e6961e4872340c034bec7e348bbe582dbbe1f1eb75a8ca05de46c6c8420690a18e59f8dcdc90cdaed6a4ecf293afdd64d1b939b7abe1d0b2228bf6cfc62d105d5ff78dc738b63a4a69a39ad0fe871541e47e422b9a94aef5e942060e9f178587f482f4ab745271f9d6851b6f9f1acad8b939e705018dca65cfe341e3b559a087b7b9fcca05dfc868e19d1ee45f1e16d967fdb4c02f4a2580fc87ade5e94d477a89fc739793550fc7329271fdac5175f44398c929d211787eeeb6eecaafcd89a81c66d6a41d9ff6ab84dc11c6a73a70afb7324ec75af88af42ef7699c5e52e61dbc227a21f7ac38884bd790b2b5a04932c0a25628c11d5711595b8300cb611fc647a56e3c360c7e4a18482f237841023c93799043152733fb763f4f8e4298a746d3c7ef82bf6b0e3dada92c28a919294cf9222de8d12a3aee7993ed7c752381523a5a894bb9225ec83133409100ae56ec5225aa18f24bfae4d6238a0fc3093524ae9a7275524909e30cce7c3c91cc3843ebb368fe2d785d9bc9e0bb61152eedc0532bd93be40a0fcbe6e8a75d1d0f2387e576648fd0c91aee49af7bc2c951cf3d28682cbb1d75ef459a1cb2764bf54dab457dfd384649ab3e1dbe3fbabb58da405d99f153ad7f7ac0559499a5aed84ec234972691b0aaecb491a0fe6248d471302856c273d3a57f833fa927eac22918eb9183fcfbf4596a3dfdf971be651e389ceff5613f2320967e5363ecb7cb3aceb7bcb9bbf85e036ba26cf4e228273d89673e8d1f852c33689e45916bb639655333cf15dfc8df96efec60e7e96799639af0e9473789e917c493592bc6bd7837552079277d96fa5e1c13a90b62df36ceb7802b0c9c78f9b57aef280fede7714653da1f59fdb6479b3adbe386253baafb940f6179bad05e1555b3faf07dbbabad435f179defa6d645c645c645c643cf9b7ce8e0dbd9bf7cfe30f948713312d56fe097531f5bbda22e8df7718d16347465b88f15d748215415e6c685df2be57da8d8216527ed7b4a48775a390051b1fb306edb0a105e2f2cfb12c0b44eb302d3a64df4b6ccdeb26feb5ea1f0de83ecec2865e9a3a0ae2bc6cbb2edb2e6a1be27d870df16361ac8f876d8175c88285b140327f70e39ca1f7cccccc2b880d2d107eb9fad73a38026ed81813d342b5f6a95272cd73364864aaef4b42b4ba3bb172a9f23e361465814c7f6e65a1d027c7fd9e4272ad921c1b8238fd93d5f75392fa07e2ecfefcc88df3b910d1e28ac7ed0fbd9b8eb90d0fb76785c2fcaea0b0fa27f1d282e43aefbb29edee96302c8fe31cfb2ca8859df906bf708949d571a068cc36a88575dcec721cf384e75d1bf18cc4732bf1ecd00c32ec8dc3322c10cdd92164c3b343343cc3369e19aee119aae199211acf26d779a552a954f2f8b89297e8b6ebc354aa90a84e52865d4bea5e3e072684f560f7f142d6bc702591c30eaad0450ec8500334a2c8600c30c430020c451612db851a518c410a2bb660a2064c8c418631cee8310209258ef8c20915a8e0022fb1061918006470176c6cdc79703d7878cbe027ca5015320a2db29f31ac8c01642131c614c6b8c21a54b004d0832f6041095c80220b143f6b6041f258038b25c049ca5efee5f8b78f6b9eeffa587e386a776b10c2222bb6dff5f83d1c6b41222becf3e5d141a3e7dd078baca05cd4c12dcfdd006a288eb842def3fae0f762b6752111ec233ac668452bc21930f6ecd6e6108b80cf5a1f970bfe39f41eace53216bcb5b0145de759db0bfa755b512092b91173f2ce9fb391d928ac69bf4169ccb6b066db6c7877b6ad409cd3766d0b6b2c77f1d83ebc05f8ac769ef7ecc4ac313f7ed74057033d98ad8194d056604dbb8b9fb2a0ef3bae0815cfa5b695c735151e2c2cd0219bcee3daa712283b758110bab8cbd6f544cb0ada755003ed0a2808ebb0bcc337cb5c9477e3e2cfab057ef96e57bc5460d277bbaadfed6ab5a29e41efb6ef7605b5f0768173bccefa688f7902ed1ae8bbfbca7743e1bbb17c3717dfde5584b037ed3dc502a10be4c5bb9bf05d27e1bb9ff0ddabefaee2bb97f0dd41df6d0493776de5dbdf8b43e8e2e2e2e2e2ab41e802e3bc3ea0bb5448f438e8b49aa097b429a193b2ee3de9e5a15bb5cbf15012d1a7d500e5949e5034277a2911240d529cd002a406901394c06286176a4051f44469b644165e48220b2dd840d1a0e849feaed6a0f21df56e6399b91bbe2ce2407d377c700a20b9ef06763fe7e5faf9f60bfe419365594dc4b527c5fb06d6c73adc34b03ed6d7c8fab02e0c026150de627b43cbb260e662595be73b2c68ad8162e7c1f5e088451ed4098df95dad91832968f69d5bcd28d40dbf2b35d4f8ce6de02a0b2d86b2c8628b8dcdf666ee3cb81e5dfd713c7f302862777717a06cc18338039f286610a328cb328c0712f829038a2ac6000532d090841443b0804a465130c189365431061a8c04962cba3085989ffe821a5abebf85aa00638a24c230821a6ec03e6a98f16d437f576a7cf1d8ef4a8d2990b0609497418a7fda43842f8401076310031b6cf8410ca084d026954ac500c21b80f1b01d42082184fecfe3a4015023897ff1dd74cc03f422393d3a28430c5fa8c2e093859d23a4cdbb811042e78e3ef31aca98f9f78d8577f5755997d5720d1adf06617594c5ba8ea8c27e3997c4a0d02fdec7c9653ed131e4f2e864ac7cbbe4dd750ee5bda6a30532bf57df4fd026bee312df34e8db3b0af4ed56beb7065b589ac23b586d2058d37ed5dd91f9067a5cf3d651604d145554419cf9036b5a2564328235edd68c6541371dbd9bfe76131b56be9d02512a1e4e8c503bf579377ba508aaef2850be694af5cd46abef6894ef5411aaf01da5f2ddd1b7e0eb28efa6e380de4d373b93d14b79376cc477eabba6f2ddc6774d0534da693719411cf6f6f9f36e9c3c9ce9e4d5b4f7fc993fef460cb4331d998e686a813cef21f8bba8a24668ffb6a85a1f3d7fa2aae807ce9fef20dacd1fa3effa3bd3d137dcbafd6ddce37a0b6d8f2f638564046939bfb9d99518a49ee412eb276039393b907a20f97575d2b32ccb48995f917dbb6ac74c2ca7b0a6081754736d9bc1c0faf4b9c160a78b8f2d691e92cf60de8ff130836d7167be9ae75710e8109d684da0b7c9d84583ee9d9d0871e2d60851449f689c0f4a21db37ee6ed4169b628fdecd8b0fc3b08d3649fa0aaa64db824ed4e9719acec3300cdbb8d846eb72ac5e2e254b8739390c0c8cdf7009536f54541b148666739e292ebe1a8cc49609ef989c55304e6bc74f5b49ec1bd023461e3795404d9ee4dd4477f19835e88b3f197f1ec40299ff5cc90281ffa6a6cde9a8778303e5cffd86c7384c8d8189818181b971c36372c4c478cc0dd7793035c6735421f6068a07070c0cca334d080ae5ab4580e2a8fda83ad343e6300eb321a19ef93e06a0cb6c4598b4dbc09ac7058df1e82fde71ef87765b14c4bb39f9b32c0b091ab36dfba297fc549734b10ae31b218ec93798fa525ddc4507d2ba6faaa5dab193215ae3ba45e39f6fa598eb3c591b45636d4f139265a877b32be88f1b12ecb2ac2d4a555019218e0dac793476f141a18806ab7fdd163579a426af87b3171ac02380e4f2e8077b40370204f41f10420837cb43ec7a3ca06f0f4e0b7ddea1da68839763473d223d817ebc39f42302e77b0edfb39c888739ca828eda9607a6191f2e26333e4426d17b7696e8250c74fdc7e36c1e97857462629695b5d5565bed578e207a05fcae8e8cfeca1142dfedea66af1c81e5d97928a206900dd8e0393d8e8b2ca448ed94a6a02527d0e8ac6d207aa909b4352251a2c168b56344797bfeb624271ecf7ff4db60b1e21b58f134ddae96e8c2b0207316c8fb356227ac5aa2a40866662a4c8278371d071d0122c9e6ac8f257aae37bacd8f1d263d02c4922294ac51efd1e2a4412e8f7df71d3012097b3637279a213c9cd329e2c30f3d6c3078423d8ef2f0d40a1a392152c134a0113c7a12450a15c846aa288848cb162222222d300d78048da0d14a4ab9d2059b2165de50602412e60de4d3a9fe793737a2b4957743455ff170960ca276e2f3cffb0929c38ede4dd7db0611d05da941e833c71cd378e45e2e24878e04f3cc3b2cdb4e8f932ed09fcf6498d3bc9b996c0bf23ee3208ecf233a827204e59fef8d7fee36ef667da650195b64b43afae29f539861d0e8dda4f16e960d34b57dfaa7dde75e5362d6afe63946e384d242181241260c4b47e927eb900af42ebe071bc2d2679564046b7caab06315035245f9d3412a24365e024847cf57bc68a7500ddbeab62cfab225947fde2a4bf556ab815a565097cf8161796cf5cfb1270f078b2a0ce8dff321fae50f898d57433a8202ed4c4f8efeb9098a77d3fec404c5f484be83474045da633fd7755d51b2f4b5e571af542a2a52228235cf897cf2cf0adac927f2671706a2d8a8140d5765450c15a211010000120a2315000020100a88c522b160300d96750f14800d829e446e529b49b3288c6118c58c21842063080000001018992168820072da150829c4eeabe629c679fbd8c8002254d32dd0d6d0c89bccf6a0e3256c3852148635b60918f6580a840d44e5f335b64237413f2effc78e071c554b3d2049d2aece203f723f09dee25b44cffa65d2a01daa185d6384a0252946455d1f24486056051559f599bf9bc74a166fe44f5cd853b2ed22a5d20d04cdee884b1137e8b5c766c6f4817a8cce2b9eb7bb1d9208c38f02e9505757e0316088f561754fb707aa2c2d4ba80ba4428f3c01ebac5594fa5885f53472d087c441e7695927622f7028d29f86f5c7c45fbbe4e16f4bb6e3b73f87865afa4ec586e87d2520a0286af28870507c0452297f8c57003a5bd47bd507891f1ec48460c01f556e420d4d7d372dc4230aedca5d8dbcab42d458f7ff2126f11513897faa047a0d812a59e28ff8a658e2496d2e9ed50c65d27258bb5bc87c00668c3dfbf24c78c3ce9a17973b40509909490eacc9663fd518a1015cce1ac11533c42ac56a1241ca06a82321e39cac0dd1755ad8c021cd5f0f352846e6cfaa9748e2088ee18832ea9604c7201404a0a785ec8805e7896a985e18447f511619571230b67e90b7ff93617d451723406de0633ab1c04e3fb322b704a33a47eb857aa9788219cae128f0b071f7699ca008cbb9dffa7e391211f0412c2fb052fa68bca0f8ed6d77469e43a76b4a98653ff91d43420d5384121ee7b87dfb8a99759a6dc30ffa85b6d66feaee8bb1fe82d1419ccc087055fd4b8acc920e0f54bfe9b765ec3adde1ecda44a9358aa1d0236f11202b3770b265a6d81d8a1c6dbb45c37da0d8ea74790c2f4dc4899f594be3c00829211584b4eaad356cb453f49c8df7a60d2576030c4841db56074bafd39dd4a74a92932ac139414b4ef2f9bd75c7e2d7e5de5f07b961dc9c1d63090fe9ad6ceb102a392f072798c964e87eab62f3a69c4a6dac3bf7ea7d50e5237359853dedf441566c1ec09846e48d1ddd31ad3bad09e28bf1a2783438c44d580f7053a2ab9f161d05c3e6018959149ae95bc2a147a4bec374be103fe199dfdc962937d71a3c00f4586f370d31e49106ced58a6f387f03069e1717d95e064e89edc9a00dce352c362e31eb88137321179c34f154f7697c9ad61cb98378c84f7d9fefbbe505ce45c4dc88b87a734893637b4a133997b0cc7ec4bf865415fc897e3d3d9eb8a2c49d15c94a58b68e7575a72f9d4807f9930f5ff173c644f7aaefb05014987e3bf070245e8c842bacc514a4a61e02214f96de2ca8e6d8304461e99998e352e276466274e949273ff3468e3aa487b575d53fde8f26318ed74f7dc59df6090d22ca0d7eac358962cdeae71c71341e703aa8d2a2a69364ac026b2385d4a0c944e5d964c9c456b0df470c19d68e02d375c7aeb1b2ae423d6013152690fd331d5bc2a95bb4a76f40a1235a89574434d0bedd9fad9006255523f02e6b3efeb0da4adabb8889ade3d1adf2a0e00e38fa50f4174832a007f8e4036c294b763190498ebadaf3ec8865fafc11a50c4de54011ae0c5b4357eef69d29bffaa7f0c45a23751d7cafc8002c489912bf327661535372ab71b49343a676a0b72943ce28870ca80349827a213cb4836540d0d31c2b2cf0045c9ac05af64dc04305ad63fc2d437681a3f5cad7ea365c1cd2d09d173bdd88981a0b3d712aa79c387907c4be1c60af9f4e0a345319d682a644a7368831f72c9caaa09656050223366f86cebe3622006b8feee5800f903b043b8020559067969cb05a12b2c26da48743cd44e0f00ae301fefa1eae88ffa601aea1c8e06864c24e08c3ee2f8477aff0e101ec907f3340e2e42b1ccaee1ef9cb064472c05b17adb8f617a702a4e580ba90d5b9190098d8ed8319ffd279606f0d486b925da2ed2472321c95c9ec072e213c84311af219a2a1eda908260a63ef0a33141d5792329aa4f039c061d28b3e67d379244e529e8f40db5110ffe6774439b95638a98849ca9f5c9a05057001259a946aeb46cecd9e8ce4e88c8a162f834ac0a0ca8bae46d518c883a4d243f4e8f0555a13e7e65da4d4a255fa171b50bd206fec6cf2599ce81c7cc114a043170fdbc18ac5ef710d0a191c14709b36dac858ba74410ef430459228cbc0e59e6e9cdbc11c4461da08067a17389071bb81f9780a17558cb95cc9bc83927f3d9787eea74d6da7459384ffcbcc44800e4f4de20208cf374be3d25157e9bf98419c88e4e301237a3d4efe7d09629ef21ebac88d438efa3cf27589e06ce7e3cea6a80b6ea99929607a052bed083514b6e2f64bb8b7633dfc466815229d802016b936bb11ba419307db12c09c268d774322828ea898b1b6bc4d799408bf7730a2535009dc48067bcd5d8d87ae33c8882e64e3120a6661f7b2e8eabeed4d9d5d7aac34e54d4d0aab564868c358108ec6de8677b4b9736d153ddf17a71bbc7c16e818ad3f95b52568b65c5e7bf7d62b41592f0970751060ee80aaf6747ab1ec7e9b1fa9a60429c15ce368ddf28157d33b6b019df4eb2442b1f5846cf8f8c4b84906225ca409beb069652393b2727f4c0801490b66cbaa72adb10d2e34462918365e9cf1d77025561f2f8b28db6812b2bbe935fbce7f6e59cf853b7b6f3ef1cce4d4762c8aad28f78ccfc64424acc8daa144563f98c2be443d9699195b68ba33dcc80b128d760da4de86610967dd6d44730267d6e8be77ec6be597d5402e2e6186dee9318a9103941e612a72fd42ce6755449fc6d1ce7751bb6b33be12c1d9f2748cf6ea62afa99b01a49f7109996dc946a6eb0ccfd03c78c8414bbf672d6ad24743005cb808ea2bcfbe4978e7fed9abb1abfb249066311c9bd549e4e30e25dcc74547b5c09dded210232e4b6ff010cc6e035fb52e30eb8cb25594e3e8421d9947dc14d174d5fd77ddcc03fa9dd91914d460152563334b3be2328bcd93388fe0acb26225fb6370baa0873a55a180f78a9f65f4413cff7718ae2574a7077d2ee83531514fb8240bad3e62d4e534edc75ca5b53c652b167f60b24da7c5fc2b63a55994c3657f333c91460394c14b500a2aa6323f325635df37175828c897a0cdd0ff652b1e7554113b5b1cf5e6b20f425bac0750a424e9fc89bd651b3c338ba97f0af28f9fd3d2504bbe05abc7a48beefd20bfcf04a198dfd20af456d03cbc13f070096a9d435161da5674db10e8af402d2e40b01f1f209205d3862298d7e0f214aee0f8235482c47bc0db4ce20184ce069812fb9547a987ec4231812b592424ee7d4c3e6bfb622e5ebdc36161cf540e3ae8d010b7c57a343c9c1b9ec97a8cbf4082ff481ddb8f1588eef7f645cad62f5db9c58ef2f146254bd70171afd23a8b2e01fd3a9cd8edf5687a6f30a95932b3e74390299c85a91148bd22420ea8efef2f1086c868fba17e95e05397d7e7e25b2de4d3633a12786b1cd9975a7e2c633a6e6692109f6099c62303c4f007b8e08ecbb63b969f75ac2c9cc64cf59b614ea40a710d84985fe1484620305054304c64d2d93c6bfd358c922083c2327b268eae8458e5a0d789ce67d281bc8ab2e965e126a44f03a59fa95627641eba5ead31bc8e624fffa4c43ccb2ce427ea086720e37a691db2d2db4c5abf31fbfb56957e2706775cf75af9887d4bcd2366d14f4aacfbf80da34c5eff461dd8d0d217d8730874b518d7e9c6865260de203b96a6c2388ea8bb4928a6e7d3d2a92c38015344f432455418c8002a0cfd1814b8a3284c593d4ff46ad7d06c7994368b61addb700387c6b8cdd5987eca73907dd3f4d91d7869bbe120dacade99acaea2aacde062844773cc20fb943b61c6b3b8795749f21e31288bfebc34b2e628caebfcee71a3170329acd5ac9da0b461d9321fa893fc9f1f59db1cb44c6c27bae80fa8202ae7ebebf9c110038d7193312268bb75614db8e3018758b9f7ffc7290aa7940a0cb2585276f4c300293b2f1d2a0e82dd568aa2f05539900c8b0ca3643d4990484ac24b47bb3c79283967fdcb24d462b123ea90a93cb2c2198c86e1ba74e4544e91026c37439fd31807cdb6c0da0b6d2bf8e36d3bf4c2310f970a25b7b3d36d2a480828a53b41b28896d87584075521a3621a80eaeeeb0dfcf07c4c0139b9b7d3cd38e34f7041488d444009fd78ae507ea3d8f68ae5ab72f5a2a60892c15eea9ca1a01061b2dcaa209ee2a5432279eb55336c95217cb4e1454562e7ae9802ae37458cb807fc332d71727e7c5465f891a2983cc4cdbe783525880680cbf57e96c54c0b087fd7ebebf8935b3a7d7daeb4019ab331d94285a641853569d094ff8b230e3fc92d886761f29a2765bcb989f87f86327bfda0939a845be0021d7e5f282ae7a7440a66112eba31ae4f986ed0095df83071a53c66d44dbab8b00f70972aeb32dd7fc3ce69c1f060958b4836ab09c03977891fa06f46d003b47886fdad790964a4b19b2720b752af7693ec9c53045858d6d49545a6a314d97a5dddd012d938e70ac46a02786cc9cb4c5a8fc8ab3b29a1a5bebd24b9d8351329c69b6ef1a6eddefe0652660a520331088c5cd35c7d79e7957f624a717c54f206338f66fee23850d0f005a225f8f0c2c9ecd6c444ef96c6a34dde89dae296e66146c3eec98548974c90415aee0a44af14ee3bb959c2ebfdd280db351298e6a1b6fcbf7af227c8cc253023e85654a02a9421da88d20c9fd38230f883cbaaee052592b7787132badd15c83b2ab789f5f7428c746804215ced48d6a08fc53ca7d0834259fc852cdc29147cf26005d0dfabd63040dd496487dc361bbf83eca6495c5dba144542b988d1c2840a4c5162107e58aa98aec10347d72a2b49336c87402f95c2a6c135db5d05142b115e060dab87f13f56bda515d0c10a1bfb26486e3b81cc2b82c7bb06a8875285bf1a6993aef0141df9ac0eaf311483c106cec1a1af0b23e329721ce6d4809100de3f28f1fda63cc074ab0d279eb84c2bad1f8815e5d4af3691a77b729f3fa325fa5c80f3b12ffaa86212d8304ef69510d8b4704d69ccdc9c08b64d8f61b7b3594c8c8629d5e99b4f12c74e467bd1cd6faf3c96efc9d5a862d94a15a8cdeccdb29530286210f4dd091c5c2ddbb8bf1bf29fac800c4d6106fdaa274e168c1225f0677456f4222825eedbc9a9a19fa94a105997e0611ed254d9a1fcefb3458efcfeba1709d163d2c1c4f62f6edffba1559fbe9b526cc2f543739125a686f1a01a915c089f0f29145292cf2a4cfc5116e7806838873590e7e1ba89f877453e532daf98eab205a271572c323343f05eec4606a53463697ba9c6879cb4448610fdd244202a043d7446bd8384e6359d1298ea63ea9fdbda058d49727d7b10f803ee0942f36beb2321e5fc3234ccc0c7ac5c4a4eb674a1f225a330772c1dea803cfabfa2f3994f1ca68add21b189f70854cf84ef4b236365b8f00407829419a03804395f4f61e05915e00c7a084fa2d427eb5d61613f3fe8966951c1a7a206e0d0f9c51d23f5a4acd57d4975a65d121357b8cd88f2224550df0309991b305b95d1ae7c30cf9afe75870b405be7467640a326b6135447d266b506725159873b080018419eb616c0251d8ed8b6b9fab9169752a832b9a572942efdd9086ebf09c0385973149360124d7e2a5d6641ccb73a2dd87a05dec0e8e255058f63ddcb9dd91535c5cc9a75a4566a44332af877f740567916b60669ed227b51750d3b1448cd83b29af042967e4518955497a8d2c87c7e3800aaea380386d9d7cd21b211a2ca7a8007add08099a6136da0c9daa4b3273b422dee685b6e54aa662a64ba6f2c36fca9cf614c3eef562f6b2e91fb42c41c36e491dcd364a0b8f93c80114e8a14b8a2c9bd20a64a40a057dd28ed3ae3e5de087ed17ab3fa026cd44f918783ed9dc41b77b7d1465c7f9302b8e049e3c1476cb6ceb06be9b2b84f3eea22a896ec0e524b8ed6438ae1d12a9ad14bd6d01ff6aa06a5d7838bbe518405f0b682b212a602a7d78ad29040488277b7f9efab6f2dd338ea87fcefa40e15fcbca8d1eccfe93b4c71fa2887dfd9069c6c9cc7578db8f686f22f5a39e87eb5978264b90257bdb903f479163e55f3b1042b2e20bb306f13b3be42720ebd0f87f4ef054fe3bf63cec3cdfa87c22ed70bdefcd75eef2ae2e900571964b91ae30528db372f3322d030f43f268846f032844211489fd1dd5f623f1fcd2b08db90d007ae5a792db77499310ecde2ead71e79bad4db8cf4c18ddda8d6bca77ef56ab99fe12ea0c72e0a023d40c8022045f3c24210b18c1c3f81365f49cf514d26c456e8579e68ac58f014641ca4ddc0e15eb7399168c240dc04814a339d0e253745c49e59fdd3238b1bdbecac93b41ea1a8bd22ff6a0cd208d3b8c489b06e19394c7fade8a35e966dcee8e37b36fae0330c9bebd187824d879c6714dcdb01c49ce02260fe17e2523ef7e18863913e141d1e65a437ce1e1d7099e9be8f6d794030cda7c9413dcec36e9b7f8702f19d66f896c3f796b9897310d7bf46fc6f328027c6a801aea7b782d7b580057d46fad6f1c8fedd3194247a89556b5df027f456cbdf0e49675911ee15b83b07b0fa36fb7220be879d99be0ece2934bc6338a0bdd9ce127b52941222eb850e14be55026541792c5be2e694586058d29e5c5cc28568f0777dcc524c56b880dbfd14bb4df7aa6315bac5c3afb063756f2943bc07c9dc13342e2239f1c9bc22f671128ef586235d4afa2b5ca23cd5295effd37559b14019c3d7e11673e9a1cfcd9cd421c4023262d1373b42cd1862e37bc0cc507cc1fedc9d615f8fa044c4c64ac61730769c6d430c3a92ecf99d69eaaa613fe4d0e3782671f071bc5507b0fca558f259d148591f5359dc5582fc0865508151fbc5341b4f607aac90407f75b7dbec766957731d0e6d6fa473f14508bbd9040a8be8e0a57d7bd95dfabc73129778b3fc91940db3b1409c6066788ba498121a7e521921855c138e1172790718a24c7e8251a6c511538e3428e46aa39804dfd53be578744a82fffca02e08efb230338b8b1a3e62d4e46d011c0564cebc477fca9fe8dc02fd84c2c9ecf7d3750f20268e2ecd9e80ff74b8900e6fdb6fe2ada892269c73d78e255b2fe9060acf97d2e4cb1583b26f7998296d31f54d3955f8280016835e85f9f920cc0ff35426adbe0d14e3636b41421ca12a54ac05cf07fdcc76cd63b46310f57135cd068b40234a8a8fe55438b636514c58d259f029f2882602b13429e65e22ce3609b349f569037d7a196f5bba30b07cb9b7df3afef4ce9d657e9b4a6f324b1be3504038a5312e2a53ded5cce64c1a6b33724e5b8f18852035f12af4703ecd645f252c0645129ae07a4cc111cdcad3f575f0255d5431b648ce57c9693947c78508b971d71855d1a95c04f0dfe27da0b8dda94ce294938fbfb04bf2aff056b85b46ce1ebe5f7b9b1c94a6afaa14bc8e43eb0c8bf319287289249a4b96570d203c8af93fe0370a4ecc45b69cdb43bc51d95e63100a49a1b93dc1e343a68d020dc6032d56f64cef290bd2a69d9810b52907ab1a140e8d102695f79a62baa62dc63b6f52743290876faa7ddc7541cec604f5263c626c95cb66aef091e4f58f54bb9c5e94d10cd08c3a0662bf67c1b22086148105fd7f2930ee25824bf2b8826042a9351bcbf324b300ecfe922a275246228020142ff38ac0b975ef8472f4602ca4372648769aae9ba563692ba1b4cef9163bbb5f94a046b97e7b9fa4354b87220b643ff118815955bb7c14cd5275f6aeb3c6fa80650089631999c6dcb3328529fb07cc08f10feb1141674729a8a3014eebf936e17cb3a7a03630066f1d6d0ce5a6acc12c9d968584e16d81ffa11bfaa3fa8ab1208e8ba0247d9216eb906fced30ba323c24216f10c2b2dca84b5bc1d8f111076512d807541be7179b90927ccc0270c1704fb220853caf0a5fab9f6a95b6eb3895cac8309a633bb574dd510b9fc25c8bcecf352ce6581b7bfe8eb463df247f3593a3b110c628fb4afee62431b62a02a25a178b8c33692f9d8b06cf4b952e3f08a7847c62162dcb32cda5889a5367df5d72fc996789c7c8470d0878d2ad07fe203ede30f60816d13050e6f2f3c593d1c50a9a867c62e4ba2d42906267b35546d915546cec203b2b5a2b8d55d624285c02db83049114143c1e1d8ef1794e8b20ec96c7964413b4d25793ba3cf4a25bf8448e0be6c98c18e543caeaf3351626458bf8a6c10fd888c107f5e008b3b0e6879c4d8b6aa9392ff41bf902ce04c841e1b948df09fe72f0b6843f6ed266472927ac74bbb90ae14d8af0b2d619bf28b35f8fd81235d96e60b5d862c51469b674e23a04f338373708a8c20d7fef7556d80c91a1ec4e4889c7f0c1bb509eb25789c35efe1b5ce2f7250686116d4c9ce7d4cfb8dba1e72742f8c67fe070492a887c2733d5c5ae79ab1a18607249c3dc34ef9c9ae85419496966aa35c0c6126bb519a5b6003cb166d069ccbf9ba5a252e62be26c48dcee883e2fc578c6c2e5221326826776c7bc9eedba71c41fe8e78cea499793be5997ce389fb08352d6a4c3e7024a1769eae9d5c9e40af520dd051b34c0f5599695588898f3a1a950594aed45a2ac20cc1a1465b96fd38f9f62090c61f5a2995e9498e69efabd69e29894ff89cd8a219c6d9d6370f726a47b50dc52d9a4c005123601086a2f895a5047f18e0981ddb844daafa53bd564313087a8f9b54e123c5ad1f365bd55e4d6a42dabc63ecc5aa4896e1bc71bd0eca4fc23e5448563e76f55e0ac901acb2c8f1a0b54981e2a164f8e7c56dad2c677f6b2084690ab5f233d688baed1d1796d718009daf0793bd97192801a17708928bfe4363b1b2034c043ef842c2da59ca35b8db8ef5e00f8ac484e77168611d9044ccd750d74c24321247ddf942cfbe4b76973ec69a00ed533250247daa7de66a893d68909d45b0557df6f8bc7c42339e64d8777911f986b70df142b0b1e04e268654819e57022a41ce0312be9a40ab24e8859dcf0deaa507344b9e860df025af9259916cdcd0cccdd640e6844ea6a4b415664f634402e4f2d50284f3079dc053a706a56cbd4a307853c15b0f76af7b3575f3039aa224fc1a5a62dcc72be33e477584c4cabec80f6e5850674eac0c3784077bbf69ae4e36fc0f9d19d59dfb44176e1265b9bf8d964362f54fbfd6a8e8204898c069b17b17c359eb118f4d4a7cd1682d5f7eb4f4120ddcfb27c91741c91f7cfbf3481643031f0cd6a758650cd1886103a2d4a05d5b6b80625ffb3c41ac3245ef56f4c668c321f5f179ee7b9a9ba151c2352e55e9f845403aad2835299b0a15bb916f32e24b41664eaf62e26fcef98607d1f165f2f3cda29675fa0ab81d4176b348f82666dd467468e310d6b5c78dd4a6ca1ae07cfb18cb500283dd8208a78ec3b8bc98dd17b905a7462d84fc4f71892ea05f71ebacedfd3081488c8be2664d2dcb7085de92e0dfd1dd9edebaae28ce8f18e7828959f9679a1e912ef225e2fec2ab7ab82cea01a489c8875f1088e6a961043d4ff03ae517a2806b1ef5550780140bcf274028ac713e61cbf343867dd5f7e9b15a05af8e2fd4c7c1525a1c0fcf117c5be9cba09070641de275aced8b3dd914275ee0adf0e84be5a6ca5c344867700f899fb39da88485f0cf3b8ab8ce56af7c77d4c1a9b3494e08d0a884d98de197e900e5d77f42c2a1c14bb39c61fee170d76a66bb505a2e789922fb7db467d55db8ab1ca3a6bc83ac9cf95fb5a19e67cac86e2575e267db69c48416f689119fec1c554218829d9848f1351c73cb8bdd39d22355b6f0596e5431684e68aa85108b3eb8371545c107992ff3904a5f91ee27b88e9421355812c8d90ecb40a78ef6ce9d7a7ca75288efc455f61ba6d9eea403872495970733a4e25c5aade06c899583d01a82f6aa7cc73a017afb5650bc0a6401f8f9dfa6b3bc5c68063001c1cc36552679d78ff20bba461e9d3bc7cf27da7454efd3e15d34e61538a4e7f903545b44e46c2f70afecf222670febfaa31506b5886065c8b62c0dd5403aa226c211a4a19087c372c9a20d633c4ef3336d58939df440606238c8bbbe7dbae487339fe1950a8e081afb9c6a42c43060a3ed14290916c686c632abe234ba104a5a6f2f45e593af47a79d08f62a94ebfb3cc8a04a27ed9dbb184d1882e9f5f891b52b3c9ccf299922ba8f15fc246ff95f2b164a9be2fabfb73f8af26153d68677313c2f438c1f55fa89adb30e095305728d331e0e5223cb891c591c43c487012018f23f8d69d28b4a3f25f323df5e4c7e27e621ceb7081d2199d644ac7acf52df755193fbaa3d8a8ae81e8f8fd3c1ebd36acdf9ec08884bc2f8a8de5b71377c9c7ac5f677cb4c49e506d3c98a44c9dd0b7f981f03291b37aa62d503d4ed143f095fed840bc205d7114e3987f46502ce1e832bd80ed77527b8adab838ad012fb976c6c7d2a6ded7faffdc586ebe351d7ffc5d3c9ea26e24492d661790d36c37464ed170a7047498105dbddd338fd9157a7d9b8053a64dd9ccd20de51fb2c6c1919288b480a6da73164ac7d473ce7923a11cb0c57beab8ddec5daeac6b2265e5081b505a13c5e5b4dfc8a4db04600f5dd44be0f01dedb7f470c85d9843a4b294899d5d26a3c0766a8adbe10ad06353181133a269d57b6fe7667e78748f39c1dd9f8cee02a7cfa4cca9a2b87f74732f499fbe3bbd10fad0bbd0a22d91548b5680b38c5fc142a31e5d5fb77d44bc39a8025f508d441d4ffb9798984acc3433933ba909ba4cc49c72eb7bc93dae421ae31a0e2b487a6562fb9390baeefcc3fe8c2691c2ac9cd67754133bec499bacdd07e8b8a8b570406c7181c50d0c2fb659d9396ab6aa975b6947871d00867434e9f3cd1e34f089e9b72340919814719cc32ac727216615118ff45c7eedbd5c0a1ed71b59c20e84f292b2e48fb69cb132a710ad1ccb92484660357e0a9e55b190a484da67a1ba2ba15726da3b495b3b708421b8a8196bd0b63e82d40d8b3a4f1a93922f030962a018a0ca40d1d086086883f9919f6709db413e41dc38958b90898289de16a6aeaeac23e9d620f9fa8cbbafff09910adf7f7a1f246df1e633a3772bdf4398ef4c2fc6cc2f95664e49c6151f8a238ff0f05c5f38e3129b1dad90e9406946e02e91f43ab0138f887b3a8e4257aeb49e1f2c47766df59d87b66de764fc38f92ab558502adccb19eecfb36e4c5d1ea6eabee2ea4b89f69414c91bc0e94cf426598057f82e51f7846084b256e19bc9597d9a95c993e791ec5bfec8adaf2c9e13a36c452c2c3f9e44677affad7f24a62047785b30e0344157c492f65befd462fd19f4afdfc2bd25bb2e2ecbe8d4194141e9ceceb3609874c0647e587e8f7d04faeadca7a0fc682cac2a1a2774151c1a866c40d857d79cdb6ae811de4d8f6096f663d1c2828d7d674fa1108403480165002f2303c569641d26e0c82ebdd8bbbc89e2a49f5aa30bdc2a2b6c87aab5ad6dc1ee6b33a520884323a82251e8f6ff74677aceb432027062cad8a40eac8af0d4d8c354233cde18445f94eb23f890ff006850384c03b125278bb6c596261c3ac7874a618c496a56d7e8c8a46ee260cee0f82a225e5a80db233ce5996478a157e70953d41084475c583248d5a8ee13d3883fc8d5b795ed5353071ff803a1c902cb2f4cdee9764c5f6c1da612b938055033499408e21173273065c641dee767e5e5969bc9df7b38d158f07df76eb384761f8a3a09cd89156f8245e82dc5c89c7bf7079983a8862ad199a66457962e15a38a00f7a20f8dad929bc40e9fd931b08302cf17e59655a61f67a14709f6c1aa36639a6de8dc6a929f1bf3afdb1544d48da2564d91c716aa9919ac9a33c61c4baf9cd35fd031578b037c265a164a2cd0129aded271ab56fc5d05e3ee958213338909afe775b317ad582465dde477a03cdc3a87cdf870f1dcb90d87744263811f81e3f67f55896fb2f4716b0b40aed49281cfe059112b326564b0527fb914125461d12d70d4e9d637b54536c1a794d2a6901d5ebb803a5cd68d5eaa5ff31e561208cf85dfb406fff0016954c14f445b06efa9a7601fa6f50286d370056773e84c615a405b52c177daecdcf7a3582cc57bb73d94f7c07d2f0ea08162e64c2b1e138e52223b216557715472b9efc43d4083702391fc54a888d4e4abf5886e236cc6ddf0c2e9ba2ae6cc33ba70acf5671b4718e057419ff254685c61defe67b103b8a784e51343d24531e64b207f821ad1996bc3befc6d31a94480f60befba5019220e92ccc2bb1dbd59b2078503d1f97162cbee1cc00847376a51d881a07c190c1efb16d2c728e1eaeee3c16fc12534495d776d500f2e1ed8906fa7a2e9f04975ebabece0dd75f76cbc71df24b581db28d0998020280190cb48d99bf229e3837d6c81a1daccd53ca327ae6eb59e803d362a91b99478711edbc0ef8fb7da6104089210e7111fff8ecad174eb8cfaa2c613306eff1b5b90265cbe109271a3b0c8ecf98cc23aeaa81418046abb869ae002642cfdb6634e28bac6ea8144ea21aa5e369215679788131d2c3bc9a8a668564e338642c35ea51df8e96f291fe251bbe04d0899fcb01c318acda9a2f6792354ea409e19cad7bfbfee357705097eca83593d47d9bcc2910253886c6ec302ee8cf9be42c446a69d522cf3f0b916331d7c9cfdc6e9b09a882b9653cde1d41e89a80f9e640b310e74beabcefaa6aeb4d45111209e3184df1240bfc1ccb35a05cf72ca0cd0b592cfc9c9a83e7c580152b098fa6037ef84834e1400d98c02888337f1497a02fba47d50a2337e9f88c4d5f0f879592d96455ad6c8e26a4440cd5967cf7359b66d0d881e610f72efd741686b93f7129d9fb3fdf1d638772273a121be38c547d67bb03048a30cfa56971a399e19fd6aed2cbcd57637423ab2db5cbe203551b27a6d677028fd6819d85c2fbae479e8c3beac0dea4db204a8fa2071551d39e639b636c7fe451bea053c37dd7c4142e1a807a3c306de24dbadfbd40ff39c4aa7a4e008416f57aaad48b2256c3c8c1a20a5b4060f47f3874ff6601607f0249e6423e2bd9ce14e5a1034c20d745b5e1c7ac6fe49a66c1d1b1f2e9e7856d99b94053d696ed6e3595206b932267246010755d03c7c5c1f065bc9f7ffba9a0f9905a388fa54ea8b0c76c19087a1fc77617203f9ac9674e10fc446e12a6fad6d8420d189459c39c988985f42966c88ad4ca4ca263acafcd17ab62a00393e62010a4dd23755792c15b3512f64a9909a83efaa9899adc1a229d067b28bda551624c69aaf951ba11068b38031da1ae273650e7577f08c2ade3c2e87f1027d252c302b4c2a3a9e682cadccc1ca89714780a252b306b1f9b4af09608393520931f054bf09afdcbf478f61f9204f2a43b1e8052d68de5f8f399edd0e2cf04456bdd23f338f739b48611b8147fdc4049d959a8999ba777c2ecee7cf87446522748c85a8ff218639e88b6f1d31a26d0124dac7b4c6614a55abd173102d289c9cee4a3847adcb0be40fe5be7f77d72f1b10c878066cf7a285c92850098737702d04414f60b095fc4561c986b233e257ae79a3271d56f97eeecb5a13e398cbef0baf9c29ab71082ff72f31cbf83c154406b738173901be6b434ebd9bb5adacb9797a91ba4e3e208e3fe568f03ddf33b2fd28f93a846ab01dabc32bd06754c5b81a5f3a73790733c690d19063a0cfd1344dffeb6de7b926580bdb2106700e6cc8ac9e61fe7f35d745a98736d5b648754452358502c0f363375aebadd8e028610743efdce92226bb38700f369714d5811edce489380c2394c62c4671e3c144fe200bb8c17035be8407fa47198aa0263d3ac1ac6216a54ec3374ea7efa990018ac319ae120b5bcfb796895d416af3ae8cfd35e371a73cd32696d13449fd235235009795c817f5b6431416b4e9cfcd943729fcdf81e3208f2e22073f22d470bc11525390510813e1ac1c1af26496d37ebfd5c312335e4d34f54b4a643dc799fbe44ed045e5806f9597a99567972a449e2d5e7a9ef3d3188116a11af6129b016129abfac0a5ff75d94a3036684f8aad0f847507c5c62543da6771139a21679b7e4ad3d6566755d24aeda01706910af6cc39316fd6754f7f7afc96204c1283dd039b5cb86a00368249d11e1098b5f75a69d1e7933d080c24ec7065a7641be94c703239e77ce18ee099fed840578efa8ea2fd07e8314a5410309bd1163cd5b94858cdfeb5beaa0ca568f1de223fa3c208df31c5d1cc7f53c950c772938e52c2af94151a655f51c686b69fc8bb1fdc9971ad1cd7359acf6f55f3835b4dcf1b29a8d84937e3f8b4710eaa48d95b27e0b6fd7838f26721961c096374c4ac1221f3e0d1e0cadd3dcbf49a306f1d1d712eb1de840115dc0dff87a8054ccd965ff005cceed0e03bd2ef6697c198d47c58a3a940ff64f173056a370751a9f22700475d3f83a25224012682b09b0b55a56cc7a39117d483152e51577309bcf90e58a6e434ac6334ee4164cbebf36be042ac3472150a9a19c9b761bbbfbc151c8443796132caceb3cb170dfcc5f507fd4e2e43005cf1c0c85b48b0c3ad1daa37291758a0a2685d38952ef6c6b01b3179a94ebe3517fa8eb50c1a1f4e21f4a39b7bbadc343ab02f729ab3eb4b4ca4aab02741b225bad0aeb556e199e39953eb4d3e084ba04baa9aa56e4a96c2d44484e2b39396080c952ad413e528708c30a3a782ab6ce54990bceb7924a4d7c1c55cdf3c751ef1815d25f7485f3bc2f004936aa95dd75f326665421b8f8bb256f6b8d7e94ea8a8ccaef31719a4ab61614b4d9550a8b073ee9249fd3690c02aacbc03b481f8d9075992c3f73c34044373234a0768c3c3582324a8191e81fe821ded4f2c6eaaddd5481cf5caa33dfc9923dc430d2b87d6e541163e209e24cbd2aa19433681ea3fc40537e5b7d301339260d18ec928d7dcf751ec89f0e1ee47813ab89195147db13e69b9bf3655d8ca02f2adda4e6301effc01cdadc5366e128a24cc5e512f38457971e2277bf89df9a9281a51783ede89de34e0df83d89ef0bb62f0e184d5c2a517e5a5bbab88a3cb1743730a25e9ac1cdade98688e22cae7fc814b875199c89814a86d2181f568f1567cc4c732f3722f9a362ce211149496f7fe9dba85562c7f536a2bb31468d6aa69a509630677928c5dea2747b60cf76b0e5eadb020bef32291742fec919de825ede3241937abeab1af8cc34a2c466081c5deb90f04cb9287edd7d9769261349a7f426a335f506b5e779a7db11298d5025331efebb5c7dcf2dddbccd612cfd4e449bba56c4549951e1780ebc269ffc7c9913d287a4d3db1146f20d35fb4acb391c33ebd38e7c43167b69024de8b233ce9b7976cea3af8c36254f3ab207c2ebb8832d508fc877fd7424b61b2fbbaafea17cb6498cb5eabb3027250820bd57215808e060896d325a98132b4d3083cc595f2574fa18580b5bd62e6486f6ea0fb1ac6505127f8662f8c57781ebafba088d6f7306db37f3a113eb9d53ec1bc20ec79f21e644cd817ea4e455940833f2c2679d05a2cc9f7ccfd8fdbcd8e8e3c0a77fe5ca122f771a17d2be24ffeb029c8a82ac1cacc9fb05d1ead31321913f3c822ef3a1358be63ce1f7660f486616d7b73ee00b0c2298942f920e933383b199c84a33fd6f4a3122269d273151c147762b09ae660286fe461772da17909dffc2ea27fc2a5a80450379e22d2a0ee61a682b00077694d751a101f386d0803e5e335469c040622911ae95b1de666507991ed89ae5fbf86ff5bc719a82a8896b71345c1fd8e247e889509a6e4770554a316ec2823687506cc4fe956a599031d07177aa85c8025a37a31d2e9a2562507970dc8ecfdab9ad340d355ab2bf6d1d47d296d206518e26fd373be65e71fdd97549e0b32d70c515645e295565c4bbbcf29162f4f03d1b455e7b43ef3d40e395016ec9488af8033cf3800a805a2f86571b0648b0e7ccd0684986a03fe06f71ef0413807ef349689031415fbdf2881664c8e297c7cc903bb877dba7488ec4401e62fa3138a76035d94996df7e61981437e39616198154c28b624e5bf9f4891df153e5226f7857091386c1d62458d28675973061186c4d82256d5877096343f0e188a12d3879c55fcf8f490c340dfc82ee249ae05dbe985d52847ead489d772bdd2f54a3a5ea97bf336262c256435aa1690c4ba314799d043e012c5821599288dd27f127a2fe5dd49b01a252f40eda1b662f0c7cf1cb48440da497f660e38dc64be8b65c9c9f0aa2433740726bcaa9cd91a6fd0f102eb0fd26c19c3698190faeeb00a384a17c4c3170005fdf5c309fb440356bd45ec07281327f741f7fb21ffbb43ffb6f15867982014bdd0b8d50d5a3f24c7c0c2b2d33bed3ca9a898f71a533c5775a5199f23dae50e6facc959269be6365cba4cfb14233ef3bac6899f99e5668e67cc6959d191fd30a65cee7b85299eb3357944cf91e2b2d537dc7ca9aa9ef618565ce775a4133f11d5774667c4f2b94693ee3caca2c7dcc44fb1ab3106fe74f5bf10e6535d6c4f7cd47ba1e76582046384eee60d819234253a1a53fb373a98033ff2cc2faebded150698b4b397a54906d24929fb457db5be16ed3f21e5802cfa1a8b48e206110c72b43b748434a8cbc35904dec4a6497e547ed42b46ea80148673afdcfcd06ec6f672bfb3d720e880326b4219232f90c2cd7c154547a9d29793edbded1545cf6b2b7b8e577c416f7f99a2317a54e02bbb7dd2a14e0d4a42a3751cbad3978375dd1ce9f03ec45691fe9817b2c11e6f0974331e85e3280d103c80a1ef3a1f83415ff570812ac1069b4badf3f468b2a5224a5f6c6e0503871e109d05799d04819da03ae866ef180bb25a34e49b9e040233f7caa8b1ad31c2a45555b299011a3a5759ab8c5d550d9d9cb78ee899b3671a2986b4f0e012823bbf263691eaf6d454c9cb14b9da83c3c9807468d19a0bfa4187e5e1fb88610f6fe7195696a49c4a405114bff19cb917e0af62fe01314d96ac8aa7589e833ee38ff2747c4c33d96839506d1976ab21f1c0d334c264faac01d36738eb3aee84db88d4800389b5846620599d3f233050d288d0d8138f86c6f3199630d268d1d512d43b5436e412a6a4100236aa8a12523d625560bfff7bf89517427f4beef27f2de3781f7db84be67135674327a057def035f43b7a22ff4a6e8e6f708746d608d5b352aa05380cb479928a10c83e37e73a26d6d8736b4f44abb1aff4f04c41f3ac4781383e1adfdbcaa11c0619ae95949e3ef4600a51dc893edbb0738f4017979541fb95bb110d346d3d89a8f5ffca98dd3a4e78066026aab2124aa37a4627c3b55606133a09c3e03f8a36112cddf12dc24c5c310b5c1f336f1357181680df5d5a7bffdf841ebd58fc1e766ea10e5747b8f9153513a114c834d4f01e8c8785ffe573e60871c31bde550f3293f5724d82913262ac6685ddf7aff8474ae8667be74f7539e24b4b1ea3fe7e788e4362af23be5d43a81f79a982c35e9c244a266e0414820597dafe6b5daa0045b1502c7d193fe0148a9947ff8404a99c94389e5287351133e86a84462c8eb341c853b0a2b81cd192e6724b6cd035ef8ca49bd687fb0bac2336a2041f90ec49964fcfdb17d92ad5d2fa865ae9442ab1c15a0526c03ef4be36c0114527bd16074d30791b4daa8ef997e1ee8a02d1c2771779524386f6679eb79aeed3b18125f6ddb8935cad059a2944fbb7cff01621aa074306d7b8789fba66f464602d4886be51b56c1a00c7e8d5fc898e46922f26eb729c32070f0f889a967e22d7606c2a724a02584305fc6340cbc58e3958719e8b33a10d645403276ad13105e26616fe5bb249300c1597108b4fd798bcb0b87d7891a5ad076fc773173d46ca53a0caaa441758a4e41be342712d75a33d2add9b7135ffb9892068fc890c9d3543dcda107eb7011eaf31f6c4c0dd9f91e3f49e9c17f0998693f36d3b01bc8860f032a8e90791da72172ba9348084a2bd02e4546e43a8beb7cc83db62581120ad42f38763e262f179485e70cf17f4ab58fcdba079d68507dc882556acd067c9b25b7c1b091077a1ff159634730cea895e13fe302bb0eeb16d45d586fb57d1b2686d8369ac0155e1c8575e00f6326fe5df720af357a968c72caac8abd8f97587c74ca0a6a39288a80800fb66845e19a19522c962e182b0d51a0895eeb861794c1a71c2f55426ca48b5b46bbf11d575f06c56ec95c9d8d3a4706e4ca0e0504505b25100fc42d4b842fd5ce949288a17159250b8ed2be11cc51989bf44c4d62b444cd93f9741c5b9c18a166770709e62b081a5ad4cdb74c376a02c778ca33532b31947172464fad1261428ac3687846609d763b806f67d3a716bad6d36212990b88048a4b03c146a604183f42d1865b41ad6a7542015e67e73a6610c69a637fc8bec752273a60beacebd3c15cfd145dfce5a27fd1de07eb5646787f46ed1290d64bbf1798aad52b60b7f43072701f23b92a7fdce5bdc1cc25dbf558651cd65b16012078c0672190e323ab358da14d0875429fe9b0c5f22d3c9ef91c61291e5f7267fd448940138e6b11a4df5b876570af306bcd90419b547ec980cbc79d33bfd6d9825d23595b08209b70582874c55ee92db19c03f0b942b8cb52b3bac519c86bd9704fa7c03a1eac18879d4397b6cbe5496e5d86c0de38e5ec8ea630ca75fd77a8a9672d427b7c6232572ebd5547423d8c15224dfab88fecb777e68193aa668037249517b1f5717a225e6c653713130c10d6fa969aee272a39836d91e561c566679200a65f33613df32863f089133adb101c16d9b0e60efd4663f56bced20a2611a1ab0ae4550fcf960415e857bbf17fc96294d2b8b2f87569967a4a451860408c9206166d1a70ba2603d1f476c50ad99e5bd4b4273fcdfa2975be364b3097c7cadca0ae85dd43a5d85b1ccd9b8c098a0a1770b611355d9cb3e54ab1f84528d480696ec35531564ba57dae175ad5ff01179018d827191d2d2349df9c823b472dfb0664d4608f3a71cd9c10dfe73b6aa2b8b94212cb9dab16808985c6765c37de5a2efa456f0e134dfbc7cf02d4c909ea118ac65bb3b11f5a99bdd20b3f06570dafdbe02b3f03125542140611d0451c46252a0747240804c2ab9c169b027fd5a5a2d6044c6f5be9f970d6643182af2498326e81d509492778591ad56cd8b4a9d9c7c5ee1147f353a0a618e29e7744de3127c2dfffad3ac16c36b57e12911d6d4ab713ef1a2a270a5b130d9c2222070eff210f10342c34f4aac3de93e2054b50fa792e6c97bf61268f31b0728d81e1c3d05868afcc4288b0d5cae87bd78e6936364a12dd963e52866142bb1415a8089161e25c49ec34b342dee68bf683248c49f311111383eb122b360ad7686a409309feb0c00b5e6fa3483e800ade2a5424bbc0457e6f4349bec026a1b35124dd4025afeb1bbc547b94f463e97485461fbe209bb2aa95c1e5c354210f69fac6a0c122848641c42c138ed96f267fad5d938060fd107b7f6e3bfd810dd4e490bf783f9261d05279786822b4ac074f497c50cb0401beaee2705a44fb38905844392cf0fdd62e37e204a7a0341cb3fb3898c7db0538bd132c488a8430ad07e436410dbe7f934436830dce1d4a46b64126bebf9156520f0c26b849203433becbad9c55600e16a490280b516161c886e3800c59bd9f12ec94c79ef32b408190c7327c7e126c6e9c68457ba8301a6c5c5e6e9352ccb57884c9b76c3707f51d786b964d072e220ca9b3ff8d8fd7792515655002c03096b31054269a7accc135074a0de3ec3c4c4e08055995fae0d2ebab65c39b6c051288b9749dafa7613c9d570cc971bba0ecd878a2b33bff3ee40449207250cd103916b8881cf71d385a303dff8e784900633aae73642ff06a6aa42ed8e8e36b3281e3a66a0e523484673883c08463876013bcb9a035305e97ebdcbe2306a9a2205a192d5ca04e8ed9e67b81b5d6a2c0f18aba9914a08c028aa8652b72da1ee89bda1c101750b645e82ac72176b6e5f542138ad05b1341d27c8cee7abd2605dea81755d24e2be1a962329f8904cc2cfab57aeb39abced7693846afb513ce7fb6299840db8a46a16d278e981e6d332a236d3380e98eca03bec471e3420b5f2251b565faff8820b152c32a16a42da478ceda4675f610457ea9382814991736aedc7f47e84c56bc2a0dbbed5751cc9a020594a344d529e9559d5c48d52b08a66da5d957709a8958dca0302ab189546adec77e85926c6c82d7d7940381e6e7ef12c813132d2d659a6c3cb0e120e4872689dfd7a649cb88f46af93fcd14b2f6aef2d5cad0a1c7207e6d7a7ed948523218ac7742bb2f3737210cdbe33668932711d823f3a8dfb8f955702298c20c15af61ee85fb1ab9529a359b91e56c73c31fba4c2bcb245c194beb647b0bdeb4c43ef95337818b836d8e399b0b24d4d7bacea1c407d22585594b3208b65f5a25c38afe97d89c04c44ac18fb49fcb3ec46fea0cd8e84c96a9fddabeda7773381792744a51e717f63df7696ca54c7569d1addfe16cca1069103b1d9a1df901e596dc08bbb5825110a5ed843db7fb3dbfefebc8ccfe14481de1f087550bcb7a463ac43b42d1e4f67972a2e3c502f631b6362a8158735c7e05b6fe5124edf6a15ab7d134b128ed4867cdb7885cd4002744de133c7dcf877a572f711b1a900a2bcc894a8fd6987055cfea7f2931fd5d8cf14c91d15fcccf6ffa05e9b3b50c2fef22f7dfef84899594d683601a75ed2b71c1386998bdce32e25d9a04721088e4cdbe4c68d2f68c76e7cdbc9882976e2cd7b60d2844269dc20be6abea21cf0e8f917fb8003d3ede5358afbb97d7d263af74f6910d788e49bdb8cae0987e3a4044ac7a3d93ecfe4a5e3c116fb3e4c6251c047ea570425b5268c85152fb28c05e854e7ca88b97c9b0dfb8204967012471c0e6f1f505905d8b90fae98f8360d335debf7d86b95bd18f1299c81cb9d2c41971125bb21fe7b2848441ed50e8d2f1572f46d0c540588d255b5be9c1850a514004a75295a0c738bdbd3b6f3e4267283947c0db43b54731efcde7f6ce8c30dfe8f8c4207579837f97483cfbb10bf5ca204051b5232c5fc105b25f4a46dc17a72204de799b5b598f14966a222f8fcfd025e1b0948839315a4cca0831cde219d5bb4b42669fa8a44dbf12b3f52b4b26d9a043d614bc4e113c1f44e2e0cb74b2e91e3334c3f22afa67896542ca218f675361ca060ccea5085c28c19d8496a295e0665031a624f438dc69e41a97318e16febdd8ce4d4af9456710d7b8f235f996820aaee27e7878881a106805817ac9eae1458c405d729a91ca2f2ec9852282805a86280e061f78ff5aae314a79a00ef41d1e4ecfa8ccc5a6155567830dd9c9dba3d2fdfa00c77eba2a01c824154dc0848f27064f9d6b89d24a33c82e3484c78bda6c9888c242b225ae78b7d76e8fa5699c56e3518537a3d199ed6668a5bc298e6c00cb06cdca56f12e75c9a01ad16495281f52638381a7e432604a20f0542d247462fa824988d747cbb9064398055eb4d7b13117a6cc7341a4fe956ff04d3f3db97d2b32d6ef3f4c738af5fbc9ea760864dfb1025105a47ed820986ee6fd81e39ba9184c34e4460fd07b66ddd0d176c18c85b42df0f33235df353aa4b51ce9c6503aff1f98a4c8ed2903fbf30d6b48f98b75ce1163bdec6d6737ea100309654dc1bf9bf312718b288a5a79d92735aad5d0165973746bc2a8ce57eb2cd1444c278a7ecea2fe6736f4a58f48e6f4ce540ebb6f833c5e507d118e05bd3e7353a1979d38787e0d93432e78b7c796bd09000aa0ac739c22e7fb09ceb20bed6e0e60cfb3c21da2268a77d55350e7ed2e67f3d846102da91bd941fd29595fcfb04a0d558089634dcf046ff36740065b3a1fab5a64772eb219e1f6999d26e44688ee8d3daa7d196fe9eb858a50795807e034521ac7c683e5d7adb2b802ca52d2e9047c5a16bcd336f71496c3bbefe9353467c491d2047d1fcb43ec5398a5e0049f7b882ca3bf6e08fb6ac85edf1015dace78179e732969d7c20759fc0102b280d223f139693c8eb4af41912cfabf7530d71029db032694ea58763da433852d11ddd616c7dfacbb87f564eca6279674ba2d3f8662174da1f86da31b6af8e87638a33779425b5b478b59b07434c891ffa094ff65622aeee8f4fc7dcfcb888858a4339ce8343594f55228a1b7e124049758ab8ea579eb5c5e46c4decbcd7da3e793d6ff267b76e5ac904db28cf1bb31614df57e2c361ebf7a5ace14fc0710c2a9dac1d4da411e717961568ab2bb02248723d6934101be50f0f4c83e3c7283b324c354ba475bff3e7258e181e85be0fecd8b9218f093c7c46f7551fa684c03f961b1394732a2f0b4a25f0df035ac5a8a3c25a9a1d7149b48c8417356d33e6aede7d24bbd92f544faad3be0dc57d5b1ffb4fc5d4b0440ef89f9d390844b244ecbdb1d9f6b02387c54e06cc494bfec9b39be3f19ec47d759c9fc649b65fec77ba6fa7293a0a314ec8620babea06637bbc5422ffcc6fb2956b8105cbd629868be2b36a1d7432cdd3f40e9f1e6c365a8a375ff01b2c2958e56eb0650b06422b8fd5a2cdc016a690ba108703e0c8fd9b44efc3a5143351d84de62c8375038651116b200c065f9289634acedffde10a0d7f6d94f36ce79c8245a9e47d1f769da4ad7d3435359e0921cf7c699952acf92607073b020a7518c31b276c8564b001cc85685ded31de87f1ad064776fcb1e57d0c7b0126c820967f6fc581f7192e369b0d0562768f93a8fcce1fccda1062efab17b49da186de14ec2e83aa4307d70e5393d561e9948e14ce74de930aa797187d9006926b1e6b606cd128b3c46297479eda95c66cef58f7eebb364efab700a62d8788f9cb0bec64912f98718cf06ddd01be9e4c7fffff335e79d4b1a860ca7028a218d3d67727984fe9f5fc92f3e54b9ac08adeea816746a1cd0015399c2da181c27203e0cf441ee2d8f489495a78ec205b1072e2c9ffe2b5713cd18d2b33c249d41d75ae616bdab14418b2b5833dff1c631cb2b46c772e2061ef7f65acdd4f82746fb7a80466aa4ccbd6cb49ea83e05e8614e94c9662b0c8a700320a66daa805d27750a3cac47823034500dda8d49142c273b02acc8378a494cc411407b70ddc2d915ea6a8ee7ebb177fc9186d67a379ba3512b0c5ca42181cb45e68056748312a61b0b8f7f337fa2cc409a0ae8997f04ff43016e1c495846c76640f403e58f7157caa0c5f5918daa13c4643c0c6ac08a666cd7ee41eed4bb15fb8b78191b2f388b8864d166c621504dbdabd8b6196bbd45656be44b000438e38b7ce8becd4f01f9bb735bc00bc3597ef42e20b2e2279af04fcade23264e94459430bfb8d491da9c230cb3d43fd9b8a0c225c5ff8649bf4b9d2b036a33e2608a39db91f9758c4dc739b38b99a70fa7248c45f08fc61b7e756ca82063e8b614dd3dd3b69285e785e1c3d97ca312c6f6783bc7bf84c0ed59433a0977a56d7dc953f962ac8c080b62cffd14f26d00d8c3db65748969850c7a999b2bee23f173d5b2b8849be689161bb024106ab867dcc0e3e608a803bd16a3fda5d5390b5cf2f5709d375eff7ed64d1eb1774d6450cb3e85767d3b4500e7c78620d5d6a4c75eb593f9935a920ec005d41fcfef463df989c46b85bf3cd8553eaafe70c69da35e3f88c6cc5853d7565d5f63bf055ffcff812a96a5ecbaf632bfd5028a992848792d6f1e55e38950c284d05a014580e1fb0f3ab652d56da597458de8045aba452f2a48162459cd34fb4823b8d2d181af4addddf98299dffc1870522c4d795dd1eafddb09b1f466e704ac26659e6a33f8a0a6b69a64fd1a2eb4b06d0df67a5070caa6e96878ca430a81c636cbc80ba55bff1b1837e0b9883ae42365ab69c03313cac363699e692285f1c3378610bb43a7b4c7c7b3de0c3b0f5e6412532dbee37e1ca63d3e5ec36bd0397836a92130fb9661a2370e3f31f865080d1fd08d20d4092e520bd87e426afbabd19d5b6954a32a4c7929b1db6cd1b9fc15ac035c90fda0fda756f9f23999e4294c3563891fc1d823720135dfd556ad9850216876f6144f59d6589178b8ef6625921a4b61ecf8f01dfa377a343d00467ac3f3de9aebbd2daf02b0e205d42bb07a08664e3827d544fc62de9bc00f663725d817fb6c5aff2b0772822e941f8c93076fef7c652965e86139f12ec7ca891c96ca0915c57df5a86809d07a6356edbea946860df2f3504da00556fa142bde5a88ceef22d48ce8b94e7417f1bfdc1babbe9aedd0e3124d97c52558946bdfcb7bad7a15a4f934844de369dcf8182ba494d6045bd92f77db8e4a766d76af8ecaaa7bc1099473761adca922b46ae43b7ade2fe53c2c144d2fddcdad6573cfb83b6b94bc9540db268ebb539af91d376f7d63945f2177ab5444e6a2252bbbdce5fed64b697f6119494f13055724f47c0889d5e3642d92d481ece0547ccce5606f0a69c9b71ce0fa6381c44e76f600e69d5c65c1dedca9cdfdcd5a6e09c1edf5f254b0c7506833e7d658a7891e2ead8e5b33841178a2e8686986e26a752e0b84b104ba0e6efceaf5234685ec5e025d930a4441fb7a29ddd04ff025dcccf6293544c6bbb575c0ab04464f4122015aef92113918ef0211e4ae10412e8ef951b5fa4dcfc3d08471e21d983a0e7982bb4d4d7232497831028d84db187ad6fa7635ea3f7129ad1664fdb910c472eceec66e323891c08e263c1a89c58dd5aeed591a7eb5c00b1c550c7fb074dea42686253c8a97ca225842fbaa62a811410f94a6932d6b7b017689c64f9d88fd9fc5a6ba375e042a6024126a9e88ec9fb2e24a54215575124bb70cb154e776b5edd4f19745ef3d52b98ac0b9b6efc69892ec6e1483552f034e8757afdd27a0788091f1119bcae364cfbe83187b1d263c787d5db243fe735db4ece2044dbcc5e59b2c8aaa0bb4528979d6fb45da150f162e1562a750ab8d1f174936172d8737347fe7bb8e1a166ced9274207917099a9f48df1b78c386dc8ac2fe680151fd0e8b135db2103bc207d89d82831d60873bc910c89e2748d9599c7f5263c67e7fca18a83dfad1b127712eae340b8e9d42c828dec0e613b4826878447457d97766a9363c78887ce304f2c3e68d3b88827fb89080d6aa60fff3dd637367ccff2983f16b2c9cac13fa040b66395c71ef425ec242640580ad0e409724c75d3f8a97a8833c168afd2cd6f6c9998dd314775da47d4161be7f1b06a639507038509c00a041cac8d9ae627d66b020ff1d1c336407864e4f26468142348c4ba4853d34ef176a47a88f4d5cd83729dcfa04fe034403815d50e1c51518bfb9127d5bffd23139932fe881ebe405ea82afa689e85307b4be16d72510be9ec04f771c747fb406d75380ad74554081cc21350dbe0a711bd86cc1eaa5d628e5b76c5e349192e0a6392fedf8f5859863ba2b57749f3b25ed38844ff4ed429939907564d0efc9f7f97325d08922712db5b907fa217b5e01118f38633af2ec33b0f7eb6c467791d9ab7023c3606208372e13dcc151f7ad18d6a044693f6074e5f681bd82c6950596196c73680a71cdb0ccca074b8f9695bfb20181b272bb1c1e2ba2046905790c819ba8ef3f412388a9a474d63310aef3718b15925503aae3c578039230d24896b5814e24d5ba33fef8b39a9818483d0433e7a740f557741a3e076462794b9b0fc8515bb2cb9162deff522dc40160116075e0c7a78737c311a292e017c2914d7a79c660b05106f42f70914a5083ba7638c29ac45757b54e52bf76810734cf24c26907e5c000f75d70a0744ab3381832ba0ec6251da9b692a535c53ee71dc77f76e67cf486b77c4abf0626a5e88d42c9a1827a832bd614278df008596f504fa751d348fdd106930d44d03f9b36518019472b5738676adb146f06e5c6022b77868a528d634b91824919506fc812141d1b31692ea03042ca3591abd6800d045d193c015d2230e4167c6f104ccf96c96ca6773518250ba9946d5370d700c293303a35edd1d265965bd3b1ef0a73eae07c2706f4e908d677994b400e113ed949b9dee6d016211eff005844a3a538e3312475dbdd5568247ac75f84d24f0f880991ad934ee5bba8c04ba93c391156309216e99a7fbaa80b1216e99099ea1ded2333d9c91c7e37b639a590dbf1fff3bed5edc33da327ac5449e93e785455197d22501234eb799b91cce0607423689b93dfecc78574ebcf21fc19e42af11e0912a106263a330ce1fa9a1641dcec5296ba7b74ceb2e857ee446dde4573ea731d68fead406914b3201f68985fd678c5b7b60037f6ac7223f0cbe3824b60f8654d20a1ab627038adaf2ac7e956ac9557b686e9f3b3dd6c5057b728a40e108890a7a05c9cb0ddb2211f6b7b56a5a83c18f6d3f4a4d73f43ac467ff25f82547d7e1de5fe160e3da24bd77354bfde4d874357a8d6bee6268a624c4cfa595574d490c6fd84a95423201980a29ab8c54c2c1323b15251cf5f9d5baa85f90fac25a5647017d26b55e103498c0d9429c8ba058c15ba2bdf67dfdf41015e06541719885e8ec37e2b71c478a8b442fac319377a9df4c6b7fc6de4933f0dd147b49b123741da05474d33b683b988cb60887bb32d1c149f57141786e8fe076849979e4693cd26a4c8538b0280cec790d806c44464b78b359ad18c4ab651b0345f0d3716732dfe56efbc05ccd4c270ea205b3d3aec3f1375326be4610bc15b008c89250c51af8ca323f315999d5582bcf105a6cd89139a68b4ba096a50275681edae1fb2ec894b0228ad38a97da80b139e9e3a494c0c5e1adc869417c54a71a85ec714ca59ad8932e45b3bf49996d69ee760212d80b6b64b5113f5a4b60f2d096d9bcd3c4f1651e80c2cfd959ef985ba1f585353aba30c36b39f292cfbe00e4c0acc612311a145f08993f052e617fab78866e206cebdbb131dab19cfdeed1c74df9598fea45d7953e555d02e229ea162079e11ab1f5088423a71de411d86f1b09d37150bc943073088e7c12ad166f13fe7517109d6ce345446a4d06adae6b2fe4da5ed14ad798548b90720ecb657920d22c129ccdb1ab48e8130230511644c551f5645014152866291b4cf698a8b2061f74bc353a661c682e03abb59187f589f9e5ae172946806fb0b167abe32783090392edff0f3ad8a0d4a5dd59581557df298446cdc0aa04a58e16e8c309c6619dffe070c4e38a692377e5fb8a2a36b80ed17d4dcb4ce1412fe339ac102d0de07b4db88c770ab9b908e5ca49f2c3e4e259801b774d0684598fbf87d11d8a12f13e1b81f42870b21662651337baef0eb96a106fbcff5c5a0c11d8f2c9bb0c65af87314dff0cbe7fc63fa398b1d6a31faf449c84dea2074d973d5d10fbcc20bda958f3699d902aa28a690bc57cb16fd590a44ffc5bceb9cb96db97e66abc2af6fb64b226f1b10451593c3189a272e3a900407744fb75938cf472fa8e86786c28f798f166f1f4fef18b6bb4af7a8a8dc8d5237ac5fa452d32d083778c0920511dbac8119304e2c4557ab1e914e0938c59012d16be3852dab37c563ef1a2e87634ccfd4fa0f8ed49f11de3a1fecb90f337b339f3111c9e4f01dafd521f3c084275047c17adc37220638023efcb95902740f119d5b94520d33d29b728582fe70425dcefd0141e01ef1d9c23c47ca8cf7c73d63986ec872a6b54b81e7db84aeb187809de2551b6b2966d9ca8bfa92faab7e0f44b473ef5a8887dbde3911f7b4f6daeed2c75b11a3ca6be71c1d2d87231bfdcc8696c4fd8986b9a3d4d5d6906a40127a9d771cbaa3a0a044273e64435d025b5fa102eb129febd62e2196c0f6875123842b661af267a678148f113ed328ca4d5b51e26b5dad59f57bdc5097a92fa84058f5b40c9fd5ba771f12c09636686b87f7012a52066b9523bcb7dc6d68930f7404865b146cd7acfa84fcd79ae892ccbe5bc9679c5d2a854b8eb9c951ff157aa9550329962fa90fa0bb042bf986600dc85f5b40e421a4cf7643ebf8910f26c5f112e5f24769aae7ba759f45955ee9af4d536ce3903122b5856be9bd88d9549dc18f24b6181c8bff0240d5596adbc851f2d72c6639b494f541ec243809e94425769ddb70a1e61fad9493022ad483dda5532c34594ad68760d56775b2d58e8faa8e8ce338eda3b3715011511c121d580b4b64771ebff497b25b74a4ef6b6164054c8f22a87489b6a8e16ee24b2cfd401a29f4615b81695d2dcff19286c5264c98d56e43d0b4abc9e1a564d9d09989ce651b17bd3c534fc1283c687b6f324590a89e6f869078477e6069133ba27f4f88a08d50911d40fbb9311104f37eb38157e33cb4fa14c82fbf418705ab9b08fd74e789ff5047a9ce8c935c8b53d08234f5f53ce6355180240bde690c592bf92408c1bd3ae9c46b225019de74a8ba23f3fc4fdfa3e7121bb05e45cb22f394bd2d76ea9890ed0590a0a4377bab4a6c825b9eb32ca0e45ed7f0c79970b74b45b4cb422618f08a2152909ab36328f15393499964863b63ace9282a8c38dd07d99852eff29583ddfd7391d9a0d695d8d556e5a44a9a4f172c512ab9d151619472a5b41fdaf3b1044e966c57b94d0c881855089d31efd231b1b290066f839d58327b3d1ba866c4aba4c6cc2dc0f80587835d52d8e37c07010eca497c460b1297460317f080f8d8971d337aff0cb1a8e979c6d61cc2d85d7a94fbdc57bbc590fb7d33ea505850c2f5cb6360952e39f21afe04fbb378949d7c3480ae406322510927587b4e1ebd4085ae9f9f1f9b997d2d7ac19ddf66bbb70a53a89774f727bbd5c2528a4e56061574814d86dbbd38756c7d5bddead3887d3b945d1ff097c2db998f6f234303372e6e5fc95e94bc5ef5e01355812f0ca807a191d8644d53ed68f0f88509c87cc73021adf96e02ea85e4569d5706a4dec1e94511e65802bd00a57aee52efadcd00efa795273caf2549edb909a83448aea17d90ac5692309d8535e81041ebdb23253e3261502bb6a3da82d550bd23db3bfe63bd5dcb1db6305845f3640e86e981ace76fb3f1adf25808c85114eaf03332a30a1b20777ff4ec52749ff23e72dc13964cefb1c4a6107482e79ab8bf1b1d45e7796a39c29791d888f831976b589f7f20c82643e7429b8f2b53a24b51e20537ce82309c50756d55970aae7a5ab3048c0a14dcbaac7e930892e35e9cc9b4a200de2dafdb3a7bc252ab046d9498cc126aa57bd30b626bb890ab87f5eb5cf40bd2155d9651e4f4f619ada8d286ea1c8a4a476df23f5ff477fc8609a81f949c69235985d967843b53405dbee8938061cd640d6f2399b365d0eab60d11d1c923bb15de788ffacb17606065a36a15d707fed15c0a4e941bf01dd4f4f17626764af4a18511f4c86fb3f7caef10a4968804ef0ef2af02589481b0af07f35c144e0a80c5595e12759f02f2e2214f54a4dc877d361b7b381e25ee0c7777e3003db6557c3c551560a19779d6610c97a337648e4995e651a0cea55a3daa647e590f478aa5b6d2590f19a68ebce4bdf7728b85e09a4d6a3d71e5759c0e646f49e477a7c1b9c98fb68095c1dc7ef1f0c4e86335f7195cbc96ded0c075c29d2b6fea8ed5048fa5b91e2a58bec6725eaa2f78de5dc69c747b477bb2b7c4df32717fed60bede66fba16040dc3d45f54cf0143736689e3bfd351916d4ea021a0c22685c4014564d07b1ade6f6b3913a6d72585b1fe5a8545fbe395bf0b39c34462d4199273786a4bf9b050cab6558608552f5ede6192a0c704c24db83207f4d09caa58c490d184be8016b6883d4be11dfdec7fbb112dbdeddb6945bca94640a71066b0646061ecac72a911d8dec684442e9fa8ebcce9644daa8b552b26941c6e925ae94522a29d2a630f23eacab8ac3ca69fd78790098601e0026981797169814c090ce58506879718181f9708ac43c4c0a29b07c8cc2d737c605852f5e988f552c312f2f312f2f28c47c434c0f636af9fac6fbe26262e93e952f856451465ec7d9bc4855a5045ae4f8312553aba49024158ae9b88ac3ca31a580028b4b0a2858eb024a53cb8a4b4c0966c5d4e28253e4e55d6262bcf431ccd7f7a5058655a51793e9c56482f9f80e6179179695952f5e530b4b5732c5bc8c0c9a166c6ac8cad59439c3938d0dcde9746293f56f61d6754d1f51eae9661e8fa78487e3ed782bcfe511f158de0f8edd2c46180588ae3ff30c057fdc7e19638c31d23ccff04dcb4e76fbba10cfc477f7201fcb7515764e4d9337ac94b2f7c34eed6662704af6386ad63de11b6a5ac216611d610ac2fab8fd1e0fb7595e11b75fc29eb0f537e9602873fe6e2c4fa17c5796ceed97304fa180dc23901b2661dd0c081b6e3cddacd60d8cd58d277ef7247a2bb09bf5a9c63c085911b37bc44a893e75f5b93b7d6a21617dd2276f75fb651696862e0c1fb75f0671bb881e2ce3f43992395c7764dcb2b05b6b63f5a9cbb1dc27c9da7a6a0f7733d98323de2e0c9ee9ef9a10693ce99a30f8467b5737f3b741ddcc066d4c04d9b99eeb36cc6b7939dcf674f07044a297b0e879ddd797fb7034ab26677ff8c6e3fbec7677f445f4bb99a7369e6ed6cd3430cee8af9fccc6e3e1c6136e3cb7bfe799cee9940b352ae6e4e0489c274f86866ef8b16ed6cd4a3d312f88cc31c6d87223179590269b1492c84b21893c8f3187b57a12d4271cfa84ce6442417df25ab7df736e7fc5a9ab21594c7247398a205d5297b0fdb2d5351db779b1557282e3d88eaee91a62605964451d9e451c1b6b6d3ca5030643a72218c36c898e07708a031c63588c21d2e8d6f1001d3cd35f12c26a3764980ebe11753dac0d2e7a8dfb0d0b0b808bf2239bcb4336b822092d8eb004932e54fd7343627f7b1494ee3d70be075620bfa36b462cdb1c8d2521ecbc34dc80d1d13d5f1826e8d100c3fc0ebcc104428055ef286d3eab38d01443bfff6472d09f132c22bf88bff46e9476748de3307948b96d8102abaeea7a29a942faa7ebce6d9fdb95e776e4ea722b58c26ecb97948251fd55f4bf5e496a42941bd69e585d4c6aece5496e57254bee137227cee80f6b119cfa23b7ebcb6689af458ea83a7c236f871507b7c3faa3c997a7aacb77220dd91367f483d27ed535238d7a844b0623af51d8ee2d0c38255bf2c35a839bb2515f70bb0a8934a44e9c4104dff45715f00df7fdb6933b8eea648ff38fd48934e49138a3bf7564129ee91f7d5b04ddfe965330ea48a421a5e019bdb3e4f64bd9237f207b76c033fd511e912f1e6c585db7baf8467ed5a943ccdfb6f9a1cb0dab6bda90ff2feb109588aa5387700b86d635bb557575b7ba1d04276eff541f1bb5a702a941aa10ed555dd5f50aaa2ef972bdaaebf57a75d5555d309624449d7f191d1690f13afdbc94506dc657925804d38838e019fe33b2e04616dc09fe8d4d9490b061fc39d23551876ffafacfce750923655fffea124287bce55e59d775ae7bc5b9fe32e6d1b63c5559b6b85af2b123ef86b5f20da7e40fb255afd43c257f34ca5f47c8adb509a79e74fda9100fd7a918d23fca5647c48694c6ba66a86b42ca44cabac69fcec0d0e607dbe373b8ef28caa46b5ce8140e7dd208f05523c09fce3c05f4dd7078e6479f82ac74f5c93f82b2d527ff0e08db1fca160ed18da06cf18c3ff783651afb5ab7e0197f9a8448637b7f2a44b7e01bfab15609eb934b2de6b0eb418068b1eaea3af5e26e1fd2255ca7433845bae7fe4723e97d7dbbeaa9341ae31bebe19bedfde7122b3fa43107f2e4fce2ed38d9aab2551d157f6b79caba3f8dc91deaa415b4edc8b6854a3eb6bb251fdbdb158cea6f0ad4d6f663c1a9a6f9e276135316d1410ac43352580aa483155db7b1e11e628a04d2251694ac4d88880e9441ee13242890e809a65a2927aadfb556cf9f8e2a27ea708a78df45149451c5c177a4a21ec7791c37dabedbaa68bb946a162832c7189925fd3a8ded6d3487427af66ea4b0e86e92e5a98a43746788637ce0a5c5934c0c8ba24d8d1eec73caf7fb068694c96d49856e0fb984f409ce65ddfe16c9f2140a6fba28c4ac98640b4bc9e402c24c7f9597520b8bc9f4e11471799397c31f46e5e397afaf0bcbcb17afe963958a4b4b8b4b4bcb8bcb3764e54d2b259695d2c757a54319bd8c166455d1527adc2e85c04cba8b2758d64f27a51a5793ec7c0655939a36b5296bb5d6643a9d6c6878aa7451ad653a7a0de8d56a7541198df298896445c337add9509b1a3b6a70c1c44a7e1888835848a33386aba0cf286a92c2c8e92d0b9c32e5b0d4e4291b6b138df0c8c19d6fe3b55a4b1b7c9eb9c09d73d2f04dcbd56c0d05fffc53a3da7b39388b19195d1a21d335ad716c87bbbbbbbb9dfd0203bae39e27c037a4e7a700df889efdee8833fcb97b86ed88345c08f2162c1fe92be39e4422b07d04241218794684038a05bf4f8e0282327375b5d1dbe8f90d19813134ca77706c91e83f7acfc56ed1bfe689febdee39c119fc36c83c237af717fcb92fde1dbe8004e0fcdc0efcf834ff55a880cc05be6b4453dbe142a4f1429ce16f4fdc36f914b7539c2ff914e3eff054f782f6feffddf002b7dfbfb8fe320d4a99aee9e1dc73d2413ec098d129cb51ce582c6a3116a343a22da7c58d9a5a3704101e970d6d486f5fd644eadd8854b6ba77772afbd4f22a72a5a5591ac544b2a35701592bb198676363531a916c0a4e11954f5959e19ba2624b2a4f45a53404e55350fa922c8acbe5f2bacf24aad5d3ec142e214342dddd1c63b118775c749b1d47520e2874668c28bf03cff4cb1c78064eac494c886f588c160a28572fbeac0aa58b81d4213845847a61a5cb532cef62011d653b980d69ace674ca72f51bc5ea805493ae18155ac28694659fe6dbf6b6df2837deb36231581783210184b74a7b6d7b8814237d3845529ee48ac552e992faa6a0903e567531e5e3b65625e51b327ad2c8e58ab9627d2dcac8e5727db2d4996c2cd6692a4ba4bbbbbbbbbbbf7467be912e4dd08367f8e7fcb8ceeedb7577cf42b2780606b6ed7b37b28ee2ce79fbcb25b403812628a54bcddddddd3db28080583b4040ac1d2016100b88e56a49979e129b6b7b6d4a3621db4f6f3bb7b724b737256e3ffbe6ea69ed6bbe6ac4c08635ee5604a7e66a736d3a7c135d4bb48adc9eac23b69f4d4e29e66bce49642a2163601d1479376298d231ac127dea3af6b81e36d7c846fff9d278ba66b3e1a3cf7ef37390861bfe9348d7841d18c34ed708993ce1877f2358a34ff3a5031b6e2efaabd55c99bcb933e5c4b1e1f409e76be7f64f1f6f193eb75fdb5c1c6fb1b95e1fd6faa1fdf98a2dd95a994c151c81302ff04cbf14b7572d0b6e20077a2a05dc9468543fa909d1116f4b127b7634263cb3e9f4a9b71d579f7ed8cd556dbcdb10446c3adb103e2eeaefad3697b79a4170a2c7e776cfd6b301d9826c42628fb5f3b5b9469b6bbe6e7f17c437dd163797a7e66b736daef99aaff9aad1a99846c55467a385326189039ccac1284f9d7e8b2d8a50842baea8a28a1b3ebffe4d9b6b7359588c13293fcc62b6cfb1381fee08f783ebe15a1c0fd704e7e284dc7eb6ceb1dc6bb5d664fad3898646e5fdfcd08368684e273034dd8eddb9c3dcdb5da33a9665d7821df02745d5ca5bd40d7508484b75030e1189232d5591f8de87f68a7a05e4588eeada72439fb1a5658b51ac6b3eaec5b1b81e5c0f5c4e8539cc61b069a33991c8bbc16f9dc3b760c8a375edfbe743d6df86fb47df7e317089880dbff38f447a0b862cbbf6579c6059395de31060557b1f0c0c9ee8bde7a1e258b2052602a25ff915b04560bb1cd53d2b31ebb0c8b31285a53d2a3845585e54bae941a4d1755e8ed1b78061bc2390ebcbe22c5f64a13e5bcab37c43565eb4427d3acef0e73e497d52ec4d799f94f712ca479eb0c6edcd867b1fabec473f2376861b33c431503e1ae447dffb5845fac218f80748586bedd73ed9b83d67bf912cb2f8268e646e0419f4f8f05c1f6e87fb810382fb719bebd1836f36fbecdd90d447e4e5884fb2eeee308e351ac1f826dae86e9d6379ca611c8b63b9bb3bcc1de65e3956ca0fa5af0310508b5525ab923419d22f681696b5b13ad62a366ab3e96c8096e460459764b78ee4d64d9b9b3a07325d11411b201b20598180509ae882a60f37e899cd7894a8383b4feaaaba885456fd11793663963d3c524a1e1ed6ba8f07e0997e1678460b35fcd58412b789dcb01a2124ce682a06d3d913be99427682b03e78a0332191865ccd6884ccedce8dce563ce8d081343c1385a5893c3b29a49568e5ade88c3e11896143c94323792411e902c92379240f8db55686c133b409f4090d83c635f3a05910134168765c34b535cb41071c1ae799cd787e66339e9fd9cc53928767c633e3e1e1a9dd6cd6432432c7187d34bb1bb2651dc8a6860d2fa594543a141f791c4a8a945244e2461e0a4e11fb289d9242fafada1d63370a4986612318a3055df99c9bc07bf00c9984a5dfe960e7ff8a1696820eb6ae94cee219f91ad095a398ed57d2274929d568a595564a2905254c02b1a8c086127625cc2550d7b0462c2bb520214876667666d9b367cf6e6f90650b1cd96dfa14bfabc2f2a75861f955f0d2083609998c6f58e8b9fc2946b04d23a399ddfc6e823030cc1b60fcb567d5046160a037a82808e3a00efad5a3e1e1622bfa4a36eb95ac5dbdd33cddd33efd236ba00e8ac9641c28aa5bb571140d8d2ccafa1bb12c0b10db73390052ce2a84dcf8b66b6262ecc697a5bb001a46b803e119322ff6ed50203d4e6e5317c8ae0eba7294e8b2b0c08632b6f29426d364744543e92afc37edac6efb0e0846cf7756767ea8c942d38a169aecf6b31461431993edf0cc680bdb32766b17fb913dad60d2ad6ef1cd037ee4b8bbbbbb97449ca8452d6a51b7b77ff18d78c28715488eaf6344850dbbc5813030dcd03df73c54def350c5d7c1373a3a0a1b76ebf5139da75bedea9d6eb54ffff4ab610dd441ddea99af9ce52d77756b03437e3998a2856551810d4d377e2b5f580bc0a005b19d0e0f19e8c6c8f5fc8e58ee6ecf5024418bcb1e0eeec2f8cf9f2db809ecdf94cb4f0491c5f51859746c0cdcff9d9169c89f9a0906c8ce083e0df567c0e1a334d43067fd7c86730c25a98a0e13b52704c7f408967fc6d8b9a1ffb87edcf87c9fe0c3a1c3e6eac61823235beb6ead5b6a2f67adb2ca2aabd4624efcb1e332b25a6264a5248691a57d731a93462274398a2f58d7f43346d00dfd877fc600baf1fd88c35c090f862eff502124e8f20f0f5070238b6fdc08cfc44781106b4858962596861aecf5277826be1be119f143fbfac9e1c70d232b07e651a294bd596bfc8ed8f99bdd3c1ca7167938b84f1387dff99c9cefe1d03ea6879560d8df4f3d1cfdf5ddd5f98faea9204b10cb23528e2349528c60eb73232a2ccb7ff8a6579e5898087823d8de7b096c2f7a91e859b58130307037c0f46f300deae0be7b56f150f15079fe1385ed1f4fb5184db45633760fcf8ecb519e526182175504a9e2c75674f58886c47092c4e7e715613702dd1874a1e8810e5a2b55186537ce6eac42490f8eac5461afee69c8888f2a6c56b75c2fc1d0a4b91a0c7dc75f9f8bbe2d08fbf7872f6eaf04c1b200b154c736a8bd8d6e5637eb36d801edc36671239835cb7f5c605916659eda3e3ec055db7ced0b59f36bcb4c367c32b0509ff8c7f59f18facf8d1fdf8f4456d7b0111d726efc98d3a91875b811cc6eb7f6d1afb3fba435eb5c09caf01db1dc15c18691c5e3f2d8b9aadd92448b9ad65a47ee2656d3a4d4b4969af6ae813454ed037deb66a2529b2c7d203939b76dab5ba5746ab3f3158cc2c8808dedf27a07f1f12bd53e7938e7043b30e567653694b487f5f74115730aae00b701597f06bce0429fa48d3ef5c732de405d0439b5d81db518298ddac708f61736c628a58c5ab794518ba029266a9152a9c528e3945a0fc7e17ff93eb94c9f5858ee3ded3f38216953aa51ad3b0c1e4dd3a636dfa7d6f1295646451a46c5c8a750862b670f9ae0424c4d9b93ab6514f328b4e1ce60c3956fa3411a987a8c8d4eda5152e7130d419554138194d379869b73fa0824cf1e9962dfd9691d5993520b228367a79f9792b7e1064e82044902128000045ce7ff194e358051fece008a021bb24c861aba4606df74e7856c4dc99a922573887069885782cf332954d850ae248ecbd65c4d9b394f936aa7ae9121bbb0e1e93a1736b4b1d135e10a363556e01b3e02cff945cb2813a3fa653aae2cf9d4610cdd95409b53d3ba52645494394c37aca1ca3bc18e6e854824da4c31d2a47de0006e94120c3b07cd0d71f06ec89e45a0274a35ed65baa6dfebfcd014354d9bdbfca6816adadca6a6cd8d4e1ac3a3019352491b8749c1a62fa693528d6a13c5279e1909d172c89c1fabe6c78caa9d9b6093b5d659e746456b9b1b08e8ac36d0393511d059a5eca20a2654564d566d74dbea56a98c644659952cba1bc1f13b7777777777b736657f37df883cf345e6136852d3a64b9bd2a5f360d830b67e74dc719d2e66f4893e4dc0d0a91a1ae5bf6409132642424343e13f8939f7ef0465e8d36866c3d8d3d335ad848eaee9db9d0db8a879c8234a76f6e4112c901f5f4aa94635c9dd3d1c08d95da3d58ebbf1b7ae86ba893e5037cf0375dbea56ab0d530e3d61dbb6b94d958aade975f0896d60367c6258a8e33638830cb7bbf31d93ce2aa93fb47e4012804ff28c900c0244ce0f4f6457a6a5d39219692df992172ab4726ed8b1911f76863425482602e86214c16880f801c2c76ec0b2111f5eb75e36e28315d70476dff77d20c86244854e464646460515562e1b29019115565861050f473c9d86186461c5bdce0a76a2886206b13ce143caa44c4a19173e902091f2c80aa4ccc58594c588840b578c48b870c5e8c385848b262e2e9ab8a48c0b29eb6236994d9ac4d86436994d9a482352e602245cf8e0c2879cb2e98494f9f0e1437600a6e0b858900e660e4c26b87909c732610a4cc984c5b427b149acb689b8ce1ba158528a4a296605c6d4bdc41c352406cd642f2e1128c222ece50526c604d3f1733128b0a090c28a06450a1df34d499bc2bef4815f8e9a60fc7922feb48a04933b263025f2446f48dcd96122587c1cd5bfe20d893db1e7052600a4189eb0202d8995d99c6c32fe8d099cead5e684d80a00dd64c2fe27d4ab4d3683aa8ecbe5cd3eb0e318c7f823b66241444c2656e86c90612596bc2171b5c2a9e3c10d6710f742c28bbd386d16900090063010148300bc1db10a439f7410c0650d1b1b176c30a04ffd28ef054de8e5a939659c9a4111c5d30871068d70589ca039790a90d741246c7c4e46b7c9665097a0572c6372fb7b074e4d18c34c60ea1914de6cc2bc6105e80ae0ddd8869cd87093cda0f1c6f0669e1338b5c9463bdcfe20ef019b6a06c93699a76650d026bb1d74026d0796c6e4cdec90eaa82ebc99a766505090370b7a093262e38733c8c51ba27541c342b3608078808984db338851fdf3089cf2668e6a6fa684dbb313d8f8a10713233f6615801e482145645dfeb8bad5061c0cbbb313e96486eeecce4e5c5c9a6ee8ceeeac4d16aaad48e92577d69c44d70fcb377ecb512a9a135a372729f4553911a9e33a49ddddb59f6b675e3751ecc873777f8de4ca34ea28f5b92c756c7ccd739974299d829de6a432cbd9512965ad4b9cdd59e4ce9b0686b33b4b0d0c303430427776679edcc2da8ba54d53ba94fe72b64829a534759a131b9d38bb73b5342f2e0df312a5f41818768f5141891e8610e2b79e72f03d823fbea30e72ca29652a8b03375bc5c50e8655add2ba883b04c596a5b6fd42e986d6511ac88e621a98aba34f3bb0f1630b34343155b2415829db8558cab631a61a2fd7411a18bc5c29a3bbc914d329198dea133b185bdd52e06ae140d1822382c04247254f70e55b24523cb9d2d427560dedd76009952977e5df31e5b3886a424c71df6f8aa26b4a224812419220a205c7322107e3cd597e3ed639583412c40c099ba205490b8b62054a12124471c307428225a62001cf25c10e0f3d1209ce633387b5c7c6d76a8dbca35929a59c52a3d14e8e7ad79ab0f1e74b8e2fa594ac715ed4549552ca668985111f7afcb29112f410558660694a7bf61c40dbb5cf851ad5df89469eedace7a0c752ba2aa5ac75a5d33e8ef906e6be5ceefdada73edbf936dd5f7e91765eb986be7fc735f3fd53dafb0d7de64b1ad5a00321b1a1c786b67721d1f695ceda31bbf6ce6d9d8dd7afbb3f8da75a94508495aa2379371c76b5cff3bab616e5052a3c2a2eaaa2a3b2a322c4aaa878375ca84fa10d3d574a26e64bf79877c38178a67f02b1a1cf80ba867b7918ec33be612e8933a7e4b604e21be963dc7e9f31ca099c62ee76f0460eaaf4e01079489922a4d224a9391c71b9d2c399c1255d29e58fd0183678a2080f45623ea494524a3a83f83b1871bbf6fc7ce1c30f27d8c00955ccf15a44a8b00383d74aa535a9f82ab7ed937d92f590524a21761ce5ddd844615c29453752b09978e0a9b5648ab1a579d9088ecf0dedd78905ddeab65594d71751dc8bd3e328be41b529654e329210ffcacb4676c0020a6e03b2fc0ce8ee17fa14bbbb3bb68df6216e2f6d9560b871dbf6bcd5485f37fe8f90e58fcfb4891b9999faa4a2c4e16464774f898d2fdd9d9fa394ee720bd14ab47dea2a035bbfdaef369e896fed4de599e82991aa9994030a21b708c72ed1e42dcd724366e6afdeea28fe951bbab704674953a12995b459110a37ea3caf1b712822bb916a0a55d14a7345b238734b33bbbb4bd72ea69791f7480aae76cd4b771cef8bcb35dd168de5aea0a4e781db25959b724997e33affece5bace3f94cb8d46971b75fe799743e9fceb2e673bffb8cb9138958e6e975329712b9d7fdabc5c0b6772e9625a58564a2a2e302f23c933f2a7164f7e831f21c618b52b5af64b97f29b0100a6186304029066858d316a4b3421746b41b01d3bce08c68eb163c7d861a93bc618638c51fb81f683d831c6b6dd28da159694e2432ceb18639d38a8c44c192c72e9d00c00000000d315000020100a87444291683c0f84dd0714800f6e8c4674583a12079320c66114c5508c31c6184280210419038c6188668a002cc45204c9bc63422a59501ec4b374a5583973886883ee78d2593a04ff4e7a0d4856a05add7526c730e2d3801d5db61608e177ab99745341e8488121abda1f33eae7434a7520511b76e377942ebb58d016876fa7a7e24cf0366b8fb214a27fe3be89a8ba175fd080e739b3f44cecc0719f6ba3f58e43dbd2fe2daf3975777184b7f4a265c4fc6c49c73cb04e77569b193e4045d49eecb86a97db1f3a7dcce5b785d22af3a5dfe651fad0b4827789bff8a0291a5d28ea0a79109812cd9599b39fb66b182d4dccf1b0e397934ffbef3d409e0c28cc667c6c981ef83a419f8a42cbf4a7df40f430215cc0de7ff9ac1159aa1e9b6603c6968f8eac8ffac002be305207067f1fdd442b9b0a26a930d6185b1a6b941a4bb70eceb3d85b202e334586fca4e5ef62a9754ca46e59ad8f045769adebace3372911b26f28b1e6fda8bff38bd5a1b182bf243ee6be2860a9419fd727c7964c5087b8bd4787d883ab7d1682fcc8c4df2b7e57356ad049e8e01f1d0c5c1bf7eed24ea1d4b0d4c1c50c4955062d6884df33ad8fb3011a6287f7285e2f1e618b401c12b674495ee773909df87ff35df92006628205dd987cf69bbe458f35d1a98b7ca2735d3f4f3e66136878d0d3cf1cc2bd150f809592b6fe1c9ee1105f1d754457a49126c81467f0ba1b1bec663a7c71d7cba84ee5cb0476da45b7acbedf4d19c31d11c9a5973e3802274861a7436ae3e1254e4f3a0cedd5a61826c0aa148b61263026753d183056389f21c6f42ce388edc7e20f12ff26050793f76a73bb0684516ee2c066400cb155d690baabcd5798eb18253785b890f8c3182463e58692aa35ce8ea00464fdf538797661edf08fb1b515045ed50127e6c6a48ff7b4102445861870a6e55084adac6685e832630242a6ab4793e622abb659b53410b5181d0241dd6bb33c908076dc14d3545b0a688c75129655aab8027d8d1a6243d08080297b280b1111135803032bc9fd02b18b83025a7168970ace577b7e81d49ff5945649ddd89b2d58da6cca652aad52bc3ed518be1e9fc99110b8936a24089a02677bf902e04d7478a2b02ec540afdb19e0cb82abc9e4a24fc041d81a1326f9a94ec1127f46d5729736784d346333294361dcee43c543e127a318430d560ae5fd1ddfccadc106a05406075d5028762a32e5b30820c6663ee97d8c15e6bd1ebcb07347883b716d784b6cab0fb410fe6427572fe66c17f5e8b8e784b80037512bb3983606c53942ae48dd2f2b67976f67448f8dbf22010bb0dbd6be258f7eba7b7e5e220646b73e6a2e21e0a4370ca5214c1bd85356bb26c062de23647283dd0e903d01422cfcbb3c2aba50fdc7941bfb9b06ee1863efcaf5fd68c11cf50a1f53da31d455297c259966c0559c92b5b1002c22d94c73932e80b9060fade3201a23d4b65f5c339082490afaff1f31f6e23ee1bc81ef8253f93dc8c23c9294698b8e2765420da462a759677216fcbdb3d25df52888e72fd2a01511b856b65f746b758bcd0277269803563e783dcd4ea65c2288b909ba347d3726135bca47d0d4ba9001822e515d650a4305881bc19cd17b09a342649cfdfc97b9518fee01b27fc8bf490353bc0444bb11eb3162e02dfcfb8d59eabf215850136d49149527442208cb636f318b508ba5db997a825fe541467180a85c54c4ca22898b160d29c5f438da9735e7e6c26337c4e491c9289fd6da5438e62aff9e83588d249d898e5c166ccf48314b07a211f3e4a7bc1b9355ed2227ba1dae340a1c9c8f12c160745295b11a5e19f40cd5b4f0ecd0d9268425cde881b64970bce232f9cb63eaab234d38b12b87613c95f2805de131838d438486f18c1dbbe16471df76d9abe551635853e65106c8b48312d59cdc5a066e2c4ccb6af934b19600dc2e3b1519512cff6d3e9b50d20c7e870e6f6b3853a59ae22e5494db3f3869f93a2acbf4e4ee9bb5f6918034abfa51477088d06aad4f37fa1921b60af90adfb0ce431076d4ac5727246b96aa3db962592d213fb2586462ec4585ba9e841bc3dd2a48538494c2f8d829e7d01d0dfbe505012d97257728233fb23112587e80a27659c0a81ac4631532544cba14b2a8b8c530bd81cbb5670b6d73dc2468273a4e1b879660a44b21c6b5623865261134fc5c6538804ea856c90ce65a32009afe670c483995ac1034faa91990ae5e70c3bc2c8556f1e5d690ce7d3d56fd827758f7a05f4d5e32906c4e3ae0e0aada029aba551701ced0669f763996db02040ca1aed011437cfaa377b05a35b1c1119ad5761cdf1adf4243fc7483929c6aeef359955ebb49dbab5c124a8cba903716a71859a729e977d0b14ec8c6e311a59fff8a01c58c43388b4ff0f100956667dc97d09a3dddfe87fb818b826aa61bda2c5b1d99d4616c3cc092c3f0fcb11e9d8cba3b93b79592fb474a5d5c6d3c2862c11aaef3270f3abc5929447d7d1e1ab78c8a4d1c8e5d406fdb88f5d1926f3417668b069c3a0528d2521d6bcf387108a00dcd2571cf5cacaa8a622b59f029f3897db149ab3dfc878fe5b4f28efd4cbe3aae523c39dfa9d674ab0f10c2e65814addbf5ea822ab6d1bf0275b130486a3dc34c8bec41d55e03891abfd4ad63804db27d1873daaec0095d593d6345bd409ce89c6d414997a33e8c2088ac86eb0aea754a0328a1b2d497d7a3778bce3060f526e86286ba195bd7065cd0adf833359deb028b738f2a47da78610b111de4092bb094d03a8996e8e83173fb2dd83584b2ae07fe6e927a6758da5021171adc477883112713ae0611a55ea45622ae51dbc0508b58da14d318c682428307433e54b3a9332bfa7143d8a1fc2df0c17558a247926f30054c6e070fbdb35a512b3df9a0492c0e3c9e7198e88e5c862be46bdf98c619b0185e12ccfadb08150488b1052a82a55ba658b070fd35c2c369685cd57101a0bfce3a60d3f30e5d61a382235b74cd8679889b4f1007f50fa469decbced76601c9a8a243956aee248749fd49a41cd5f28c082aee839eb47b6b7d389f1cd7d39fd956893055c8d5408551d083f5706f807ae6b6e18bdba37690dc911bd14a052f7fa84d2f266cd58907d49d7eae1f0838c2601f5866afebecf4c45bd1434ee3b5728c78e0b3f79c4370ec43d06391ce0251defa6140c0a0d37e048805348e4d010db6c1add874a03d4aafe9cc2d496f2dcc4eb4bf99a5acedb6cef37b2dfb693c6c0c3fa9e3100de9e390d5fac2da279740a59080aea433f86da3a3e4d213b169dea7fa98fb2a3f10a69a983de509ef5bb1f91900fbdd54a08fcbfe94f9a74bb0c4ef522162879adb7ced7ff8c8aacebeb56b06b40f43d1e1df4f3b99f2b10ad65ee55d0c7cacaba43bf466244a3f2088b928149d3c5945c601cb764da8d51c0c6389156c9fa3f96d03d1bbf10c75e4e602f480654d580c587f5c885e14b026f4e53c50192c25b9bd7e2b50f629a6545832a79320f1392b51f3187b28e27e5587e2668b70b69db5b01bc76e738eaf8d877f824f3108366b5b6be5b6f614295e5101990378816b0272cb84509242f916fd474ea864e2163e8b4efd85ec01c6ee3b2eef8e93a6a5aa27a98be8b25a46b0545838a9e5265ad21df10e4e1edf097f53f8af27b80670a37b01f568e1027af86a4e9f18b423d54604f221d19c3b0b10192dd5b9ed2e042ea2114d646982248d453cd45b153043285d1869ce3039f289bb4baf3e1a37de5417a62cb4bbeac660494c9db8f866a915d7c0437ed1145c76ef81f85b8f38fc087432668d943a15eaf6151dcd6621865b274a525fc147daecdc131c67353c586b42a061f7e67ae5f18bf64c8074fe4e1fdfd45696069cd2e1e01d5424fbdb50c09ef4e8b69348b7bb9e7e88e952b28a5ae5b746fee5b56189a221df6767ec6be57101cd556fc3ecfba105857a78a5967c7cfb576a513d06a4ca0c8821ad59a079eafdaedbb2f095bca7316403b22f685a96ac38e921359c98b9315a8adf408986e61e6a9afe44afc96d70281657e4a08f6a2eee60ed3d2ea69c59f64cfbee767fa3ca57da749db7a8d041b199ecd2b7153519553ecb9267bf90e42c992c7330fc12584db36bb0c1a4d91449921fcd5cdcec32bb516148d95b11a68822ce0958081572e201014d3997c0f5dc702a1b35854c4cc358121aafae1b7b9c8ac0111689ee979a6fcf5200241ce2d504b97a859ff8bca0473ed9a39f7b049d44a17cc5341309c9aa6fa01c1462b0a0a0f04bba0152611b8a8a602c65ada098a1569f8c1f921a28f10dd9be840d4d89826ee31f5853f73410d97507606177d904d71c20099155d04a2c2722e418bf692a022e1609a4d67e021ce72be9aad5e191683d1b200eb6122380bcefe1ac138c4a0d14ad789ecff797b3967e56f1fbc45db66c5335074f0b54c4c6412402902ecece6b36908dc64e448e34ccf72dd2ffc02622d85ed395cdd9b265d5dc9572502034847ac815f72569a71aaf91c9a0af0779a9c50b9c5ab2ff572f4704fdff269f6efdb681087422f9b3056b2ed43a52e78082fe660d3125785d3bcb11d88bfef591f616021ca63e7984c5dc7f40caa95060e3aa5b1f73468e89fe6ee89dfcc1388e1b7e452aad6548ad52de5e5fad45b0a7bb2fc30ab9a5ff6da6bf69d84ad5bf4424998be0e6a24be31fc2de0389df7de86665315938d48f28b6bed335ec98a373f90acbc1dd9351c68197a98147171abf81c634aa91a20321ead0b24cd2115f5b75ddf9887136e590a3cd80e3bc26b1a65115a09d19e0fdc683ace8fddafa9b83df733016cd396db0c6b6f25d51f1bf432f5f90f80e9dad27fc283b1528250dc6397d8ea8052faab1e607ce3147bae5944fb7625aae62f1295acccea5c3fb7939e316c62e18cd733d3fd06d7e83c2c9aa12c63ab2f6973499273965f55615984c4c51b6606a6880a6e3be2046d9ec09e2762e735789f8c210633b2f99b57325142562d4e54400b4368f397b3257db1ef04a43a0fd902d6b2518ed33dac9a71a24b415dc3503ef43480b7e08519bacf5c058ae8f67a5096f083052606b2f5f2778a5c9edc0f0ac9fc92255e2142f900882495642ceba9e227c47dc28d0a70ecc53f862f411398252d8c079cf2d66dfeb32b954608bf6874ec25dac508d5b594bde226555ef48e248935f56db206446f48813c45622a1e4d578c3d4907ad979d2147585d0990064ea7a5d40b00637ee634297350db42e7d18b90ac9dbb15adad743862f88af17cefdc63a1135634127f9050fb87f7a10b1fd86afa83fdf9b97e2ba72a71e9020200d68e10e160217effcbe1fdc72564ebf4519a42c7d1aa6342c87fd0886be5fd7bc9abd3b393eb177959f18baa22897bda61719954b2d609c777de903b8969b5ee951f3faddcc6b40a4238a0edb66b7ab7c5ef9a675ce3182ceee4cb8c9f7d0239783a31e9262bbd01e649ac166997f75cc5a0250a25cf46f91932ec536dcc9d22fd305a1a06f80b1f615d1ff5867e8e834e2313b7e68f3951c4fdf50e57b954133865a73b75db306449f81d2bfe89a2b91c627d26545f201cb54e7b4a5c1389ba65ef544642eaa4ea2d31961fc1481f11c084d113b555e75c8b8ca29052bcba08880f7b055fd03e0e8925740c82169051295b23e24def76d0d25e9991ae8d798a6c1ca10cd5bbccf1b8caf7246b95ecd1e05745702e6efedda663367c20e6439eabf1cbed3d871c56c08dceccc8695256ab6eb38fc8ee542affd6c4befe3e44ef8f3da2bcc083aa23cbabda8fffc3ae4dc5949298a1d22cf1838c8d76dc7bcb8a6ccdd653957d9beb0277ccebf8cb1d0f8cde1f18dd3094f15e93ffbb2d4fb6795d951fa3c827c912ab8e6f614d12f39cc890a1e1c97dab2201bfae1ce561ee89abdda0a25f933a1657d9c91f89f1c14c6a476bac590620efb4f1e1562541b7a61887a9edd0f1c1322da76ba60b03ec7dd0f16641170add12608544069771eb7c7a0591129dc0fd60fc71588cf879efb3b6cfed322ff340629df3b976cb0ef2506efd756f4a92897b73a067fd801988a58bb5718eed004c318b6eebab128f99f9fb2b2f5c9357ba00c1bcc20e3efc41d63b20c0e3aaa75b0df4cc6f30e575b156aa1928d147faaab4b9e449fb3ef9b522ebcb9153962144fca70df05fcf29564e5f8fd6eaf1811641fef9a796aec7b25d48c8e416f19eb89c90968e83422d9ccceaa3407a70cf3ad93bb160beb7218b8673e7776a9ae2eaf05f3ce81909cb221df858544946c9f9bafea71e9b7fc3706710dd45ecd4c81af0d3a2df33c4d17b4a4bd2bcaa819817090914c5224071ed2afbc8eb95ed1fb66bb4a2dfa01f6908d46d66665f5a2f06ba065401a1bcebe83859b54cb6c61320a482e8000c40480ccd0d4c908f1d18d270cb9f4703c5df9044c090f0d7839bff2b6efa0ea602516d0bfd9fec27cd2a1ac20971ce062f3e6378ead9eacddae3715e041adbc981700112d324b3ec42989389c5c5f0899eab5efc03a76afbe954009a96a1b94126399bc9280a512858647d1add22449af266bb61922ab942ecc5a28c9136bc76a96362c8107c0b3fbf816fd3e681ba3d1c235b60f020ab7801092533a69860eb88c9e1179afa09a2de765b8d761b4b2536429e75c07b197b393a5d6e74b3024cc188a5d64622e47ebc3504b9ab8b1a64f1f34e7f84246243d17585799c49464b6d9e7482eaa806dc845647f69a9f65f2e8d4553f9e48c83d6b13b982722993e611fbc71c0f7b63badaaa5aa44b45419246515a278a78fde50d98b86e2cb313ee3111c0345d3d83abaea8785193970b59f35d94e0303a8ad0926e94f478949559618b1ea31791c53a9a3a8961d9ea7e60d5188d341dcf2c5ca83c1bfb791675bf559a3290647ad80a2fe35b7c0763361bd7e963fe32214b4958596ae343036992a7d07ffbd99d586f9fde107055deaaff0cc1dcb445dd7a66f71b0f0b1fd6fa8c26e3898f97c4db0fee0de2ab0560e5ad54e05b6ab027cf744f0ba2d7ddd45f5ca835cd3b02ac3d9025e24f85b7d164e898b290d2fd070abfe7e4844c1c34bd7b4889d1eedc11d2f3c42aba9b81cb0e39e100c7afa53d5e1d0bd93ba5c4780f5ee6b3b694c66a6716683bf9a68e60a4880ee7c5ed44eb47e51bf632b607520f3f2a9b28ca8a323dccae511c2e3a13e6146ea771c75badf22309c5b488fb3fcf2a31cc7edfdc22cd2828af9b0056dab534c5a1c2a18ac2c94ef87ca3da2aa5d72df95c389378553afd42c5163c3f8da0243f4251de142b95b4363ba6226ce5587706780bb6e061ace70a5108e7b52fc83130c152f639b7690357a5efd15d5968855f36b57b8e0bfbd62fa672879202ad5a1c87d0fbc905225483ceb8d1401c2a75f8ac5a4c261c3eb91d0d3bbc428cc2d07220ac62717bf7244389c1e01a9096fe9ddba211414ec8552c1da96e5b50492d788cf9d261c87d0978031296216ae396891850ee33c647fa3d6fe681b6af7fd0894f1022f291266ce5b7679909b588bd19c287de6a79e17ed8a000883798f9dc07b947a64961f410f50458c40e3317fc4035f6fbcf1cd4e06b63514a892b6bf367f07568326ad51c74cdac9b14c846032c0e910e6177fd5a0b0a81b3b7058286f60190a8f498307ad596325bf42848cfea86918ec7c19599c289c60b6407288e7417db309c2f2191a1af4399a7efbaa225a6aa4b649571df9e096d5295b6a4a26ccef7fb08108f8d9b4d8a5d0b31358a40a91b553a32f81e2dabee68b0f13f06ee6c5d54ac9fa88c11fb3d7ea4672c6158378805233a1ed824f7a198e6c3c0f963b5b8e1e39c1da3dad726eac4c4d35d55981b4af793086798a79790e5da95b40b01118dcc216b1524bb430f2ab14b2f29750a0d3d808eae22f41d92985aa39b884e5efca5a9bc74098f8633a8da342e7271f107b532d87cf3e4db25ba23ee5f7bc7b8f3b215565169a6b623b29260ccde2b12ca330d8cd028ad4a22f6a68d516f9cad6d2f65cd98482e7228cfbc742efb402c02f33b76e25e803cc2c8910492098a414c53aa9f4afb4f6546fbba72ac893e82af5da3aaac8e21a287f569570b3fa3ab636a6af2a1536d5f0116e27352ec450543abd43acf21923b693ea152d90a5cb027d8b8b2e899f53aea19e24ea5c05126f822681aedd6be3d0a03b2effa494b45ab0bf810c9da150da2bd21623b88b50b92f8f0555dae76dbc151375824e4f4a24be4217ef651d295a3cc4a0bff392d1513754b4f551170cfcffdb97b7ddb6f757aea0ca7aaaf25b65d2a59b63ed52bed8a24b76030fca09bf1eb96c18f81d57aab9a4960e9f63ba7cfe3102bdcb2f0186851eee0da2cf640e68912b9709b04852b48e6d53f6febeebf584a93ff0e5edd23e0fac32ff6e4fb13e708728f164ea158bff697ca7ab38ce8b1ca3c86841268aa23a5744630b0db9df27264043e5ca413259bb91fa8a459e75ca0501d55c39bd4f7f42dcf414cceb8011de7e8e42aabb1fefd614716d4fdf324950be4d413c9a9ecebddf105749c071646fe0f113ce99ca7b216902c3a3c3b58836a3edbf12e84101914ba6319e4c8698a13f64fdbf99b7efd6f33ecf948d2c59537c56132b88db1bfe9dcbe426a3c93c060fdb99cc69db8c267f33e630178c114e3d59056bffdb9e448d08808436b6a3620d99525e22551eabd9ad0d32804c60aa005d2a86139f1eca622d108296087c22d005318e62c966b1aad7d347c01b451a040e0cb1fd8f3771c4dff74226567950e0fc7dfcf52f92a2b54c4dadd980a03ff41602e24a9b793780a4d84cee9d2f78d04f08dfce0ac2d573fe00f7133d9d3556593cc6406059a5d51200564df6767b42c5ec75296544ff08a19ef3418b41e92cbbb0c4e0b81d43611ed4edcdc7edc5dd6308bc98d7f51ef5f79516edee4f25e4a7b3ca2c3bc7703ba6542eb20b761ea000a998541e96d1a1e54a7872c88de5c2033455c333496e478685ebc5e0e2e7840ca25e793a45b856426d4b26079527eca04b23603c8110d1948d03bddf5e280008886bc0b7bf999bd745509689de5808f9fc6ac99149558267e2d4d10859f9dc4fbf3588576e97cf0f95db90b50237243eafc86f1c30610b12f092c04ac76c116a273fa05bdc7347b893a89c1581c6e1f35465a51eff3773b699d03b757eef6ed00cfc2bd2330b54c4ec7fed91971998bab5fd00433c1b6336a40517cb333610046af6613a630a1bfbdb5d8b4c1a40f0e6ba19b24b4f7154b97e0cc4afef26e254ea93e932d13cad744429042ac941d0c64849c9caea6125398880a04f77317989d2594e0a4c827a649a99235740f950a762a844243436e9547e819c2cc57c1ecc804179e97d80c233e190fcfb0acec1f53f64f7667645967b8c532293b88e4942a7610064e75ff8c0af57f0ad8e7e427687b513c64a16e9e5deb2aa03b61ea97f7922cd6a516852edd05e384fb13d5b5d74a318ebd3d54027bcf59e6c1f4c4cb64d80d2e41c2281b4efa888189165227380b45965a57dbdebdb0025249873102ddb7cade3d7716917f700b8e78571660db571946c8e644ff1313300b1e07f5acd1ea38b5d0a4fa6f446012cbfac776758198079820212e94a6d6c6580560048612fd8a8011ad80b228cfe05516c70725cebfbbc433b1e2cd7771535b1b175fa883993c772ae5c28b2af9c15b908b972c62afc8515f5d021d431911633d2340f41b4ad1acdb6adb060eb1024abf4b9ccfdd2bee78e8f8c73ca7d3a3976e1ff85f445a33ba7b8073ee5e8eef3ffa4618a6d667c9c0a277669bbf43054a1b15884e15353c2bfaa4d926ca5e0a98e744f8702b79bf07c99e24bd63b879b1bf9274a508d27c71d1f0aeb45390362283d09f0dc84bdf48032f075a8931e7ea8a1e5a05d61b380cd0496c52aa24a2b65a6b69372f30d953d304f97c8cced248fdb7a9333e3afa7db0d88f3ab4ff0ac82ea705b92b52a98e8c3a1e3fe03bf849eb991d7036647e6a5d926d48eb97bb16bf575a3e5496d88f545ae10b96545c3d1be63fa8d2eb18c1e16929d2cebe659effc27a9151168afa70aac39e820524a2e8aa1b2f795cefc46831410759900c89bc997e754346268032f4148fb8a9d32255f3552abb0fbdec1fa19a173ff0f7dff415b6f1f326002d07f43d84938cc49a7a8645c82ca235be87f430880ab776e3b1298119a9c5530d74dc6fb6dada69c429dbac038946870b35d6d5df297a277ae6b6e80c34c26dc94e602d1133e60ce8e84b3b45e7739f14ddd5d4a62c023b180c3fe83a7910e5dd19bb9228d71b3c463d32009e21382738dc727a177520302f01ad7f0d6f5f3dc4c1371a87f9e33c53924ed0e00bdccd78a756da291e0ae45c606f709fbdbb4b589f88bd432b9af7d22060e98ce7ea38efd621b16550c42abb694a9c9bee1b7b6395a99b0912fafc845ff1b413a5ad135cd2198d33c1c614855ed6e630688492746b3754156afe4b199487d32393ae181fa5c89c0423a38b04432b442388f0e8a4cf96f0291ff02694fa9dd7b06a930ddd59e07c8339143381e29869863f6408138894cf960dd738b291af57a33b9d9c63438a95e6b4c7796cb2fe512fd0a87969874dd36574b0462f6a363c7c4e8dd953f1485f18ccc2edc809b962a4ca1f6870f052a2e24056aa9002150184adf1cc470e123cc5b73b557758e9b094d84dbb93c575c167e01cb7596cd8cc8451a7b0c3489922000c3b01404f2c76cf6c802633eeb8da71592da49c9910365c7f262edf63f67df72118a4d752c2e9b096ee369820f38f73785dea84f78603624418cb5ac21fbc8e4c31436e4badd69376b40cb3f257b96583aa7af47c8ea20fb0a982fecf40a269764f009e66898af5f4cb31750bcae242b63bbb74fe602672a526b4fada44b7b8b2873a831dd4243c0067c46aa486e2c717568fe856f71797eacab90e55f4c51bb5328c535fb581d6632d92d570eb3327f9a088e50174712af2bf6541f29906f12506d4e017c6d2959d05731cb3e79e2e2758a9632cfd4edc0b7b3cc4c2d61bd566bb9e93092dedf2c6043666ef67e134d39b791fde336474f266b6ad0b5e683155fc83dcc56d65bd460a74e98d77b7309138c438ddce08eb05394a37793625133723602d291c9908966dd600c6637d7f088d534e5fae2310493c2f7879a44fb8b869b0f8b4ec6b7046dbfb6bbdafbde6e3fcc1e1a05fddc66d30d9ade246e9ef3f6fc48288150a9eb27689214c9ed06cadca0a0eef64a3ed7f0f20f144b6e5e7235b8e9471a0513f9f21fbbe89001a618c5729920d1556aa5743eb1aa7b1f8c622100765ca2a65f69c59a4f3b41e21b14e6c492b4816c840f3bf9ff8b251dd4911b3e425716c26a8235a08d9d7615e3653203d2caaeb0709e40f26b6f5a088409509d319fe86161d9db3a90f51650641636e20a663dab0789fd9cf609bef20552b4ad8c1ab2ddece64240478a2203e3032695d5926a5a392279d0ee97f1f68fc3b9e57bf79ec86434b24a805af9c0ded64405dfd42d60a0d432d51bb3ec35bdbeeed949d90b3e2799507c7f43c0f040dc26273dda15f8dd1aa4fd2f86163468b2159ff7c3f3d01c2a88de978e504a882d58d4eaf5f91cd071c65ad03129c4fb5da0f8df03d36b649ae611762f6e14f5bb812e7237b3fb579ec405d7153f2494a459a14db5f8a546ba333b512a387b813130c651647554ae0cf14d5d23f32129ba8c389f2f466391b3a795d5d5a2dbaa7ff20a1d8cb49c4ceb248faed69a4570e04c19fdff1fded00ac632a141f860318fba2a8a5111f09c19ac36ae86ad31109a134aa53da69d25d560443c8fa9465e546a2da8f1049443b252ae68a2d57ce0ed24e2817a69d160250014bf6d6a49fa7952e61e1ffdf025d2b301f02f4256d1b9fdb48b1ac1e429eab1b322228f901850f0d0ee732b5bef16abc7b2b0cdf0d0cda1eb563b98491359bd622453f163c24ecb902d9808fcf2ea5439f537241595778d400ab94657034a8776913298b436f1036c5718965b294810164ad3f385555e4df68c6833ce64f2e869cf9051f9cf15acf68171103fe0682066e8d17c2447026e4c914a74f4b9d32b8343f044980bc5a95375a02f1c4c23cba0b7816d936538280653bd79ca3d2245bd260c80476e464b8f9c613b14c94296c2a8041a364c0e2aec5be319feb2dd2b39c8867a31877eb13b8aaa95aa02c58e4f0a2457ec17d83b375abdda0b1e26565c8ffe5d6065f0a2d9f46d7d0520072875159edc046729908f8e77ca542f2a26ac2f851255632950281420e40152e8250a10fc0495110af2f12727148b1e645ec58b45ed06dd99f4906b98d5630e43cfcd924e301f88070d001405971dfb19813fa5951851583693d879d8989c101139510b0730735e920f917ead74c76be1f102fd708ebc32d6e6d4bf9caa81602fd728dba0314a63806448c2476813601938815cf2960694a81c258b4ca297c88f459265f5b8151058cedabb048e1088512e589e2ac59fb17a974bf7f466bbaaa192a97a46fd26ff4b7a0c35916b6ef14bb6657442b81049bb877f9fa724ece74e0857d3f13589ff751a0565c0ea914d23c0422eba1434a67b3cc542d25341212838732274b1993b0d3c8d9691980224900964016a808d5c012179ecad4a5dfc47b11311acfc35efe5765189b9c0d571f32a6527da269ad83d20e49ba2f08cd691a419e6bdbd117643fbb5e6e12a782a673bddfdad42ded4ca3f3446789f742f31575af8d3f40bbbef77ea9fcb7dc8385d899c8f5b2c2fe00be83a36b2316c0d107b48406d65ee8f9ea7401a408ee4391d3d71deae277f8f1f2572ed89b9494b676ad14de122a18728d6171af0840132b8c457a9fa3d48fe68a19b78693cb3db8e44cbb4e43b88776509b3041bd788e3e203546c687a145d65f4b66f8e569cdd62eddf58564f2c1c36d58ed4bfed5117e53869ce745958d2a6f6d9744872a42d4009ab331ff1b49cac563e8993fc09d45da2d38c911b96bfcec613308aa1d82660387c044d3d99a943052f7cb89352d23e374ad6294b7a67e1088a4a8a544ba3b294500fde3fa1ec7d75a4a2707ff5eaa43562bc795662409d84646aed625c90800249ca0c8e4cad6aa1b6e0c8638f765dc6480e7c2230c8866aa44a22ca26f1056d2a2ed1ba4bb4913ceda64909b1bea812344d247bbf28957b9168fbd782312a52ae02043cbc36472fa57fbc60eb20d3627395a46d29b6c68f2b1dd21e00e0c4b0a90bee49863e89643cfd3fd3ec173a6c3597c64102d6345952765e30e3657f7f524a3937d50f7b96ec3f56e9f0195b4fdd99fe6c2b8f426fa4df451e09ec59b4bf3e9a1a465b32d832caea9bc854b03358f01a2ffaaa92500da06c1ee94fab61243ec6ad56378243b04ed4c6f5f8941513ed66e325e4d8454e76a8f578ff565c717cadd32118e650db96cd08b9f03cbdc64e317be7e2a17684d4ef13a176d1ca4f7c5d07389535a250f69befa1c8ec657c227e68142146147c5fe0e5bbf1957b3889b0668033f0f9973e13fd1b72b078b7fc9e7ae7650c7d26250eded609f867100e6329f3e8e4187d052de2c15cc1365581359aaa243938310df6549f7745efa97f8862c5c52998f454d9af42af347680c921d7228ff0e30f1c2249e31f7a33f8cc10a901315a7c734f7868ef62df1cc08c29ebb0b876ac5b9735aa9b6f8de98658a3ec76670880c8251d81fafa6c0d182aaca4bb68907abb7c283ca78d940189834cba9cfcb44769090eeda61fdcceed8257d3e3ebf28115102f6fdc8832d0f1190c5d3a64ef4b476250676cf7cbbd9d6b552f98e999b3b9f0e67d8c27ac5cd82b69606a9d1c2e62d06b75f4f5fe388133d532e0d42c4a44aaaa9c06f195032e0e319113769c54325c37c657c23814be119cdc9566564f018c1a349627277f77b2b8b2511948a3b356859fcaad1a78b69a7744fecfb0a6cd38e71d88b84294ed4ec689ab4656fc5892267cf96b53d5c17e944509cc67e2ff0ab31c8e62b4eac93bd51ccea0dbde31512e107b6eb94585381596ccf95533d2832b1ecf293c4f63133aad15cc81e883b824848991cc48c8c7a0b3e984f67b774e16c7a41d8d9784903b3f3496b0ec84ce27cc0e042d8ac03b009c433a2e83f840125ceeb6319c303d2bba4a3e3f6fa9d6b8eff3c4ece299fa449a4f2b1a31fe8dd5f68729c2a1231bfd14dfe9ec211c2f5b07402971cada0a68d316160778f530e36b224eccc2e7cf3f48f33e081756c3870c9ba2fbe362bbd58371b03345104b93782234771c163b30a5ffea1e4f5baf7722ab97a6616f8f14626fb8d7c2688db649a1c23edf783cd70a8f800495f4f4c873618591162dea90753dff86b66a2e0c44cd2ee36279f2edc0ba1d6b1f962550e537c0a78bb009a87868d3c7f459161c45cac03d9bffbafa61cd1be30995c9f2ac023d6efc97a03f289af48089c2121f25583893c97a0ecd7541bad1332ffa3a4362e9c9fd095e0e044ea53697c00e745eb68090f42c41908be11133df33402b43c6961ba9024e96a328d9a4a0e47786b542cc7250ede3a6dc41afbba9eca733fc11e6ef2d39465a7e15742a3837eff3f1276923e20d782e1618027ab5e0f2446ba220c0cfb512bf30ce133b32015b1aa9b89cec8a09e152f15d9459d4fc3ba2a1e80b6a45ff7bc0d3406534be4a7f3ba9ceb5bbf452751f29faf21ebf533727fceee71400d1afd5dbbfed09dcf2a1a357ade9ccc78af40cece04fbb78d53b6ab5ff79ea6f0a2b9df9d7f6bae990ee19ac4c1b33b7a9b31a02b538b0a0c7d4afb26b180063339357e67abbb7ab30efb727b22bb8576f69d048c35c1c9a25c6832e625cc818201b2b87433cb953c17b0f328426f83c30ded43b2987ee6bff852be6d034ce9c08dd79aafe65921b8968d4b6526a707ce6f09f427743176da009133667bc1af01cf273b0bb20e11767db794a716b52a15b2441067a0f7307bb41edce74d6edfe0ca241dfa05c2c9acf099a6076151aeee0c457a10992c9286d3c30c8105d3d8a1e1cd5c69510615c55a3049232ecc7c1dbb600ad9c5ebf0414709c211aa9ad6685b48b82a9272280602830d04fbbaa334f10c2e98344e1226a30198082362c152fe2086db9fbc5321b5ef9c55e85160d74b67ea402221a278f4fe9642390c986c7cdd3e8946ccab03fdd440e5f64f4279419063f714fb9e68536111b16874287fe864a17df06e87d8d8b9382eb79a125fb94cbf042f32123feb910ec4f0f0a63b0d15f602d18a8ed13c7baeb95ec02cd05bf8ff01b5cbab00ede06d5d1e867c71880416fc711a04b0e30917fc1f21800a4b137aa92d8b7cbc4454acb5c6515325eefb759d632c92c487cce64307f660859a8e6fc08035c330bd64f2bd7bf1016fd2c65a4e2f1cd8706c6bc3898981f598d12888cbcd73f3b15306a148c7ac99a51dc2ce60d808156099c2334c428181e88b0e090b166c6435d2dbd690d4524abc7995c1f032c49582e723632b76f3c3d5acccd1f35cf1972e740ad77726f10dac2df18622074c3b1a4b45a17379e4433dc782212a407870ccf09bfbefd93f0cc90a1b51e941e052bb37f35861e2de74354fb153e74153e8345de4aa59505e5ec74e95029a3db59edaed366ce57d48a713d4a843ab09b21b00d06c3470f2696e4b1a29b74fd70ca00d63185d7f4c7a676c753707864c7ac9f4f1995d02e9991f159760eb3143b2d829e85cad0000d895db48309e498996018a29ffa699a24cd3f98da52c2d654c23923e737a258c14299e3e60d5edc4ab49b96d0568c0f1550902108ab600c163271be6ee0c59e1b7755a834d07fe48eeaddf5c5c830083dc98528b102cb53e01d9711aabeebd9c548ce66df0a465b44b033ce7e124e870956e6ca8c5741bd0bd3df50139160a0fa62a63ef622c77ac18bdc3237e35ea8db2bc40b788093ff3e9e980fd1cdc428481e0396771343cfd1ecf447cd1741f72d3be1cb94370d6c53bbab4e2d52669ac6e9a4085cc68a7f562c2bd726f52f90add80ba13cdcf372ba361030cb9a717e49199211d62746a01d1538dad17205b2233ba5b6495ef6217c16c2b8f27d2ae065f5e0cbccc724fedf0d329195ce4c63dd03b6092c644b8d6eeccd12095ff23263d496567148c19c0da0f1e9b1fa3114dc5c37f07481dd862455de2c5e008f92a06428e0a26b4053e66ac6916f9b42b90ca18b54151a1fd891a2d7ea622fc20239799aa9183731e091dfba30537c7fe27432cd75840937b4d6629de8914fa321618c714e53d844c18eb791bf8987da5e385b0e46f6620c4ed7d3424ab8d12ca7318eda985b38c55b6e34b43102a9232de64a6beb13c5098834b300dd4a8a868ce9ffb41b96551207d7467ddb346699cef10053ba3ca09ad3ee9387ef3650d819d2fb58d94c743ed79715691cde791ed9d623c6f33c563ff01414707248ad3294b7ba3f3bb345c1e024cf7f642c1db8e13d4464861d9cf08093ff291d2a028517211220926e63cbae5feac68287588c3618e663f6e918e4e0be74119d182f1c0c73cc3637d10881400d88aad4e0832099bc841a9c1b31135066aa4877baf655660cb78d1c9deccd98a82b8b852f3878afff2adebce076334d8a081be5f2d1fd245f46ed600340e14829a57585d54b1e3a3e7e297b827e440f3f849df849de179793ff56f0a2cf3e873f3f16a6a43caa3dee21f3e509ab93c5b9f072fcd0621708fe08c78ea7c31716993d010c7f7f54edafcc7f73fdf1fa899bbc58fce596d6711b710c332061cb76ce9b2752e79b695d0421b57e924c48f6389267cc1b078f3eb36dd79b50e7deb119a2366787e26579c9545542fa796d6dc95848ee094f76a800beac48074f370d624fa69c959a4ca4fa7e5e780060b26cc4b9e09953a25f4bc6a9e6422d310b988ddf57fb60242bc5b161ebfbe9b3a8e2b440fe038e5b7780f13632bc4e8b3980847ec54f964571e8d99007223393c2d31baab68232246942aa7b671fe98f019ce72ba8ed00f7b88e41c1cf90cf2026a822dec7553d525ee94e14c2cfc2742d7c264a5167225deb5e8ce04a4e4ee789e8aff472d877b083acbcb20292ea15fc06cdba68e0d856b2f7d178268968da7b38bf066cf90126e1030862fb7604ff5800eba0ffff9823b1478a57f922b9d5c04e5e8196a99385e2f4e36abcb4a96caa7b1b582170bcd79b753c1e2a2b3ef45f25e296081f5f180122d8bf4407999f7168fc9cbf534f1699f69b5a78bd8f34cffe21fde522fe4124ed43f40ac5802b5e8c254a86da19c0a5839fca60454abd08de5e61901ef18c7ef06489353df4f3c80193a2f92a5d30316b1e91c59040af747ac7f8fab360d76182fde1c720124fe25ad45a51daf90c95de73858ddd5716a461b60c057bc291f79e44d8af6f41fb43876b23c2c30be4f38b0580ac3c9319e1f25e6a3f065e2927a7bc6595678078462a353239e359bdf1bcf34e05ed5b4cfa4f8aa324a4fff061fc66a7a9b31870a1e4ee94e4072bff3b8d937332832ab1154fce1f07963299e2c1b420597ed989f6a1918f9a600cf754588caaa2b2b1c509a46b8d8f991f512d9fe833cc91cb462b1b0d0b1ade3819eab39e48f12ac309168316d48275c926d17aa84d6c547baacfd56ccdd95a93511c8ce9551428f3c53eae078104296a652a6565b9e54412b3d09907efd6938478c8b701b28787290dd79d5dbb4393d3093e603a9e5d57a0132cf33528fa856a3b2a79dd5a4fa315180ba414da096003ec0adb96fc96d22ab3781179f4110f37bb8986cff4a5e5e97fbf83ae38e559ead6fd1c2ab99247f40063b5b485f3f83950f7d29d23502f4508e12615d51b8ed3e18067da8cc5a45d84b784c44159841e02126a0faa3a9d6d0c579409b1a9c033215493bb86e8c24de19a2b8c290d8afd051d0a36ca9deb98b382fd10c2ca9006f40bd54041760d74cc3d55294583415644108fca10ecc125dfc8bd62f7c08cee7c397c421986c2ac8eee50bd0fe9d079f1a054c14d32c6679fc3275a4d92b8a42b475a5a2cd46fbc83a53f6d2ee4a204770715305e28bfb73c3bd0b7d72bf0c3c30f21b1a82dc45fb5e0562a6407643592510598065249a43ad198871292246cf1743231cf32b523c30a0d0511ded03ad0a3d88ac99f65104fa0ded0bd3bdd83485e1e25695bed7b91f90c3c103d5b9dce4ca1e4240321212aee8373edc6ceba0da213515fefed2405885bc57cb047ce1cad3cb0683b2348311faec66462cbad8938fbf89fc51b4c890dcb5a4190ea4f6835d9c91bf3749ccd39184d288ed972221a8048a25a302df90031dad8890710fb0488a047939c182787b75b1a71577834d81286c08a954553c17f80ce1dacf25a196c02ce2fa48df051961d98b5031184cfce12ca04be388d327a49e32252955d9d06fa25a87e4d770d758f0f52296bb55410fb5aa6050630a0087ad2206979bba38e310797f0e069e93dd70c45610928399b5f1c144bb08c382564037e1a0fbb223dd05f51d3e3df96c9998163898f4796088329300a1f207fd9134a783bc3f26be91ffab75c6db180b882e7805fa747e031b9f0ec0ea796e0acba315215dfda2e04302d93d3dac369494e0c78e36fbef7b60a581d8b791074fa50a0db0891e0c5045708188de3d6315dda1dfcc05d3e3e9b328e625cfcbc2c95f7f7c5f7dacdecd91dc327ae0538dab6ab1a269be07db0615f75fce106a63f075d4385834be97ccc2e224a820c2566e0ce80e5b08489132a51e6189690c667c68671c32b5a3b5eb04c07f81a64c94c6e8f18f0385b086d5145a8305173dfe4481a8fd4e3555eb81c2f9859c876d133e33a3608bc43cb76d24ff306652b1e90c7b910c1c3e80413e6adc23cc1022bc504e8c2823028744b7aa00068bc787da8603241fb113ce5d97da2e5a676fba7ec273ad701570fef24fa55b8adc5bec551455612baeca058f8c01c20fa18938156d8abb3ea6869503880ce5cfdbb88f1e0e3fab915464e43f16743ba5772a79b76b31d88e6950e1469a1bfe9af29f24d840fe5c59f48223977566f5ea9c2e47c4942f07b655a37afb3fe65c0c9175c79f8a54f0641b95f73bd67ec3d49338ff364c393a18415091afd31e8cfc01c2d6088d92f531f0f09a86b8b15f06a2e4cf330412fcbb6e4b17094778987b00ddb231ccfeffc2cfb15e2d564eb0355afff21ac35b1c69196504b7d5e5edeaa36a8f42011f5c5c5e778e359dd95b6b8b8bbde721b6b57a56148a3fe05cc59ed1b1bf890143b1fcf82fe86db24423ce67096f1bbace9d5ad8f07446c111e81dd2496581946c522b6e98c589b4aa3231b7c43839f7f6577d22adffe75f174075c5107af6421f3fb52911f29861ca58a21a36727e7e8137a3fa5078bbf1c2f2a1e884fd928910bcaf8063eeafc80424cbeaf41624c035bb8cc545bd7f047c0a7a2b32d60b49c81c3046b40c9ab0ba50f917cc3660505ab14be9236816356a9c586411eab3923397665ab50d59a68a8986501ac91902b8e8cf64b3ba5d0fb838fca1a8935805db954755195931f759d67934ca6536ba3e6ea1dc6c2f8257f277b7eb26e8313c168f04fc13d5bc2e44385ce701f87a514c7f20287aa70fc5013b94527ee01b49e8da08154dcfdcac6324b663fa41bcd355876bb146ed88780af9036c0da08b257270e12eda13ea9a2942cd89ad124a8bc65466bb52de9874107910a393dd0dc5eb0003825033bbccc570e6229e965437a36c80989f175733955ac605bec8d35e6da6d0ddc83589576c2b51fa88b928eebb6d5f9c414251de55c8f634509806ccec08e29b0eafd6efd90e50876de8cf8d7ff3ecf0896b2234c8ed5b2a23fa19d8f3e3ecc0eaf52201941e149f101701b0fc8115007e4da238b8e0e175ddf297550c3d0e9911da19194c40abf09d998a65a1a03f94add3655a07b1c5e0322f20aaa9028cc1efb7b5a18da62c0426d4842a8eb2da2aae10661dae88f97f6a80f74837eaa9f5b691d192269266e1b0b9aa58072d4d717bc554ad89e0fcb0aa9176c802c0fd2031c671fbcf984cee74e80b26812deb7c3621fb4e68484b67ed5ff5b5f455d8bd0b7f29cb02ca6062bb4dc8280502bdad7ce8e52ff913848ab2ba733b3032308eabd93149d4cec98b91ed266273319ee0100861a5f3bb92e04408b88cb55b7a33db18acae04fb505c004d5c42815b46669a9ac46a1f37a2dd742c20d2cdb873fac486c9f61d06b734a3a7e3d99576b4f738b97739db80e9073aa130750e1310166ff3fb43a793baaf1dfebbd58145955c813161a72d6a1c46224b0b8b622940718c1504f60287885295153850e84b97f3ffe9246ac9f31e86840e61575744d2e42a4247418e747f43fa485a9dc249a91f298db4c8f46daad7ee527d2a2da22e26d903288af30c2c2dad61338c14997a05aedccd1bf585d63ba58ae7386fe3fb0cf3ac2779b1fc8efedf28e9e4a939434034903ff2682bb5a13d78176c3b42065d84fab78604bbe81c61313cd1a8e45d39155d34e30238ab7bb3dc4bfaac3da8038928253dbfadeda42d80c324f9266ed8183be9d50d42abc60db17328b2d33c5109c1acdf91a829951d27cc43d3c5ddb28735a5dbcd095791d96c2ed0b9f4619d705809ab110ae5467311eda22b72ff3e3a5fe23fc205b21d542015e0a3120aeb5f7a1f4063b53bb8b030a0d87ae5d017959ac8ea9e362978434a20a6e91f9c2dcc90786e52a40410cc39490142977f0ca9a141343acf7961a95544944be976c4b88623fde3b2f7bc631bd55c0be5cb92e7f7d84ffa4f7ca7b7ca0fe06700c82e2100706b9c5c4626524901c4c88d432c9ac4e0311cda226179196db531d1e0fd998d30d930bea051b9166dba375391bfea15d8f53e10bab42ed53c3c85b9a8db6220460eac3b7b988a754fd370d4dfba310e5228e4c710bfb122b6ae62183565d1a3ef1caaa004ad878ae29ea18d2b99f5e07e348f5070cb826efd502206f4b4c672cfb10f2e71481d13009a2870dd6d3b1b205b11d54f2e6f6da4e44c02d21cccfa6833fc0ca842c0e2c72056801583622e5c416491a89e88a0872e41dcda7e8f68fb6f9a0d5e9f74b047d44f0f5418fa9ee15579323ad27339f0bd646a6d2bbcc55bbafe7ca2549b53adfcf0fc2cd5a8476356ccf8b4f87aac5879c269af8f4438de3bc94acf640d712d792f32c14ad1d715035a6d8dc470fc3c8d2304a2b2c517871634dfc30baf2f05d9129fc4710c217b589f3f395bfedfc51470e59c31a6883ccadd3933ee7f1fa055a18e93ace955152e310f539ba600b7020898e9af0c2770d258a9a7795f22a7c0f9a46ab1f56674c013ea7fe2f88db2c78f520489a9975d7b0c344f5b35e47d81c49c89032dcf2fd26cb20362de833734cca833d18881f8e739304698ecff34d0ae82aa70bb6445fee6ad17dfc4cc05ca8ba9768e1cbfb3cc62fbd7a2c585a7f20843fdad19bc0f01d6fb094062ef8685cc782ab5b5494761e5a6fd6577de97d63aafb078ef736ce2c5827f6cc1b04fabaaf7f6599069bba839966f026ce5830e73f3b6014e6843cd0e4276ec2571d776de3aaccf1a4ea0cd94c8cbcd1e20c640c6ceb84df0ca0bbc95a45c6cb0619381a9ccec4c20044d1dfa6613d65a41d495dd669a4aa7fc996e84896c9fa6a822da372a02d8de348c4a8a4f25d924a5eda6a0aa76faddc2b0dfe38ab8c7074ef69f2a0e9dada710737c2bbb659741cfa0157adac74106b53f9ff13a07a4c2eda52060ed3620cc89c97990816abd441fea10d4eff1948f283d0edbf88fb9d6fa5948e49e6e9d64c2b57aac45c5c20d1a147e257d07292b8439b65ce885c072351a7c7f1d794de8e10f11b3aa284b4327e5e51b4f68b2316d0db47b668628afaf24eba034896a6af4443c9eafbde3fb1cef7f967de48495eb04c1e1341783ab8735548fe60d6f5d0f839c94c15be678fc50970363b5b98ffcd135827c2816345f8987a1521542cbaf6dfd0084dcec9f413d13e521cf8da59b66bd102d1d21a6bb1439e015c7a9c2474573045e29c26120348be97028b5ee9e1123b311c01e331c82305d7dc1a61775e4496a518f01c7add7a1549a93146e25e58f20f32e0ea8b4914e19e220694a66a04f074bfbbf921533048113fd7031788960a32c0e6d6294dd46911892f9c43c304ce33766856c44053a1232972dcba5c4d2b3124b949c4f4d290b0f478b25047683a5e3b2262a090548d4a0cdd8ab689ab6e0b90a4d5fb2ee31a73a3d23b685e985bcb2c2c1c942733086cbc8658c12c85132fe58aff8da72006e3b28e1715cf2d021402f3c1533c069c857892c0f886630422474a6ddfdf2009c8dc76198511e8dbfc6c6ce2348d6f51f411009a9727c4b7f4d9f570a8806c94ce667e232feacf7b2b59aa53168ad7bc2cc522f379d20e4fe98c27473a5f7995ff9483c116067fa4f8c6a7a77f08afffe07e50260e9152ca43e759f03ffd4903d80187344fcf79fde9eb4a46fea4cb2b6d7f551305fa21abfc861e45de808b3adfc1ee5178ae804e0a182ba937063586486020cf907b18e020c7e635c40f3929b6ae05e82a3559c23b4a614424e1413ef31ef2f839927139ad305e742a033474ef91ad0082ec2eb1865ccb1076946a3cac4e94818f7eb85082342d1f386c652587a621f65403d3af582b31a63a30448859786dafdcede1159891b9b1317367e10365212bedbfb4e2a71d6c097300798ba8b074852cf4ced3668e779ddd3558ede101bed489a628fcf30830305583aa526629c7c297d50743f0d2f0d20d51864a9317e3b6d79576edad935bb6ab2db46947f2c5277a2b13054a19cf36e0061f0c9806b64bd02c4c94416afd84459f38e080c27c0be9dda8c2d1a697336200f1442de3fe605e4f75c105d4b8e9e0472cc00ace562b764cd9fa41b887009825d13040dadff4d929d0fa73304d47de6f1ae2759df31989c98d4a4bb096deca5331648f86698a1d97a7200c876ded24101c92f9060e9c73c691d43b12db87f8886f5a01e4e5c6c22d7b2347d50c671e6c61278da4770c765093f5fbb630a9b2d497cb028aa720c829d20127221a6a165b217baacedcaf8e07e0d8d0bab73c8de3040097b85eada643d41578c69df76ec6002b1da2c68722f78b853838d14d4e8e5a70fa825e3e6f6efb39dac01d81d19627c1859a5db249d2beb74fa61c5956e55013e7941cf4c762d45c949c7ce3c2cac411448c066ff5539bcfa2b85d214275cc4eeb3a5fedb914b2c24825637b473323f0f391814c0b9255944acec99ed0e72e889d0856148b129f0e786290689827f122dcec717a6a2392d1d909502aa0cd266ab35831798c9b09fb9bc6226ef8b71ba40c31c61f3b931af9be281b2f19f35f8448404c8d50e39a61997e5f04bb3719d026929eff27ba7e34babe82ba1ef025b971938feb3f34ca834ade4bd68ca3556b00b6d9b887d80db932b11cebed10e50dd92c9bdf470dc9baa4a0f908fed2d76d490d55efd1d4104008cd17d85a719743b88e0e992a5be4d094bfdad185226edb8f8b092196ae616586663d07da7608b6e5e0375ca2864b7bbcc59f56f11efb166977cdbdead008810be474888cf884cc4415a02068dbb48091a0611439c949924bb36922f4d2003f83faa204b29a24499b4d08559f476ae1f95e20998670be2b5b5bc5cb4e13741b608c81dd1df7893a77ec4c51e4891d0e392df0255c8e869cd85dc6f027ab47a2692610ac36b0c017e6c1d7b1760df6841b967adb4b93edc7ee1fbc01fd0ce9e816ce5b4d45daaea4cd84d05473b990144a3e88452f3caf8dceb2cfcd3f16ffe4c98ee039b76d897db2ae5c6aab3c0b0dbcab86014dc73ce9a30bf83028bb84c1a89d8dcaa75c43a56b95364555af75b425d8e74a4b810ed41eb66bd11773453630bb9b24dcd5d7e373c5e26baeee356439b22bbe69246ee1d9badab3fb83060020e41d9aff8b4415ee93e5b9cecbaa1a4562a04c685731949d9bdb8b28eeb28fda4e5374ab7458cc50d6a55342e0b5a8b939729320082fc75730824753d73e6869865ba549370c497714a0641f941e17443804c4c4a481a691c4f2ac2b7d60d742918b1aa28410d669fb40dcd27f6565b13e86677432a90d90b085ad42eab7beefa8fafc640a99f7027268ffdd9943a9d3bc075a67ab2d2d7c578ba885e353c181330ca292b73abe1a5a96148e463c3be43250db62ead8e773786d93fe6ba7282c08e89761ebbad251d7436dbbccf543e4c33ec3afa157ec23f01cc68b84a0fe5eebb5f4f7d01cec6303ca97ba845a30d8554d07fba9fe75ffb4faf5fadb8925b94d847555238fa4bc1456856435ead901b423e90729a5ecd5017a86cf3c1fdd1fe2e1070eedea050fac2e15215f9e45e828cbe7ab88705b83e77bd5d6cc32db765b93524a9992940120082f086f083f9675aa99e9b3cc542272e2b497783e8f6b18c8957e464d949a4ab6dac8f064035c42861c9117fa3ec0178b03f2393055527a3fa594be400ec77cca3500b22810eda3e5544206257021911141f9b344ae9fb6b17c01a220488ed0a44b64442b08921cedc3cafab389fd29ae61bee31fcb3295bcf444324e3e8ff790a9a93467c9f6e84c390d7886cf92e1c9060164c811e1804a4a6f0f238c393bce98611861b0e4433889c887271c0ec0723987c820fc293bcaa89210b6ef3484ed10f613a726490829b98892080244944414271fa223622358410229f70f2c9c80b1e2eb00753a3651bd941ee6230dc9fde24f8e1f7f7ee4bdb664c585f927b2eaff10e200accabdc09fc87a81dc0b0ecea409280883551f07fa96fbc1480e67d284203eacfa947b8138541f5a10c4890f0b87fd4ab343fcf108445b17039c0eddc5202ecdb7451d7c157fa01725f7ddcb7d5bf66f1adc171b0090e14b6e07fcff20f7524376eeb34fa62842115408c20649be607d90cb81c3d15dcef1340926e8c20919f2347c8fd3eb138f801326d9bea4529a74ea4f394f3d337319b38f5656cc03033760a0bb7ecbf5e8ae86141228d9bec4400f1ea60d32d9723a400dc43cb918a43b26474ebafbc9d9dbd847fda49382dccf7db2ffd0bedf7f5ab5a37ef6fdeee341401dfb3c54ec6b5ff109c76c4f0bc8de3e8c8a56cededaecab1624148fc4212e0e99ed33c65612f7ead0fd6fdbbd3aba6bac7dd62485752020401d18a95faa46609c5d332ecf1aeef4e6f42c87f4f1891067ceac6a15bf3040fbec73d0b81c4a8f91ec38ca3e583e58fd1957c23f4a7ff18feca17b26c7b80697074cca3d5810d6c8e023832c130622fb4b4c4f36d8c894ce39fd3dcbaf3866f9b5848d38757777794ab1b47e9c5608c9a0af8cd01c1267e21c5c849ef4cc6223723610714a2973f831c22327efe8b20f96fd0c9e6a283d8f18469e16ffb02f84111e39b987d7b88fe823cbd30c3e72b36603314f36b0e4f959d5e269019eade6277fcd62231ae8eaee76a6544e039d277dcaf1f02c9fba64e2064ae6671106ce4f81dd08c0150d30070740d5f4419ed306b8cac1bdf9130879be0e1dad8adc8410e6101f02ddcdfa11ebe86e7ee31e33d3a043878eee26c53cf806cee96e7e0e3a527070bf1c9e7ee9cea1559de743607efc09d2ab14a09984084df2ccc973c6f421c207664a101096e4ef2aa05537cf6fa89a4f43abe00b8c26f2fc1bf369114c64ca7d77738358c97d8a65a0affd16f7db50778bfb7579665d8d5e29a0bdf99dd34c1a2616f7e1519e793a7121d109a064da83521a64ab68ad654f3c24659573658379199f73bacfd9734e77af41e334c03c3be7642cb4d5a2206e72cef882caf8a2faca086cc1b64a59263c71c7e204e30832882fdaa330842c3c7b16fe458e3d2352911b790cea40ea477ee45e446265164b4a2db65a7417ebaebbc2dc8b54525a5fd29d4829bd09ccb492c99b749160fe68435daca91cc94a6b74240a43e9d3236b378a4aa99bfca6d5566b3da9cad4da55a452e92b4c0c09663e31be2b77573c03cc15fb9112ee8782990fd4a19bb550736b8ad1aa78e96f344e3d75ab9adff9c5fdeed3a8afc9e47e57d6a1eeba17b588b5aa733ba943ee75bb511df2afbe5cb28ca13cd6d22eb1571ef322c9e4be6491ba504546046428db97b03c93215111ad9c753449ecb989981cca141eb587e7d3022c274b1c0c9c89df2b9592b5b6545af9fb45fce41832240202cb2418922116191215519451d05a961e5cfa2c4bae67f63eaa55965bc1b56fad0ace62a08e3cf5c87c3d3cdb4c4a232c4558a0b4cfd3364bee463cf5f088f1d9c7930c29cf821140837b5e333cf56420063783cc96e3e166903985bb70e6c57667bbb31c0c64954070fbbb8741a9ac7d2d668b6b7f3e3ccdc0a1ba8b3026e8c69eacc2530d2bdcc67dd16ad6aae092f619d4be4fa8ee1e9e7254704bdc87cadafbc72f01508644c890880447726635896956c146ecb32cb9df96fdb5cf5abb5027a67ce68269707b78eee1b9c4830d5f432985fbec67eda7705f0f39e5f5d9778b614e49ca29f679d49cc2236af076a75d3873e26077da6b1cca7e8988e92fd429d9ff3ad787702727bee05fdbe58533f273e44bf95a779d51df4a76ff2963a00ecd3106cec4af131524464b0ea1d547395389dd24eed8a32e95fe4365faed6fdb0bfa56761397ed451fb5b2bd919c8c4c77b0eb2e0789fbc1231d70b8ddfa1b489610487b71941dcb20b59088c41f5659a594b2a5ec08a4551249e6b60d6689fbd1d0c08fedee0d5f2b889f65d148cad8244620b9b9af72df2d75731109a569d413095dc2124f6edbba83997230ddd58891c46de8566b0ffe4420489853e22d2699e04a3c08124ddc2995e0d7c3565bed7f3772e5be9b5cb9afc7b4893b251bfbb5d2c41d186d3c88926c3be75eed8612f085c3797c25db83df4d9612ca1b1b0f927dda600940f267688512aab0c20b289926432bbc5882248f209609902111115400c9994abfb29db5fea701f1f97ad42cbf6de54c59721a11f105faaec9971a117107b64a7e23c915c3288574173fc611f78baf1c3f7e7cb93c0e699550abe24ffb3f1a1140323cc94ff66b042e15980c21f4af1f8dfbc77719a44bec2e3bbe3bf22083adf28713e8823e019b3299544c2a2817940b4a04ca45ce4d8dee6120149d0ccc763509696a7417650c429f10925bfc96d49a3422845460f6656fabbbdd617685fe78429b208988a1454c44844fadd55a93c994652760721ac20ca025da0bc855844685d1260061625f5623da24930b45cb14926828e152a348a32bbc489f8de50a3041482608810432a24dd09e105302bb753763c68c19346850a0c84f10b21d7c69071a921853e052864426d8416679011746f2b31986e5613ecba226f1068310f2b4e43ca29af7ff6d6b1972c18521f7fc5d407dcad52ad5fb67311a8d22f3f024830c365f83236b66c88c109c098233332d4f89078b79789a69b9a7c2f26d5a8666f48c9ed1337a0614d47f31af96b1c1cd72d29db70cb5f0d6debb6d2db40c65677915f65edd790d37d372cf3d205fe196f78383b2ffe7b5b2c7bc522e2f48775eab3beac5130eefc7bd9ed450777e4f0c6896f7e39e3f6a09f7db601bac559efd3798f7d339e6d59d7f5bcc6ba6e5d23758abe49256d158ab6651ab249356d1f7df8c8e5af5321f661befbf396915cefb6f48db1328adc2f169d5cdfbb7fc00d2aa17c9a594a4603738f5c2291b3885247524e5c2495cf931a714e053505eb2d30c334b2ee5eacebff473915a9e58185c43c757362f6b561836f31cc7bd0daa08c6a5c48a9fd1283766312d44ed1eb58ad63ccc6f305fd570deab3dff2de5d48012cb864bb95a37fecc7f2d48170c38e35f83577cdcf3cf2c0d191baa852586cbca0b4c4c0b009852c53bce8030293796bf522bc925bff0a516d499ef118bec2debd360985fc03cc402e0cfcee0efd6c03c4802e0cf0e007f6ee4e10f8594fd3bfcad00657f01e00f9594fd0380bf9414d93f2583bfcd49f677017f6ec4e10fe3ef3efe5248b23f00700bf87323188c3f2f88ecef823f476ac1b0ecbfc5bcb23f0deff5793fb2bf8c16cc8364f15ed93fc606cbfe2b2997cd5fcaf579ac227d36c8677fbe1a54bf84a5e42cbc49ad9ad9ff4219cafe2b422b477a4563e547ab20d10a5ad95bf9bb4979c5a795fd25244afe5682b267482920227f2b45b2ffb7f293fde994a5a0985091ab555f35caad560969557c42cb5fa9552a921dc667622720da4701643c010fb2ac6a27a813df852ee17e56151bf76cee7e302fd3f9aa9a9ec50977eb725aa5fd846955f6735aad33c590bec57ed23ed3b8171a60d67e0698350e2bb956fb6f6b0d7ffd1497def43ced239be8f3b8a5f4375f558e62d900c8f2398bc8a0cc574a39994a29f79eb47f5309b26284747691ecaf3d914f23773f72df97ba15857407c68d41b1d59de68a2dfb9ec9403dcb43b8533f46fc95b735269ab00c8cc2dfcdd9b3e06fcbd9c7c01f4cce7e057f2de48ce3213eed31b32c45163cd1a870293434a7ce8815822018f16101515aa2a8dba6b843320a75504bc80cee17875a5e8a6ed4d986194f37ccdc5f2af9dccf1007286022fbca839e7fcdcbbb0b89ba8e9a62894607ce8708858f8f110b088d08249691f85f73df967b0a289a88ad66c261d98d62d9c8bd0bc4e7874fff88e27edd5ad2aa2f1a65ff967b2d5f05f5ab72df7deeb346be3271b6c441f752bab89f4d39c2fde210d4892d3833055cc524b86fdb5656622b0e693af80ab25056dc7acabec6ef947132c4b72ffd31f74b7371282269cf7f4ee17e062a22db05bc6c19a67e18d73e9671ddefb3c7298256b2c81e5b7108cef8d7adc86afcbd0e5f994a7fca10074162909b8bbe8a9f35a82200ec0890041db0f3ef16d4a9b9837a48f6f7270116792567b6adad9d9113315bdb46ed56ab3afb37ac555af44a066948ab2051134db2f72bfbb7902870fe3a28bbf7923e92fd6bd7d0a6d30db0890eededa55804a27dd0f941a8099ae0d7803ad94ee93fc803cfade81eb2cac7ff94873f735538e9b2c63cdd209160c427a7687fc244340dbe502a953a9738229243407b8dbadfa652fd683fcb320ec21953c9d64a44ba9c1c27d35e93e0c26c4cd06cf747adf132dd6542d424499e902bf7516e079a5c6badb5a6fcb8c255c569082b04022482c0187a35118d6c610512321858910402152bbe80346aadb55e3144ae95524ab98f45ae60c1154dfc7f0b4f98020940a4c882eba88890207ca04004414a08e2084c082360491864f93c3f593e0268f0550e511061c81451920c0102967c1c44428064f9106895245a220a792543a2258cf2f734da102d6b98cf4577015a027683e7930c31d3169777572bd4cfa04c9ef2d4f3dd5587813aa57797c9257ce10cfdc640d9ad8d3c2d239604d20dee0d243bf7f5f0eeace7fa377e72ad28a44aa4c42bd72ed75abb7a8c4889564df12132c2a8daa9a2a9511f7e37b9d68fc182fbdd5cbbfaf0a236173c641fa6dad95f2a45db2a995a1a02895a436a0982885a43885a42bc31246a09c940b40fef68c4c7ed80136688fbdd9c51508ba88c8271ae97e02e53e02e2194ee0f217c1e777797104a2431c277186317e16270a1731e655a0430ba94ded084c48d2fa39534c8dcdddbbbbddbdbddbbddbd21f466418642b1c8e82d2784b3652bd9f9134e3a858c3c3feec8fe51ce762fc20914a640a27640c59eee3e65d304d1d83929d466ca0e6868ee26d3d598c204317e10b57eaa6885e0b6eecc90a8e51383284e2021058d08892cb29621111256e4ef69a4d1cb06e80684a213349d7f7bdd4939286f703d43222492a8e8e076864448bcf2d7d1b40ae6c803e90a4a281104680a2bb0da89dc7fabc8fda81d570c2912031d206501c6ea266e00d34359d62027f378944a6be52eaabb3a447d5ba1921024912b0e9e4c912b17a7add46badb512a1956ba5731221f14569014f649045104d2001184984888c10a9595e14cea70c898c2821add0da93eefa9b6647c2e147ee6ddd45b9dfd699b5c2f58f21c5fdba1c5fa6468d9f1a3f3528029c93f1a378e4defd9a546d15aeff275b328afb4968251e804f7752ca231b4497c86077b15d4e0bbb942e829c9fc139df87ee268c4cba1f8cd6dadd5a839de1c09123eec82032fcf9cd651fba9b3d3db0f8a046accbc17e3f8e1c3d67f81d283706cd0e6a2c73b415fbd0dd74161e5c7f1b7fc619b91eba9bcf83cc2615dcfee82a122b2a32e24563846b83e96a5c01a6ab81433ecc39da8775faebab49b17fc535d0f7897f2c4bbe867f0891c3921f1952991eb8ba82bbe3b35e830c0af7b3994abf5e3d2e170d0a7abd2a14eee7403d150ab7833ae8e8c8959454a17063bb9cb4f6c36070063ee54126a36d39b51a04dbdd14be300f006c75cb0f8382b9a89ac5ad40b8dfcdf007f7bb9a568b6615c29cd3dd7dfa9c5e9bb8ee96662d7fb6777b7bf7f49f75da29310f973b68323576bfadc658a270b3632619c6e8cdb577b79c73fa94ee5a0d028d6255546a10ee6757dc2192a6ddebbe839c7372d2bbb94f8b11834593a141b8b2125b10023dc6eeee8edded4ee6a4925aa9dd0af3bfc5ee9e2dd3750ff33032ddddadc5eb34cab5dac93fc5767bdf9595538fbbbbbbbbfb6cef7e2ed6588de128b8fcf1e1317291652a340a155468f7ca53cf94d46ab7c2fc6f1bca4a1f99aefb87d9a2156ee43e2d47a9426e7c2d0a8dd2d282ea84ea84d50a3e843e329414e7681f1610196a4066fa2f35c4a04c39e73e20725c96fce8bfd460ca94e3a1f2f9c80ea34ff4c9eecdc4b24b5993b86d811dfdf6331afcc54cf31964d1fc3dba4749dcef2641c823b3015218b9c7c9862d4bee26c199761c1c1c18686e686ee4e4dccc1d1b9489d47060c0d1d13992f2c60d9cf3d206b5b15ac5f0fe590c78e75718e69ba9041603867985fb068659868c877906c41624a2fbc5dcdcecd8a0d406a53936e6ce4d8783577c567e08e0bf98578c4338f3a98dbf9938dc6783bbb9d9696a83dad0810187c2407128c5d1b191f23c0878298086eefc61d6deeccca9510cf3550b52cceb06e7e74b0e8639714b520b12cef70df7519c87e11d86bff1291aa45cd0f3ce100620002997a4302d8a524c543ba9a39493d4135c8499602d700c2fc1b098171c3952aed45097e4c56840c0cb0116eddce468d12a1d1b430d705df9b865e8c50588a42d482d4f5a925c805c5a2e412e435c8af46a05085ea1858faf7a836d5acc946bba449a85bba4553bb156dd1431c146f8a8552f370f73cefb632718093fc1507c5aa5f3fedc0fcec68ad3b9c9d9c1f108861b381e4572ea8972573e8b36424fa9a79ed450ea480a49f6314f606aa2cd06f30d16335f40272d7a915e9356e11c39f19eb40ac74bf2a00ce047ab5e26e7e2e3d202a525a9e50946e2c2fc795e0f3e78de0c4cdae28fe8137d96b0c1dbcbbd01cc4ccf07eac49a872e2eeef9e521546118ecfc5fbcd60af41564fdb0f91a9e872cf955283fcfe3909f87fbc1488e9ae7f91f6c3e73d595e3e3c0f3f933f743cdf370558815bf06f9ea8794eb7fb08c29ee0b0e3c6ff336cfc3d520f76c70cccb3d3a25a532491848b2d849c2c881069424ca0c38a3213a2514312f5fd9bc7f2daab1e16ae029871aae16bd5ae592e3675546ce3453ea8869c98ddff94bb9623cc560726bdee65370559ea769947b83435d78e8820b7df3f0d463e31f07c728e96edab8e1625eddbd4e3d314a288d79c5c0bc8f4174bf9857a63926463b827d3ab582083972a9a8080919f9aae6a3d534fbd35db4402997afbc970fd5c8bdf8363538065dedd4e35171e57b2d2c8f2df75c703fefe5d5a8217f72a6a26123522e5ff13c0f67736f0daa0589bb2fb9fbdcc3534f0a13ee67ffa55cbeca6ff39fcd31319f71ea487b0edb7b1bee63b0f8c810c330ec7d6e8b9458ca9f5c836500a96878480f56c14170c65fe58403c728898111e0e129e6e51259327e0af05fcc0b858ab122338d02832eb905211420865685b064715ba0e1bd62dcaf4250271958720b928b5177dea4c65e70b0799ee7e17e7869b1f9169b87ac1aaec6dc8bef83155fc6d16d19fabc170e352fc38bfb6db07f9697388e5c19e3331934ca4af6cf6440713fef35b3a43bd4b34c2ee5aac1fd5a86865af5cdc032925e45ff1958ab5c8c6696b4cae508a9552c2d48ddf963581bc0e679be65b6f070312ff7b895c71ff342a1625edaea51a71e03bc57b17a8abf158df2f0d47380e7e9396ffc7c9e0eca49b868926d324cc2031fe48cc60bee97721d79afd24f0b92af36987b2e9130ac2e3174f3f42577e3371949dc9bef7c832d506379dae0bec9ed50633986bff17ee30ff0fefe5042d5eae55ba832c0cbd7a02ae7e5d718d4316595a03ce7672d18c16a34ca9541b89ef7e2e27e2997fc94ebfed78254c3a55ceeb5d0c5fdf0ea27de41fee43c4fc72c69d5cb37c932dd790c0cffa45c3e9457fce577328070bf4e4a3ae79c29252958ca856129d74a27e7063e400c7805a83b00fcca0039326478302fe69ecf38f5dc88e1532e1d9d471d497973f3990d0cc3cb1dba43e9ab553366e4c5ba734f09ccd3c22b6ad58ea7c45be2c124c51e0cd82bf25eadffbc1b9cf33a38861856393756336e7ec6a9c7c6cdcdca0d5e01b2021444864b0c2a6ecddb7cfc946be67de6677ee6bf2d0bb947e3d4a3838333034767e73389777666b8eefcd9827445165ac8b8228b2f4eae2b7e20448ad1155a04b520b5ea6b19cab1953d2a413718c52d8df3cdc7f19cbddca496b4eaf35e379c0c9d6f52aed41125d925962af2d58fe9aa4117d93f65946ad2ab1f2a58201141f64f39e995044a216915c4a20647b27fea7543a7f76ad58761b0567d31afaca455de9256c51864c7b09857abb81de40f8e0ecdd98c1d1d9c968b83f3443b9fb9ecbccba9476767670767674767478786064f3dabe7692aa7a416903f79723be4c3f02d49ad72d1aa12be4a0d5d245fa55e2d4930c0f092c347dc14d4d19c36de3fb381757eeedcecdcfcf3346a0997be623b38f5caa9234329252958ab761e07a79074d7b3c3a5867030ccb4b30d0cf30dd6c12918ca9b69d9f8ef6ffedb5a80bec22d78af1a0ec3e4dbe0bebfe1be4dca9f18f6caf9ec25e75f4e3d2bea4739e729ce6981d22a18b86f879ccf51ad3e07df155ef159f9d15d4de27ea5ebab971c356ff3369c0f365fc35df7e0fb60c187a71c359fd5e052907b4ebf06db3cc50fa8791bce87f8eac145240eade07e37e98b43b924a43bff1a0c591267c047965c6948770ee14acad7813cbf0643161644b00cb17801651b196241f4817c8f5a15f2279c13ca39e79c53ce29dd089781b1dd30d6e2e80ec6dcddf6a90537baec237b72f7a42d6e5540411313e8e089126c4f0079c2277f4f1346e603092b46b005172ec0419122163ccd9ca978cbee6263d9f1e39cc1bd57513610ee437633c95a362965f48ec6dd9d7b00b84be9ee6ea3d091f093524a2ba594256c71bb943e5fcae852fad4746cdbbd10721f8410fbc3d30d00c83b7ab894deb4671432289d839d2106fccad914c2db57b81d06168c10b1e2839b02858813115c548644458a54b4b83743a222b0222f18c47e70a5fc11acf829480ca0bd0510ba2226d4cabdc1ac90000b7777777aea912d20a941ee221049413e81004ac6d9bde8428b2178211405d19009054c380f5ee80480e1031174e104134470c269e02777072ac25792159d7021776909d6fa532147d8287c4c512051a3482ab9000b14d028842c939e286047403d520411b9208988d8078618120110143e442f48c2043d50c000e64451feeea73081e629a5463e3e3e420ca9b556d436e46a0f0ed9d7856db11f2a6a0f66a789b5b65cb91ac1aa8ff25c6bad750641ed4121ebbab9670643ed517aa1d0b282092d2124b92b1912b59c90bf7bb76c2449e6ef3e2d020e8450528523b2d64384f69844502ff163fe1b04297f34b19570fd25d626ecf6bf8ca8c800e3c2083fba4348030b285bb5a3399893322921ed778a25e554fd9fe42c17636f7fe706f802fc8eee0eb71870ec8c4beb35e00ccc4143bafeb2cb7372738828abf4c791277d0b57a5a7dc87a3a9846d479f6e9583525a59290f32c77721597777370c6e77773f71bbbbbba7c8dc3f9bdfba953f9d52ce723d84e4e0ef90632de2ca87a81ca5943bc8b845fffdbe8665f2b06d77dbc052939695ac9645813ac1d445a9643fd28fb5964aa552a9542a9522fd586d8c7208db758b2cc6d8fd3af8aa5918f055e7261d7c957d04224a6578515c84f08598230375e8c7ca9df075af5fc3560a321f5f19174f46b8b189b2e99354916b0d90a85b474e0e0d4dd7fd6f9b094223a25c7aeae306b93e7d3fd5005f258a6f74f7926166e772aa10a5ae5c645e649940c9c48ddff00a99cf149bb811f67b518c160a40c85983727f3d05dd68324aa22da5d61db5a81fdcafcbf43f994c2ba555caeda214e023b70ce576d0e460c227474e7e58203748863116cb81bf6d737eb30913a50fb3cacf93267f12b9eef3a4c99f4bdcaf7f8074ebfe6c219283c1c1951fb3fbc4a57fb82f0ec9f181f40a9a285681b1224803c1fdd3ddfc14dc40ddcd871171e5af8f5a056144843aa955f31b4a9e1f94a7731dc49d6b27bd82ac7ea2c3bdf92f0b8bcde843733b954f3979c9f4472b5cf4b1dcb739f7bd07b9fffc3e0223f6c5ffd7f5519eef0220792743a2213dc843ddcd4692677d9516dc12d742ddcdfef15534726f3e4d910af775b1879db86f83afc9cdffba3aadbdf7e775401da803ce787d17dc29e4ab2e0a7d3106fb2de7d2ccdfb67bfdc512450665be0682117e91238c428e108c1c5f07e7fed9b7c98441703a99fe743a9d3e62d3a9d6d2096bdaf76b19d71f6b4fe55ea63ba3ecde7c6ba711577ec7587fd687993e2a1e398949f3fbc7fedce69b304f6c7517bf816a4f2628f10188b80226511cb1ea03116fb085123e2c233b1090e168d517dfb397341c71e3bb09dfe8315d01bda23448ae9b82f3c81fe4646900fa9248e55ea2e45ee2ffa85e7e86e13dd246dcf9b4c79738696895e71fbd32808ba8054ab2021ac6becf104aeef8537e322f37a36ab44a06f9bbc9dd918bdd2dd3aa0824ddfec83210834e023b4628b44022498cb11b8a269bf72083321fcc2b4bc8d128d7b6aa25c3cf4c4841e40c120aa295c2822693c20c09b9661074a469642935171349b4b6825c43300ca123485c49771205cbf2514a9620c9a8a1ee5e596a2ef7e4518ca823ddc9df94c08a64897265f942097527b723ad9a3fb4c15041ddc921f1aae09565fe50481fea284b193eaa280348a482a02c1ff5048574247f1b92fc6d2e870e9d72a8a356b11c75275ffaca9f05a9677ee638c6d0f5c99b4bba52e024cf170aa955518a2c1f95d4aaeffa6cae252b67c9ffb60f05051594793892e50b65f98243fd8125889bfde61acaf25376e03d387e64efefda867c95714699a5e8882b1f2608a8421d41981f5f41d675c584503198a02c514df891617cb28401826965e96a1554797f9698af7ed84e2f63ca678f43ca679ffd0f2a1cf4148ec528cbc721fbc1390bb98fa528cb9731c5dd4e9f7df6278e2596651815734ffeb66df237a36d930f9764b90dc5b27cf86d45593efcb62659ce888a41818af92a7bf9a81fffd39f70c8fef427ee07ffec210b9e72700e9571281ff7e4dba0fc49a0fe2cf321e33223c719927b992624c6a8b5b89834b1364413d28ab40ae6223db19621f90a6a41586b7527df624d4877f223d68260dae6724f7ee925870fdbcb3df9ce65469bcb6a4b5af5a190a6b543ad7289795193eb62c1d0cb2d9d28a4567d9b2b3f69558c22cb235c59be26355709f3204df8cb96e4245f41246d48af5abeb22cf999515624e8288b0d65f9caf26bebfec8f2a10365e9caa0dc8f26cb8c46119088063fb921d10c8ab4d7a729e94c6324e294fad019627b845acae7810ce18c09ef5063b6bb1cf7e45b2c7de08cfc8943e79efcf155e5de3db9f567f4856af2b5234db27ccda8554e7a5592af2109d2224bcd95e5a70d65a9c5b2d48ab2d49a64a9bdb27c3a2350abbe1c9a20b2d5aa7e21594a0994a5bf84793995619235d499eff5ed1f01ca9f2191144827393f9e6c9099b56594c9b373bf062af0f9983be6fb3b963fa54cf641a3b732298ca45892b34cd20cca2867e84f5cfa8aade9a7c532199e16909a567e9572069e83a8948db555454c19a21100000000b314002028140c870483a15028c9636ddf0114800d809c4e7e521a49a324c8419442c8180288210000013023223232330200108b5178d8016f5d20f7dc2ec144d7f58837489ab2f6ad290a49206a83a40beef447b526384149df70810a82606d3d4b890653c0ff666c58f9955db3891cf34ea95c349414dcb5e2bd37e55f4381e8dbe586dcce7d25bbbcec0a047a67a6bf7e873a7981315d218d8f22f0677458587606a9e44677bc70742ef5faa393a8e045592b3595a63cf4cb7c4094294c3e70a4febe5b639c163366dfefdd2dc9ca2393b60c1d424a598a1d60fd1bc71b6fc8679366756d01d846ce3c3e5156542dca360ce58c955448fe2649770cbe9215d150841ac6275f744b56eec4d868645f0e3e44040939765118f4f7e7c82a6019ae3c990e852a085db46f9da5cb60234a27c76950d3516eca33af8396503436cd775d26a6064e66111e72cf216b5b566671783a47ce65dce25472aa3e690418cb96ea84175aced18c63560aa56cd9cb4b9b538e0902d01cfca45c0b32fa51e09463eaa5b291432ce34dab2c93097c47c3e8d477c7cda02685fd3b385951f0da1dff22a8ed52757eb047140abc3488a4f3b128c1123e7845ff65282033237d5c40e2775e61084c437664406cac494d5249f43c16f63682c50f8103d7b464902d99a13dc9f290fd9f277f46954ded5693e60720a6bdf5dfc5d12ef008ad87940411241c6b6d127cd987be7ef2bd52917047287450b783d6595448262c73aa1c45838a32ca39895bbfc354eefc71ccb1023db0a20e029f87a5a6afe7329a062352c3339181914021648c59e6a0da24f1a37809b7cd50e5743a9d55499e2617ca1ca0f983a679c3c4883e723439644ff2e8f82ae6dd5a8744ead3f40da0543b67a2805c428b5c7021ed897bf561128e0a4d174d2f46ca36b2e210550e653c02e8d22aa17151603b4bd1fa59da2e793c79cc050041ae26f5c87f606af89fc41d11eb0892a74b0deb9b2ca5a7b6c02094cb6c3a0ede3e69494ee4087bba4c5183c711ade332c21e71173eee2eb529c6e3c7e172e6728902357ed422127ac3183ad294e418cb0a331c5c0748a4bc07d539f75a3b905009b5d0495246a4d120ebb0b8224b2b9e0925b5310398377a5f0dc2e1a34a39ab4bd2f7ef0172c51bd9554d077afb450104cbaffbdbfc2a06e2098b81e4701f6a9cb67bf408e049ccb24d4d6e93c282edfa18e81c858107793ce58336314d8efd4ebdde8ed0d7c740f48aeb483223887c4aa32addf190111c471d21bf1b4f8fc31900e24806780429cf70c1bf8c11dfc148d499d841cf22c1ebc39351b6cbf3759af06fdbe61d2f756951dedb498865f0d1bb3c0a52d74c0b830ac934eb908684d49b66de954710e3b8e44cd7be51dfc7fdd1136403865c7b1b2d4187591046c6cde98d5e1558bf6ebb04baa24be0988795146a4ab6c851c742e10b6537b18f52209a29cba7bacd74ac746a3f517411dc56b597b75e3100acfe19ff54d8c9cf8dca6e5ecefca9d4637e10b299d732df2c8ca320e445cc712d78539b9dc614052e1a31de39dcf7e311fb45795d1cb7488630f8b49c846518c86c002714e85a1a9d5c80e9854a89a624ab9c7aa0ee7821761223e41fd70f015ffd08fe218ee29d163ea89b2bad04cc90e441d4106ff8a03775f820f075d002862541bf1e28078b467272e6890a28e75afc46886403a349e0c4e358385480e4ee43a3b276e40f9cb96dc784350b0bd8427a921cd220d0fbb081ab45cc3bd809238ac9357302894fc989fd06b438f9c55e2281e85ebdc132e03af5f55a08445351b5c506d837e62ca54a47df9dff87cf089a8101c90ca3c3711d41d3fe86d154b194b5fc76839ec77176bee71d34b6bc32ee5de0a0f435275dc1456f6931517953797e21b08b831e07a311d37cf6de18cdf8884839b8de66b655e365b6a382f2a335e095467dca70d66537fe1e2c17c062c62cc1c3081ca7e352c5578aedad16dc320f6acc8839ac26a7203a6f34251a02841fa9f2ac1bee5c613342492af6b5885af0f87fe0b07f54826dc2a0f5c520409dc3b3b3c3b4881c04095d0c0665936dd3265026c46eb8e9c4396a38a93f2818e7e3d4d2c483e1c89f0336badd535a3ec9a5db19392c7b6d921604c8c14d3494353da224f026772ee4ac614200802a39583be757bba9fdf84add658f5b19543e191941402724ccc5df7fb796ec658b823d6b630d69edfcc0d805d89ba982302e39f345181d4d93e2901b0a93b9e0c28dafc691d96ca60c12debec3820a05818ab0989d44f3fdcd120a02acace4517466130436cfb91c48b2b6d70e2217d5d40d58da56f99f87d71ca5439fac232e383c3dcbdf06749d7b6f90e9955b1b29cad9b57bc354d176f9edc77e809799376db0f56e5b5b585015cde00112358b586b29b2e2240aa44084a476366ddd84b9f4416e6af0460c849a22ea0d4694664fed9c5e62f81c2207f5f1f5a8b46e1f0f892fa04b246c10a11b8904eb9444422726327403122a6d2923cfcdc4815fc3920dd65e970f44165dafeed91a6022c46b3dbcf08ac436d693bd5e7cd4e4cfb0dccc963f6d782e02fde937055f619efe739fba254f71e8198cef038ef66fb7a5cb124f6c20215976c686b6b6e1db7975789f573c9d1f7ed27905ebd76cc361c5623507610a5e698e159a68a84648ced5aaeb21d7cf3e1580ecaaf15e225ae700e14128da293b8f85364691b39ff539b0b8487d6878f071bf78ac2088573af022db4b096feadfea389b6819af18374fad1f4093f93a077055106dfc8ef1fc45f017f7c86ad34a40a51bb17c859df3bf451b57805cc0756695b4aec3485297a4e5f560eadd80013e99e6bb4c4147de01ca2df367aaa9584185abc577f8e91edd372a94cd5c50b55a8cb9ba573f7a90b8a0e724266c96f9c43b4bcd72ab5c18d18e631ea88c4df95245ae14d58020441143040108b63c770019a67dbfdc8131e35c19f17b1070baa51e0559c3ef1825b70896e5494399bedf967d2331601ac0e1d6f4051165eba3e885d8eae3c00a050027d126db0e26faeeb4658d36926e4691e50023b1692550c9a246fc5d8e5ee6f60efb94144355fe5c98001fb237e21ef86f752fe6b79257576bb0a1507cb407a841e4c016e3b3f322ac410133d30868ea6b3b4a7949f49f09864018cd08a690756872c6d48719a0bd19e5b5a349b0cd42572fb854687b2778586cca0f766407798b2e2d388fd38ab05af5281f22e8e0a15bb713ad5da0341744060cc0942e4617409da43317f5a9c3f94bac340a72ed19c1de163b49b8844d21e9c06b74adbf9a6d326244ac2086c19c4584ee760900c319b33790f257939509285088190f3988fb0c6489b6b0ce4b446052aa23e06020f742a01b27ac85060d020e286ece26738adaeeabbe633642dea50ba393660dbdbe72cf4b20e1f12d381f7c6d9e72a4b3507532e1394c1c3262eb24b03a346f4a624a002d294bebaa9b48e9ec5aec45c7c5e6ce55b0b4db685cb18842d185c0e94896197e5f92d4a0a9a2651aa8ecc28bc9674c871cfa26745e787082c278d91d664acf9d0f3dc16d7ccea857a718d468bf0ed11ec948fb2dbabeb292de043be73242d71f704248cbc6eadd7a46139491b5b4f758601993b0e601972b7e93949aa64901952231b86f05d9f63a6bd3a27b5573124691981ef9959991b21e0c7fa8cb03f3490634e9f3e5f809adcc74132361e13be5d1f11e0ac9e8052e1210d954dd4b0815251465004c7170ded168f833f458685e36c010d98f1736041d54a6ef6982dc2e13067536b686da0ec5f29753942f10934b3d0e94da7d2c1186b17db13e6b4c852a5a608a82051f005d1039d4b60b859488b47a0903553f107541ce1fc13cdc5ec274023eddb3116d648f45c58ad4734d7527b1e33f90a1588073b05d498011a84fe75ed505100d70b48d99886712244e4555ef7c4fc4e02af2f7aab1bd204d43a66a0316d062d5ee936ad23fb4da81eca462970da5cceb41079025e5327ca529421cbdf708f4ef52d4c74738c61f0eeeebd0e3471d657cdea2f1480d7fffcaa3cd03d75faedc16435baa1ef4aa4c75dfd2877c47493441e73054a2f3b86712ca2c30ea457084f2578a0ff90436411730e738d54668380e08537804fe162d27d921ad4cacd4e87239dbeecef07265b3399d41c7975f3db9062c847b8b2975a883c0a35803a7475e378f1dc8a988ef6138be8f86d446b88fa7d6acb247e2ae8d79c1e8773a12e5c7426ee162549862bb48cc12005663bc91e2f0540371f296c8d5e5b421e840ade9ac8d11e01b43e6ab64aaadd51c1453c9981cd6385f3778e593044d4c25765e1c653b11c69e28fa69c6788a3159e9475ca6d18f01cdae89296c74724c24edff55ad5287e2737f9d1a469bfd735c5f7fda97ed7bd0343ebc902500053f4c5be8cd5ce17a1343d5c9a5c51857b00691ab89b9b00429f001a0fc2dd7e2e3db3fc9a23f4b596a71b915758266d8a7bc08ab59ab8bfaff9946400d1f1c20d71fa6cee6838a27b7d6a61447a6ca6082d9bac84514b055e9eb359a6f456c42e25ace3d8ab23bf4654f041805437b69f56c2b0c4c39d70359f1cf3cce55b4028484fc54a2d2b119ce505bc8b5cfd112119b99007338525d7f052fe05bbbc5da3a0da506400796a6fd5309a1bec2a235dd630ccae2007df50855373dea50f382d0ffc53b17012c81bbf39d11b64bfa8e8be0eb9704425ded42dc63c7094177220971c39f12822972b2f8ef1cac081fa211aa60209f57125514d2523bf34aa2e11806b4b5830d7a849e9104d05912aa406fc1471ebb673002c057045b7b12c4386400ae7ea28a1e0bcdd4f3c83e39498ec9e0bc25ae9f1c770a795bea31a2e02d09e71df4390b6844316086452622ea004ff7e7459b58ae109de22d9df0f627cb92ba9c730245522ec6ee6482311d385c7a04f31327749463c3c022861080a423911c03d50f746b9a19e482a2f64b3a99a192c52620ca448e9afe905bc6146a1da622ae05d523f035f64ccbd80d3e7639c20b01782eb3fbdb472e6165be2cd1449054897b273e025e04b3a4a3c182c4dd05234be914e4bc9e5cfb976b88968cad50b5a70b3830c008ebb31f20919725770e8bc5fe70f39fb961049b0c4d53f38b4673408b64111076a921694f170d9a7b6aa0cb02d84b86065daf5d0e11765509ade96eac5f7f6e4b343ef081b1fe71f73b638d07c9c8c2305908771c06b355ee2c9cc724cd228db85421c27b20c916d62c195e8b46615d0ec8dd474cb73c9b4d8cb30c12a96a0b1b9de880ebaccf7f93e0d252597fea64472439d5d40d876c1c01d44d28d6409b99807d6baecf2a321c603617a887e0d24e60d35c3c05f93bbecccf3f6afd018e652347461b4cf0f882a0419a6114bbb5f5a880cfb91970c434862269e83235d609e1a49eb68d610671e577c67b2481364c688d2a50658134f8171bb92d742f546dc9aeb5170bd5608936eeaeddb40702a292ce97fdfd08ac6379d48f5fa54113900728ff4da10e4240caa768776aa9482558b639fddf933a0a86d1e514266c9260fea3169ebb5978403c9ae331005e441db6a81c7f2afb393478bf5b301d35c887db750206988775279bfcfbaae13f7007c665e9f2c0f28f7371c2f5040a7b4c8c7154bda561078fa3f82773ec43f974d5c1fa016038f7b20c4665047202ea52e5f8435d910791e72b43ad62660cdc78e0bd98b8ea89031e2c7e685cbadf04a3e252a35a1efdb225893304bbd548c48e9905967fd46b75a6bb00b1ecb0d8187b4551879c6b0afd743c04d4dc15202f4c1ccfe2907668273792719c96652100891f09904962141da61c1bd89a80231aa7fe65794b4e5b506f1830e7b59deb0b79e4ad966bbbe4e258ea8fdfbb0e6a9e211c41ca65601262b09d91b98d91e0225d4e621eb9530844cd1b0ed294592bec7906146097f5d4fcb269ec27844e29173d281fcc1076571c8587d0a551bd88b4ade2a014a4c1404e9591bc5786aabe6998ba5c70bf3cbc20f01edc0fc898c4a024ffe61948b8d9cf4aca19e4fa02f0acebb7f3459510df0d6205ba77c3aa2449d8b8c57395d9077f57574c2200ef348190de48dc6803764b42bb4bd1f6b891fcb4b0ed8974ba5300ffe30925177cdff0a89d87f23e9c3e206a4ee7c34c3d0ec1a827483e0957bc58e9a8d5445304e92118e44b6a4856cc349195c107960c32985180338e6ce86bb4cb129112bada37ecfad8e9cf942e7864a4198834119986634f1b5fec86c845f9014066804ebdd2141e61b758cd1fa7d1a43e83c9193a776815dd19fa24c7d1e7d66df0491ef83ef52c25d4df98e11dcd6aa46bdf6612586ce30d551cb21e617b5baa421d47d64b7533738a08d78550c8b991dcdff8c554bd5c855ef32ac7f692c4fa9fb7c48ce26848b4e2d8cb454aee3ac1962087300994c16b641645a9edc5a684d4ddbaf4352f3d1975da0b3aea3a482983d270a319b5607d8f34a1fda7e6e4a9d0d489d53a33b4239fb0b24db278eb2c3b6548242571b82603d136d14c0c4d0e1189c5ede842dca3dc81857edf84e442558453ccd842a08b8b42025c27da2f02e896673ce95df7c0af46cf6310b85f192a133b190c472113fbcad71fd06449698221238904eb2b73791bd151ee26a7c598da404f8130af3001321eca52d70d21852b85b2fae9757b50176e712814bb8a1ac10745092c7b86e7eb65244014bd2d63d1b161882094217e27263561da5cbba9d5df7c8337aaee10de083d0e03ce14c8920b8ea849428fb5ece9083357d0f8fe15350d5d7b8ed351931cc628c0b5bfb8fd3d9aa8ca8a073b5c372127b64cd8c3d90f0aa27ec85fe4d6f5b73d985e42c6457f114fe5f02ee19b983bfad070426308de866c0daa50af576790f60c0d9c5a7562575e6f70d30080b0a7bc9edf856f4f9805c3137859cf9f8be459f3d79dd1dde846784a1f46de8a9d680305802ee2f70e821e2b7855d2e1127e8f3e8c3ee5a08fcf8c01c43e61481e4a686c0fe5225645efff006d653fa9f5de25408fee963fd63628f5fca9dc8efc76b2abd34b6cdcce314978311d6872284737267f6b45b438b397673da1a24f47af1906677ea161a8e6cb993baf199caca9eb1c9a226f44bfae7086f5d7c5d77e1d1040757426e20c605dabae8dab8769b762c2be8ebd41d181f3c85ec444b8af41889514cc2bcc2d7227d3cd28af127e107eab1ee02f88a65c42638e5880ed093f4aaebe2122933fe51394e099bb21026cc01d7981c93a3eba83e0db4973b7982390d60144b01326576d0e80ac1839dc4779b8ad4191f602eae05e9f2369f20382abbf3ed509ec25fb3d4aee26566c5f4425481d1e01335d5ff0b8d572d9006bd7688844db31f4a2b9d0f2b903f0b36ac281342fe5706735a400e288262090f7c0cd96220347a01b27ec861ff6446f2a59d8181e5e82ab01170d6197dc962d6c0484b4378c1fb038ad47ab9ceecd17a06e26ee58069916b98e1087485c211de3471a71c787b19de5c30416f1e803144d56c6ec73ea8d7f11800639428c6c93e49dcc0690890d6a9b963a9ff4447e121d9330404be396f30e23fc2328faaeb3c15827a4147d9a1cd81c60723deeba653c29980090e1e712e627b63f090e6361840f044e4f311bfa420bd50412c5b1a0bebd6165af28775d994cc4e7583fd95bc1fab9d0bc6819646d7640081765a1b85db175262d10de9ac3b5e5b611597a65c4dc79dac4769221a6c27bea97da7815a61e6d4a5ccd6afde9637f287b6e942dbd4520a0aa6a0c087ac90e95d285a0d35377b2c4c8cf9541b1bfdf1f7c1258f62bcfe90bbf481a42252694571e014089d042c7ca5bbf529e21c458f2d038d0e4927c0fcecc3395f0a9239ed46515a24f77023922f17a59289649c53e2513d77233122a928ba407be3b40e2828a5c8784e27e7660574045aa06ba583785829c708e29d7e3b0ae648dc61c0a00c4314411f0e38682d9b699838e66209bea93d2a1988a257b0edd485b1882bc7ef150511f6d44eeb221cfa68f99f0138a88734339b533e3ab4a6028c28c6e020cac05438fab131e2014288388fc5c3528a77cbc18cded31727db3935c053c46ce3afadcfffdcc1b3b46020b8b9919bb0fa74ac85a37638479a763a467744a5658fffad50810cdfb806b6ba780b025bc3d680f720ab63a19f8df2bc74859f26e94b8225b8505a73c9c2c886771a8cb0213268cdc7788e70292afa365a10ae458a8a8bb2147958434d2ce2cc7a0f3deb07aaff67998724f030f87a97157d5bb2cee6d404b0153438a29563209984ce1ee71ae75868672e637464a6737a279edcff5b8680fa10880ec37fc71b46b03affc574f4f63c418e9a5949e486bae6aae65c151cb67d970ddf629d3ed456237bd85b7a06e38516adc1f2ab6f0bae126ab43b4710e44c03637e340417731ceec8e1bd1647111b8c8dc278622bc578ec0fe936b4e5ee742404525955356875aad3a10022ed223ec89a443139d4e02b1cc27321c0aaef600f9f6ba6f91461d65a90be0aad30416a2be2e9d9eeba19a284fe5855f85be6539c7278e72230a61fe4db3ed45637515e5cc03398217ca766822d738fb00fc6722c505e61e4f07427162bc105ebadf69200e6703b74b56caa6ca938b20aff27a0b28583ede52ce44fa6e6a91c61369de5cdea95486cd94863836e9e3c4277c076b718f5297299223f701df40d5c514192de90fe4164c91dbcc69a7e87fb4425c7e29f2be3f3594d08e77e61f879b06942c018cd0962289566e274fe0758f6bba32c66d3081e055347145c80b527d784d0feeeb02a4b7c4851664345e6a111de37d5e14dcd6a0b65eaf578ca9068659fa5dd6518658fb6295058821e70f91ac51718f815e8d786b816a90c48ee5b64ecc39730350f31f70eec5c3dcecaa0e3440b3b840f0ca366824477178eb94e1dd4c3c08d05f859ff9491439a6504c25747c249c7274ca1584b8532e2ee4015c7e2d65ea5ce906ec2ae6d76f1de3b9cd691c05ad103d2695af15f6e1be73616120da795ecac016ab46fceade583a26d1ede1a89951c6f383bf9293500884c0393cc1002b2a0c1e0b8fa7be27b7b2a7e8009ff625dff2f6e9ee56e4d66393f2a57be30d29b82c8061e9376abb81b693ab00a599ede41a84ea393030045c398378f704d0f55e8ebcb9ff095a8b0cefde750a47dda5118320188f85684f6cdd014642134a1c9d0d2e05529ae912f0b68180f481fbec045544ac6f5ab033caabb193bffc5099845fe75b59c8651121dfbe13c487e100d40b8c1b0f4811dccaab47f29909eda98005f25157ae57b8cc4692759c174f8f9ca3a58ae37be0a20a68c15c5a3ff6a4e71c5c7888d02acc52435b26f25a0bfe779bb9fca626414edfce6cae5e4a4fa3bd1bf46462618f8be0bd6ca27eace096418ab26adf2c2351478dcc12664974101c44a562d7ee76d23518e83e7f30ab81171c812f17f52d680068622a83f99f185eeb3b5d89b6c115cbf753854aa629405e7cd5a30d8a7580c09ae0d90901ff03a19423cc0c496c328bfcc3ba1b7de870ab1c529c520a7072025d34c5772a009c9ed995a36fa599f16048ec584980cb91cc60ad002e87fdb034002caf48ac2e8095821427d20304d6c49e1e988ed083dc17bbe977a11748d9a17324ef2deb1c892c1e930e4a4e17a17d700a042fc2080e41932780410d3019e7c8b11bd04766d6528617099f8bf681b28455d9d1d1b6d91ac34b5047c9769761bd38534c24193e39d20db54e396a6748f7fffcf083803aa2ac1bc562ad288ecfa3e8438c8d1c4dd1e33bd3cce3bc9b111141017391cd3dd3c22503daefc64c3bc8f1762d9ae79a1e8f6f9dfb96d5e125c5647fb8e85cd1170958a17d34baacbe0e7249330b1f7ef02d058e30c272bd382bc9fc08c292dfd60150c49e57e0c18a2e2a328bd580d5e5bf78528d1308a4cfc1c2051d5868092b58aaaa98009afc0999fd54cbf93ecdb00886613805a4c9e5201588c41f55d8ab67f6488e2b91725a2d0b6242272340bc5e537cb6244c0255dcd430a570bc3ad127c785c6c4c290cc6c0466a59d80caad1544cd12565348bec752c45d06058ac2edade7d595ca23460a043e39ab9aaeb78d6992d118be100968612c5fc5e0660517d4fdbb3f2fc293383bfa60b86c5b39af579aadc6a01b14ae6d0a98ad8690315fa5d124b445bd299c47ff58231457f24717aa48584f2b31aca04cda9257420c69b21cdb90c10a119e56a7c8e8b21a5efd5a0ec1cf5fdc0936797142afc9089b79730eddc4c0eb5543dec9549476c8d58322d36a32051e7e325d5e280a7136773558c9e4f5c13dd8035889b7ab9ee0f2469d5c8e8097754b5aa77a4ad8a8cbba227438567790a05041525f56e9b4858c11b97f4e2ade41d88d85595118c90a557eee85458d07796d0c71a4ab65b3a903b9b0aea445012de1302032455b6cb4b0f368f8d67ed3b59789a862088a6a9796292989e54f3e8838bc2a9906c75e583128cfcceb574552f0d985a68c950aa7854d131df6974c6ce6d4f10fa341b901ee21475b23ac679d9b0887b1b5dd2051fcf178ff1a5db6e783e0ee2de15693fde8dc9b3104676907e11a9c96fdea11cbe0462622d52120c1fee959780bb385206b9166972e819e40a4a01441d1e0245e0124d8e98ce39853562143a584c7aea7083678815352e5abe5788286fd6e89d79a47a3b4213f772585e74af28f0fb10c569c6213e6dc599665dc46469b0ac9798f51b8bba2d121184aded6de4712c5dd1e9560cb106c5e9f576b5239d15ec40657115d8751c04476eeb138b22afd14c437f5fee2613d5e0c48c7ba2a65e7fd0bb30dcfef7d9a17b2147c1aa82017493dcd9d6cd5ece778c88fc5eb9b00ff2c38100360980b53ddb8816827c0dbb98d2f2964a46905cc6b98ee85973b80af00d75d138f98029f3e9d506f308894f9df8ec8e532d217781ad20c273c1fa73e22ba262ed7b624842e7da379dc795b7e4aa20f44b1ace929937b9e02ce12eb486977b6a1637584bbb8ae57d539575267a996cf68944a657db28e8bf2ebc65431c007855d780029c44b57ee4c5c4a4dcaec86c8db5802f195f848c62454161dca258a0142445ad5d9d70e6d80b0a075770ea10407b78302e9208ae6a9d73c64a95df3d0f907c2a7fab3ed652390f6f9fe16fb39df0b2d6ae75c27675f3907a697f6f048ddfdd01c032a79500cd3b8e640ca4e2a201e27b1011788485d426a5f49cfdffd126283ba00bb8d431db1298cf9627d68920119e70c6653287db00cd7c4da23953132e08c4f1e2b8c4be337264c2bf1a7952f50e79905dc4b861ccb02a436f9850aa8c19510c73ab7d086f41d82d72fa1f0df24d9eb59d947299cfb6442f6fa8ca2f5f80570b8f2c8525a8126d2f5e9cf2bcbdeb3e41e20670de5f8e7d7641c926689820fb0435ebe7861d0c3111d57300549783f2de899249f8402b9a11b752bdb124205f8ed776f4cf8567cc01268062c08c424c0be0aef94c8632e9d6dc8cad19cc88155b07efd314cb47f1a220ee679199959d9a4e865ffb74b088f7549bee249b2a44a324043d71962acc47e0ec67c1a2d774826c821666ba509dc67d4080fdf9aad22f779a6639b935b4667e332f6c1df83f67040384e5c696e9cf9a7e7f24e7066032fc184989499a35c835e31656e1fffa1f265ecdf286f885cbab57f7487e2f8564cd13aaa3c17e495ce1444fd057c6afd167ed7c867c420e6233180d0adb4cbdde33c9194b89013ef57bb2a7e0748bf657b13517be84cd7b419d06ad43f5dd1aba1572a5cf80f53de02958864750f2d69f51b34355437e97ddefca0e02cd4047ca81df9bc516a6cae9d68273ee38e09f14ca7585575f41483f592c4e48728992213842f2d13d20c57d00835a669a8aee41a403c45a80b90508fdb92649f34d2ba799a9fb5ff6b332cc69048b2b2512fa886f179f8706c2f0bd383f88eecef98e36ec2f1cd7be49aa1449ec80f5a20a58f3ee3f39f7a798fed755308d1f4e36797086c82eadca5a9b098be6480603800cf11c1522a744c64153775079e0aa07c69cd8b2fac5aa5d994c86783117d3883bf19fe32319fbd9a31349e0e51d82140bb2900d564f77a9447f73d988042e12e0c53ff2604638f73c421fc5e9caca95e60f72192e55f62b8288329a8d2ab330d365a29f2a58a54a45920a9f89abb7bed3c1ed6172d883d32c85e03bfb10d4d074489c11cd1d55cf83271fe2982090307ef3496f7a3070c2a3766e2d14008e41ec6b7690935fee3cb148c451f450c0149287169f9d80de548328a31422025e52924cfcbd3339165b38dd2620659406e90cd4571e64449abe6354c8b86df55619ee0959022f42261a8642445bbe4474404e6212726f04433b4e500555a5488fc194608cdf6a6090ac494c1b7e4b84e6844a2e45d315ec4d1ae5bc838852058d986f0f642e00247c07702797d4464161bc7b88d2e31bb3426dca6f610b80968dd021e635cc23e328a2da2eb495adbbf673c8cb81cdf665f443ee43a8f7d30b88a1b5be5c3160417ec49585a3b5d973d29a309eeea6576647a6114e79f22dfc7d014d0bdf281a3bad79e24bf80e56be06c68e380d6c7d6c157030986a6173ad5a0cf23baf46890857d11163e788a479c375fc5c088f2471a266ea167c69c7116f08b02ac6b8d9d66009501d9c04337419b049bc832116f285834e6f322158f28004a670844d87fdc8f059ca84483d0c8740bdae3610392ef8e2be283adf3c50301cfdc81106aa44e73927fddb307287d9639f56835fcf109e3c4eaf462b5e6580bc00bac8b2a53e60a23ce5181539b4cd3b2844335f5a8d6bd85e18b5829e3e236d5d164ca96f82950b63ffe48a6743034074ac643a96478b15b0b4718f1fbbab105b022f088124af8eb51873deced72166fb21a25247dd01d2831795d21da164093999002a64a4090da8afb040bc8392271d80228c23bed641d4a95bd2457a05b8108134c083bec5e4b8ffc407a7a5494307bbdc0db3ab8890686fc61abd8aaa43a5d2b095bae93f099562f8c0926f03e035af539f11a32afba5fa312cf50b0b33aa47a604a093378de38a7d4758f488256cd1cb00b5ec3226471c4beb82e33a46307cd8142204076923df9ed1e87370681385a0ae2568c9c0d90f1c4cf7a5206c4db4f449d80fd3f0347f77c121f10ab8964eb5e362d299db5b544335a7f853afefba23854fc975bf1350824379d6088dcfd0ea9497ebdfb595a8db4e154c67b71b863b01b0bfa7170720ddfd708a71d1c9e03b42494933171bb28bff7de3d5dd8bf67e0237593e411629622470835ff91423a8f6d600a6b97c22b6b4630b7f8dabcb3af7655f3e7cff3aed901f1f441003ce6eba76efc8cd26a0fc47809ffef892f34176747ad1f4451819da98e32cdaea9b9f2f6043638730cbd339e851673210dd179b2c893f04d624986118472f9055db0d1a372df75ea633a49376314247405c46c1fd641d5713b6472af41e5b57d688ca861b0b88ae5b2503f98dd43bd05f5b17952080982c6d7fda681a641b96182e296c4184441a9068104db8f8e78ec3586b8bfb8b0a3c788293fa8a38604adbea7d76866b6e3c65689fec6a24f3252eaa06a7d72507634bb185b88bd04bcf6e8fcc22b994fdb77e155df45f3558cb2ec06bbcdf16f1ed0aa3fa7c8804cca870694261a73d770ef8319b6ca331ac889ba64092be5fc8db8983ec520526a5c0e24272abb519a6e1257ff79e0559fd2909c0a6374b29a897f787eebe2100b8ac599a0567b8e233ecc3a4cd69d6cc29b5581fbaab74cbb19da3395c8301d3c520062f762b93c9ad5b393a62fb23782281ac16ba13f78c02f7d8a9079823ff45197004b933866750c975f4972ca8a231a85e0df58106429925b9e15ac83409eb50c425e9e2ecf9a25f2f28409c82231ebdaff0835f034c2106850f71bf80b8f29196d37c964e502262f879fe765cea3d2b5b6e756ef96192f6091bc9de6eb03e4076d1a6b5e6cf8509dcfe50748198eaafe8d3b7f7de3ecde8c8b26cf68b57e1295fa359d056b6bfeddf06fd3b164fe326af6aeee790a30487523a4ad04d950a5bdb63a966a4714b883a6a0bf4dfb55906abd5597374063dda6b991576bf41a54e5661791c8637c28cea11be8e6030600e0306cf78a3c836dc8dcb4c87d9a53a1f1621d6e9772e9428c9e59adaa19d1f20d4a8e0661b12c1a746411ac268d731b931f7912fb6327f6cf13e5a4079997d9110ca7e03b2c91ecc8cc516906a86725ca87d493e9d8870c850ea832eb80167ab8670daec61aaa4b337c8c0d2c26a14c1a512cfd67640f9aedb197d14b6fcda3238a0ecb9e2bf71690e0396036dedd32dd993b80972bda88d78619273e9859d65cf3e98dfe388d73b6ed100725aa89e9dc61df5c0dda7a575365dc644ef0d0a3eaf171744ae76fdcb6c65345fbff5197cadfffa3f15dd4ad6e3688f810563ab1491a34443373bad458dbb3660f9a1e69416732f39a9affaa4c6dff2b7c65e5507f7d30e92dbae376420d74eb793f1d8bb9b40bd93583a7b1df82e0710e02b492d5c90593f82663f607099d1f063fe0966a53cab99cfb82702bc4b3788921c787bc5dfde5558612a963e87d2529b640ac39f08d05c72ffe62ead4b3f6d6036ac87c3d90f4a7e14d1fbd6b262f41dedf242f968533e442515e0c07458c1a70a704532ada646d878861a0510820182e605e8bd8b67bcc67d894b917a54296f5b6b9a8ffe935ecd7312839e4a05ca55e82a32b9779bfd06216e578c404f14847d710db162bb64ece66480486c7a0d2eb65a871b77eb495acd296c4204e958a21d51c9bfaa62b9fe32a2be4e9a66e091e99f359e22de34067807262bf9d74dd543c00420333173381e547244f3993bedec7474d4a8cd499879069aed3e89456f6c7a0c7c99767d84e44291b94afee8db2ec3786ee9f28e911929c6955afaa83a7359ad35a7bc8ad64ae6a2f08a709a338e6907c14904bf150c8e8982325786f32dbcff7386f00b493f86b0805da41dc95ca420dec83feba04d3bad78e0c7ab374575039e344838837889f06a6df2956f0f8e0e13ae17515a5215c1879d09ce4072055505f2c8f603b559526a9249e0da101302126dcbe0c0b35f443a6ec454dc3f7215304f5ea98a1e17291f7d516c4c673f805fbe557b70a2a7a6408667fa73b60e8439e294db22e48f016f131d0e34a4562c33af8c140b51f9c17879fb4c03897dc0b24aa68210b526e120ce967a44326ac4c676d045df7ce61b24350080f5a78a3df0008cf3ed8de168e5acd5d1d56611730bbee78073cfab8cf652e1225963b22f3518d864fdaaa58150d65d50bc2d3ce98dee9f9a8d878b2adfc3b4542d568da9551fc3ef58ef72b3b6b3cf4d2ed52c88febcde961a388ca30c9acd158368104841a78a63356969fadbf59759351517212bf87b5ed29e8c76ec7073945089078e0a23c77014318f0b0ce2bc4e9e2ec60540a399e84528729221f8a4c7c814d250af8d6f41a29ac58a9489c8501cbff0f9db416c037fab86eaa3dda3d833faa7d60ed58645a2cd8f67266de88d4f11428cdab6acd82f1a03274e3eaccf098808db3643619cb65968585ac73fb7ca2b8da691e2b3696f11c49dc849dd8816c3821a370c8940149514d86a43c9c0203762121b70241955c5767ea3b32d303b6982b4f39684fe59ee9eac3a1708d9d4821b8705f7ffbd818b26a94280e0bb6580a0c08c542280c32f3cc9533d49deaef0d5ce65c06df938e3249f7a24ebff22fa86a0cf6fde2f29cb5779326a49e4f79b0855cae4bdba3b328a15afa07e831471fa80feedbf301f4061b7e25911754c3b22058f59653e459f63985cadc4e051edd91dcc715a82f635730a0615085239d9e4342eec10965074d3ade77127117ead49966b379ae2675c1b31042ec5ddb8c01f1d5c8a7e1787cddd1ede3151d265ccba119225e851865e05fa0eef2201bac0583846f07393738f291356390ca6a3e7f77104a579212ed6a0e7907cd8c28f6763d1fc75fec672cacd3d6da80081ba634512504d292f41bd8c3c255fe953dbe14e29b16f1970c37e427a514700aef434bb02544b199833ce9ff7c4acee20f531c0c515247030520beda17121dfde69720a81701feedd0df418b545289e1042d6c23904a8779d74e53ecec729438a97fe8463e1ecfd20bff3d29e99814fb6c07b5087926507e8c6f4be0a88b6c3300ba3e03c0999bc35d48a6b5990d553118533a5fff34c2dd224e6f4d55c699bdb8c79adf9af4062a47a3bf31b3243690005c902ad477f9cde00ddd5b324495541b65e0c1832223b2166109910e4c6fd9469c69181a2efd09252e8b381a28a2652a7d57b5d95b84e772249d3f897963a777632c4d4252011f09bf0868f322ba1acb892439238eebd5fc30ba559bd21abbb16be8dec37594203d9493e6afb1ff5a82658c5c7495307a682982788409c5dec523fbb86d3cb08c35dbdf3749be550be67dc93ead2c2f12eb599d2544fed5e1bc366a6732d88d0563d181bdbd3eaf481907c65bf79c770619eaa7b5922afca135468bcb6275e72d078ee124d1a7a662ccd08fc2fde390c0af2656154730008edaa248c6d848aec9e524194ad30a255c0c04b33d4faea9d5d3d12b649f85427dc51f8c3e6e2cea8227df0be21233cb1de2e219b0003cdb9e652743278ad0d292a3a7cb1c3f6355721f3383469ab612fce00f395d91fb84ee607c918ff645d02559e71a5fa4dcbb15f76a64b718084b2951df17b0267ca25ce5046954430f9173091f1b580972ae7e52585a9784d7ef83843264bdf98f969e5624e24b8213a7557550943a2a038ab4638acef71b7cd178591e0f04d937e45f934f3a856fc06963c91636e70d5bdda763bbdce3df808494c381d733fd8312b56ce29bb3e135833a7d30014631b9bea24fed824c8b1ea5edfca1ad849b5019f8e42579179d18d3a7c48da71f8e7ad69a2c0e8663f8fe389291d9a2058356793e58d942df532c5b6c0b028ecd78616e341ece8055161c237927cd7bf7ccc49dffb60efce0555a212ccd3ac0cfcae2f4ba171050323adb1ffc433524c6e54d30a8e9bdad92c482ef773734d2e1d1250e0fc759f6de57ee2fc193bfb4ac54dd967c4d74c2aa6b472abe6e297df4e961c010a6d6a22621b18aab257373842656dedd9cb2cac844607123489b03bf421f641ec838cfa52cb8399517aea93dec4dc024a8e7b8bb50a0541d85ee2be471eef68b6918ac81802e72498476e21927a72c36c86e4724e9d12c19b4953ae71a2dc894cdbe3cee6a987816a30a05ba6247750cf0b82d40f449380179e212618eef9501a86e5affe9857d350620338564beddaf96c3ea703d67f43ef0e90b556f26240d2f6522d7ee86e521bd72230f0baed54d885f5f9ca1c91979f1418594b8b77f48b384f9bcbdbf936bf29bc19368ec83dbe5b7b169eb9499439c2906f7be2d79b580b7da29dbb7c590f399c5eef2cd8b2d36af4a61f74663cf72d568c97ea36ad9e6d1c3ff28a750e03004cb37e53c4a477f801b0f432ba103f08994771b280926a8f9e0919f1d44131cbd668839576205185d4457b29745ff44ebe3deaa288ab70ecd6f74496f36845670f432f27a4ab63e0930bc1276717d4565b44b573878131eacf804a7b664b63ebb6f09c42e27096dd5fb067d550cdcf9cb8caa01c4a5b9e96f6f81885494e397e1d2ac963dfb0ad6b647e45c4e4cd30c90e46695da83ac54afa8501dc85918b7988ca986a90bdddc19d8a056f740a902ace2c2e14c54d002d3fa65c3e9f08113e2fce267e534c8005631b472a22469cca07a7548e829a3903152e6ec609631e47e03c09cc96e4182540cc76403ed0231cf0d8785fc69e648b5ed06d9fe26f752c44c7d1747768ac3a33d9b7c8ee450181fcef1c276625e99b3b154990993d0aa9b9e47ddbb9a4b0d738d08785ce4c505457fa54b003bf7634eb974e5c28c62ad4983d62dc68fbce2d1a4bbc43772f2e59409a15967e0fe7d68589ea845ca6282a410412dcf8c46191630a6576da39cd6d1ba596eca1b0aa690549a94d72929b046d654528e45e1b8630eecb583e540b8a4dc4da47092110b5464b32f083a509ceced95831250cab88798b472ab20b8831eafae8d12de0b2f8d8a99945f2693a2bf9a3aef6da38ccc2a054152341677a98f16e4d432e414e87e2f52210f68d507eef8b02aec38d8d82e276f6270ce7458f0bb6160e542d38603c27fd6ff1e142197385a0262dc6b9e91f8067065289b77da4c2f15f8e4523122b63ae0845ecea878232782312a85fbca1f2f569bbff48afc5e203ece3889bd8216f0ff0497492810951b5a608283eabf0d53518315d16bf92cd9328fa6bc6183ddc5641705783bca5053ec6401b185fd19a885b9da75ec39e63d142056386e21f6e0f702388ab121add089207be7c4a81e747c1851c59844348e2a3aea91485c617d13bfb4fe32dcccfc427be8de4085c70d68ddf835979b8fbd394c6ff10be29dd54a049c299a20fa456a6f41f6ca9d01c893a0abef6050aa3dea7d72a8b2dd5fcc2e21986928e973bc4f19a5e4ee91b1fbae968abcfff12f19e956fffaf7a0cc0800fe4805f075195a370d829b2f0b40f1f7caa639f1bbd6ebece16b2dd840815073e8363fb1969bd9750fcfb54c67d6d97fd805aafea841543d36a52e2df5436524b3eb6b2107303d39f15dd630d722eb0ad9383ec1dbede6e8be64e8d46cf2afede2ca59c377417c46031cd89639ba1ff3f3009f5a142e993889e0e004f166c5a011ce891006e609e24916b8812533533038afbccdcc1f02e76b2dd1bb26e4d82fae04dcfd55ee494e5d840ca4ee706ecf6fe0fda42d4f4bd65e5f0bb6c41ea8001886e04a7715a0a01ab96f7f6f3ae80fe76c1305f4b27b7a962ae84c383498059c538bcdb38b174121a556d990d6a9ce8c16de7c8fbad88190fe092c9f384e420c3742142b0bb18d889fb6a3e4867790c276dc327a4e3444ab376289eadd310ace803580921926cfbb83767d910c2a73e69871cd327f1f4b75c6b13fc9036690f72c2edfdcacef52ec28010a3d071817f64469b30868e05c9c68681a2051ca70e58a8a0c63534682d35c31059ae1cc5dc0a15cafa7d46f503a34123d4adede00541da8768d59fbb5dd7671c3cae661716ed437c07ac14fd075d1bf3e08384bc0b53f6447a12fcf129c1fdd55e0f51b2c93b65bc80e8d3df13fe10377f93f1945800ed70d79e25a1a76a3cd790ca62c792e4d2037860ebeff1eebd3e62e675ffbdb97dcf7b5a1e363c1c497c5dc2bd852773538d938d7599b3318bb347384cba2b15bc1403ca3174d001f172cda9e81e85c00a6204a0a57ac2b45c094fca9ee3ed72285bb93d37f72255f20746c0f5d69f32319240292f42081507e12fa04641251c78f8d12832d077db2acc22e2e869963940163e40458073f7826c32eb4aa3052180a07ae25fd01181f999ee00d4f74021c0c20a256f9cb81de3b06898c234a687a2637ba3f7f6734b5986a9ea012f53509144565e203a35529c5251ed810017cd508876667e257dcf5c54cc8d5a46b66e784ae3ae27a1b5656be984f7ca54ad8829760ff60b938905c1472378635f72f09be91e62633bcc24a12e75da3f1c144e3a464fff7c158c666cb4a8ba13477958d152266a1045bbfde402b44d0aedf1c5195d065a185df23b89cb1789ec89b1030f68d1826c9ba811aed854a302b1697146b039959dd15d8c623224fb3beee1087e55a96de88f96cc264a02193e73e9a94c2e638c54a115323d8416c868bf3084d7af6f832d54d18b0089826d9ee72d0281d2f5b069efde52940d0b693b18c18c66c2398c6ab1425a816277aca4069f2fdc702c7c55adab667df4c0144b10f773de60f28376ba21cd24ffdfc58cd7fd0723a2f4bad4b18249fdc03edc2f23345b7ee57d7fcc0683978451d84742673b0f68e47280220ace5d55c06021d3f8fb574ccca5adf83203242e25aa48b3ed2545931825e23561ee0e56c4875c94bf819f29d892e1f92722edaead1ba70839139cdcceea392ba1f59721d926a801d0aee1cb07a29734272e86a7f69ee92d107da2b9603f8f31c1f0f7517cea85a5aa50900fdd75bcc32768d51b0124385ed6483651464aac5ad1af020651809c66fcdf58122d75d19445f291709e12e6ede4db3fa199c42b169e79545dfcb66931688ec64ec56f9c8ef495053b5f05b3dfd1bb0956bcc49a9968c11a7392f2986eeb57d1e6d38a825b782d3bc5fb7905f2e490d2db81dfd9f34927a9716e8edb939554b266d013efacf86e7242d5be8eeffe07cb098e1e02c3cf9226c4b4a5f3876b270bf559f42251215b9d1cbd70818fd530168cdf6b5267e08e71707638c2c17959cee25558708c20a30fc553efe7c7f35c4e4abdffdb20ea68e428eefaa1d05c063703393594aa0ff2a30561a8eefbfda5fbc33cdbbe175993b308102b87385695aba43a642e1c92aceaa407ded7e58956e226013fac98f935b13561528fb8f6cd537f18689ad07ebafed765de08ad23340d3c6f067d444ee0aa3fef879aefd98ffa50df2b05fa17f747f7ac8e25fdfcb7e0e93b795f30e86f21d8dc0fac5884937a60c7b7d544166c57e43d9f90bffadc453e8dbca21eb6c94fdf7833f825065d8bec2c4262b5f4e718833eab3f40b9ff38895e04c09db45b42ea3eee191efce8cd6ed5b7f2c22c41c0016b24e1a9bfad30d3d8956c08e835d3d2d7c52661328e4cceb975a55527d30b2f7e997fae3598d489f64efd552e5341f18bef3ef9620bd41a5f8018946840515eb8de90dfd3784cdd3a1728dbb8d67bc1e55a3c8c49b00a6551744c9f3eac905547b3010731b6cbeb775a0b278e0b70986ca0504a33bfdaeec3c5c384b2f0740cd0cc4141e114362c9e183ea470d1f2d601f258cc4bf0145921630a0b93169ec9b1d7bd032cc7668829c5f2e7efb59385d401a3234dc3ca00342b76ee3f661d572147828732a2038228ecf898f766aeed6abcdc02784ca5bff987655105a8d65b172becb83ea9085e67b0011450bc2a22dbc252f9af7f971e911fa017e1b5906c22f01083432f0ca8ea6c98277c0f7b64a8941e328120e5c38d1d335c7489c922d621f12277b84f2dd66bbf114069421509b5ebfa9033eb5fa8ff8d34777e18b0ae1be83cf33c7acf660debc0eaa602b410badbe09f7b16db36a9329d97deb9d12320004f7c6efb522816c4478557ec2a3999e4b43f342b9de2008fb5300febcfbaf576be3d6e5b63f83eca465c7dd47604ccef1868f7a76ec58e354425908304dfd5ced099ef04aab58efd06bc62a15896733634e0ff3fa2c02d89558e8c9d49ffc81b446a7814081ca182dbb2b27ebb2fa8c3444bf0fb464a3f72884156c2e8b998c87849dbde69970052a6a1c3460652e729fc9472ae87d692e66b4210c9f047acdd8ddd351975af7f5cc89e5c21d9da540b3c303064adfb86c5a2f405cb6ee7806c56842806ac98e6c658fb0cf4fd319a580075e55642123109e8fc058bc3c5eeee0386fbcabf38843c9510047492cef6507e8ab3df4907d0d138eba922752e0fbd0f0fbc8b46180c849f5e02ea81df0878458482c4afc18b6f8216a3e3df25b9868e8db43cd855dbedf1571551bd14b1f0959fa9971151704dd3306ed5bf8b19c8ab5e7ad33a87a4812d9623f2fff5a4d4236f09f769030c110113a4c2ca0230e30c1cf3c79e3627f95f3f8a320101745500488c3ea47765699b54be2dd68b32e461745ccf06fd074d902ef49e68081429ee66d28b682d43e7f67ab4ea78003927c4daeb9b2e2bdcd2725754c0d26f30b3243ba964fa11b86e19902e8fc633a0f7073494951265c06d0c4b86557d1027b5706506009c908ed3d7d4d975b97e069bc950010f95f1df509af50a03c0d9206fcb1e6663fb52217f2921b38c960255eb0fef2cd472b59ae8f2ca452afa8721df9497b49bd39f9cc48aec60c3c36b229432c886d72012d75f8b9d1919f78d9dd14032d7814d68391038f9ad23a6c308a05371676e04142987956fa4fdd4b2e3199165496790f1174a281becf3d4e7ef5c9b30df16f4e13617d4d28da6200d1640a75de21285ed96d98418b9dcb30ae84dd9026c4b6c84487a327084abd90ab51d13fbc8c43ca8a9ca97a7f5676a3207ae500cc27b7d8d83f443b6a084dbeac057be03040a51b4bc430062ac39da445ca07cccfec6ca8a383982937d21ae56afeee8d4fdd2af2d88fe8694ce02e10ff55acd0d4d0ad3f6107f9fd01972ca37f8c13ee3ff747eb47fb969c5b901654337e01a26da3fe8058efc87d88bf6399bc8f0d3b94208a83a8cb4ac6aa23f222fd055b85ddda90227e45f2240fc9019c89293e93ea557cfc21eeb9045afce7f720a83b4e63daf2094888ea58c2032810278e57a19a40e7027baf615d46542254bb7abd696add57c49fabe1a34357a95f45159024c81277710bc003ce01e16ac461ec72562b334628352cef42e39bdaee149f7fb95df63b00edd9c8cd5c3bc622a0d49559747b01ba282313517f47da0b1246098f90b564438b764c94c20cbc8059ad17d4b3792b630527f60233e0946213218c5e8459d50bba06e0ba5ee0b2eaf1e3e44698042281ba4ac3233e513052a7176cc6e00072a1c23a10ecb97f0ede44c3f111df16cce88785f73577d719d909e680f69493a651c387bd207f035c25ace9d764e68730d9b807a73905d8c03f30ba1066bc3675aef475140d6349758f059bcf1699c362f9f7f17f0e3df8847fda4f708cec8fc324f5adb6b46150357b597481a3fc3a56d365ebbac1561ade68cd9ccb444fb9c500841fd76027dc58b4190f247883be80685181ccc9c0e68e29d96781e288d5c3579997a71d797fad4263ada59e9c85455cc41b3a586ad21a38c9658a49aeee20ddc716175e0735c54f54866ad433be520c1338e656049e0ee99482eb56f7216a92b7a9d2cabb0b7850e3e23c659582583c80d812a411e241a2291c61b416eabfef5241e9c40497aba4e056df9ab3ddd84d6b3cffa0bc627c4f4733612d8d3924f370a5d63c4bf5322fee40c6486f0a6aee6fb46d6160f25507a712d46cf28caf92cf668cb12383d42bd8bfa83a3eff3094366fb88d991626352eb232f779cb1a49134fef386c404b7dfc53c45df6abbf20e4908283441fb5431d93c7ccbbd7aa8457f7179a93f20a1e16d6ea60140516d79c75a91ccd039d06895c25cacb946c26201b4ab04c7c421e83b9fd9b6f79303f72cf032517e31fd35e0ef478fe79f80e02351d13561643936480ad10f019b0959aa8b58b70edef2b839dba59f7f10f8b6dcacc7fde4a99c959cd990402128695d3e04804dae1fbc7b2c64f92ce401a0ab3b16412844d0bc012ccb66d5eaf366dc44ee9cfd97037e65a0c05d7423b53014fdd01340e494468d3fcb690b230bc3eeae3f6705a14aee0d1a266b25d9a82741750dea693e50b7cf1f18110b66efbf8b5cc49c7f95d631e1480d67d3c66e263dfcf613f1d05bf1121c49ae75a42d692bee15fc067e87dc21554fb7960abc3d0f4b6ac60adba9ba2d3c9431e655eb850383bfd50a2b9b5d013aa91387a2e1e4a18f81de1d0e2493bf9d39a9ca131b1c1b73e444da575e242382652f2f25aa00323936782acba80f170734dc916a371d134e10aee135ca28cb58a560a23f87ff0832384917808c38de1b6dd2e0238df5d360d87ac8a2c7ede1e0bf1bc997cc77ff94ea31f9ee90cf3ea27463b7a3f10ee16d77bcc75a587745a09636e6d88f8efe59814dfa5491c88649cb77194a6044aa02784018796e6ceefc2a82b6b217b0c66d7462a65981a2eae57c8cb1882c6f06dbd8a2e3ef76698bb0c5a06d76e6e9fdf00acfa44b1dc4a474c8005a33256f3eac7d126fa3c4ce8b90afd9cc3f89aefe3fe701ae1fc1aaff5df93e31d25076034af8437e40fa00d4f6a112c5a94db24d609cd2aa5f4ef8078b8625e8f63e7ad0540b7bbef1e8716851d6948a212729384819e783d6c88d8fef222b7ea254c8b5f25281b727df3e401d3329e0197b7f9f5f58217ce80824a5e0d97b9d8ee29e1dc8558cc06cdf05d03fc01f637188a9990d6779f458885301add17f3d7d1d9593dd9b0d529708cafe1ed895381a92c0e60f4f47208a08eb43dde868024400669800f335db8d36e59ba9f7124c64d2aeafd21e53d2523e1df09e98bd7e4620a485ce3457d76679289d62a24bddcb02ccffac9eba65c933612f72608ccbceb6660a080a145b2c2af89bbcbc70d581554168e5c869937b353cb9ce67e4f8792e862173bd36228f62f998a2b2d1ca97d061f803afaea79b781081da608d970c30169ac8967032479d53890b225d249647dbf88535f408c4c6047eb4b993d56ce0073466986cfb6561db750760521cac793427f9de61e52661be10dad6b0deb88cbada20bffcd1f3bdfdb75a3b94dffe6c5d7b4c11ec02dca653d7b855aa88691681d913dc3fecca6484647efbecdb8cee391095fc41d41738b11f0158f73a9fc13dfb28950acd6230d6a1b9c2f05852ed083dcc6159f436e073fce7a880d662884e02f44c87ae69ae21de38fa6f4e52af3d8a9a0bd8f169bd138899da8be0c26118734a9de4ab07b4c971ce78560b312f3623299c90cd4b6f68c3cb18b32ce92a0a644c5b850507a9bb024abe987a6972688083bbbae67a5d17e4dd270dfec8066911c21c57ecc4ed4bb3fc4fa70248232de981480ecea8acdbbd6bb181fbf4268833bcdc6e9bbac90dacc3b1b4373977103af30263d5b0ee2893550e4f30b4efb653b9d750c0d8061ba28b1adb84e2ca1b0d1ca8f0339c4ccdfe5035531ee996cad4f33cb31c188ab2b8d38bde4e71cb666c9daa95da6d8cae6b240210f97b14ad0bb372ff7e49487898e4fddcdd941edbfc42835ee4400c498e6d88aa6f7a1ba3e0ac61ba01bc7d49ec64de754a77b0714c326858c12e1888c815f21939f4176de08d7b661b188f3f5e08f4b608d2e0b9d5043aef7b352ca4f2d9a86f99119ea5a7c6f5c9d15b210562e009af80170c3f3bae332f75a8e73ae2a01892ad0cf95374788d2e2272e3a20afc0465980f264ce64cec2d1ef713d7747d149c63c83c3b201c4470458e70fed58f095d97943d0b6aaee7aaec7deb3e7caf1027c8288e2b8197b8a7725cfacf6e192903d5db3cecbee79b54ac0ea8b0866c1a02063c389129b1ce4d02e43076f2902196419e61f15041d2331fd3b7718c5661923a8a967cc0a1f9c332f1d9dddb7263289efdb47ba90b6410227827413a54871517de5530452ee9e0e959a059ef0ecfd4248205332f40cc0987287b9d7cb32a66c1d0eeb4bcafb89416a56887b53672f541cc25cba6ff979ce7bd0865418b86f4371a09b3f5a441568f0aed8923c19e96405c7e199ab5431bf901461ab5c80bb935beebcc1c1ec5e6822dc18cf8492376afb1797c0060446cdcc3df167d4e65d4ddc50583b3a0fdf4f510fe49a3b19fbcdedefe6dc56b8a2286bcdea52b3a8f5362f2feed0fda688b300f60d4f600995e5c5bd41ae3c91fa19cd69b56aae480a91dcdd799d7c43050e74e1027d8b9951704e662d5665a2928fc06e26192ae0e3b21804e1c9f4e5c67cbe805b012dd82e6794330d3e35fcb5a3c22c90aa4b0f7de8673351d2442063f7e2749a83c56246903c89d8789865a8b27771d98409670674c3b80e620af1d010c6f9d86fd224b8fb074ea4e951066af394961f5bb04acc57445faac2e7b94806b6aee365a3035722eceeab03d734eb7ad5b72cde814b83b7ca5fe0a886f6f2164ac0b479bc49be03d7b1b75c32c780d5f8328a5b8436be3e064c8988b365ba15b475f913cc5b2c2e10e4532e1004be0c60118a6ddc629e22f9425a7bd0b90c1437a82b8f985508ddb8a5a1f228414a7e340b7278ed6c0803ee68eaee9e562b83a903880f047d077f2516ea61b778cecfe67197e620ca4236f55410bd1602c6279be5e00885678acb95454603417edd76cbe122bcb59038b9cc1234e6ffd114fac71c9fce925ae573d5831b1a71f152d208898cd98329fe09a39302a757592a18d86ee71f4e651bd86c66ce2aa4df7ca1d60fd2f0a5e09abccfef94d4e9f4a05a57d338c928c547c47b478b7992b01c0f68bd3822b3cccbf87e1a0f073cf024783ef4b7d8ea5dad3e1a4d71a14503551ac9d1276993d4f80c5df6ecd944ee3768b3f9577efa234a16c8b865cb091117ed617c67103243ad195bf5597cf613f5c1c2ba87af7bbf59f7f37a71bf733baacb77801b7b43f578c8a2788fb7cf842d9daf7c978f242822e82e9d32918d01c5e3331b138131371cd0e20a7b37e6b0c7afb268bb571986819f0db2f64fdea0f9c267caf7bde62d6015f1775b71e27398b2dbfe833142668132b3c3481e55cc4b8c86159f87343358f262a99d668cb2286d3193d06ba02f622ad988fa9337e82048dcd45c8bfc5455f50cdec7d9235de48e39ef62a537cb7d5fcecac4261e784bef09672ee21ab320d5f45380398ffe7e1b8ff52db364660b5c248a29068ca2e9795be64bb108ad455978cd78b4267d6d494ca9807f6c409219b1e0b0760f6257bccdc4c1100b6a7f0d99f43853446c9c712cc894c5753ff77bd79caa594788660fc495bf3d5888f5888f3fd01375a299a889676233113cad017676c1a48f366e68c5e7d423861a4cb619db747424f06e04cba439819b0014537c52828d25694f6da84e2ba63a0317418dd87c9f68473ab41bdab7f578dbb5a035b23a2e9f66c26cce2d1e0890ea2ffc558ab0ac3d685d300a94a53169c3822aa8fcd53be910866aa53c750349f258103b0f6e0ede6164b68c7bc5ae7a44ee8c5e534d470c2bfb88b4c652a77adb6c16686c220933892b6c89b8bfcf07a697c2ffaf2ab31119c7c3d0a7cc92cc2617d8bb62a41175c08254e87037066cf95afb565d82924203bd00c134409431162ab60c0487512358c870561b1618318866627b31e68d07a6d0b6723890e9acadd5fce9edf05c89435df883e5f079bb4332bb7e0400ff8d8966a8be5c11686a4429ad69b20f8561ccc04f4c893bfab25a18a14ad512e6f56c1ac93c471e5172890149e8efb23a7fb87eb322ee8510a07e450afe6ab064ab740901dcfd029a23626a5a3054b24a070a591fb4c788167be97bf64ec107faed15bc5b4ad54c76ba52a7e7363605606e2bb8f114d83a120633cc47b686397c20694d91c3cb57f0ec522c9d1847039d328ed6b16fdf35943941e34b42f6de7bcb2d654a49a63b068806b90632deefb6271c28a6ea23fcd7095bf777774d5bbca0bcb7eb78e3713d637c75b35b329630aafdd83774376d91fde690eff0c33eebe667cf1b0fecbb79c3c93eacbb3a676fa63f3e8fc1313233476666666666e6c8b16da0e1905537649e9fbd8f79a1d39341c57e18648b6a6f914be9176e2abff7f6c20e55efbe9bca5f5fe00f21c81cc55d1095d6710a73528a42fdd338779913dacfffcd14b4e93e45363a5438bc1b2fe3ffc5bce4b0e731a0f0c7c1c856e68b474c2317454295527630f385c0facdfadce6b0beb16839a3eeeca99e914b0b2d9476a851b61076262a9d6ea0fdd7d6f04fa7228aa324fcecc5d34a2da5f6d335add4a9f82814a53fdcdc970c7b3bb5b9b52ac6568225f4c76f313687fcf83dc676195ba37d3c8df015a07ead6471bd9ef5d6639cf517677d866992db2a5f0032f2d69694f267c7793c72bf7a0037863dabf902bbbaa015c39e8562cfeae18385bda1a45a96f5db373cf6ac376d61f5f0c1c2e6d86afde4d6f92d6b91e21453a6d0d02345ca0c4378aafc4c7e978bb46637845ad8930f39cca7c49e8f98863bc8440669a0cf23f4509bac734e88cb8f9c968f0493e3a2172adeb1117bf2ad8e87d8931f9350f95028be748a9242ec49222757ea37ab948fea395fbec6ffcdda3c41604044481c316d31650a0d3d4b822c62cfa5d0cc48bf00b7d4ec316e3e03314d0667a0cb9ef6de3f6fd067c8377db48ec3e237037d5c74843dff172af4833e8ca4e31ff6fc2310fdf8a7fa439fa61485f2a007200be55f2227477cf8484291f14312bc60a11a3492054175cd2d412c75590b242a3d768f74d8dc50d9d47dc81c9c5f108f923d7b9e4a2523032dd07352cadb09fc523fe83132cb27b4097067e0c39df11e3d35d41071b822ca27749adc4e905618746e5c11e5ef28dc4c60134e983b2fd3cec42fb2174c88cf6f829be0907bbdee40b80199cfb2749005fd2684fe847ba9b60bf12ac46b377bfd05e58716148252ed7e940dd4d9eb6e2d504969db86f01f9f3c46d06f4e2d536a1664db35cd3ebf63b75bc36eca85fa75bba985a172d7bc7f0ddd79aca15f7e0dfef0330738e0d3a9dffe3660dfb96f9fd9bbdd052c3b0ab0b28e7f7f9c9d82de31e1ef6e77b92fd695811e7d90711be77cebaf6e42ab83d93aebe7d5d3f0dd5ddfddddf55d46c1eeeeeebeefeebaafffeeeeaefbbabbefeeeeeeeefaeeb62f0a7cc085d0c98b225ad2ee13f473ad61f76995958c84947480fa7ff3230a4252e3b7f03033995e9e4ef4db79a1b903b2cf8b45acfba807f90829f05d5d906e7ffbe5c3cbdff417f75d7f752460130724fed6ecd371eea397562fadba6bd867eed763dd67bdc353bde9c901d92ab92f885681f0efb753fd4ddc0b90833fa5e9b7e9dcc715d8ebba2cfed945d9cdc9832bb4babebaeffaeb9dfbe6fef5db1fb3eeb0ce9a5c90961d90fdae02fcdb01e1f72741e5205d994756615060deed8c072008dd61a00bc548a866ff75dbdea736e78683fddc70e49b3ebe439aede34f0dd2b86f435c1fb921b24ce3c1350691a0c4811c621b8e7f667ada3dec71f3b0c792fb8769e6b36f8ead48daa5a31db5baacdb4ef89a65af3d86cd4ccadee2b66da6b9cd6ddbe636370be94a6afbc958328e953af573c48464fbd91c271d4ca76ddbfe864fa60d1a11d4a91a40569f70580272c386dd909da72fc5fca35e502f31ed3d61cc3fea05f512437dbae649c0f6eeeeee6ed81dbbbbbba3bb7ba7c91fa520d8dedddd6d638acc77ba8682ccdddd10d2b796d075d8deddde8442d8560ebadb7724b30a4b0799f54316276b89b5c4b222d3b096584b2c1c584b38cb1642a9eaee8e017e43c833b07ec8287b1006514909c016285f08d5d31ead983c7b5a8ffa05d9a3f83b2446f931c6f89093d1043c95dbdf9bbfe133942f8caa01ea42f122a9c2ad02cd5d9685c2ee53d5fd1178e87e773791cd85f0c21e00e453bb3f48ff428cbf0501d3c019d4ae3ca448a2462e95205d233b33680b9bc382456ac3196a379c2d2c41a17f8c5d0aecc1a0700181c1ae147a74391a13b48596dfa8fed8f90eb74544b6321ffcb97940ddff1650375537fbefaabba49494cd89517af537d2ecd665dd54ffd5ddf4f8f4772fb476223b93651aa2264aea6319c013eebedcee0dbfe1c26ff766c6018447c0585244a701d9e7b616a8a4b46d422861719ecf52e2c9aaa5648309859f210dc9782184bdbbbb900ce984b724147eb353f2b5ee43d1ff6ce26a57da7f13c2f8b3d029e99d101576d5a3d3c9e994fc6c67f5bb82898ffd8e9c1d8c8ff9d9cf8e89088630bd7fd6f1581a988fbd8feb4f1fff341feb74e06afef53bf27deb61ea6056c0605080353e5c31898f754cfc7beb6175302b64302bc095f570657df6997319dc856d8256501ee2e1a9ecc551139e9a713ff0270a95ef3e35a46c299f8fe4b315f98c24258fcfd648aa6ca02a5ba8ca1eaab28daaeca316ba46d6e83ee8e3d27d28b9a61c50d75ec295a41fe4dd0795f0117bf2faa93d7dfe8f8f7af4f4646ffa1eec4f0fe34f7f67a5719af6fe1aed744e5dfbbc8ea9eb9f2a338ccbb825187fed7756cd03e31d8c05b2c7de47f6d8fb639d0e13ef7c60af7549553ed6b1954ec9d751aaf2b30ea94a8c8f3a2561e7dba9fef8c87fa00c7207c64c4a26e405b8a5ee5b5bd2e0a92fc02d12a661ba5fe7bbf3a1f3a3531907b36f3a82d9376df63eb0acd361b29d8fec4d59a7ea54c4ba98799d8a580e74ee0c7c2126f09b00ebb533f0adfecfb3e9d45e9f61d8dcff69c94ed5a97d25e8ae43b632ccd3abb2a98b9a15db493bd5d65f53d0ad303d7af8e1bb545861248c94afa33df6b2f371657ffdceaa3f6a3dd86b5dcff55977d3290be3543b2b9ded148661dba98e76ca7a9dedd4ce6a67b5ba66a72c2c07ba3b73c2d623c83ee422a20b73b0a13291c8c4c4628bb6288bfebf2057426d9bf5fa5f3eff14822a0162af35a024ec7534fdc34933ca94f92dcb6439ec80588f4d93e933139bd8c4269e1b99e02f0a15716c687118f656061d4277e8f0859e4e9f9d4edce7cefcf202e44e87ef60afe745b9281444094c22f4f284ca2ac48540685314ebe75d902d821b0f7e9b2d7b2a3e3da769fa987e37a9445a9147ecb56605fd644fedff64cfb5a1c01d0c7b0d1cd088e4ec494df313b7e9b0361cf89635abe51ce45cbe49fad4fe8da3dc944a2c4ebe2b79874ad803e2fe6e88ebadce9370cdf5cd79129c6aa0aef155bf2b7198f93ff4912515ce6ea3ad9f077d369b0376fd3efb27942bfc6cea42c1031995bb6f8da4c83243e59648b20700060d7896cea001cfd212d19325a2274ad305444fb4103d59227aa244f44409fe6564ad000a2282678a2578908616502c015537ea02125111aaa8ba4433e86207464934d6259a82440fe8a92ed19424d13ba68b6c8a0fd5ff86cae6664a10d57f07d348a3fa32538a54535d222966d4ef55be439411babb921d5470032227302825831a4147d8c24509ddae3869416dd425aaf204f5826a7589aa20f1ee4e54a54975226ec928658beaff52a505557ea8dfab6cc8da0501f08a428f5848509c1881e284080d090a93184089011212dd17a26205110951c148443330e388e8890e59cab098b84110353bfd60318b188474a1d63dc53efb05ec4ca7ba3e5575b8f261d3a91b4984b2d0f560cfb128d48576e9df0f1048f8ecc99f4cc3ab1734c97ca76b90a94f249e484e7a0949d212495ccc2232df9fabd56e0e68e2e0eae27498f8b83eeb74bef92830004890bd327f7641868801f5d710b865c564be6989abf33ae51c1274577b65753d60671c725c6767b333fe5b19d4fa65efd9833e47388884eba1c488ea7f710e81260d14267510893d7fed875add0d7bfe92cbd9c19e7f746248895d28db89c62eef42e7c94b31ffa817d44b0cf59e1ef38f7a81a897e95a12d379643cef631e4e343448e1dc65665ededd45837e28083b1b42a0502e832b75899a30d1d5259281967a33a4c10df5703ba1abb733fd560aa8fcf89f8d4dcf4ef5f61214fe274350e5ef0dc7bf65304249e5ff58a9aa405fd8eb558a61195802acdd3b6410a8e1f3b60ca833fbd4ee0060846eed82c21904e72480aa3f334defc697592b81a4eea753bba33cbbd8b90ae812ca044e61af1723843880e14fa820efc6a09ce10b8534fd9f06ddb51a99f840719b73bdd9b3643090d3360ba2fcb006cecb0374899060a22e5193a59a80ba444da8a8936986c03ceb0dcef932a0564c26ea9b556abb5540d6f8703bc19f8b7f69f12fee9b35567e694929df2d296be462b5d89f38fdc25580932b2c6487a7c6df79829b99f9adaedd11a6ffbba91107ee4cec8f40e5ef26c013800012e0d84d2653016a96ad7c668e6b16b99d1ab7d4c87d32cc506bfc0de797db3afbb7025998ee508840e50e8647047acb96ca1f81cadd969ab9c6bccc7b2db1c4c0366b1cfa2fe3f955af0e08ccb31ce8a7f252d57f4e5f6766e6e565e61dd281c5382ea0df2ab90043d7b87063a93c530b680db5dafa697dfc69cd39590a47ed8402ea1fad4b005ff65a77bd96699a9661968c300dd5c6f89bb6a01f2f10666b715bd4379c2c7a7384f186a7ec2fea372bf4d91cb4cecfea7c083be81304fa799d3ad8c43a27e8077d60680ef2cce71ebec235de7192cd217f3e0bb139763e1fa9937fa8b38358eaec76539777f08c3a1f16f17c9884e743240d817ec6476941a9508162022661449d58077d7666fe55033aff86b11fe8c3de7ced088573fecacc0ec81cb262701541b5222833d99a1f9dda1c7473382b55672dd5bdd84175ae529da544519d9ba8ae44e5b60bba3fbc2d57cd19f44f27281bc1414cf35204b532f0c1a14f56a59d71fe810ccaec8f21d1cf3f46a22941f9378a9df12eda197f6fe1077beeafed40fdbf45baaa5059d4a3f3755d3586506186162a002e68124aadf001d5a270597a02858a226a4005500e549ce0a4440120c618d4858b2ad4e5e8b485d221ba029a29417340b52550a8208d298a1831c510222784e0031a473413c345884a2c2e41f4eaa246111be0400c1b1c551b18c978375ea60656eaf72a8b885d1fe10b10001976df0680ff0df35b3aa0f065fce27e07c4dd6dc41a12e6803142ef76b1e85a2efd7499b09c1d5b96b343d37677a3bb7bf711753708b20d335da7dd49a3bbe5e2eeee2e6bc418a32713218cbbbfc35fdcbf00eecd34cb5006ee6e73755dfa8e45d16c710a796a76da9df40415fe0bd3b854f8a818194fa5a4a84a85bf2327051f2cfc68c105246c54f830e8f4308de5f383046805f5a54e2392609aebe1432138041f1ac187474a5468aaf0a115a6c11e3ed4023ebc0293a0124f960a9f7b9826ab50337284693624404a825c50e114621a1313454c737af86cc44748542a7cbec2345885cf498c85b5308dcbc3e7252322aacb3bd320a0ba3cdd705c98a7d23f6d38d4aba722d4d39b369cd357d36f1b8ec96fd42d0a14757b6dc3d968204fd53edb7034cfa2d450b3d798465533299ad4ecb10d27db1aece75e1b0e76452145bde67c6bc399561152b55e6e3896fcb971c39110a8f18b90d44887a088c2fc90a7bac06c48b6329fbf1441338d07ca01a6f9348a720e6ca13f5848012d416340bfbf0a96005701fdfe0dd89aa581efadfa160a860bbb3f2e6053fe0f50f990ab60d232ac1fa0b841070eef383186121853768083151db6d841e2c91645882c11e28a143cb89c40d6b660596ac7d4fe6bc3e92c882c0050f9e7c6c390002abfd502284670547e990d4184822c88922abf16e91833f4f0b34518518461c66a07f5435526a27e382aeba8ccfc363d98997d4b701aaa3f7bdfa0f6cf316ad71e02a26e2bc0a2f23b3fdc7ce0279e54660c06aa2217bfdc8de860f2b14281e061b361e814f4a3d9f0631a2292dda06493023362a41d5d4592b22c6c984578b02b385837285d4220228904cd326a70779f45945c4e9ce1ee8e3a81d145c40677f77983cff553dddddd7d78aeeb092074d841c4ca134718d97102a01a1c758a554657666086110f4640cab2dddde5afd7240105a1bb3307eb2e5ff9a5f40515037dbabfb0d7040e7a98a641655da226acd826a410f1268a2efa42d404932692d48f7eec812dfca480214f5067cc1445b79bed478a8004caeceeee2eaf8ec5b1aaf556666316b5bbbbbbf08810dd871dfc41c2f007f22061ffb12976087f98c61f7ac31f8804429e5df8b34abf54004d1fdab37ed7e218a3fc9dcbcb035531d1153dad647db2f7847e948e0069c7e9052760255877a8ca0c36de8d1b9b1b1bef66ce396f6c74b0076d6c74dcd8dca8d8834ca80db439d525bae206d803d0f6eeeeeeb2ff34dfa870e4dce40ca972726e760cddecc8b9c9b1196a33762184ccdc2cc031320899bb7b3301ab2f421465591b4e8c31c618e116638c31c62b763a6c6e781f131f27033ba351d12438b2c1c143385410eab061d82fec0520032f2ba0f0bb730104304017d883e1077bb1a30b037b1ed3f4bb0b30b4920bdcdc3ca30022b242091e592fd3ea287bee6e3db5dc72eb6fd8f3cedd72cba2ee2f95a3bf4841dd895b75a5c8524695f1e601f34a171e5068911d8d2f3f42ca5e842fe5f30d7b314af935ca2eb3385484324a54cc612f1a45196748c1123f950175a12841839a9df677c01ca6d9eef3bfc9d9f757b1073bd8ef9f359773c3ed10827edd1f34de37395fb7b3610fee402124bac287fa3d12fd66f59ecc5ade5d5e29e5fa3397fd77619f75df9cb3fb50b313022d25a8d57530fcbbc2e11d0cbf578642bf7e937a5d38e7dcaff3db216f1946ec9d58d0deee5e0884294226235ae8a7ba36051f7215c269c4ab36c716c15d902d02129fe5c30d0569155560df921207a7e0dfb07b656e553fd0afb01eb9fb50c508152a9584ba4454948e3607d461674e1006a607f65b55d859edac569f4cdd45d59dfe59e6ef65af335f7b1576f53af377566fd329f93b2bedaf576157b453f2af4e27753f93d604c2322f312e0c368665d36ae92f415ee69cf286e7cd2c8b9a35b3c8fc6bf137abdddda1d5fd9858e636379ccdd48dc58461261864cc7d59be313fe60f6896599cacb166dc95ab4fcb92978f1e96a935eb035b037996e78bca3c29e460978d4a35e39c17e6a89897c176532f415e5e4e373c4f084effa491de28da2070997f8d21c4c1361c4b4695fdf6632d932a5b1b8faf5d33176d8bdd8fd9bcee26b833d135edc22666da9d891f7db3780b030b162c58b060e9c6d25532c8ed8e43a5d26163e351b6ccff0dcfe317f6288d9933761c3a9230b2776ff74a3238c68e30c6deee8d43344162e388a48e0dfda753b3bbbbd7eaeead05f2a3288edeeeeeeeee2d4d9034bdd88feeeeeefceddeb2bb777bb74d5b9685eeecee687877de03843c404a40de496050f7f62430bc93c068f73480bc93c06808fbd7bd1dc83b098c29e46664a789349126d242c8ac4d2ee8e7515a735a9ae63e3f3b25c79a00acd178e0154b1412b9306e76d8317a5dd2eaf439e23f5d237350d81a6db1d078ba66fa683c95e30c467eb30d61639369d425e250a936934b0dbfe17994baf4f48941a12c19f6f82da4e9b3463efee33f46fcc77f3ac5bf0541fdc8facf8bffd01a1b4e7c7742fd61f7f4e9d3a920a811f6f87db80caacd396b68f18592ba39a84b14042a6a76e22f418a93a1af149600ebbe1574fb6f7624a9fb2ee8700d769402d32c11163fd45da3451a3aa27e9b84c515f55b2d5a546f6ad2018d42a0aba16905fde68f52942b46a2749154fb3909ae814cb3517aa045eda2da419be3859de9ef57627fecfd77f87d60dfe930919d0ffe53a7933dbfce29cb4e3b3e4e4f4d7f7ad9f9a0dbe9778571d8d35f81ffd4c5707a3e3d7f0cf44f746775e287914f7f5730b283b1c0e9e9af707adac5c0c4c7f6f46330fde957a0316c4f5f03da677fc312e360e46fa69dd556e35ddef436fee3201849b9d3ce8ad297ced47d3ce4037e7c8bf3c1166046d281115ac800e2e159d97893c9c6ceca747afaa7a72e424335b89d950bb7b3da0d677becb7ff18e376561bb7b3c2b8dd38089505dd15cc0a70853d5c611f03131fa6df7e5731983a18f9d96bbf7530b25b41fbecb54e87094c0fed55d895b6825ceae10b208030e2e159ad8e0faf4c2fc3f65907d343c3fee3a0ef54ff89e39ca0bba2cdc40d4a4c9972858767b52b5317830c5bc7b32931b9c1131afc608fd2814a1c806ad7ef330e864eb5d57d3c84e33f0e52a960fdbeed51534f753717826ab7955ea39c4ef5b350f350b7aabb9ba73607d5ee6e25b5836af7e7740d076dd2ecba1ff5437705819ea115ac9f4d2b613b2e03efc068ca21f328ad796113bba6c5406ca57fac7959cc73879660104c6220b612a535e50c82490ce4515af19bdf0e2dc1a0a4adc9c7ccbb04832233f39233f3b7435b136666e6cb74c12be80a11a72b5e70c49554119828a34a12953368f0c175850f7d443ce2e1e1a9c1ab1079018322788085074bb8174ec4e98a1b9686faf4d0109570dfa41a7e50831e5c10a5480e604f11824e04a8628723b6b8c1101f88561fad57beba63eedf6307d72c24b24289994cff2c33600ed0782003ba02a698dfec014b66661bdc9d6948a8c2496dd318f4a58a222a7b16d435c5c86768cad1111c14f84cb96204698a9211234653cef8a9a2c80f0e0e4255a860071c234b73bea062a046058af620d4831549d15132444241a85ebf5749f115010cc8d1d56518b99d81ccccefce7069d6d76b9402f264cbb2aceb273347ec39cb7e7e86713c2f666b5a32c668754f89b9017dea72db348c1ba2bdcece4afbcce2b6d7b81ab2dd2cd00dd1dee2b6ee9b5966691c86c9c75ebe352dcb7bc96c77f7df618ea1e22df323c6b75e6a5af65bb1bfb82199f6599665ef9cb6d87ccfb8eb927fc91bf063775aa323b0a8bbf138d5e837cc2ae8476b733706e6199308d38c5984b965a631d1984873692e4d34e61956b47024a681ef9ec434da432c15422b4b52a85f6179b433fc00c842e37aee1a07d773136c3c24568623557e47b2d22814a5d14ae5ae7a076a6347d10a16247190010555feb89960a366404f28fc2f03f22b4cc33be38c7533fe3e2d6e08f9594b2a9c62798483f4ea6d51812471400a434bf5eebbba20aaeaeeee6e1202c7cf0e5c7061640859b8e8220d1a14a55103efb18194ea73879a223acc1c4af08517299022a8071b44e941d196196ce044e73365f40a779ad880c412338c9e10030a2efc00568400424a82451432804852c2d8aa7fce4524a58a9ad5259252d443d6d049d8140f6063509b83563f40f545693dd0491f2585a220642b9367d29ad8a5d02da7be06d4fe5d9aaf040a6ccdecd4e6883ba8fd399b83ae17b5abdc58a31e4cd3fdcd6353fd5c7c0eba73341de8e7b307339ca1a8740db86441c810d108000040007315000020140c0804e27038249eeaa2f20314800e73903e74521a0ca44912e4308a8210328400400020041803c0989a1ae20090e5c6dd5a9648006fa7215c04a3ba865e90698b7b9788ca3e5b3118946e7a3655de60a9d200b8819b473ce53c009b26714c3b245092018a7dca8dc064f029606ad141021f6058b7e457257ef8608d7ee68f7eee395fc42c601d1f7be8dd289ad42c5a90c11a2db6a095bf13c238ebf882c1e8a749e96c1122f1de68fd68711f66a69f0ed0bf438405082e8bf0cc1fd7cf5172c5cb65ea39f42d58711ada216c104c0a717a66aacc5b61e9f3368535f8bba8990a4ebf9c0948089c9aa3a869b8c345ddf329d4add0a605b9e8a578233f5adb29ae98d463808e5c73a5c65d151f6c6bf7da63e636caf217fc841bb45d23778685852fa5ac67ec3fce55c6924c7d7c5d2441a93340a962eab133f9588059c348aeecd93798a145c790d6d148da85919eb10b06f0b6325f37cb3e68836d03330496d334d00b84912de5a34974cb0d6547f1dbd031eaa069e08c81dd85ab2684ffb88a55af5f092c2074c0ec20ac09f82bec6dacf482b812995f0562e2e221432f815958c6f8cb5f871fff04610d7373b25ef5cb4f919e602c3c66e6ab5196cfdab413441986d3991f49f9134eac847eb37b5877307751aa54c7849c4912d0324d669ccefdd75564177ffc97242e39593a115457626c00341576215a974c9ac1dee6058c6cf82a8cad94e19789e978b84f89598e4efb06e1ea87301ad39374e3ed6def3c18e5c8c49cbca322f188e89bdd250cf4073df7a6c14540eb57085c15639005f964a7b454072da9f471d2e6326af127f6e9357188f0212a9ef9ec72e86f7e72f1c5f3cd30255edcf877e0a0fd98c8736b26d333608877fa2ecc72486cc437bcb605ecd5c59541ed3b47f9c40d1a20d3480c19537c25dc9c0f224323e0a2284769a43e700e16d3627c4064c8ec814f0389eead125942c576587fa2b427e43055faa7517b1fbc7f0f53d2f6161a11f7fb2132fe8ff7d9a60935aa5fc9e099a3cf23bbfb9f31c59f9b7d27fb23b13b563eedba12725fd0fc97c9d9cb7be4e8b50ba04bd3d9184b7527bfffe5b931e1adc4e013a2ac61b8b681fba1ee0d057916e048aa96a60d6e9fef500e25fea5f6a3eb332e219b489d4f2cd415a6486f192dce3298f778474ad0ce2890463a9a2808b9b114a85699721dbe22311871d72441a05bc0c4d10541fa53899c5a8c8c747b5110f038aa2635e7ee0e009e30e091389719d03e84672a915d00f8c7b0f153a4139e6381fc12f0396a9176fbbd29fde3bd90423b4756e3404b6fdcbb06ea764fe6da0c733b5795babbb80cd90fa9c98041df3337914eaf35b156c081a05409d4a1de16fad4da8b781824517577e75ab8a024821c617834950cb556ce1426ed6775f20165ea3fc0532dff1909bd78d1c52cef118c0220e2dd8a60ffacabcd6fc39eb0d48880257209cb8ad0626d2d33eebd27e09be4c0e1f70cc77d5c890671f86830dff215bb6bbe3194eb721f9e9ab7e3bf543acab72085315c1b35cb84901937f09be8d6947bd24f1cebe2e3d9a12e302a0c53100b72730e3e8554709cb1383a95c978c876043e4185109c496f640723e8341b88b5e6f0444931814910d2033ae8a8633d95d9794bf36c8004690285b029884e8b8fd93d09ea7de20cfe678fe9c1ac1a9f776d56e42555e43b52375a855721479b798e21c7476f0537ba02a5cf06241074c78dc84038b97780164a2f62fad555f243006aa5e97d20432abf3a93cd5d09ebf08057c4ec4f856364cec79aef79195e5eac200ffd41fa0d8b91d25f64f9f3dadb9fa578adecf82c05ea5603b8c7a02cad2b78534640013a1240c3088bd75d9cf446c925c37b63da55c4a45a5f199bd60a2ce2b800e47a8a205f234253764051116899efc8a9eb02bbb24cf4a0fd83a613d62a95ced11fbdf95a23eb91cc3efef6593d28917f00ee090602e43fd1c087b47d006a54cfacdf4b55c908311573b47e64358af10311f0e3ecfee18bfd365106f7b649295cd6f9a0c4106592c6f9a078faa3f44bc524d9e209fd16fb4d40cabee66ee0e4374974c451c98a5a4f190861cd4972943d57b68afdd532f1fcd2faf02234b5cf262f323f519a9fae32f7aa0c1eac9386b51173a32a21425d2282add76b603eda07f21383cf1d97be96de703c249e7086b0882dd27462e9760c5f2ef1e0bf57add6c154081501aa8cd9be2884787ec4ab4d6d3ffddb35af11d71b5e7181b732c11d0bb7844723634d3e12e814f44fc99b6757d0751bcb8d51ee336a69b587616acc2a0c7890be37806127a33d4320a03c96273019f21fe8c2f3f775300b5c9be5c9566df67fbf7316b8c1c704559aaab34c3cae022b8ad89fec517cd5649405add478dab8baf4ac66467d4b04ff3b0d8414fd635f800e801518d88c782798ed9c0a08250b708c681778ed76e4cca967b5389975863d19ec14801809f98af96e60bf7dffd40b61c51903add4ec78009c7d1b99543c7c5a35618970ff0d2c6b1b2050e005e2fff6ff9c4e79a0a5d2b3eaffb010b1fbde22d043633f62624387cc04985844f8b51208e88741c3ee2bbe608022449e0c7dea9635a54ca20af2c1f22e9bac236e093b0311660748b6ba18473cd7a0fe762644ecbcd7baf304d5d990b63ab50422c380b4236981c9c325f7cfd210ac658bfb97dd77b20d003ad26bb94ac53e62486b09f874e9e5864215fbd135c2a19e711b80e84743fdfd421350c52d2a62323a43f125f8e6207456e09050c06273056241c46677b746fa9e1766a1f9cdfeef3ebc3fdc0c460738c8bce41c03bfe3ccd0201d830f7fb47f2e086ec2b1f386cf15d66287ec61f0885f64d54e1d06820c382d157172c02019233dc4d34f74d47358dd46a1e0dbbd41183c61b7cc603b1761aa92b4788bbb4fdb892150253891938e5393b658facbdb2d877da3f4d1b45f8d17215286b4443d372b1af60ca73d193e9901daec1030f59b6f2eff49394be48212f1fea29e1d06aaca7102a5d12313fc53a9ab8fd7d9ff55ffe369a1b7704e261b035f8ee5770da771f64f296f4aaa21f42546820e95684c39f601a9e54e3c8863601b090ac4cf8f2a3b270288317470848c4436efb5dc7032aedba2d53856cbb84a542d33d0c481ed8c58e7b3e7e2c5d8fe2c7835faa936e1639830ee799cd9e296fc5c364bd575a34211c43fb639ec4c95a8ea4979c5eb6f72438a427aa29c3300f7ee16f4c0c79e053b8abb05edd9dde2347363c5e3bc42ea375679bfb1ae556b8b5c6619b387bed8d7c618eaae8ef0b6300b07770c622040e0881fa120378cf9bd91da67fa4c4c598b563b45979bf98b5fe86472836fdbc2e13a5f0301e701ff7202cdb8f62722c342832f0f9bf0f02297c780e7d5e46572fd9df9ca277f012b228a1e5c90cdacb8775c9641fc20d9637937ba49adf56e9ca27bcff009dad6290312231818fb1cbac5ed41bfc9ac3e21711ae03af25e83c9228380142f7f849b2b6927715ef8af5956ec5222fbebeb537f690930dd1f8b22a3fc7fac3751869bc3432f645b077d822d3b339e1b3d20748517792335aa63f855d197186ce7b07f872a181f6dc4289a9f871a9f7d3fc546d98df693bae8f135b999728a5f06569cbd226e33da71368bae92d48c4cac4129dd5cccd56325504775dcace657e36ab3fa6fe8a44e627f2b0f3c0d9cb694589079a38866ebd4ecbdc87dc98b8b5c6cf919eb006bdb1799b08c389a3d797d9c878bf879e5eac3fd42f7b377022a5c7685d6a67a8437abe6acaf90db814be043a7334081a6c5eb0780c09830eff36bc5961c90e5c25a13bbc24194cecb61cbdb499bfcd914c18f5b6b6bcf0f3c0dac7c0333b203f8d2ba0e0a0e578cbb71501747677355238faecdfcb62aeac5945ffeb9d1bc53470c2c66253a75fe08d8d170649829839e3e538389a42edaa3beb03207ff087c1bb7115454356cd93111623530f4eae039b1e3df7af7a7181f05a13d4d782c8cca76e7e4e082faca884295190b4ac830273d1f0ad0029fc8ca896d52093a63d80078acf565d3c9265e7e8d1f7f6567e6e475da42ed2d772a161b1d47ed3f7171e9fe8d513c1fd05721f0cdba60f7daa44264fe4f167644e2ad218b44b6978462496f5c91d666d51fe9e050fcb92e240935cc20642bc717f633f403734cae11aa4187b44ecccb6ad3457f07c5c32500a59d6a257430dedbff61a8e3015ce3c40d22f0eac49821987b23195289ba71b7d5015104744dc0137fc96f59a6cd6a6da6a6b01870a994f6d89581d31223d9e9ba99c8ea407199dac3d417800f3adfb7d03ccdcd349ed722078c2c16bac89532a99e3c6005520b6433f785992f84e234217b8871cb9cc65ef2b53e439bc27236aa7dcf14b626629b2e5f7e988c7709404861dc2792dfe14d8a5710219320d0a1f6cc13a82322dcefdb78653ce66178deeca9699b8b9f778c0b06134a440124fbdc6eaf9b7921ef99036ac1e08606f6473aa855dd515ecbad1a1c50ab34bc79af111fdf304586583527b85f406ddd4cba705887d8cea339d1abc0255788ece30497ac68cd18d051d91f346dc1c749320fc39adf40b5b00e09099838d9706750b2f80068784c4d0878e15c85550a4ec3376d27a4e724f2c0e939a62b4d78321cb08832c4112f87bc57bab302e9ec92f0d13ed65aa1ccaa2b7de5727981e4a741d6d014d821f30b2eaf6f7c9c9b428d79109874a692cadc87731298a01d4ec4f6df7abf1340fd3e87d078a7aff82c7e4a68a29daebfa69708721075481f18cb95446e408593170adc99507a808d49ec4a08a26fe06fddb6498f6851ac253b2896a02440f6633d7c5192e7e7d1fab6b7ea669e96401c6f2b7dd574a7eb021735515bf84cb8545d24a1944c770b00a338bbdf344814d6e8cc5de98e04fd586e16863cc1f09462a8c6b0e2b9752895768274439d2381ca28e94423f4b699940f83532c9fb9e87da103638ca08639a4a946487f1c7a8921830ecbc0653d1b92503ff7417ea1cc82e39595bcb354d756a57a295e98f2275b4ea8de809829b161073bf441f87672b6fdcb30d8c6b279e026851e356160db64a9112c292711ef376d20cd50df7406f776880ed37ec1e3cc11fd0347781def24071c15b6a15cfd3946ef7b1db2d2f20d7c4ab2cec9072f821d387f8bc442d0d85969b0b79ebd7ae7b25822b168c7e7b28ae315df90e892e368b0d6b9c8222860679e3d2621de54bd1464494c7a8a46b2250fbc3c69c482887f52978fb378168b5663a543fe8ec9d2fd597e18d73977faccbe31307c3517f4e5504cb337e6df593b18bd5dffc3025f36b30796b802797e69f5a818c4b642dda0d8bd099084fb69cb1b2f61635b8d7b4e8ef214808f94be24ff63ab3628674574871bc6fa77db14eb961837e989734afb1da16ede16062901f7393a6108916d88d351b44dc0324c6bfe74bcfc12daef01357d44d3589421ebee68257fb006a91da824648df35e02982123a334e2c6c13463f9653488dfb22c16c4fbab07358b195db416b6253add87a437ce90161a09d034819c20ac13907315fad2eaf55b9eb4a310554d7c89c0f7a300c81725dd6abc0100bff36098ddfff3c3f56a1670941135cbdfc2741228f74cd376101fe9ee5debadcc7047320c6d74022d8c82496c0d7d27fad6a84a10a267ab0000d4a62e6c1ace790d87cc4dd85a81a39df12d7a101167e218016f7ab0b32c12632feb1268d063b0a279771a29e5949e56567371b44784c664555dae7d019ccc7e1653693f8625a002de62ab82b8f1b07048eb6c66108f9879c57187bd649d0d003132bbe1358cd3a142a8fc31a593afc92995b00a88617388953f0e4951ee0b88acc6dfa0ab775361fd3dad808409250985b933369c66221c8b27602d31707bc03eb38b4d2ee8411278678892e84010cdfef9637eca1b7b34696ccb9b40ba4aa106be25fb530648e692534697c43f609688c2258d0182366434406abf6a346e2758b80ff738297332c2c28953b5ca2d619211757beba430ff777136bd540524082f9b0c1cdde1e94f671c87601f656a28627ff5f74fede228d4879690664e95b710a4693b4493cd80ca6186d221781469eee79fe47a093697aeb888c4f78044c72d1d523ec971bfc349627836538684c44cdd372e37751a93f4b67f3aca850066864f3260876c1dca09993d2d59e8dad1884e8c68cbac1856da3a47285b0cea296dcb5999878e226f4c7d009202a91e54233a507d5068a942678f8a34f898c505f32d19acb089a94d634ed4d7c0bd4306caa543f82a4dd2761088c889c671f056c0af3918500b1e3bad7813462daec96fd551820a8527264c7bafd9a1dd9afed456466b391d1dc0425d5af3e14338c3c6f11050dc6c47828fca7361bc20cafd858c0f3c31d3a7abe1efd690051c8fc8a55d55c465d692e5424d345fa841d1577dcb448c8e073618014cecad4378fda45d4648f3203eda9dc8ef3eb3140c90c7be0f51656eeaa65632386a79b4169c15a057bcf0e8d5c61a511b51cbd42469737561c0d2d1a664715a48280bade25d90b56f4bbf16967054e4940aef3324c41a0be7cd51edae31eb3c01d8ca2a34f043866fa88ca2d01e116b593515b0817b09c986d4beb90fc46666a746b934345ce08d033347d5efa1cd994e0b5b007ff94a61bee118408726839a3de7d8eb0ebda9bcae10b7d2701d48d31b1e64b664a1b67d2a43e3bf0ab7f77439d38e5de2425d317790189d9a2048a8e2fe1b6ec58bd6036b8d61dc1da345e943ab7d6c398371d10c937ae5b683fed50cb991eccd1e12de3f726d2c6214328b01aafe40e9518a78676e807e0c0c808213284c1c5a1436ff770741f9045c910b1db2330ee2f09c65ae4d03ab9404b88af612acb5360f6959bf6b48c853db17cea9c82acb8b1fe644832b685a13ef8d61e9f3611ffad85b111233711cae60975d53b336f53ea8af15610974a8a79e06b792e55832ea634c7aaa1f036f50ab4c6a6f3b2a5285cae71bcad1a3be4c14a68b4a95500ca815fb36b97253ab79f1831c8cd0b81ddac35d6f4943d39f0ced53e341845d5cf93b1477e714536db6a7b15344e88dfbf554f2f3768d34744f09513495fca369dabbf4612e7b323b9f02d3979d3a462a4139cf4f9948d19251b876d4111dfd4172e068a4c77aa8c54e128ff6d663b9bd0f0bca752eb274d3487bb7eebfb2d9dbc8ccd8d056399b912d56515cef13563c713045f3a1e59d06cce9b1896ee7f34b3b0d4c89182be97e7d72695a5edeac5d1967cf32e3848ee950d23e4b2c843fae27f76a9d75ea90e662adc90ad00fa7d10abb9a5de0f0b2a58da51e42d059f80da2a1754b1b8de792f5252b9b6237c8ef3e342689bb0f57b2be70d8fee0217539a8acfbd7342c63bd10d62308b55330a44f2b97771a655835370e594486e84db89f1ff192a65324d7f677176a99ac9359cef12b12e3f0cee5f9389293c341815abb983d3841c91f31a84d61b500763ae065de6dcf1f2eef46a98760c218ccd1fb0a13fd4b77bea0f1d34a2256d4eeb69f8109e37328efb8464b803eb192967fb1fdd6e74beb5b36fc000ebe46c574d117b2ffceaffac0313a10186b42f9e20f87a622d98a401d7ddfc85b5e42acd00ff9825b0ecf7237fae2412d3205c73529fe92cdd1c5b4510b6651982dd4acb9b1eb930b31b5830efbb86e3556ef10e7ee6165fab947c5770bf2970a9e83165cc49be3821f3e548031f1f2e035dbecd03cb595da5144ca10f27e0760c0449941144c7035c4e5e09410a862a9a4702f695298543895071d962317402850633e5c69a0293f582d2c875abbb22880f9d2ae302d9de1b407021c955829ddf4a4b55369f05237efc358380f69e90cca2311d3642c76373deb5acc8e60430b56c0d99ae326a1a92b7001d2869214bd374505b5e3a6e0aee570bfeacd5fb2550aa0581e228960bc9a641f25315f633afa3e0b70a0ee858c2d2aa25bd63377decb4ba37a147db4af2215f51be5fc49f4e2359af63dba8fc7f22bf52f91b7f781dd429cb92100687a68577bc9e0868f743c5df80931f2323c8cdb3ee1101c7f62fedb9a0c445b3e6e73d36264f191bdea0d675ca265c889e5cbbb45d164a81785cd506a507fbb668ef0ae09240436cee37a082586170be08c19482716227a24bbba433ae8b66828e3b5850687ccf69ad2875d315b954e4fcb498274952f9bc8c56fa23927ab53bc7d5c190874275b61050d4bb7417534226a51a06da0aadc38360a5a00bc0b542b28c49d2d067f24adad2b007acb8ee9746f7ca67fb3a296daa5e3dcaf906838356571b76a231c7b234fb5ecf0b872f91bbbdcd19349e1cca650802c4f80311a1f417bf7b01f0aab70f23404bcba156257e605f1f25bc49fcad0d2ec18019bc54100fcf4321684cf870bd4b24afa138ac2ad437467991bc5c86d244d74056ac717e6bac3a2c4851da5e4a1ddcee64cb4f6fba238a74f5d23f9fdb3298558902985fbb092873ee122aabec6b6b45c885b83c8e4510fe9720129395888cf57dc272952915c042dd0f7f16b0119eee882fcb99a9159e2fa129ad3e3a24f7676b31545fa68c872920aee209e3e04de5581d4d0b3c8e09f07a1b21d4361faf9461f6170444b8bd6faaadd3798a7fa7eea579d89b1118fd240e0658e61cfd6868de879b5d91f32d617473b6c19a5a1f5d624f4481dfba6eef07536ae6c2ecede38d4019cfa6782e35c85609d54c55692ea7395b6f0449844b2af08aa316258780a58f526c98b6c61782172a1d50c688749be3ef1e92d49238b754279b20198891984c620f7fd43beb623b08f4c2badfc278db7db5de9aae431fddc5a4a8ea43032c91876b7acddd0e86a6dec39609dbf78e4e6899ab2568ed6b383dd2f8cd8b9dd1d753733eea48a97c34c82ebdfcd3e25cedb865e237a47707bb8b347359b4f27fb927670029afd5156359423432cbf4b1355a5474c2e9ec03643e2f94d66700a58eb49549add4186f4f98dca7410ed3bf91629e442bbcfae62e5047d50cfe4ea4158bd3c6e9526b733c49e52557cc779476082c1946691418318e44bcd6973111597fdefbbc6fbfc1589d9eb2174c20fb76ad3f67b4d43c2e0359670b11cf17b37f3a9aeb1de776434a71b8e0b2b571df653861456167f81c30b4f011269a032c18e1b2df9690cb02f9239abe99b35e67615a99e31c6da6cb346f9b4fcbfe01fac868c8703a10797e9f22bb94fdaeed2b4c038ce76a9594291feec0ea5145c4a3f6d63e61145fea9e439a25b417e6ed486bd734b205163a7e8aa0eeedcbbbd06524c5ff172a8e3992260a5ab7012977ea1fb4455ff9b9211e185f1b544c194852373d526742424734e558de438674143061420f4f80a2de8e0f46aa9845b022afb88def29f2c54bd992f6ad0551d78a42748bb7411451f884c5817cd4ebd0c61fcaaa7bb68af6a4d99df83a85e2933704e35047e02e7460b7fd109c749fd6fcce6aa15eafdcf10dec4d99374745c8ec07d7742fd87c54376841d231bef2fc542f84cedaf5215011e1b531c30f02e65f52b4dd4452096b650121017e1a34d36957a81cc2675c58f0a5fad30c4bd26490f8cc50a8748a129965396a6980f1cd0f65375a37a76a69a73f73275c6d6f2e195206630075acaab4d6b034cc112b4f810b7bd22336d387a6d5a61c13a1b84ef3d55ef712efd26978d6819299d95403620695b1dae201994e060ea89d9860d1f5adb8b5ceeeebe965c92a1cbf55afe90ff3e5c2db14b4b2680c4af23340f0ee90af79a76488401afb3693d4b517f5e0973cce2909d444884b8f14942a5703cdb08f54154bd68adeaf00e610c149b506e121e00959af294a32111b4ba3c262743e7892d95274df9f2d5a57ba23c242ff0bcdf151c630f92474604241aa560ccf2f3df56c6803b8506f46c14b13857870b9b2e749b622d4fce527faebf84e86c1d71f17c52350f77fd0e5734189661a85157230f5a05ac9ba650e32e6671e455892146374d3f38601af73553578f76272459985caff16f91625196d53a19cec244d96b952f858229ccebd419fb32b8c80cad8b7430324dbec35b609816d098d2dfeca3a5e74ff9ef9865405ce2e9e87e996220f06635b7fc5b78340b11480291046e6f878f4efc1128d308af76bb49b7db2de55d85ee824ee0ec9eebb33b37fea9a55fc9a2536e09d00ebd243664a0a1c2652c87f4469496a520d073898289ae5ccd788551678acc4bc29b131f02f0ec491b516d98da380a215144a2e5d75f68a73406ff6571f2694fb8911eb73db1835b4b33c76f68944ef86b13f251e0c119c3019683b17c7ce1df655f71e95393681f38c683b45280cff1c474734e26b4819f8264b1470ae277c564e8fc10b488774061c8c8b687db3b63e94cc12ee00dbd48973db91815e514a0af18e6115397bf9b831769e5854b98c6b64552975c45497fb8fafde43c874640afadc40ab01a33b7cc1a5684c4b05c343d3b2f80fb7c5a554f53cb4bcac641c605de31a9d07739cd6951668b810570823b86cff25e735ea4e0beae68fae5933228841232469ccff1dc7270abb85e1eef9c4d5c4834f56aa6a952dfc1ffc8be69a80da614de136589c37e8c94482f86600b5a8a9f3d14dcec3d011d104f550be2a0b3b466c8ba2a61cb722e1246abc853a78a8163efa4291bbf06a3d024058a5aaf9bf53d735fd5782f9a6198b110ec024e1c54a689840e631209e8b777354e5342b8f0ce7c8c847f87ea858a46aeded99509c32da81860b54a24faaae51962c7c87e80836c296e839fea0f409b13a00374fcc2e20040d887f8180b8e51636ca32e3606eed8a49505bcba12e1c0bf3d452f65819d0da2357077e0eae3fb83a6a0de4346571bde3ac7b66e1bb5819a57017572f17f18cc8bbbd6e87aca0b785924a71c05973b7073e0370008e8841d63b8205751be16b2271875b292a8b82473c072a469503701f829f23127b8692f6fe93d8ffa7f9c707dec374d2cc9c70f627dc0e1ac4d52b0d39845678b081e81f979f2f9a584d557c3ec4310f49fc2395b716707592695f9ed28d47461699426f83b5ca888ab72508221cbb22b780538fcb8f05b208e338adcf0c24dd077040073004f0cd0af6cc636fa13226a8fdda83a4f1a42e5aae716014a785594d9203fcd480ddb9964e29dd3b616396d94856ffad9c12870335e17316cf7ddc934a90b66c88073fed1d38cb00b61c4aa7fcdc44867ef19e00a5a54000e41a6cc733c1bf2284b44bf85a7269a31760b25e922ec52c1cc16311949a789f06c8f8dd507a0958640922b41a3a4471e3347d3df1f19cbee78ef3b6cff13d72d4fda4bed47ae4953ef3f2379480dbf28ad557418a2fbc3b75e1bb48559982eef122119551621d2d0a53d7c28b5abe9fd1f7012fb762c1dfc3c4796b4a92c1d64acb3d6acb6dd12fd42dda313247a5fdcc56155476940560f734cb25206aadcce20c2c1bb575ed39336d65065afad7bb2558971e9cae60e5f1bd8b598bf5dd5c93572a31cb2ae0185ddb0c018ba0c593360b57c455c7133b4ae310c05e2fa0622e1f958ed225d38971636e226d6501ab6fd7153960dd3395089c09560ce2da6c8d758503a32e32edcd75621e4c62a8543d16456fe0a7082c0a73b57c9b5d3dff138ed0540cfc7e3e190eb3f2e427c4eacf2380faf6cacc6446e9043aea296cf8d9068aeaa917c5d2e12699c5744a392f50ae993815a92181e6dec49d2736c2ee7d6ef2c53e94132ceff1e4b2c7e1e9a2ce7430b33152b320609c9cae4e6005b50e457ddb83b240bc65c014863c0171f0513c6b244e59b10450bda49b7a0c85bab9a6e3d965652ae4dd1efb58418e328454d12eb943d51d7dee2bcf95e7a7ef7141a560cda46489797bfe68a636a5f57765da8d65b6dce26da2cf1b0a7ec77545cae414619afe2c057d09f888c21da59a710e0b16c6b8a8d3dae33db66965051c01ab92588a81ca6d092f412a522402fa38d983c0553a4100cc1221ab406f3f09617f81d8bdd0b4dbbc115b0daf3efbf80d8610eb9bcf63e1fc7cee3f8fd2330516c533108cf7bd146063a25c88f5a0a1296b9d1379860cd792192ede906f175a9f05f73f33732c61f92cc763f742b11a0596b7b7deea4ee17370456da39b576283ee545de1454d99d34f76c76e08c04fee84fbaea02a01fbd9b19bed81959b7e71c7885788e6439651625a3c22fa0e64856ea3f8a8eb88bbcaba98a13dbada2b66b2931eaf887310b28920fc741002c2533123051dbebe42028b6d4dd2677ef4a8aa4f652e332b404ccb1ef4d9bd04656984c7b043f90ae83157b71d0406eeb3e2b7c773effca910fe704888820e87a511acc23f15a13354cfc4a48401d09a2371d34fc8cd33b10a4d959ceb544ad2cba29dc72084237aa93aa1a5f0caba11e60502c411d70ee3814490fd9727ea272a6f2b6f3246405d047efc4a7ac2985bf574675d29d00f82d052dafa89b104ae93f6285fd4a0029059e9ef9daaed30bfab2eaffe8ea1fd9e0a297fedffd35de02f955a854b02e68948c685d716054b8010ca35a2244d2c0a5e6ab00e2df224e8ae03064126745feca589f21de50fea5aa2970a79003e904e95b24ccd80ba80e02e32dbac2a6ff684863a242700476062902ff4f97fa90ed12dcd7d095a85f3627d9d738722e40b06f4bc941e2bd5285566f1e3f6a004ba4cf158a2331de405399c08cfe6b1c446ef68c093b20dcb4abb77ffc3c87bf6f0b0cd89f6353d08c14e135906f3891c157a73bb30e9ac777bf10f0db9b49f2ab6145ab18c98ff0fb5886c7b0d09f5a5ec845b2d05e6a05bbccf0331307cd5406e9a7295cbc9dc24bddc0064c136ba5d79d669e949142117ff5c7938609a14b5d4c18b3510c5f14f55552bda36a8195f694babe053a080892c9968bb7bf74a72f2e7ef53256e8bd055bf616cffd9f7c487a15e86c89b75e669f3a4ae75dadf92eb3dde01bbfd91df7142b8fcc97d16315121bf8e8c78c047d2ea475cf3bdbe80499d14cd2f9810c760ba180adbb6b7e786216c89019aa99c77982dc014e44e3618b7ba809172f45dbaf66078252af2cf3851045a070fcc83d541a68eeced4a3e3650f23b9f481893254eee5015358a81c5da48516315fc02a3b22b5ec333a4b3c23846862b8e6b8d1256d14852e4348420e72b04fe84e4541129b024ad473686203584937007e6b05c7c64734e7693c613283c11c7c5914496db24d76958d23c0ee5ee6a7ba63b765e2bb573568fa1adb8d891efaa2485627c8b27f9534b6ac4962126a447e748e28faa933cc3d5972d3e1dc33e786d46cd14fd28d098fae93e78eb05708e309205761b63983b8be0e37498cdd233fe71f802215268af4c461ea891c1d8c35d508ac8614235e7a021951d113520a7ac235f836c7035517093e77a1044e52661747b4a900d4f9c2eef36edcc9b1bacfe30a1597b4ef87c749f1b9ecca066afe073af271b402173c350aab3e893629f555437cae7c5e5d8a9cc796dbbfc78b0c74bf539ef7b6a212d61521ba9f0b06f84e384ab43e8e45d9c676366ba2b806385b35b29843169b8534d5927aa4b9b31545e147eff90512d86f274b669e6b5dfe92647351ca718ab701cb25130cd6e8ac872ba8272e3c21d5c7e76fc63247060f72450d5d22216847638a631b1fe8591c95903e2546efe0c2eb80b2492a7fb9d050c011cac8ca006ba00febf1b501ea1f64486f34c49e015ef8dfdfe0335584d8c7f6683883fd082bb7b52ff2234e8e0a22384f167d93fc1620d1fc9e45b2cbab498da427e176c7ef00bc2666ea648dfef637ef11f50ac204630087f42348a2dac83797892584610c4314d3dd02fe3fadcdddc9c3ee69a206528746fc81d3639b2b29b95aa9c909a775cb781d5f6db6c0add0c5a4b6a067244dfcdeeb6b466cafdeaab9f411ead06160b499d24d7637e0e236c6bd640b26bae53143a68b523b58e5a1dd0460d9214075da2b087af7e824b1f577f42ca9dded51639524a37a71a4067bd1647a59b2140efaf236084de34f1eda2024ee66d630776890052c078c26016b6b60078e7318c75e7ef5ae3c2e7707539a3ae8db4791a216fc937a78cc8b5d44f34e7a520b3a92c92eb66b8af1c625f1ebef4687f9dea5d5c1c389f05cb093a4c2f19bfa99b20c46fdfca46672a35a2e7c7d570f92d4073dafaaa7e199254fdce8326d0ad692000781e819c54d48f9a497e3e78916026bc6714495b2d66167542a4e523f5e5014b8b7fd17bb72db43385392f6c688130684d8a0e879a6312200d949e34ee73d277e38bb1e43c2606ead6f0daf1eb8f4a2753a962d137ff0147a9cfe5c56995f71a89572024a4daf100663a33acdd78b3a6cae28752533ea54fdf21b54a93064dd8a1eaaa6f39e68c446bb00141dedaac8b400eb167ce41bb0eb5cc37910c8fb4c80ea860d21f1a2a27849cb6a0a547f46d07d71c1932137b9f11d0d384cf4e6bd7faa85d9130baafce647f0fb437dfe6f721363c84d1420439e6c48675c2f99eafd842645b732be521959bdfbc22f984b4ecdaf7c32a534d90b6c08ea2dbde0d88b92cc0df874dc8788b79c4aa93eb454ec236a1a33eaa7c31e911f49185f8ccdd14c1a79eb5534a8d3ec4b0a3a72d4a028053f16288ae8c3e37d1b0fe0b7361bda1855c4bdb65462186ecdc8b1e8f93b860ef6542b832f488df1240ef6344ef25843bdfda42bf2f1153f2256ef04046e133cbfc13cbb031321378c1a16b438f35d549ee5bc2e2dd3cf7a40081ce8f272ae33a8482221f1f9245aa0fb85a66911ffecbba0d913d82057c7996e7a8326fdfa3a47f6cae0ca28bdfc2f846866e720e18de2ec55af80d4ce56f062baa8ca3b7fbe62575001ff313dd4fee5471b488aa349697ca8e27e88189859e24f0545b867c8b7f70e5747f8f413c1a0978a0c0f00a1f6d2f3bc139469257c386418b18441af8292c72f08266174633ad0d7235ade04d98a042029f978e793e7ab779cb4b9d319c43100e220369888292ca730336192baf02a35f53a14304c49e877b3d51544898a29b0ec46077b0644cb13203d3eeb0aa934e24ac51e4188877dfda9c02b3ef95b28a6d15a8d056599606b8f8403ea1e1f43e2a4719b6bf2f828f5026a3592107f8c2d00400434abcd6940818b3b15a82523e7f44fc8623c48f47014c3fd77049b4b2a20ba9adc45a071bae2feddc16783122397c2f31cc896bb289759875c71743c01fd36dff155180a809fa0543de3119423d0f29161bc3c991fc9dddaf4b5290783b497b019c4bbdc997257de24de7e280ea5d38feaabed83f2474e669427b472047ce66995573b4e983656ce37c975404ddc97fec086624da07414855798508ffa1056c21fe7381456c715e6bafba98234ef980debe19bd7a72e1d10e176fafb11beeb82256a85193de80d9f644cce0f05c5f85b3c95b2f93dbdc45d4028ee1dac5923179cf268fa81c8bac088414f4efb37503044a584ba70c188546bf31113c62c5b0433e5cd1f6fde491ffa887704d441cdfca509e88a6752d2deec6095fc10686dce8ef37ec6d1410aa7f2ee110ac1aec8406166ec47e182460709a3150c6305a33d96479889b9501af86e007b8baae1680b103b63442034bbea3c203898bcd2d6b09e444e986fef4b203869947b9e623263fe233349a5147957abf69ffba307fcb439858ec3435cc9a942d2811fb408c987389370940a98f09e6b29cc53c4c8a1a12a5da76d869cf85004709aedcbc9294b837e2a4e16a731f78e203381b618eca4ec8557f7f85995f1d92333d965859f0aaf8701dc04fd5b213bbd205bd6a5a0a391e3e779f1a7ef40c588f62fabfb8e0f6e3a05810fec3d9b5fc67759aa768e54b22d03690541ce2dd8b2ec75a1bf653b7a5bf0e503fad4788c8ebd1e788b8a63fff4b5386b0026f6db5ea51e0fa37097c3cfc1607e920736b8e0aadd0bb98a1161e0f006f86cc813b464862284d34d9bd7002eff1dfe6fc70ca08a4b9ec03c1c79e3ea44afa7772b6c3d249a78c17ab5afed53dc638ba6cb55d6d706122b219c90f7de3ecd4077b63c8ac5480973bfb676af9336e221568b3c7298d889426daff4e278d7f6470e1a80aa0ee8f3ef83b1b9f97f681845aaa5a4d31fd234c329d3ce82804c46bbcd2f3681e8ecf315e1e1fd2af87a7620128c8054d164231e5afdc1945fd36f1951a255bf8cf2bdb3876bf23031ca5fde91ff7325037d84db10942604da4422362fe8568d318d8247508dc4e7e178f0ae1fdf2a8bc976676e25b78af7284f546c42b3bb9a6038290075fb0b970561b92d30a9313a60f57c80ab1f624a8743150a4fe4d22f66359169b6b61964eee133dd9d964e716f4859f7eda918fbfa1f303309f91a6da9008752e3ae5fbe58550895b5e0234efe01ba858ff5538f898eb274e6f1d969ab45afd7f7b8ebc75aea6863a769addab9fc118488cb8af6db56009edadeda59e102d2611b8c75190accad187b044191ff89e4dc05e890ebff40722cb787ba44779235dc0d66c5861cfe62ac7c48961a3ad9093ce03828f9043bf7cc8c67fd3cfd2e04d3582ba01eda5fe8a308c696d6043d8d197adef6d44c21ee98652394fb35e1c1eefc14323ccebfc791c2920084462a01c4f2311bb8ce1268843ad2a5390ba5667b397c45b7b220c438b37244f38bcb4d33de4b454012cf15f94f2d204b4b0734c8f14c7f48700fe2d0ce1841478ce128b7040f821fba150bb40dcbd98d8e1ae27e47073e26d98d3d46d1ed58417096e685a2757a0d8e9db85e84eb6188b03d13efaef428e239ead82b10cda3d45d3180969c544548e8f3c64d74dc14e10bccb3be397bad7173ef91369715ab1721271243c14b56a43cf165339bca2f38d4e9ec9c542b42c72ab8840d0b0747a7f3bc9aebf808869ed09ec74296749f0828a1d7b09333b284b3af661a34acdf23a525aa0cf28cee8cdf910da4a90eed841425586af8122d2d269f42dd48e81f54eba89728f0136c475f0b5056d3c4099e9458bb89ff9fe8f1802eb6e386d36ccc04f9ed58f0ad141266f3def4e64ddb3fb78a2b0691c93e80594dc3f79d719c1d331d97a5fe964c2d6516f6d0ce69e082bd4164d47abcdbd1bee3b05766669ade709b9a43db8930be0b47e47151fbc778dfb042609c1ca358dc781e49c059de38bdea61f468eea4fa1e076e40427730e27dd89ea3f2471ac6f36805d5f41dc27282b5210906ec8e8cfc2cb538358c2053a64cff88b2c7ec2ebc86dbc4b9178c25377c0ee58bb0bae115c7a0b8350fb48cd48d3513c4a72fa55c7746a5d633bd8b2bb7b8e6d2b5e8af34a25cfe00ba9adc88acb7d04d53be5cd4c1dedba0f0c4d3e5546f8f36225dadc72a942ed686a76bef2df5c6e250882ad29f57d306479846d182171f69e52cd2324a0f16cc54c0ab552fea57555cea2216acef56d1883c18cd101087e0f3ed002032f5b9eaacc9d86a24a9ab8bd11215f2de21e85b87604cf9910b3d7d3772681fe51ab7672cdec590308ffa8a956124b68924a1472e54991a192d240131c1be40c32652e6ee04f2449b53477edee834222e7f6d4327c16be4c763fb1ca77a2228b5969395ba771d2fe846e75d289dea806f914e602e8d6b6a666e7ae0250fea43addda9e91d35a483f2246262a26c0c49c10f2b8f723e91921f428d90c21f4a776f3113b68722a6e2c1014757ff8cfffa25248e7b089c9fdfe828ce7aef633c182b32152c1e1afb5be08c370bdb8e55049272b24e157d1830bcc2a05bff091e95c4591239135744136573e297ba83a587f72abb602f0f6f1a5646af075448a23827d07831f71b3191b393228a0cda208146fee8fee0cf868bcc8d3a949e34fb4f8cbe503c913eac22d95255d154902e3e9952fe94fb366ce7a949b6c9796d709714734f9922663ace5ca96f932f3de68b31ecb54d80a7e099e5129ef8f316b5c952c998fb65992cc9ad834f38fcee98bb34dbd268f8022891df1fe5b2144e11cff6421351c4766c710d044564f7de91317fd53fccca8447af641ff86149dc0bb61e9bff2b5523f1877237f96464a48a360401e8dd42de6172984c3b4927277b46e08a4f741383bfba7ba3bb54397325869e1fc9dfc04aadd21c83e2cb471e34e0dbff66ffc5602a8d2dfa179fb0922376290cec900321f59fcf921c40e29cbf5526e0cbcdb6cb492859acedefc80740c7517141485f03a05f429dc324a2ae0dd139b2281386020bac5965df66ae4735506782a7b72ad25f98859e5526b67a112af3b4f3ae227f7c6c17f95f702531009c36ea729b65a0169cc08ba6b280d983488799743a8dc3cd6088a2806287c35c4e9d39126960a13b8f53253615d146e29d75992bccd4c06138bdeb880989a4fef7cfe91a00530416bf6c60a22f194ae5c3ae37a6c079289aeebc0fbd18e6912b9e20c7d573187ff5e10fb9bbd15126fd6066c541681157e7e788cf7171651fbaf9a05a6cfce46ec760674d5579285832613fda14d2fecec44b0a0219745a601e4328a34178a4abdf7a0cc2edd6fd791b7d6bc4fe14a52b4c91d69a5e3b59238860eaabed742e805659d2f4429b1309886d0ed3afb99388d0a09f0e5f06fa07f5c76db30390158c4a150ba27904651c7548f48fe118a790d4d0c2f8e89c540a4338b4236910d721ec49dc851ca68f73df1a8205d34df98d6166ff0a57af3ecbff4a68b33956a563a315971e4003fd33c8aa8ea3d8dfaf8423e1b4af6f2d19e7af9dd548d602d8542803cddb0980fe6bc2b8af06be84d8bf3ac8d14ad132f007ed3eb812c17878e2e5b24b6b47cc4a47e9f1a16194bab694592a4b7993dd2ba5e967c1315fb81f0f9e3afb38cf465635fd3e8f2af92892761263535386a342caa50b78b29f7eed5b9eb934a82df2553c6c88d62d875b6f1d6944a712718fd22f698cbad09af64d57f763e204c46da1941d9e4c92023004c0a5f6ec251588805d5dfabe601a1e3541bbaf607ce0191f7b2d825f21b1c73a673028faf9e8c39d72b489e0d0110d2f2363bc3d038dbcfccbc52764f3753eaa3f1fecf092cdfee6c39f055db5c170bcc265e005b32ad7a79d142cd2d97c27a439c1cb9771bd4ca1c825c5d888114613b7570aa091032d6ca10796926feb338ccefe7f93e91c2721a3afbcb03021b803c01d6b6a921c3b4ab3f4679d9347c3a53caaaeae353ac0fd16f4a96cc8f72d7ded31ef262d84da147b909fcde8977b1b1cf9f97debd60bc24d662663e7583f57a0531d6209c93e37b783ff50587541a414a1b2f866720fbc250560cd370dad3d912c9dbcbdd45dfc979a538d5db36cc6497589e4bed189dedfee51e2e4004e97929e35a6881e3f213ee3eac579ffcd6ed96dd0a7753b21840d9c7c6e6d844de68440e60887f06ff2d9b8fd6f953ac9aa088fdc2c68abb585b0c5ab0b251686ff6ac0e643cf25e90e1836202e75a13447839612c19669bac88c40e1a550cd74ace7a54698e7761df4aeedf3508bf8c329c060586325c9c1b61fe7130e5f0a6781b491253841d5634a63e3632f500c7e22a1cd6fc181b080ed1561a9a539b66ffe7e23cb5bd93892cbed7c79dc8233122677fec30f91b95c2b28f6f68cb282ebc0434aea9c81ee00866bb2c044b4ae50d469344610975014d32b05bdc27bbc3ed64fcc1e945202d8704cb272594973bbb73262debfdcd3a2eb181de7e828fceb61279544d0c7e28d1de173e2faf61f7b238fbc2ef17ccc9f9acefb1fac44a4b93bab59d128edc892ff9eac885414875f3c90ab16d7c93ba95a69d96df1aee1d9ac92bf274d1e34b7e6a6837a3fd7233031d19aaea4232bc8c94993aa71c862027fd6a19941d8691d5fa2a23fc6f0c2fcded477d3ceb84bea0d4cd7256f68bde498c15e8b47ca3fb86c669c69e519cafd5bbb9c5c62a5ff7310d5baa950e4c1b0469998a773e89f3ba9d19dc50028a35c9cd954208296628119a5f5508a7640093a4fff3702d1301192d398c6ae98b6e3b0fee78d1d573092b7313231079250090c55f09c42fbfe66ce46ec30f4cff3cde6990a25b2d57d059a9b3e57062165cbefb5b75ab3647804c3df5cc7fc8f2337ec03b1cf56a51728ebddf721c91c730f79914eefa023ff22ba19d739fc8b0c2347eddc5083e6ceef181e43028a7da4e8ff6e1c02ba697db01385bb45556023e6205b166a13892a71af4302eba99a25ea238505cba8041419b9237b3df7a09995b3abce024de521b45b9bac272d151df45f4771d758dcaa14614b8634e83417bf7f0917e478a9e709f64db16cc7998a2b27692c28322d82f9297b7e0b57b3bfaa349c4af5dafcdc926ecb511f12cbb14e30c683d3ec9061c97c979be6b43fe5b401b0203785197ac76f78ac5d7594a40161f292b96a7142710ffd81f288a30e7a9065caea9eb54cb58449a892dafa90985e92ac0352f8a2b0f6e3a12c4e06858769ddc0821498161596c9079077ff9c22f6a15ff02ac66fcdca6319ed1bdacead2dc6d1172a4e6e9939d45f7450d9763f2de75f0f2fc17a73707ccbb5c05892096264e322d8890ba6282b6268ed4f0994b514eb505d64d2c83d35cb33b543c6c3bfd5c4ba36727baf0cb5c80a3c03ef2476de700be2e614506b5803109edbcc42e32c00b75ee20d9506391219ebb052f595ecf508b82f425da370955c91dcc8b7f8552c1601438f6495fe250d5475371388defbfd1e6cc65435118776324d494f84da86d9bddbe271a83ebf461974196c8d6a1274558b15de491b2f8719f698ab4312eff08704ea80e76bf8410b6e7d54c876f2f97136eb845665aa7f052cced68108b95db33ed25c73c888fb428b8001c62ddaa4ac9cac8b6940f8eb1e5735638476bf38ea3d24aff8de1b061b6245cac88fd54c4c4fa2d414092b652ceab2e1bfe056af4d75dc7a01be550654cca46840f14225905db971b457c858f0985306fc3c6e8cd0431e1d0521d6786e078906521f88c1f68e208fa623d965e7f3d81aa11b23d43179bb8201428951bc1e1a9752a7619cc8532c8e5898ca2ebf432d2b3403f44b8d0d9ea359a744d057e71f69f50767594b13ca23deba84914981f89e263c8e5b91b4238f520b7132f9efc3657071f074fcab6ea6cd34b1c4b958993469a456a4a967c7b372ad2a0b71ce6812aead095e519e556fcc44899022aaa106a36902e192ba019ecd9b87a3b2e247fe48fa3a46051da8db4996562c40c4c05c4001052535d82285d228bb3ecfa35a8a8dd1bc31f99ad29b6c256ebf07802c3bb8e813d2296c574a4e2a58db154723e699c1d5a374e1c13c50deb155aef93134104096c7b048b48389208f4cfcdd605be9da6bba84d3b1df15177c991af1c86aab831cdbde3a0dcb357c5008468b9fb076900f7f3907208e6c3788e09c78f5e7247351afa7da8fe3296c626a1842913a67854c16b0f479498d754719b924302b3ba9a24be6299a938326719e6697133e861c0d397a22ca9aff155575171b4f36ae6fcdcd2f627add53975910070ace9da39039d4935218f463111a0b5b939850d49b4e1e1dd406650b29dea993617f79f344b3a98f77195932dcc8694b15c8b9b6b6b772c9af0583e405a002f41e9cf2dbc14932cb6a920dec0d3b20673a22b7bc6f9f6c2eebb8932786eb1de346c679326e799a2edcf8684fa6007d1e5d57ea72a666675e2f593664e906b4f26b744f30b77ca4401ec329d3d60c2ad51e0540bef69762c289aa6571fcca50b066ae7a99930e87093e78f8f905e881c3fc8589877a6ec2d4ee3cba81ef4cac62a20a837c037676fcf5b813c5557c3709413eabc5a40532419fb42d2644ac30e40eedd1c2414115bab3d40ee6b22eee8c94fa7d18d167414e1d873627922b242575d4e3974eb6b19086d577b0d92aa857bd478a45cdc5f9e9283750f0e221d0c7e363aad375b72fb2bd659888513a4717a2f7f71fb04cb165e417ac1ec252b4f75406e4d93b21d65f3d6637b8b92c2ea9c63dfa3d96956bfc588cf057df42fe90c15c236818682baf917d8c2244807c0d915ffc10d8208f6c94cc5c0c35f1286228e2ac9fc70cdacee543c081ef1911525838feef74c82c43b9a973b6cd7ffaea622a3bc8f15631667eda2797174e0299055be5e242c47b00243011126b3aa94f3018e6125ee63f12904954283cd4f05bf2e48f380fbcaacdde897bb8c1ffc92fe3ef5944f2c35bc5629348263c35b2f19baa98946ebc2e437bd10aee943906f570eea1fe25bbe8689073cb9a3bc24b375fab852f4ff3798dddcc18872b58c6dba2dc5f0f12102c5df80a391587137c7cfce12a389f9093c281ff4cd80e6d792685e49df35c7d68e146cd747ce608242770c5633e04b7eb2156e3beafcc4f6581f77df4f281e50e24eb3a6ba1dd292f06b0065fcde95e9a4ca342a4f36810757367bb82ab29833ea5d4094a14524a348d9378744a41d852dfa40bc88dce28b7bc42d34099c2c89380ccddfdff07e6892ea5d669615591a7dd2a847a4ed64a6d99e24fc240a669766bd9699d4d453b1f08b8b3f23ce6382a4cbd41a740ffe53b6d4f2f044aae3ad3967e74d28e41ec6caa4c0d3ea54b52061eb652355544028fb8ba9b243bb146d5dafeb4b973652dffedf434a7b81f84c3a3b490ec38f7adb80c9648be0b53ad10856f2df799d095f58d6dc154aa5a53977238f0a6f52460f9a2fc4ada2ce5b470e1cb02eb69b93d94ae1d74c0394de023e326b18988c43794145006bca8038bf3f0684e91f08837f3e5629224816360fba417cc02526cba5100d0dce21ebbb90af105d48ffb2348180b4141966f8d58b1872ae5034b8d18a91bc31d8d6901c79bbb4627c27d234342d100071734325161c0b388b99f8ea0ed2f372a7195c6f72d75207c984a29610cf35c9aeea500a6d22f42cf4c34af2122f35531afedb506ab7a93b220784abbf9615b0d9252bebb73d7369652a0ebe79da4f4ab68db3e5fce1de0eb420c38e8ac4a4354fc4291713f0cee51bd4510db4af39cf2e888fecc29d1f4d003511064741c03b62ac3661c4e70d9aee713ffea013b3749c1e1b010179627216510f109a7431bea4bfa729f9b894750c760e81b59f98cbac0e75e81668f4fc19160d947ff64433ba2ec84c462c75199f89c14c0606495f19c53a2bf5f243d0370e4d5ae8251049e1489cac21c75dd8486544020f4a030e73f0b08c9dbade1828a25a18ba7461a72efa66ac4e90f475724c509d0760418b72ac4c271b4643703160567cec88a66328454a4e0a09d040591239849fc2cf2823d7fcaaac866dc4851af6dcf87b38cc5ef9b56dcd2d1cba6174c5ceb7f103f2c76e4ca8ba9e194999080338b2bc7102ac376f63680ac9714124ab9372a6c7a6e4434e59a38eea4dd9d46e7f07b08343685029dec3ca63557e7704edd225df2b7ecd72178dd80df45bae6798a4b4586411f6d2618a48d6bd8b65eb72ade6aee6195f4a2f60decbd51893edf52c30816e6333856f53f8d0e4c16cc40ce43be952646aa520071c1bd7cb9efd5174b6c70e5ed4ea2a59338fb4f889f4e3c2fa9b89294b1696306dde1539853021105bbc821b6ce353eb3da495b41f5f510ca62db9fa36b3e2936f1dd4bbfb93b13d29aa0c9440067a8fad951b48ce195001dd0ff4ba9c65de03924f3303e66b80081d5f54f1fed58743c19dc57569dc2840349196db4c86f1f6194abd484a96c29ee8673cfb337c74b21d01b3b327047e7f95e531a8c174dae067d21271bcecffc4632355e4ffcc908000cfddf4bd29d29600c01707caf21998513a989a34aa67f86cd431693696ac841edc27065ced58898c5f542a2d23668d328da7052a69cc6c4a75316af2c1e743e6bb2f059b69a982410d0528956f5fb9864c58d8d997dd00cbeb28667dd1bfe2f61029a2951a22ac8ba276207f2ecdecf67f4a045c06867d4b0a718c8d02840c11652e3900a961088d086b32acd09fc5c507d2f8484e0c3f7535073a583c397763cb029333e8e91e6d3fcf81952674a8f4c6ba983514cb575e28895569ce8d16124f87b816089fe0a5d5d30f810979854ce5756445b6c24366c52ab487f8f144b9b052c2ffcfb5a3246f9a85c6affa36ea574d489eb8dcfc8ef7cbcd8e59dbda3a25fdeb024a10cd73809810e8cc5713a23a19f3a6f0e77bd5e8cc9728031cea55fc06c66e8540a50851910f1d070e0dfbc77a075b7097e0c4caa7f864bbffd6a1f485046ec89d53918c87991afaf4efe6026fdbeba7e97089b46bd70c8a726a777e806456987a31f6104865ad9a455b7e41931731523bd7c766bd014e2ebaf02e685b807d47aef44609d35e00f8373f7f56b4a6996b90375a1f863c28bc519ccb9577b6d7a7a927501bc19cb33df05a0a24061f402d43c8b791fa882995842b9774b630578cfaa83e0d6bfaafa16004a23563ddda3c4d11c9468e4a99fc5ec3753682b7f9860f65cfa582fad38e2537199b4891ad7fbbe32f0655a5a49c411b093a5d635ee865b482c8f5e71595391ab9daab5bc1c2cf79cb213bb676bf30f1e03045a8fe376276daa6185c7e0829cc88368da828e26374fc0703446aa69dbf1eee3757bdc4c2d5647226e292c21b56bfe438c61df0b0bf04e7536681031a5e794e9c65b9a30f988e45b9727a18bde551709ef45981a86f27e01e5143085f10f1b07a1bceab5dca53d3babf0cc19cb212efb98c7baab0ffa3fb9d3f15c29643ea8b01b4428f2aa2a4beaf713173b21067f71518d2f24fa823ba7b638b9a9412bcd8ef9443b30a02828ac88db0c5ce9447f920183ff408eb5ae44d9a055b1eca2d0ad7211db690ff2a24a815251d48a4cfd168dacbb7b40d2fd4ddfded3160336ce8a20009d0d09486ba64a4faf58e0da9c50b9b5a9a00be376f508ba853581df8f5a2463c8d2fb6952f740a964992e4364061a6b19b0eacd91a76e259406ec5b034a5f96765b401812a703f99888bde174052249f2d7a88acd503ec93a0cd145668c160622a601e753d411a1fee626bf28ecf4d756a0a316b38758e08991696ef05cbe86a07e308773d5803e009ffc278f5b1c54e2350a697befbde59632a52465310776070e07a1cfba6a3b10280b61cf6d19469f853d6a474a64cfd258875efbabd35e839f77af10e46242744bd1b4cf61653eeb66805ccdde9048d40faee210d76579c41c78c41a7681a57975e98362dc10d6c9b097d91cd81bb1f7a2fd37ba35fed9d32174b1f7bcecbfeb4aa142bdae10f8d5287b9ac75ebfb0d7dc63d88565d582ec97723fb8da5eb4d742dd0b8f84a870d42e5e1ad560d2752517a385429607dbb8ae7f96ab35cb235eee61582607f6b8a7ecc960a26e2fd33998a47dbf0698a475a0d06bda5f5dc8ea70ddebf331c35ee770ede2b2d73aecb715144d991b9884d99819ef0c4b7635a505f586bb61428bed0e7e5d5e975b18d96371b6c25b4ad849d8490be17c6dda2f42ebdfee3b2da394f2da5688540d3b9d4e2779529d54a7a8da716247f36863ea343f85bdb794988da91df6dc6bac6d6b4c3169a75d6289efb42348c31fa504b53faa863089155b7ee47a8f631db7319d7d31a5b5aaa2eac28ea8dd8d51d52eb5defa239eb015541a1d0e61bf1d30c92572fd5751c59eff0a4e95d6c21b200d2854589530627a911e5d4a7629a594524af9524a29a59cec42739e7b1eece126685033a23a7b51832ed5a5667bc8753e849a3469d2a4b4b503d97ce6a5f5681b17a3651888bb01b5c8c5d7342d7231f477a8c0bb51aa7dd6f118410f2e07f6fc5182a87172f4999fe3b818e68cad881f87f8d7b3ed8454110df12fec75ec600fb31d602f0341d50d4c821976a35d5eb5759c45655cb3ebcab22d6453bf876918ce74dc2ffb1d2a373e675d9665f6854911fe0a7595904d7df976c9a1f2f01ad4ef86046698c412e888a00451a7dd6a569ca85fbd76834275f67a83e1152b2a8d74eb32777739e79c533e76bdfc29e774e94b58c5ff58a08c52f2478e5f689acacac8a5cacb4e871891a04176f19ad29a4301c2bd25952b49a8fe5ce391eb25dd9d0695df3f4a38e1059dfdb9b8fe977b4ce41b200d375244e7429e2b868c2ee4619d6ed3b61fad9399ad3ca1018a1a8fb64b03608bbf14d7ff53a942eee05cf715afcb4132b0e72f1718b5dfdbbac09eb78284eaf57410340d65080a0048633e8a10f553d9be0a0096b93169eb56a8a84f7fc58a4a2d866158160a811efa0002851e040281feea42a08e761f8d89021bc73d0c67cf699f651a0b7b98bdb813529bfb473e8606b522aaa8e1b47d846bb39a858d51af15ab5e2bda025d5e3ac618f5a3cc3d9779b2f0b96c79f0d5a1ef07f86a45208d6e52bfee39c2de916650b3d8d35890463fca8ffa5d2b4dd52a13d4af592c26f165f5ea768f6cd5d46035580d5653218d70bbee373d5f53ae29c37e3eae8cfa27278fa2aaf5615a4607fa938efbe66238ae1648e8396479e856090502d1bb756ee3591735efb48b519a04091748b84082a4e593f5605712e1fef9f9f989320125680011ec975bbc0726f08749f7f3f33dbde64fb79824955dffb02706b7f063d806725b5da559b6f78f6ff5ebf3ca48e5ef1f2c88fa55dae3184a0d46afee9e52c5dbbdbd7b73ea2db0782e8cbaa594ce02318aa36d4fada6699a06c32854d4cca20ca9f4617acba4dcd86b55ff8f524ab9879b776307bf0240a2c2db2f89f88751fbed6997755b07218decb5eea38f3d7333d06fa677bbd48ae6f42834e8525936f70017f228c1c8c7ef5ffc668b83fc09b8e5112f779ed245e5c17786fe8ecccf1d5908143f3f62c38dc5c65fe6ae393a0934c8b4091d838e3106bd029d8276b37690b37d62d0fe6b24176aff75132e7c4a85ca0fe97b37afdcb898ad3759fb07ebd6a43d7d6907210db959c8deb684cb45b2ebb14e071e4cf2a565695984a875c7b8b58bff0927476727a5ea69f9fcb4c9e626476727a55ab17c7e6c6e4e383b29d58ad5d3b2b939e1e4e878af52a9ca7ba39794aafed0a71eeee11c1f9f9d9d688a26a8c27ea85fd5b02b15f2418322a890278bbf98a62e4f16ab69a9855685270b9d0b2fbc945b988936802a06d004760a715028140a8542a15028140a8542a15028140a8542a15028140a8542a1502814ca73d0851031f644312e7fc71ff6661baef15612f638f6744721975fa6780ee1a737c01cc39a23464131674e6ac3589f6cc4cbcc833dce21cb5eb615733280381b5106f6f825b48576f013159681920259701658688e2c50107c813e39b1c78bfaf10936cd3610019e328b7bb8e5f3d3a6918fd7fa1e15d60bec53e3744eebf44ea7a6f47e79797979798150ab3252644e4e4e4e4e0ebfbcbcbc9ca4cc5099259f1f08398775788753ace295f7e4e4e4e4e4e4c41c7ca00ff4813e3300d0c2b65aad56ab55e7e4e4e4e4e4e404402480ad0469ad2a2aff9e378a3b311555711559b1874fa7d3e9748ab127f6c49ed80305c0b45615957fcf1bdd15adef9d28b5a77992273ff589001bf5a272d083b0c5ab76699ba67fd3366dd33690060eea45f90249f4aa04fb072d3284524a295d4a291dc2468246816e51e34b8cbab77b4f26dddddddeed32a5a6a0b0aca8f8ac029c0e2b755769eff6b6cd72e4b1072d0b7bec8e6134ab32ca8881c766875488ddeeee83769792b628a594664a341c4dc946af9659b6078aed8c7ccef608bdfc1ef5fd7d94600996b487252d723be85043bcf32b004bdcef1093bd0cc70f7a58d23a11fff6b094927df123b2c17f7b1cfe9ba541d188f8b5970fb2349c15b115d9a0fdf63840cf3de8b9979fc2ac13ea69d50e96422058e272e6a93264e56879c54ea457ad180782c235d036e2afb3b1f2b5706dac26f0d5503311b0a59f59c0049821bbd132f644e52422134a4052caf7730e78071d63884c40162b32e4d8f1074080a4ecfbe3106024027489373b1ca428f78b3bf3630afd78b38b2d5f2c2547b7dcf850c801ee95cd78b39a363ac16ddcf7731bf7f2e5f6fe38b6778b837b693dad0734da3be8e5f3800635231ff434fe1a8d7c9028fe8cf6fe332051b43668ef8f437b1ca097966f348d07753ee46438a75b84d48f73fcbbae4239da05c5724eb7700e849cd327cf421855aa48c13cb7a3fcee13d6edafa1d6ed07f9f466737bc60aeac739f1863b3271fb5bfbedbbc437ed024f5b074f20914c0fd4ccf6fe3db819b73d40bf7d0aaeb84540d21130ba00c69b18c38c00a20ce883b8ba9dc0136ed0f5d28a4a311a334de45e101733ecaf37cab0f8ef79da0984f33b22c49b9c78b3d194dab2ebc17c480f49184aae022e4c3169629b02109b2fd98fbb2a45fdd153513fba45ab2749aba7a78775a487858151e3c38bb5120211d66ab5520d59a954aa9410552a95da7122b5b3c393648727890ed6044f12267892ecf024d1e149a2b39237d81bbdb0c7dee805e6c60e688a83c0bfed6d00fd1083950fa72143b8a2e4f6bbe5aafccae8084639f1910410b059520509b800c2122a885d34f42a1f09c215040faee0410970a088c21048f82861a3040adcddfd04566079cf055a2f151e291071849551ce174d787526820a2149a83846292c5972b2a4c955539664b184c8fdea4fa1c17691610a48d8944433d6474983911962a0179410c454e281230626183594ea0fa67ce0d9c1d1a2569f13164c06607ac7e18287bbe1a2094f9071e1abe0f824e9a1a7c7b4240b4a7f68f3e5fb28c910526547b1a891a337d569e1b4d74a6da61692fbc123de6c0003c418e2658931f0a75cb8e47e2bb28bfa37daefe5c2cf93020e3ccf851c1d601759834990470b9f0be10cd83e5b00e17e70a56d61e47ef04893362017421f791324895408e2736fbadcd7d79861c36ed0f5309cba205b3bee53b2a81f4cc1ccc78054f932fe833da1ff76a4dcfaf06f6897589a27b686f8dc334743e843a09f201b7cafe75ec6a760513f984279ed1b0b9f5bef09ce9581450f0c9398b1585d0e54c893c5cdadcf8f6d30118043ba07d510e8271703a2b5de2c643f151798f9d95fdb73f582fea403d92fde930f3ded6808dd93d0c9cfd732fa9a16b96abf1db7861e04391b3ac426977bc81e8802322cf7301dfa400fbf763880ec8e947b5d7f7135c46e86edb9e76e470aad2aef8d503a1cf8b9d7bae66ad8b61530ea7c1cf8eb7ffc270ffa79bfedce3fe9200dfcd5c64b290804fae66240a1ee2f085e2d14023d646f450a15f44e51f899ab819ffb930e5eae13d5c0d1501fc4bdf6855ec6cf70f210d2f840af5d507dc8d900d9d0d7107b20d0d74e5443e8adbd368b753be0431f0d0737b049620b26b0823c31e4862e0c2284880bb9981a97fd22a752e2e742950d86bc5ca85242e7aa9060dd035ca8fae1c465826aa7ae18a172312b37a83396e86bb4d37c602c98d6e1f271318c62234a37c9c5ac0ca990a3d86719f6998d382b46a8f0dac1e50c525dec5cc8738592272ee439e273b5d0ca91ca0fc3dcd36f14195d53ae9b86e4af8ef0092ee43192ba477a62cac30b1fa5f321252525252505761f8d8902325050e4a3c8e83e6a25e4eac985adc8a8f4b16e070bf7af6118f6f01bc330acd39ec35ec3745419dcc36e87caedeebe1b713d3009f603c590570d6abccecfdc8a91d691c15a0f3cbabb13415b3152638cd19f31ac3bac3bccb6fc9e73caae5d88d14ab6425b59c24a910a33aea9f11d62b0076bd883bfd253f9bf28860d938c5368503b425b41754d3e0e6684555ae43a56c29efcad639f2f348c5f45ab8a7c2d14e262fc435c0ce8baae0b736725cdd167953c3939f98b5b35955b1cf7cc514aaf8b5e186745547baa7d047de46240afa56c18ed60e4d0430e851ad37c8b3f4c822fec491964fcf712137f54ad8aa98f55b423510b93751180a9089976f1f2897f300e7bf2087bd20836a2b987e9ed613ad4c9907fd2ed106f92ab516c7b1879a31be5c9736abcd5aec6a2b054f6f4b23525f45fe5c1244dd35456fcc6c7dfa1927131f1b30beba864e172782e78f4c65fd77575b447356aea03f1a5fa01a03fb9184a69fdcafd0da24e95af614ce260ed6a2833e0a27f4302371a6f39d893ad7b599919f6e4876c6a8cb105027d067afaf08b2b3fd47dd1882b5f3ea8dbc173f0b80193a04b4c7d90c555de98eaca4a24ff5c195331c524217188fc18bfbf620aaee0d4ec411ffa78027132a6b61b534154ffa6b575a5902b47bb441ed8225f0a2a1fb345ae7c2a630aa5a672df70008e682b4ca8328cdc784ae42a10b5ddbfbf0592ca95a7f25184a8349352fe47a56c2ae5674aa8fcdb9c735e209006a21dc87e74db28b775d7753dbd289dd79440b46be5b3eb5184a82cd775b14094528ad51aface8750e8b5acab1f0a8502eeeed7e5eeeeeed4e90c22dc594e30fc617cb734f4230d5461951ba60efef8331ce34fdb837eec119f53dd1246e6eb6766bc302c9f867f3e0d0ab333fef169a6085ad1656de09f3fc33fadb433318e1a5b551ef95cae44eb4e880b662375892ed8474b8adfadb02781ccf7ceb998f81e539d85a041966f335d7f16c2b8fe732a907cc7bdb8d274dda1e05ab811171d8e848bb90ac280ed3069143d7f57b96d514b6d4cc578b3eee5967846c955ed027b84b3e33bed22c3be735d75c38c73ca21236fb98fcbd87a61d207573d3598147bd89adc1c74b8ce0d32edf2ff5308f573954b5731e947d6b00b2c428f1319c2084f72fdf3214c82418410e3baaf5ad75d0c675dff6bca918e1d4c8a43689dcdc4190f34c8f2a55c11ab60226d851b91a023d4cfad98f092b214df5b1086783b0554b81c8d1946bd51666130dbf4e5df3dcf1f5ed64a987689a519f7516a4118b04bebb6842adf3beffb41568a902aef075932de9aa2bab77e0240b796b7688bbd4b49fdb69edb4fef477b926c3fb7b7167b5f6c3e4ad81ba3ba4f8bbdde98a8f23f6fadb6cd219682e3201dcc18bb9ba174455959f63830ec339a6cca0969b7cc39ed09a7e3e9b58f72ba1db50b67e369a3b4f28ca7a6b4566dce39e79c734ebacae663f3e9fc6bce87e1eee60c16d42f9ee289499fca0f267d2fdcf9f343400e933ebaba93ae54da857ffe0b08803038ed897c394113cd30633737890a5ff3d1d123fa707a22a774bd363f7b1c947e666950333490564aa38ece0ea5b3c77c4a5f60e8cb4b112ee469e282abf1e6f1e3aa5de67c7e777e6a45de43fb6945eea3243d099b41227f1ef18afa67e85f7f9a4ee456d4d606faf37164cfff34f3e9d3a0a49dc96cdc691a1a75d8c38c50e1e53b4dd1d4373cc4d40f82f494f835ef17615184e560758c2c1f90060a3445fd228bf4c50f36b9f1e347538cef03c200230bc23059ec33ad483ecda15dd88a243f8ef9d7e360fe8b7f3e2cc5283ff6744b27925626b2ba257e6cddf8b0344f35eed8a8c35efc78a32da9f123ab5d2093267e2c0102832004e12287179c0b1fbbe9b9f950c82ebd8580def82a907adde29eb98d4ddf705b9a7ef9535af934f3d98ab4988a9235e664e24948fde2a99faf934eccec4bbb60369ebac5ff749de029e2f4753a451b5c8f3038b5cd354d323ce388fac553fcf1451b9b1eb5cb4afa884d8b48b28126d2d3a37bc42aed57d86f8f237bcdd2689f699f5951a4013d664511966e7432dd0c7aedb1e71e47f69ba5d93e7bce664fc37d6e8a31cecfbac6341ed41494ef6f55bb60df329ea6d8af7d2efbf54faba6a5aadaaaa614ebe6e2767791db5d858a55ccea966e21dcea9b36b14f9fda462525d356c518a88d3df105dbd3439a488ca1a56823442d6e37c807952bb18a87301156fdc7aa18d012357e0ce5db43ba37246a7c950ef67664dc0cd9d5c1f783ad7867a8a0a68630a9bf162284492926c19aedb3afe15e7b8c93c186b0d7adea7ad52cd5a9f28a55ecf5db0f93df3a6e03d0ab6faabae589fa413174f488820ee8f5cfdb4de4f66f56d4af55adea55b3da6dbae52eb8b588db0fa9fde48dffb910d70428f0010da17ef1b2051da91ae7b2460e91b2448df78ba656495131ec338b59ec7f06164bf8c0450fd487630041704a2470404daac403a4e2a684bd0760920b04b334b5330ba9b829658f7d7fd783cc763b788e26d3357bda85a5802dfd55d022487e5490467fab6ebb66d27c740b4ae8b9fedd42c39f7d7734a819a6e98f31464ebe48fbec61c9459a15d930676669b24c9b56a4c192c755b7389dee3ad96b9bb45f64856cccd9acd5b22e96628eecceb298e31e79aec726aec725ae47d609fedc6ee19bebdea97ef174aaa9a13fbf8693c95ee6b8e7905626f650e397b89fdb859ff6340fd2073b668298cf9dbec521ec4d26dc0573712723893146ffaf6f5eba45ca2deaecd04ae966a3cd4b54b58b48bec7553f7d1cd7bba5f1bffcafeb69e8b7156d5ff28e765bf75d4f29d32d532647bb603faf0faea24aa58a26d5077f58bf9a535557ac9dd4dc69b9034b918b91c15e63218c1d0883542952abb8734e6ecd391febe8fc6b76f37bfe8c14d48f77ee7cfe2f3ac1a4f9c123dcf9f38b42eefc298449fc35fefd2fedd23f9f021006f9f3b1cd145fe38725f9f371f4b3a5b134a819feb62248d32fad08fe7bf2ff2f1f117c58e2a7b581a87f231144b86ebffabddc9a7efe170883fc22b08a4879287f5b1f7e18666a8aee4fd020cbe7ab2b5f8bed3bedd23675e5cb95516497adb7ca4005f8e5cbf0cbb70024cd977f01299b7025334ffe16d902e7411ad2bb72e52b6cbad45a80535c9eee964fc737cd2ed2f9d97a1e6b737358c2a2a8394918d9c9f1440adbae8ddbb89710c230e9d5a06b27c7ce0e5fd9452758c8ed26e00b408034fa3fbed3c69d181d6293ed2b8df1a6c617221229780202b63d859926adc82d0d6a465a116f4f23622b92f1c741d30385435a9aedfd695033db73efa344a3bdbffc1997014972ac902384208eb0a1507c38f1c3174f8c7164089d1d3052b0128516c40adcc680892af8c009a81f16c42f7a6890204cdb0fad1b7a0f8542418040ddd0a7841ec4c58454924011e48716b886041ba486062f3897fae5430a226109de41486082db4282f4d00348c5cdf5d50d45ec09d49954a1021c27d000c9143f45a6e05e0415d7dddd7f1e70598822d79d3a0a82b8bbbbb38ef461367142114fd06972f30496cd104fb0096232e2c716ac52103a274a040a1308418b16d4408b249054ae89d3e8f216849418715284264340d1e4072455c6144e8a70a142e25333201cc1c815a23899c1155257d819432553e03334372dc6f7a6a42db58d35ae3795f68d6ac8c4ef0094c6c0e25189fded0068209bcd1a2f2caa0318c08334e2777e2546dffb4a09925362f429b59a6ff05768fcef25243dcf4ba11bf5ba3b57f1f6e9534e8f324b658c3b229ae6eeec1847ca7ec5ebceee36e0bd9006aceed3a564f6c95c99bd86ac7bbbfb8d6e81fe52b294b4fb3a66c92c6974812ef3a365be2643e62780d6c216f07a683f082194f4921ebb65b7e4f69ae1ca7d4a29a7f7c2c4a6c67729a53b17ee3efda15f5302e12ea503e17e4de9855f530231a54fe9c594d79440f8352510ee85170e84fb35a5177e4d09841334c8c2de0894aa0f554c10d471ccdc3e35a8e570351aead5dadde5c71871224e24c1e578456650b431e298a494f3721c530e3a604b4ace06dfede746b1862b16d7a032fc38c035fad1e2994e3980c8489f3f70e2a6d928e424ed178954b7a6d3b5713140fe615e5ea2106a8321a4dbcb2be298e20bfc1946a31311279af8890cb91c4d7107ced8c3295778f5782363250c18d095309468370c1bdc8b08d42914aefc8d492e56405d29fd9b014c7e3c062a29587bc9123f88a802102d86d88117352e0a9aa8a8b0c76409023059799c89894dcb75eec67f8840c0f59f215c97e23a0baa4b9b4c26d3c90b22d7835c7fbad514959567f15c1815b9fe355e6460524b40668beb3fc324f8c4f5cfa1811b5670fd3bc0a4ecfaebd891c31470ae3f0f9e29a0ae7f0f26b96052e2ba006cb2b8fed179bed0e2fa47231c5ee70143751d12c9f971fde30dfc2315aa70fd23130e79aac073fda3134cba4e0411dcdddddb00977190fd30cabab8010a54365d00c1043b5d407184a90b269440a78b2d521001287ebaf829228a951726504104543f5ee09c200251e48c914a51591163054ac1080c244edcaff6503723b4a0a228c1081228542690fc5851e9853c5af870c550b1782e8411060cc385915fc813461582dcc809552c8f3562bde4f81c2c162b63d205174858d1e626c3a86ad582fa41d68e1cac1b5f824c79a12a104255ff8deef6390305356e37da0538773aa5ff5586ad964f9cc15d55a935e61052b5e7c93366cce0198ccd9fd171e78de6e7ddd96a4d1bdc09833b5970271131c6b8c49d37c4ea2e0069c49bd77e56fb8d72b44bd4a155058505592cb038677ed4d1b9f3e788e5a1581dd59dac933939dbbad15aad96c6dbe5dd9a12f6e6d34ec456865bdd327ffa5888452135add5ea12740f4ce4894d8da3fdcde5536cb137671451e7b392940f933e78c59d3f3fa804fe61d20759dcca71ddc071010883cc702e2c80f4113d9444c38e54ff1bf29af59b8784618f859bea11b0b0af87f129eaf757f290ccc20fe097d2c21a57cab7a5081c513dfbecc9ed0535aa40184433c43be54b29864e173398d7ca0bea77fdf5576b4403f571e39f74f36907bb5873db4e5ba4c2672ee69a3566056069d42d9b7d95d1f55b11aa5f2f76f4820a5f74bde8b2221b32ee716834dad3709f59d1054b9de3d2b2be7eeea85b7a745fbe11bcaa1dd1cb8e6289eb46ed4261cbd59a06619055487175036e2e6773af167b14e776cef533e3a67ea3effab97db598147906f0c7c4e3f3e304faf02cc922d563badbbc28c09b68db46fd35fa6fd82143f7bcbeeb874990470a3f6eff25069358b8fd2bccd1b080cbd9b6a9401a574767982fa743e69f32e4831da938d0bf7e7a072d0e3ce4a5cf55007b081d079fe1faeb216c71085fe44faf778aa8e4dcc23f8fa82f780e2353e2eeee5a110cc3308c26f124a800441534c8a4f7aeca775b43b0760be429689049504a29472f534aff6e81b3aad4e69ff69b0fe59cd29b3b1e98dbe43e257764ce9ab3936319bd34772c737777770ca3d7749f61040fd24794d7141a6449c141e59b896c98cf8fa3e3d71e47bff6dd6da219e215e910ef85a2f8d9c31277a2b875a2f81d69777c5dd7e5c34b6890e583fe32f29b699da7aa63eb2172ec4102f18fd19afa4533186053c9ada9fb63a9697880494a2698a484a3143f2e31828db830080c98b207e0ebd04dc4b83b6092683dd02fa2017e64d375eb81ee8fb7ed67035a0fc024a21a6e7c7e820631d0c285418658dd2034a8b930080c52585c18840633b837980483d48004d75f024c3ab9fe5a088809259f07c802e4fa48e7d317c98fdf0ff9453233d5aa744bb7833aad484edb03353371c412fd58a2b607aa02b05443839aa1cf4f4343add72daed283ebc51349997e1c25b8ea26f8638cd0d2d0973470fe8cc0247f66be7c6a7bd097f23d4a543f4d940fa3c79fdf7606be7c1a69b1558d0f9754fe1c3076b45b9ae3439a9a57117445571765496a69ae9fd7d3d09712bb283725167dfbeb1431ce7e51b5d978d232ec0a9faaa8d4ed36353dea14cd080000101000d314002028100c08c4228158341886faec0314000d81964076561a4ab3200662144621658c3106000000000010191a121900f8f160d447e1e0a566f0e1651f46f69a38e5456bef38e14c79a57931a2070680a7bc061758e8062a41ed7999a44d98a6bcde96813d76c558546ba36c4e09e8885820545e934d422cc6fba7c662c76ca59df2eaf9f850640b13f84410a3321a3868b9e10b5c94e3ab885e4fd4db3b18442f83eb783db05747e865e3187b0e8febd919bd78415e423846d20ba0fb9ed495f4faa5ac7d68ee134188de4f1fa389d881625b58a5d36bd4186f460964e9e59c5e861455d6021d6372335e57993f1880fd36e9f59f7d363456511dd6320817947133c1ffae39acf1e4f7a5cf135630a12092ab4307fc178a77865954f1c5d607c62132e051c083dddb598082108d527c40309f8f080ee8320c67a4096e15e98aa90823d58b967ab2b0148681be1f06e41f067756d52d0ca30357791cc63ab1bfb93c461f20b74d556e8235460362b3ad144adb462a172b541b125662b49f4823d0ebf88bfec9da089890bf692481614399e98896b58884eb47444f442009eb3cd084b1afe1149a675f23a1de7b111ebf9ab59a4a12c1956b95397ca9f19aea66004dd0b8e59f28a414183f53a2930ad1337533b03379cb771e40ef1861e99b0ff2b71a0f4fa00fd7df64c8a55839227351bdcae631eef043954d1385e3dabbcc5c8a15b150ab2f788a95780e53d8af8b1daac82d2c6216c4f794159392407de4a66cdd48da1702dabb4d979dd3cbe4e61795fe523827fcf382415ad3f28084c5be7ab080e36392e50a27805dee53ae2b75cf9c205f32847e3efe1f249bf2b4f0b2e2b65a1e84500152ca0bb116744f03f70348bf41170d55dd9767e8fefa216c809d7ad2d2ecb48424c71b507a49f4b227640d09d587ae0b9a10adf3ea13ca5913ad7af254970902bb8e4ac5595d1740f20fa236f603eb985f796cf41abd6218c7602022cb3dea3d8c2b8b3c2ec147b5178d1771d9f7ad1cc71abfe727a553c2c1ecc0c2b181d75827ed3210bfea57993af4e5cf012a72c2dde8598fb820200f4662a1609573cac47cd7476969bd4474ce53e441eae01c234953b11c578950fd3f43da35bb1971b1b61e4981117a6a9f59ce02b165f11cbf22cf85f9cc707d8ac181e491971a907a801db5f2224ae163d77a2489ab212b565c2a2d0c6b38c92a957bd65d49bf29204dc370936405418e86d392c3f747cd24dcb5321b03c53704dbdd06b5e19eb9ea5766925403702ff7a9bc459274642dd6f5a1860fb7ff47b6ad64f0651bea86a17f68bf93d94d55a2f7c5b2ef2533be086e58b8d29b651e72257a5ea9b6fba7ee8b0294baf7763ae7f392220435b00a56fcf4c3e4be3912aea5a00b1f665a1ac97a66c13d96bf25a02862ee6583a55d26647b9e6c2361e2e9f2fca2cee5ecc8b5a71adfc372e9beb92b644945a8b29cdfde4884c97b46ee9acb0229e5f36d9bcfc541714426d63985e5fea1430987775569d0825867606d6bfb5fc32a8f0b91051a9f59a1a8dcdf9eb325f26c9474c29b2453c0cb95c669d390952a719230531d7aaf8f9ade8f1bf7211f1b99abae400020e79a1bed8027924194268af3b34b00e0311bf4b04542643796ccea72b4a2c7db88916f66b57929bab32ea178769e92b9eff05dec0a87991892e84d627db66de6d7adf9b0519248506380ae1e2e6650c5ac823cb062e8bf25d193e0c9ee677f6686f21c1b76ac5c874b2a72f2e21917e95d37a7b486af79a87edcf992eec7baf23a1c563a6cbdef8b74c152ecb049c1594c38c438c3d9b610fcfebe4724ae600b6215c86f2d9b94b00638f3f55fc5cc8761f10c6e484838fe4010540157c900bad150e1d9e4c2605cda19ece8639ba18f1ba5a40bedc38b27bbd51f9941dc79a44a7ad5742052c66760348b501115a9ebb8873135a9015d0351050e355d93b878b3d40af339f97feea756483ca42fd3cd11522900fa666d59a4f63437103b99d93dad73e5868c4f7a5c11fc07c073103bba85a07273166e1ed584e6c029a00f1ce86925eebf0fdba950d42dc44fe6f64eeb847260c5ad3695b3f50fa6256bf78c1d98d6544a5446fc2d6d9b5acaadccaf780c7d0bbceb61c051d9209504e94bfa1513863553dd8739fe5c2af1a178dc2175408cd53b4af53d867f889d146fc39cbda001cfd770a7d9ec3f9fc42f0ec708ab61aed2a7bea20c2d2c1a9c9b84c37224dc69b851c01eb011cac10065360e34b962645765ad5b142294dc517cef10e9c270bf41c799417a8c102f54ac2596fa0c65ec5b52dd0954d9a23dd51e84550d67c27fadd68e7973771e0200ca8806757df81a65943cdb8ae16e648fd99c601c8d788721270cbca52c6c2c4958afd5d518b9ce72c0a7ef81b1037451697a0040dd01369b3acf493cc567d66031826dc2e4fbf9f65c5d9e2d453d0391683f0553c173acca057b3152106555ecd99a999be44cd64f83f66ee6add1ded93115c22954857438526181e764100e1dc1c7ca3154a23ff15421782d23ab54c86aac8aec8346b6d93d7a5c690eca6355484742fb4d5982c707d9dc963d757deb70c0da8c79b26074ad3b5b493f2fe00fec5110333364ac6b26e30802c69450fc2d51b447849531a2982d5213b5f98ae83d99c35c1e5962a7b360bf316616ba40cead5f8338a6855f5835abf467dae72860e85f2b860fbb0c536fbbc7d8572d84e00a916b550772f54e804d5185983efcd0c3702856f5cf6ede137b010194e5948ed554750208f755cea897daaf9789ca1c687dd550ec937c321b95d50b516a729aeec6c6f5ef88dfc9a29d4542fe0bed104fed42c09c8786d14e47c241a9b1eee1eb90506cb35ea68d764c5f74b4e36da81d2b293b267a764c3b49820a952548601ed6ae0e045c8c79040bd4acbd3c0710d63a43227cd472a8efb4e0f0b04fc43cba6f38165dd36bc9b798b032d1dcd0e1177f95d88bce674d10368c0e3970928e51c4bd1544b93e0b34a8b65d2696e306fd1b9aefcfb13c752df8100131b6c02191c17c6ec5dad708049d5764a3846380a32e6e0493f85c6cb9c7a8c3905af51eca7f832bc110e5ad9910cc3d93c8653c93e788e289262359fb082360c02f9ee59c92ba416074be2107f1a6140f860cd8b1f9cad51de08f7e841fbe535bab0ceffcd2463f3e76b6607c328526f678c5fcb5e4b0fb19885880d659f7b0cb54972165577c27b0355fb21a2e2b1666d6eec808fff10a0cdc4f392347b3f168dd47cb9e922920434b603fde5d36b6ccb9023699d195d158b2ae9f88e9da664b26ec877cd2d738bf149a54ca1f65227d2aac4d1937bcc739e2f886636bd70821dbf9524d3ca9148fab28afb5604b739c639fb2eaf9e001d017f80d1e6a753d5ab60dba40fe40e91554483e981c36aa794c403bf9dfb0c031228172f180498f874db7ed19f58ed69167e5aacf5d5c8ef4cf9d38a7e12af2f30f1b2d461ae43a9944c34224269f5904489c338f1e30ac03f3fb044e5ea1d4ec1d294f74471deca2fb8a3624762a070867076903cb13a7c45e2913b011d5f9fdf28c24562f8f0fdde1e31c9e1f073c46447eded51d8f35c920e5fa67b1ce9d0575f020511c54044629820870e84bf031d104cb329823bb978db20e4fc242db3258af4d8dbf08e3da3671e72b2a1d6325b24d3c20802d958059db0eac0e7c3b0b47e308026c80382241f39e0822d4fa9fd078872f84b5cb3b4e924e0410ca79a531b3499aaf98cf0732c993d3bda1291cd4c3035cf0918283bc52ed221e4ca701e3d72abdab6e516e6122f6783a45b7e14308ba8d3b7f402ee3e6ecedb2e60599941defca47d63fb44b437fd7122ca9976e548307dec251076307993c971f1d55764498e3be4a941a87fb29fd5947dd67007cfd4546bea0a6f7ee038baa157746336595aaea8ced58973287deb4773903939e3a37057d4ccd083d1fd32fe0a5cfe9ddb8c37ea62e1318f18b7db7afce87d3425539c76f40afcd9a23aa69f4eae36db6b7c66aaef685732ac0c36e2db48e5f7a520ee4ff373b5c50a2f5602c78a068f0f010d6332a61d08f3c7d6289be260380ca18043260bc1b82e04a85b57295ec7cbdf7523beb7d9b7b295f1713c34fe28ed5e5fafc4335aa682ec66e13a3d60ee70badf9939439aecd09cb416030ee6c0c2f3cba175238eab1e090817dccdfdbdda41e91c99ba1ced310fba7ab21f6a5a403052425cd500745a5e639fa7e03892cd4afed4544d6353224c0bec00ff457de8f87af328ddadf06c62a411fd32faedcf32f749cf7a36f5cc420a4842f04c1f339603ef90f84d5ee9ea097a89eb22768f19db010b1cae00671cd11907d2749eb5d6fa728ec1febfb734370caaeb540698fb5fafcd132065272678abd19d790006c1ae2ca10a047c100294daecb06e54fd4d91f7a8d063ea838ff15c736a6706d8a4f08708b2c82437c99c884913e8447e91475f7ab4f751a4384d71ce041f769404c98006ca168a0a695e8dab091f3ea422397c8b661251b759953253de4612502ef3324a4757ad010c85654cf8ed8bc3ac91d87fa8c68425ab53af6636da637743c5321a88ab6c9f5aa3f43b13c11865331dc270daeabbe1fc40335e8b2f5eeb98c1704e2c2aacf18cd55406b8420557e6916ffd028a254b04203280dad0ca9aa32a37de5f579fcdf4f834a837ee5243ece2a8bc8171c34188d87b5a15285a13941d66a3eb0e744d63a663fb70477ba6dc08a834ca7dd8344a48beb8195499e15d8f4b81ceda92a9d604fed1547c5bb896356789fcff6309ffd831346ca232af82c9509900992cb4556bf10df3ba9cec1e5d0ee7204cb3837c1ada2f4d89cd2e503cd0562a9db2fe7569b505c7d99194d4e084f3fc852dc0f4abc712486ec4f19d1454f1da6f4a8c4ea9ba47e7f2e2f4e116b1a21d9c7240dd17ca9764ecfc1812a4d29281e4bc14cdf15988476dcb8710931339c55192935d4bf496dfdd2d627f1c42ba2678b0482597884c93dde6134defc00b5ff9410414a1dc4aa50fb8892517cf6d67b2f18acd4fa7800aab21754ae8e0559f53d3b384fd4812344739eb8a627f6fa349581c45e6745583257c5482a99a02e5117088b5f89e34e72f5f46d1674dcf24b7c16503a11ec925b2dedd5d4b4685840b9be997d0c008c44689d3c432ee6a35001d2d03444a89da0e7f24bbe26147f8ade618a97028a832a3d2d3bcf313918ba6d827485490e24f4c48131fa1f1fc03e256ba83761ea10d7d167ecaf3e75345976599533ba135ea05c6f98c5ce9e1405e4d696e558f5a14413fb2ecb67cd96d2c55c26e8fecc48a503f1e18a45156430af3e005cec891e8ac1b857136d045258614ed65ac5069873673620738075e38d23868b11b6e9ebc78f0d04c9222b0f0bf9b941d78e39af87c082f2bed0892844e323956b3c7fd6df07fa1b42a359be0cef775f3e3e19dca004fb53bacf47cfa8ad510048be95016195608c5d83584235b3fc9fd574a11080a0e2fd09c938a3339c264cb3db9ea06f0298b7bff318b66110fc7abca1d142abf05b4ef196ca1b2a487f55fe82fec9fd407acb709dab77bb30ac21a47943afdcaf7aaae0c718c73437999a3055fa2dd9ee56212ea8067d16fc746449245c85fe94be0b158e04d0ff108234ce53d9a463ba7e77176bf0ad9fd1fb29c7522374cfa97017bd0876b12ba9879d2d787c72990a5821c2ccf80f7a78a944a01afbd45ca32ea9af23905de6612a58a884368598d3e31552661ac23d90fe7d9e9737b58850dbf81a4b5f1ad89537b31caeed55387ba2b0f591f8f61c27155eb13c159c4ea3b08985355b04c084b06d78beb934fcaee7911a3b97c2ae6e841b19d78122cbcbf095504457213e42fc2460118f5400119418d8c94f95e7614c557f9253a81cabd04f2f869ed1bf9071ee9d850ae202d2e7b93b53fa77f9859e216e98188d0982cb20d34b27dc2cd637ca7bbe15baa18ecd59d90ca298f4877c32b370a3a98287dd249417c6f264f69bf53f76ad772529764f5150fc179dc1e4804bd0fbfa52ac862fef17bca1a5137395e30f14ec73a82a279797f8d4a20a3ebd2efc175e2616d95c5ad15f37e9edff3011cb6988ecfdaaac8457cc5b136631d3aa0a9864439716131681211191ab5a80760ff852d9460858e99657c389eebb396d26700c3c47d998b4a2c22a3f05e834215b00104ac776b8961cae478010489b59a5ed2120dcfc846f37540908afcc2fa89db8af2020540062a719d9059021a3430416a5c04fef3b3504c29948003ec4e8cdc9cee83a6478026e4c8745bfc35edee7324604b05e5e297f5813d870b603a0fb20b5de3d6c84e4c14f59dc6d6955d7974555696fc8e02011c4bb7da0c0f240687cfa8a67edd009091ab3371c12f16683b8ff885c2f5d071d229d29f4bbfe98fd46e190888059975d3aec8e5a83e0b6bba665ed176a56d1a604ac38fc2694ddb4a38afe20e28391e2954c2731e9519d6f5258fd317d78d75cbc6958f690a2aff23fa97dfcb988bed75c84632d3d993790d934d0d57e716a0cf2f49284fe9b0807db57bb0c28483873e7728ade833cb9ae4b011ee4c63d3a33e9316092120bf8addf4f443054e0fb52c729412abb27e4ebd63eb6359d4c4806bb631fe46891e5991c81ca6351c6603d04f02006963771529c0f14491b1e2da140648bee6717c206523634bc6b226b024a63c39c9e3e8d77253c5d4c8b105f0e711409f7f4bce695d43adef429b51d6f3808975aee128a64e9fed14e4c3369b1b31e31884e8eead53574686c712cf11374a3c4f1ba8257049dd042291d10809c8b7cd831e0944b487c5f8fdc6be4139bf3cc72a2985db2beee63c71c13f06eb16ff825e8114a8c812927a0f6848eeff6ddc5074577bb8b05da8360c99179d0aa60e0ae3599bb28421b06fd2fbe294ac2cb139b3d57a2ceab657e9428b70001a7d1c522d5ba27a219e720053c0c40b95cabf4a9b55bd23a6f68935a88c7ceb0c72144e1d8af4cb511f4956595bddf7a318b1e92ddade76fc064bb68b47cda87d3ce2fa42e5acbf32cc7e87b405f0a5a29b5dd30d4399c6e1a73548be52cf3499b4d07c0cdf4b1a11feae9e87590779d9273095ddb98f40a5d970d50a169729feb9ac30d784df8b59473acfabc64166f26c6757256a67ec399be5cf642dbb119269c3954465d72f6b6bafeb0f0852ce097df0d79196b693b834d5d91be2281fa52cad6baae938b7b5ecaba48e99e4f0a72a99e54e37c7db8e95e2696c67af579ce89d5c3fbec9e3bf129f0b35cb65a1e6d0c23564033d456dc23c701737fedf8b8471b2b283e9e1a93c0c1ee91bd9f9b54f6aa3966f358ce8d4edadc9f6cf7f7517eaa7cfe9c74a0ba2ee594e8b2c77c7b26ebadcbc6f3da9bb4d4b090fb2a9720cc32f96b1e2ce9b51b74ec0fb924865893ec220d0fc22cd426b8bce928f3f1b9e9876f9e8a8b915e3a3fd7dc83ba3229fd12007c957b6bc986343115503f5be03ac20ebefb63971ddce60c2743397e0989051313d520f2d3c75e42877eef6fe05aafc245cc26d57d0915c0830dbe5b05499973717ab2ef9bd0a0e55e40d8db230dac5e190993e0bf7045a617ceed33a1cad3c0c569a73176443910da483ee84e4f3e8e8eaeb104cc3f0b54e0f3781b5730436abe8e6f9625084dc7812ed5645b46951b0a12431d32d458f86787547ca88021b647f9d54c271b4e0d9526852a52f2082804d052d26d1be824f6aac5b9a52ef4a246f5110694b32d2e0c323301329f50dfd9f0b616f0f54dc1a251992b26e8a4a0b83830915d8c2a745ee39cebe9ea0822f368c480e75611868f3226b770bc8e2cc125e5e8bc32d1826a8cd1c3d3f08cfc54e61fe1d6708fa14672c998a4510409791f984fa11b41653b9d0071559c7385072c4aa7683e03f8741949b8e6ea80ad9a498d17f466626c7cde96dd2838f1e12c4de49488b104f2021948caf8858a2b4e2a42a25782daa2709c8bc4c27102ee4fcca798caee7c3e1aec324bdd9d2f7bbed7e00728adad48193137049955b51f7e0ad80e1ad31ff001a12280c02bfe44fa8d77a7461ff09a520d1796842f8a7aafc1a60c8c39610a5c546763f9792ffbc3cb7c174086678dd2f8634cc397c6289a0390bc733fa669f8804bdb8adb27799f6247036caa539e889957ba64419cdeac568533c5cc09f63496164a73b13ef31fa706a5e731ffb11aabf1192d07518bd8ceb1e4cd97b1891aa8955563c3dc8aa5b2cb757f8bc40ae60617bbad358872db67d398fc3b22c0d68084d7378fdb3b355e7676d99beec048fd1e968e181b339352e8a4f1e231e8bd0c8647ad94d988360e34aac91b090a586392b2238b41f8982e25c9b58a4d5195ade5b110d7c9222d48ad75a4c06ccb80ec89dfb66820ced74c766e1d83b6a25448c3fa7dc852c77e2b847a773415f595053f2583eb71451781184c1261aca5232c76d9517bbf6662bc0ae80c0972bee1e029cd4f7bb3911bde2549d43806b5bc5dad5de4ea1882df27d98ac948e61950d07579b8c8d3c7ac966bef4d6cc84e62e53efc9c01ba5ee30a7df41f78c866d4b4c9b06e67a31f1ed0d464267ff596ecd550d71e995afeb57403388c494f0c8acd237739aaa08765773f2945a65e21e5f9c8249dbb810c49ce5c941889e8170e62901355c3e29092f1be6ade28ff886162783ca39f8b53dc79e1244cb098ba6b9794af3e439cd40cfa4532a31a269f2b3d88e823a2c43bfaa1c158b0dc37c89f892530315337cc5cf97859a7e86285eb14135a81378ee06288c921e19d4a0bf43cd5debed431a3b543319e6d172e25e4d780da8e344985738be6523fc8426f2f41bee8c0bcace391465dd0fe959c81ce37e0e93023774bae6ea9fcac081d0eb98018437c0a65e1bc1b041ba857160b5bbf9deafe4f05c114fe838ffcb9992f42e02adf73dcc58ec921dac7f7a6d35a7aa1c0d1c603381cfe825f84c3d23f218d3a1e6fa62cbaae223a77dc2b2bd66f82aac22b81bd2b6f598651f0b0bb47ba5b952a0ca473028af9a8af2bfad60f1e6c08065c65afe413477665a7b54c858bdd941485c6caa95d1b324da41aae1069157f4ed31d437394d4c461e57d8d6db6c0592e04124f0891f50a4ba178474a228dfe1ddb97104cdf28c794cf5b86709bd035e674a9811940caf19d5a5bce0dcf1a19442bf0f8cae31fea7247e420dfcf44a78b40c4b32f20cb218d01c609451400cc7c581237ad3b241023c2623034028c3b6e61e8ee3625455e365d1dbf62eee20d0961723434dd4528b12ce13f29851584abbf9cfda21c9bbd13ac64900e90ab885b668c30f7866befadf4873863bd18d99a830eb2d81e68efa7404f4c93af808ededcfc8b3f59c9007d9454d5f52496833b0262c6bc9257e9851584bceba68d43aea3f9b3737c7e5f087327a8fe27b06ca121a90951c6f2ee5cf75f7dc34127d9d83eb0a185b6a821e62235bc28e1320fd6171bb355eba8f48b0141f4a17cadf28100554074f3c64d63f48f6d0e081990042619ac27135aabd280bcc41e966d456cbff721054e614234b6a7145f1823ea304cae0dba3083264204a7a7900fbb74752732a0173bd4ec2f281a0ba5cf347bd9132a1759bc72942ff91e688527e32d804d1270023a98b6a24bed1b695709ce2ad1d9e029e6708af9b32173a6675477a453cd2b0f0390800d3c06080797dcd405dea59837b0c1f5ab578e67a834a93a6cbb4acb2e004bc3fe2e6c9f460e829cadccfbc22f0729f8aa3425ae8d32d905ace9f5756830291aeb78764abd0b6be73b4155de177094fcee9dfff7ef0599fd079f2c6025869d6aa97111df4bbddee53be0be20f417006794a259f6ece67e7bb93726cb8e4ce2f78cb2fb19e517ec302d90ca82fc972fb0ff332cde809e395c06881053ea17fd437d52378693fa3fd3d01c8680be4b0077cd4371f701c397d760d3c596f06d75324193456146200caaf0fcff816709bab4ad0d06d53da6d7c121b568cec85cc0ac1cbfd86379734e6438ae58a4861515b0a5dc21865703c0f51fd16e56c619e2e3c7c6afd9c6a7166c211090f4afa9e20261efe04b184badbfd784c6a364e5ff4dda315d23bf7731efd0ad003647a61c40c449994bf84d0417f2b7d34241f93fc5db80b32d5556ba5bad443422a00f25be253006b89495ed698c2e2f169d558ffb6f551b202ac6b81f0af0ceddf6b9e0203bf2c72722fa1e20777ef05a2e89ef03c3389294b7e2d993d3a9f58c00d7991429bc97092b4b84ec09eba57c26383339baa9599556c3de9e85e5fdb6ed9035a5883d332192518b987126e804c476c21eaf9982fdcbd8d2895dd32f1d590ab75f99a00087f7cfe178e269cdb4a3018923483b042426bcdf26e78cb45861103e4e0378eb15ad64e9c7cf4518cbd0b31329cd0cc843a916f075e796e505336728a65339bac8b2ee6af53cabbda759c2ab58b2527f9c627113d729819d726687c49b05df0d96281278c378e41cac8291335bd426db29df3958a35913cbcb81195a05c8a611e385eec0fc71f93b5155914ebb7253669c553de44925f9fce49fac0b631e7d3f7bdbe26f5af641fe4393af1d5feadaa86a039d4250aba06a8b13af7a09d9a7ce43ee601590e8efc50b8b361fcd74ac3031624876b0e4500e9395320a74ea00da96e5604f3b8f0b17154e6821fdae73686663ddb4eb9f5fadfa35d9be03d427d32eebee8fc881cc0e2031ecf5e167e6399b9919e1f24842da7126735112695c5e6934898cfee74229facc6fa43899c5620e2c853cb979871c57ef724091805de6611709be41169c5e7b954344326bc347d2590ee0dbd7f3ecc37280d1ca102b14398b6bcd59e2008840572b5371d65851988b0fce4aa851927889b39a401dc4ceddbaf3be6d272a9c51c474a6e6f0216fd219109d78b7e61223f5249c8b5d89d2db09c12ab0758236f8bfbb73d67402cb5aa345f89d6a3ede50327e2f34915a6ebaf96a542c94412251c6b9b300922eb53521f35a8e79904cb5e769d995d4dfa54c5e5ad1d17572fe894de2c8d88f5ec85b7c254f919dcb86b2901421d6552f76dc816cd165757b5e7aa211bef08765c558f17d9f3d0d7c70c259dbfb92d8266bd300a53e99f4ee8657881913b61e4abf4e69a308204d893e74d801b77ad00c813893b7f4f9c023b6c500671ef8418d9afa537e5e27183404c5f3f61d3b253062e03c1d85dd12079a2fc67d51cf156f7c32bc4a62949bec61b22b234584d7a5dd92a9a48e1bbb0da9ffa497e42bd2deaa2d8d62b20301c248483f2ffe334858f439f326f598c6da208bf0918a42a057f522b14b774d60e30a7b29a2a675342021d0acf4b36ae1fc0b1634053151beb970692c0f073cbcbaf7fc578f68643847f5030b0b1ba2437b581086fb4d536fa8feceea2c774dce972142d110c53dc09924dbd65a4341f084a7ccbc5d268cbe4aa33d56de6fd05a6b454a9df62087554ae25e46a3057e8131381092d9bb5d4b58b4131ec7f735ef7bda9a843f6a4d4aa6bf6be770d673b4e6954fa2883781b36000690ad71632c7ec84eeec96d9862c076ffc8a4a1f035536f14dd169cd91a0eb696f9d6dcc4a3b3dcf8a1d94e4a6ca378db870621dc128a9ca020d234138837cfed47820ae96df9846944373027653cf6763eddb3eee5e66aa02cd02d841b91b77766a612b626df1e3a11f9ff10bb43f3dc462db0a0655e67e80bb2b9a06d7805f556c8cb05a61ff23031fca1552978349edeeb83fa7d3a6a3640404b59327f19009608778c9d659748fc67d66a58c33d8d18e4e93771d6eae4ca44e95b0c7b0a545d9bcf79b217a313c3d1871b18dafddf4dc894246267f690b2c509031c393c6f9fa866dac8a6d09834c664fd40e340f820a0b7027dc79807d7ea690ce340d6f1157475bbe5e4ac8ea959022ae5c1929575c288a9a5538322464bd30b3d7de7796628686f20d5f0a944a93b3fb9d8a42bc2f5b011d31cb2ab4e3b6314b9be3d878a17a80216e98e253fcd385c60a71f62305563db6ea12cce4b285b491138005e864b9aed3326d3806d3dba54da9371bbcc2a09ff7809df9e9a1308195d49a8d67620a872358ad213c2958cd246b46af2507e2507a70d49526e8d3f918f815d434a57f44aa0211f0f83b255bab1878beacdb79a4bbca3bacd174733b6e8cc08b8b445453426390b6fdb6d53317da7e5025540c954ae0484d7c82889d4c28719a54f37cd404804902029a74f1d2269eb102dc544b0a784537a65e0a4747933376cd5d574eacebf57abc316c23a4cadbdfa06e1ad4e437e4cfc9d789fb5fdb3b558076a09b916bf67a3f11e1ca348e044c6caa3bf432a31c546f3df8c3a46c153feb2f797c152c3db538837806191e0d83276067c969c8e9924fa2755e46d139a0a63a32becbccd1d273e1943a844bfd22d9f75091effb533cc585a5996547a78d7c38cc330c72b9b6894cf5377c6b632289fb15fc0490b0432b9c43af469467bd7945fa9053f7b69f787051284c655397ec0248d15f4752bec7b2088ef236c489ad3a9d2191084b7e9522703b47ccb1f7020da44236e394741171bc3c3d8ccdd1d486ccdd1aa2bd07a265670204dee681f1e857d3c84623cc04bc576b1e36d184399813bc8e3526202874ebc0521846400f64a7917246d5ea983e037fa5cb9c891c421d88b256870038080818dad355ca25849c12b787ef1b2b1a2340b5bf4c088e008f5fc7f2af72279090254bef7cefa64ab36c168b8d78659758d4bb909bb9906ae36a5f74326062738501157c182db67444db3a933c124a243de0b72f899f10f9986ad3ce10797412cbdda58c7681c66ed2eb7ab5d25364818ad3b1ef8548b99a0cd0ab17cc5adc69e3f9ef0610ffc95828cb81eedc03131582ace913b27b57a15cc3b6dd880f931b4774b1ce9d1e6de2d02e16226d2571b1f0b5178136ce57ba2331211e256c60442d602cac12db7e91e6e3812424c89cf4cc324dd50438a457305ec5d064a1ffd52c390bb429d801ff5df006998318ac6b5b01f389cc040ea1a839ff49ea3bc6e17333e9466430f677af968a6b79fd0f890acfe057359f4729ab1648aaf249f6b82bf6c2976a77b0e9d2f333e45c2897337556faa0166349e7cceb4d6f79a02957640a6d638c84f8f005b115f1e95ec250144d6a868f816f2f0ef1f3ee7fbe77898597154a858425637f4f53695228cdacc19fc7df220fb7c4c29a1888c84bcecba39ae75737927dbeffe0f03f20fda3ad6c24da002b624657f14f9ba467d624ee339012032c9080d8450189c42b91d1b5243c3f953c634889287890be789138c2b6195e2623456af8949689b1d0fd7a1a10cd2d482a5340bf5b3208688a326ecf1d1e81d79b3ce020f12d101da15dc98a54e5861dc5894737052c40ad7de38e2e81970a5cdd3b74321d4a94ba2e62bc267f597e5326e45937c6841101829c85118a3a0eed9c98ba309cf8a172cb573c3a466dc20fb3c555c3e53c0786dcb6a7712f2c29c432ea4a3c55afbd29281b6a26d0104fd0c971ce5fe99ec035adce63352eb42c3e887483483ab45188b9c42a4720d0631759e86b477e8af9471ba1450416fcd2aa6083478891c3aaeae019a7ccc9d19b09f71f532d069a2d29d0de6063597a0e610b9d30a50ea479d2c4fa58ef343a82deadffd9ced00491653eee2f4cf5fceac5f27e812ea4156cf4133c1b0b2f90f78be13163a53f13ebd3fa972a6d6089c4b2bf86d6cedc6771d77b290b0632cb80157fa99ca759ccab1d31969d44d66670a53fe259e7d9f6a6ad589dec0c32a2a4f62f36a4c3ba0b0d73a56887de43d1cc4e287e589f3a02496b63aa0092510c76384277cc0eba209c255d625711e38c9ab86128db5bc214a8930312093781407f9f546dcb664cc9b40d0aa2067e07ab3b85ad5497e9a534bfc1b6cc0a4cb59844353e9584fe388c4297e94f5db8f460bde178f44a2503c4d0dbbe51ad42b7580f5f1a215c1d03e59e9987edd216726e441fb6d9db0d903916b360558c1893f7dad1393d4cc60855b3a827fd463886e73614ede4184ad190f5b73bfa1da32e965bf0eb5bfa733206818e598295c9a739738b9486fdeed9a451433cf1d3d11741f44943d87722b699c2eeb478dbbe89a160a1513c657de101d2669e6e4f466f26baccc1e41c6629cbc937ecf52b7d04141db4ff14bd099c54981888a22216bf5087876ed574a59f7abb68bfb8c3882eb76bdcbe2399e1b4baf989839720a96e35b9890ee54eb3575d3818e77fc548d886784964b55344b9123ec96fa0f49e1a41e932fc2bea632d041d8d170618db60b0260dc1c00179b664e63762a829aa6af81adb1c8405b1a13dd928c7a0f797c03c91fc532a990c06ec580c369b478692d95ad539bb4b10e65385ad92eda28f81b5486d28ef8817b7290aceb6df2b8aa122a038893dcabf3f347781091f8f11156aca516a4c209f0d09f98fdeae6e5603a27035462434868520ffabc6b771b752a668f03b56e9d4c75e13f6a244566f4aef16f6be8586ca708dc414c17f0e9f78b55c48dd932a55490e0a113be47eff97a1038a48b50678e90a8a93eb852ab01917d64fcb7e8381072f10e3ec67c76157e27e11c9d000de68e0aa183111e6283c867e5352013f03f3af9c3ba1e2d97e9632e64dea61938c6e747d0027de5e2224174811f78a2f8176d18b6f4ff2d53f6415688c230fca1f0868e06967a4e072e7a2b870cb3f40f4eacba2151a66404785022df907b916142340543c10ff20d1c08d41265cafcbd794d1181717c7fcfa7810da1f43ded93ff975aedc6cd416990190eb67537a33585d1e91b0520ca4dfb0c3655b9506e8b22a602769dc1553e4e2977f97f17fa26555223088891e9c9f4995dde838b8020c5d8082350f21c64c51c763b1f4bf1804c03fc634609b505c3bb61970d60b6271a9a24eb2d3c7096d60ab1c3a5d7886bdcce64d4b636ce2c1a94a1730d97452112ff40678d045d1583907d831833703b906ea100789460b515bc68ce3ea25741da1019c56424a559f49a7527e49b9e0240394db10f5ff69053d6c9ba53c63dbabf90e53ea7e3285fec01f56581fde129160c7c23ab2ceac3f3b41552986e3c6676d85b5daf3a5389cb625a2692f45ac702988f632e35d2be69840c6283208cce0cd9b25d7d0f8ed47e430678a6adcc9c2d03a67ebdce6fa6477a81bf3db435963b07d2072db0a2f052e0d6bacdf3f4d7710977a53dd7c1360074b249ea3350f7af3db19b50d70f6f0695a92c112aac22f402d6cb13891cc67ee4db60733228743a310725d6ba7b2397889134758b65adfc6927ef7666d1fa3a96a66baaa37734bdd74f25ae31da31cb87188c92b55745b41c3b152bcc7f067bf9852254e1f8974b425c7b3087d6dd0d2ea8a5133a03c847583e461114c6de00a3e12b19ff733b6787bc63f34c3c112efafbc9f269a487e86e3eaf01848ef77a72fe68fb4f85aee6ea24b79cfc7fd524e5ee9bb8f3e53c8b632514ed114a21829c7c81b2fb94ffa179e7a8d4364c265e71287e869852c69d08d322373d2d3cc8eed3d463fd4c8b15859b05a88dc296f5442079343e92db24db3eda924aed58176ef8c0520f016ad075598df963d577f1303e4ae351f8ec91a750b0c2ff6f9c2a03f960845d1d22955d72cd267ccc459921d54f998d232dccc447df9165f56f22c237bdf6e9ce5b2f7e698c04ddbbb189a967e65cfb241f5f5d7c9997d66e0ac904ea8cb0122af155a0c853bd6adc41e86ba58429b0f39976f78ff90b4ba0f85bf1f51139738708def190b31f218b84f7a25022dd9c7248548b49e6ee83071ed04c8a902a54d78c16d1fddaa3faeb642ce00bd9c9ade5b88c07796164073b5a506f25204446844d62eb016612415a971975019eb07da0b80ebc45d80679fbe02b39f41e69bfebdb25189f318ad11d9301b45560e6b6703124e6e7b3cd8f57f32eef824e681c38dceede7ba029e3f3b13766181c7e12b907f03b3a6482c95e8ccfd2a0e3e130cde668f6b718444b560752a00fb58946c8ff68311053444ee63208d8aeb965acddf1de5b1dc60bd987af2280f02e4a69a01dc1377fc9c7e4ffbe29b1dc5e030066670a63dad645cd28b7cce8a364d05618fffb75ff2107b04e5dba66121ec162a3f2846567a0b05826eeee89f8ef01d7fc5c106f8c51e1ae8382a85b81b1c0596f162d9d251164aaf9828d078e0ec3534b754f90764cb828a0c9bc395cd67a4985b7a8fea9f1189d6d6b5b18fdffd78d7b7df984967d0615214b46ba018b2740cb51a61b194adc27ad1ee74d8e0697095abe83ef0c7d4bdfcd9bdffd92196955e36ba7c04995ab4510888b9a4421237bfcecd6b272f5ee9894b98b60d7ac8cc5361e576fb035585ea45b7aded020594e6920730cb990be3b5450d41db383b5202ea80df33ad02a0478ec3169c2e80fcefa1033a865a1820408a91721346c393bc8dd55b095b75216dd3657b26a9043ae82bfe7d28d1554f0d985a77c2b08fe91b9415c7a2d26f906aa6ec66b83457a6a73836778700ddb7969f21bc1239ed25b40c47dbcc1b1fa8d4099ac343fe673737aec2a77546b11b612b32d48462859c96397acc52b2b69291dc40e037b7a46a4f93f1bedfa78063bbf0e1651f6447c90626c981e42f8a0bae1f8c18e3e6ffbe6a5b98f7321b08466a1c45d0d8aa05babafb2f2cc38a8d4fc6de3c00caa27287d6f060644238a2264f0336857e0a96a7558276600b264c967bd94418640fd56a5417a5e4d4ab4c645b96aeb8673514b4956e12a4767280708f48a928872f677dbcf5041c58dde97ad43a2c34ca783551c03e23ae740dc73a21be6e78e5d88fe8843826a85321e9f36339b1436d1561761493d557efa66f20d199b459c14f6a8b67086472d7a9fe9ede1c5737e90cca6a7389df595e9a3c4bfbf288fcc30ac009475a45bdad356aa123fdb5b5efaae3c2e93f4cb7c7617603e944f4f5d56cd7c0001624af0ad2353f2e78895f5c4f3ee5f22e32ff90190a0671192d113ae9bef6d5107a07114984c32afdc07504afbe57e3d3cfee06509550e2d0e62e52363a5e0ad9d879bff9983b3d81948df3ab0dad694bea79110898877ee4548c16a19dceedba6ab98b9368fde95c4b9b46986ac9a3bcd6644006aa5f5753e3c5eba9fb68792d2a2446c1805ac51a5089c755656e0782d08518d20403fa8dfbcf690df9a3d3b3d0c28a4a7201eead8a4d89b8de4e68bc0b1b5e2353ce95a92142d7e85d15a39202ddb2c049185de6e6214a30d23c5b56a3a97bbae31389ff12259284bf3ecdc9f195f14975ac00d0d22bf22d3da6fd598cc259ff892aaae578604176d8be5519b43c9cae1f2cc2fa08b1db499d6b4696e2cc59595fbac832f21a1e63e1b54007876423e5a8cb6399af7c7e8afc1787007e29192a3287afe226bdec9a25a99fd6d7bee40d3d0fd4f8f516a9ee6301af59db43c0612b1512c281a537624d483787a93cefb966f84d9a7769c14987e2c27188d1d565fe90f5a7258d1ed21f375245be96ea88052ea009e887f353302ac56e63693ac3c32df8d5eec9f6ec3d8f800919a9914d842923960215887c224a919396e6fa92e289d1b065e99d214c5d4851ad0826ae22cfdcee26818170ee649343e45b8135eedd0ac624ae1d94cb2638a47b74b14c92f2179ca045b75b941799dc31e07d314814e546cc7b7908fb334f2faf14da0f67096f449f5453581f6a9215bbfda523c449fe76adb250b3c1accb09c7661f822b93ecb11a71f7dde43b3a5dd7862af09a1e3512215803868c589bd6c28164aaf25dc1b76afe786421883122c192a7569c8b284aacdc07244988ee9158bad3cf96abb2b414973752ce8cf11688177ff4ba419cfd332a433e391e28bac0f332929fc85e1d4f352a3ba233623202c91c6c60bb33c5625fafb10191aaa851989b4d001b606ba0241203ce702b258f0d1cc0a417ab8d0d79047af064bc86954bf4e4cee51af32300907bb6f91e7264e71cf1cbc5072aee2e8339d30da7b756440b27784c6148889112e45f1ac4866b435c23177f157c6b44e803e58d2bee9b617a0ed28cdb4aa9628454c441ce2009cd7ae99504f43847dc4babae73d69db0870fee71df6ed14e986da85c6b893dd27fe0c9825ecd08b2c0c4973286c31180adb9e30908a71f1b2277a9c002d68c49a43ec9e335b6f9211319845891aa99f91bb969ecd03873b2e0797d41434c1ed21468d7916d4d99589aee48a8b6a13f4633b2eeaff2fe0236985f6028838454d0d8eca97e2b2631839273ed4d6bad27de949ae45c3eed6ab990c0d46e692215323adaea13e9d1e6fb3333f69b04f7ab0b7d69787fe8eef97da7ebb4b6237c54c3f64032008636fae756102aa32a5264fcf07b52332b2b6ea164f6abaf792c54dd7b3f154a95ef060dbc3d0a2567f2c868cec60c3075a71d36a668bd5700091944052b3660ca3836550cc953579874e9a9840717044724988df2f9ae31c5c35e98c52646663eeed1ab34eedc7b3b11002c12e642bd0259b871b62f657caf9d1d537030cde5f5a758ca692b7750f8d18bdeb74bc65501887c1a544949d4285b0b35947212660b2ff1d8466d7e7f01391b66de9279d18418162f79357a1cffb5a2b45ee3ecff51b706a9eff5c790e7cf9e5547fcf222be8bad05e123a953b924afb62d673442cabc11051d40c600ad9752371b06e35e201a2b03b15891cf1a8bca59ae0010b9956e1eb4c109302f390faca6f62e320f4a172a359a46278c0cfc1e99bafb995ef6599c75c16c3c1c35e1fcd6240505498e45d4e18b4f1588908bb020b0c0898dab81450d7881450d0c92e71bbd4f9ac95cfa0668222ffe7797abe441111d4db0343e2fbb9eb5a88f84cddf4c46baf69b9191c46f4763026cc8608024299e9727dfab7a9419047a6e6feb76e0d323e47b3a095d200090320630e9013a89da4b0319c7f8b5dfbb4ed2c667578887c41b578a7b4c33b8238b6df5974aaa934c24e87cba44ec72dd7ae292fb018025647de44295c3263163e255ba852ada951ef76fdcce6009019d0f8005542c1a635c1bb133a646ef8a5bd5b7a838c44b0c66839387f2eadd2466aa5b1cc4faae83b1a160f76822491f60fdbd03aa7640430f35fee14a65b4802378ae0446cc4e922ce6cc8360ee8ac0920c38a47c76e821332057e0e7bc2e888ad0e3ce15b9c86e2e030b0c10a4ae1b49183a4e4d5eacb0a3c185d57f74a8dfb39999eca128603d553a1f21fcd1f00d4a533c679206f07dbc1dfd126d19361a73ce9e7cbe6bec06010a52a667f0efa8734bda41f6ee360864e548264cd520a203f442d4876bf951f959f2601274c012ab6dd5af80e05afa71414d11b5b3dc9735bf319d540245ea7734cfb0f142701011a81a48a154d2880dcb3e79a230e31991760a339c57eab55468337bfee8028a177a7010f262dfc1b11a42dfc4f88d7315294218043be4c48420898f1ff038a2a817df6311d9cad7962a1bb824fa7d86d8325c82f85659745b7b9873d83defe9833c1c6cf27184b73ca56ad807181147e734056de648df724eb6673af73fa6baadf22fdf25572966d51d72d551c4a0c21a3fa42cd33692608ce96157a8d1638b82cbf29987a094db5ff0b5b0c91ff2d7ff1f3c750d8a8872158b11e363769319508343eb40654b8714b99edcd497980264f95ac303425abd64179431765d85596e7d4d995a9c6a63425158c3f1cc86ce5527df51648b69e183b76fb80951ee4cd6c105171fe4b6ce00919c226612ae3e8d93c0e69aa8b9385f8a29a78b1ea846928384071cf8e942908f2894010b4e97b9174bf0ab21c7db4580f90228cdf3c1b4085a1f55ebc8a42c207c8f5731670756da01bc362b062c465bfde96959e88423f3e84f5e87f6a3966318dcdd52a03c5e2ce6782b0b60504ac12d39fe3b7630ba84a96c399e16b69045fb72472afbac5d98b21e8912009e6fc6180b7e3fa4bd266cecfa33aed2daa3213de5b6272b7f1ee86a9c647ede2cca537e1f379e4fc4d6b4274857b9e89981a428024eab810bd4679bc5ec672ea4c3afad3d9e5bac83aa23b8a6fa5b628170d600ed91c50ee9dfe45663a94070d194caed7aa3af4d90cfec8a6c7465698ebe596dd48bda2124835bd3b7884ef20088767b5ca16d2b1d146d6ce68e2dae55c702869560b3deeb6ad50d9c7edebf14f044d6f8c9b7f320910f4bae46f3f2e22e62a719c5836841f061e246a0fd595854df5939172af79cdf91f7deff8f6c681ec157c27dcbd73ece03053496284005de47103d7e5ea224fc059f4d9a69bfeceb7bb82f0eaea7f1512e24bc6ce92a4947079039d769504e030a3cffdfc79b16dfa544138afac219c16e2ca6fcb9a0c73daba3be37a0866868131a74916ade9bbc4500db4d30705f578d27286769b218cb1d97942129346ada55e19a4e0f9ed89f757ecb910673897fd42d895dbb75f712546915d1e65c869ea087ab0f105f5cddf5c0a0d1a714e4806ba78ef24c29f863fd3761aa9b6993d9a28730e2dd784f9e11e55d6b5b6ca54ed9bdf09d631e664942127ad404b304ed47cfdd4787630f05d572cb399fc244e8ae9b5b7bff4ff6d6d7343a332ecc9141f7da05eb9e6c3aabdbd0aec5ac14357e1660404700842d779acbbf854334775fefbd0d8daa8a7290f3cefd8cf662c40834efcc2a36cefc7b2a86cdc5812c557f1fbfb7fee56bcf1a433e4b66fbfb15cf4ccf0bf9e74ebd7d2c7cab35486eae6e00f382c3e5f2083e53cca1c01dc52d0407930e955cfec968a6b0e934fea3613eb9c2df4d70b26b1b2cfa685519f3400489b08ae99506a6d3fac18d28ce395c4ae96a8cd396474be6edda9067525f759dd7175fe648a72fab164a32592748028c547685ee29c80dd2856f930fb1702d813e80100c72fdcb4b7653b4c91ea5e1e5742f66ea56cd83d0f0e5771168b264b542971e0cf30548119fffe2e60fe45033c63db695bf95ba89f31f73499374ad8a3820d316813d27a6577e0f76c78696096ac5e94f4a5e3484ca1d654e4341fe8492cb4f1c96930b015b774ceb0306a6c4b5ec053a71984e5d7cc4eb52a9148ef4ae69a3e414385fa2217166c8497c186763c9e8f99de923510356093378e239bd0531a1a5cd2ea8b1462cb04c53ab9b4b524da1c518fbfb33b267c50abfeb86233a357455a7fd3f50effd5ff687461000b52e7f0dc8648813928a19b4c0365e5b87a569fcc251401e293c1893f47b4cca2c870c6abf5339beb72c0d915af29e75b4f31f7e5d4b92b913dc90939edc5903a10f926ada56de946bd07ac089cd61f75559a2a51444a63cb67b7526d88764b6377992a5cfd21db373b56f167ac6a1fabbbc3de416d835929d0e783187737f2c0bb68a966b7b34b14dc9e5659c912c7e22aa998cf89147f4c2978874cfada58a02e7b67fa03c8b7f2619788913a2ea10ad44397e714961b3e1db56d47c2d297681146ab2a29c2e62340f9bcf9e58e348956c33adb7e51efac7b43e467ed0c95ab4a48363e59eede920ec6baf476babea80ac0ffeaba920d143fb7a4d25f2837cd921406305229afb354dc7adb9fe52f57062cb23701fd0d6a494fe1abe5c32c9df7c30e1a9bc87e9526050b03b615855e7754563da175d86650905d298609a31d68ba025e2dce005ddf15b10d2058c86bce729e9c42734c0e10651aca2a870db8e01c09ee4930a058acffac85cc5b397e5fe1ef19a7d0de59f38172f508fe63c74c1b808c7e01d92863a0bbaa156dfb808c9175ed5adb5a98f39cb586fafc2cb65ae8a09670d28c57e40f7ab7ca772c6cf513a6e087582b3c6f63a4583885b293484b61d116c688fa4f0e3a8a310c1b34c2292307a1748616676349f86a2be3302a885b76425248b8215a3af805c4b8a707780754726d2969cd3b94c9a9d11d00c08519123c6c90c8f3541687b2868b61755b6be9101fb8b1dfac269b9e4617a0b7ec020180390610f1ad20f871611c4051937dcb0446466585cb2836b86eed3c298890340a5014a9b8c2e8cecb3109ce13f021d58ff8539f4ffa33c1368e9a958b4fe088f09f4fb7b23795688583c826c368704af75b45c475f0babdb005d1a24f8424d23c070d1bba01195a7ff82de94156bac7da9d0e4890d1cce5fb0c01a944bafb043ad2429439f8a032ca7c23019925cf911ff64d0f9f2d757f5b2b4150f35ad2ef33165ac02470514f6d35275861ed4aaaa8ee554fbf35ae1f02afe4f9277b5045d5534cfda5034aaaccb460665de3adc2f97a97746e6e29d3e58113b82d3d02d2a58de745011e7047d5457e1f286496df95fb56609b02cdd42c84b3b98cedaa769ed2203943637ae52ebc9bf911140947ad0c1f410f371a105c76322d784c7b3be2e29c8b2c7ebddad4259532cdac4f37c652d45dbe47e69d36312f1d9e93a799f43bda668c1a083f763bc2ed7d8e6ccb90004e75292459bcb282d784dff47111527e700aaae3b430aeb210b8a1d386a963e166e081bda9007ff6e44147171559e0e41224708339456a8810cf1546b45ff083eeb42cb5be383f2a08d44ff08a30c10c3ef94f13850d2ffa15df33dd3c8ed076bc30e4f7c1880ff57003efaa747e83071d2131a4dd11ffeec9d7cb41064bfa3ea44c8c9228459ad4cf91d422ee29a5d19feaec30df69eb5a8c6c7771413c783c0a4617182051d1061027f52952dead22471504488e9630f4cb06888225c373f45c52e50e44f3dd42e03b9130ee3d9f3774420ce8de39c38d57bf8d1e833dcf8e92f092fc2443c86b286ef8584c2145f91a81cb901349b42a24ee7d0b4fe9b0ca43f16fec9ea2f317afe6303007d22451ca8272ef3cfa3740b975d905c7c05c8e025ba542923df2619a06ba40f0b16d302b419ec69db4207e960208db6fe7d6d4a39dcf123539fbbdf64b07903864b9b003bb12b9a3d9e333e2458b8ba501b89db94a2ee3f31e3e6d6ed0856e3c8a8e99a3f45c1432632d5d8c8a2bf99a65e5b37f8d42a64de21ce214680e9a8d54bf95f706c880496fb7bd4808e02310c9c41acced59e88b7bf2decf8c4a4a9545823f01472e91cb5232f1f2eda0a8b8e1c81cca1bd06e2e6a9c4f91a51910310cdcac51ec70047a50e454392d02702863138726db26ad91b34e175c568e7b8809e60491d082ff315ed16d85f04b194aeb4e194d52e0017dabe1f3d523aa85bc11ae8bc892d303f4b44b6cc2cb4ff147029f8befd911071037e2200503d8d1d44f7e1ea5bf71edcdc71189bc7c37cd820a33c9d0ae3df1aadcab173ea458ac93027f15fd83628b8259d66f504bdeec4fe1e21b6f393ee5d2fa16a4031b3227937361c6601341fde0df58c13e3e641c339c8bc4fd0848bee46642113260bd6aa63613f29751d4aa8c3fe0d3d6461a3641ea25b0d0a47dc55e0c79cb5a0d8a39ca3ac91ad221bee365a47faf3af02eee6cfb3c0a75516cc3a804554c4ebe518b9139b409e4e50518e5fadf0b3fb00730e6325e7a46054a1d39601a25185c35480c0c34ac79faeee9d6736eb857bad499a54a16f48d6af975205f5de9d65a15285947a58a277f6084f1717b552ef84e2a6dc972a74b6699b2f65bc61459dc0e23367a0787b3851e3df300d1d28d1c534567bf0d1bc9458d95cc3aedd15034a967fe67eddeca5c96bb4106fc2b6e30468dccad6c8181fcc2021bb7d59e16623cd15840c953fdcf6dcfde055097956bfedb9fe2626cb9d3df999416e2b69b750a9399cf05cc123fe1bc4496249831efc15cf05005ef847fcab6125d8e59358c66806f9efb8b3fee695e390e3b8d98be49f81dd6d13abfdd3a4d6d1d1bf4ca318afa5804a88109ac12cb1c7b0c58c275796f027b42c25764295044c136b5b532aa1d6e505eb7a50dab2191cf44c139e14bd4bf4985758a6c8df10e65fcf57fc038fd020a8880317e0c2c08ec790604414e0594e824324e68f721f8c2bb6df40ac403402199b3b603a3322bb5b8cf8429e659a0a5203b6f34a4cd936d012da6839497801da552971833b09223175573bfd03d75dc2451084c7500d7ce4970cfc5177732cd1c996d89df38b803eabd2c8e0b09e103938b08d7d0cd6d675c823f28e86ef29c80cae98aefa34366fb645ee235af60cff6756d486c995443f4e409ffcf3638be07a901bc8d1f6c2ce72cbdf440baa23d7bbad542db3d07d4b6617c3386c8aa423276970591b9bcd47ab419d264ad0ee98ccadba6113ad8ec9507e0a948dffab8e1a2ae078e099c402038d3ca3d80f62015deb3d29002fd124c78b82145a27806a11e8767ca37b8dd55104e9b38d6eaeccea54174794b78fb8d70ec9f00172764a04a78c591cc6fa65d087a80affa8b1c9fe8ac42218aeb070ae973c6b2f688e6e2888d36c93c87a1ec0c143d0784bdaed3a0097d90b8106f08a9d50ddca22b794603cc7f4019e9355c06dc0265fbea894c82110c30d5a903d5cb62d6b4d3de2ff36c670da240f1366701d1a312713d3a32fd0661ec7065f2b9b72ee40b12b3d313dad8a5eb1c45caf1369086d1cc3d7a0ec19b18a61c303803d082b08a37cb7d1b7fcd0c7e4e1dcf56643c426157ca2a7113a110f14df10354d873e8569672e3248bbac70a78022effe31d284e845ec4da759e0e65797fe1ba039949a1613ad7f6d0cc82180cc8874d831c79d42f004a1d208c62d638964bd795175aea489b1d19a0acb39942232f4860d0a1d095cca14f1d846da8da038e26905f86b8611b2c5bb1eb6987e9a3ce0b277f34f6464de3936640052ac36a821e1433cda7c1b1e0f71719f6b65a0814fcf999fdb28fe063415efb8d9a58957d82212413bb6d7e66ec2da4860734b87a1ee3bd408dcae43d2526aa1e4cee07ff343ae6e532de8ead40901db3b5134dc45cb1aeaf5b9e5b7d53d52feb217bfc7efc4efa34b2b671b00cc0e3e64ca09f285ff135276e10b3cb9e01982815c0b2fc443b5c996658c1636ff82f2e4877fd49f1152f712a3bf08bb2622a28d8b31f82f77a6fe2c62cdc0f7fc125234fd2b44bfbc887a1f420e35a60060116dcbb69c6b969fa5b71ad1d4663d610f8d66ff76708ec9fa2b15dedb22ac9f08d4701b45820665e7013af661bfd0aa07fb0a0a516f01e339ccc6af625202060a8aff49d0aa2bfe7770cb2e638925965eeecb684ca05278d121071de044b4e597b4ec32cbefc78b534023862044083782d64f0c911aa627f54e1d30871c71d82eebeaeb5d21d4157531c981e78f15ccdd18ddd75b3a661b373b4e3781430c90e0219711673e289868d88393f5a1ec27591a22619fe47885568c0f5616988acf021e0387ed9467fe5637db70648b2cad97a396cb7e62d6d1ed566a5959b84ec215fb8939f3192d3a4c9c8c0634fb6de461f187638c736f12f712b6794077376daf682b676f309c3796b4419780676ba0b59416621a5b3fe426303d048ec9aaf531e3c88d35483c4a98cda8e76c27150c028fc20b23e71927af10eacda8c2ef20bdbce5744b289ddd1f63e71b3240e7117c186118b204874ec84ae921f7b09e361b80f317aaf8b2e64f868ce3b99e3afc079cceda8f7792bf0fde4973361d5f3fdcaa1ef66088a54db8240902819c513a046e3af413f4e4be51cf1533363e98274c4ff79d408fce9e017741f4868abe717a42773af5097a14bfc1e1f408e874de12d027d2eb08f48cd311ba13aab7b53a88e975dfb4e91bed89623740ac850f10746d7f3671f988e4c4d0761e20566a0549d8109493efb09baca424515840b96c58c2c2a8b32c1b7faa32f3acace4e02e965f47a6553146deff07315c9a611cc8fa0d9b03ae27f930396bbbc0fc623cb934a4b22ca4a3ec56d000e3ab3402deccd13c17ebb7d16a9ec761a458661044c3c9cca4569290b062accb9d034ab629880aff6bd5b6e1bfb8c7b34048548b179dc2d804ee51be5363061baa272443c2796d192f3c1e4f6fa4a1b0bc83085bb9c4639d81383aff722f45be7018d23da82539e60fe82f086cc62287782c756cfd8f68e5ebc919d2198c5564d819c1af6d0c79bb9b2db2214b240bbb2dec626ea690cc924b268da4e32e7d68a82fe77953298a59dc27213cfffa88672e8ff0586f77e17b63d6838521d422f99b5744d2027bc8d56940288e16a9da8c41ca09d87d02c9e865b1412c56408bd6f6d4b5ed13a058f3c1d864c4b15305b28641b24982b2b1d566beb703deac9548085ad96f144b888e8e3ba1ebb1f1df5ea2de01b40901116802eea0023a9a052c2003542af99d33eae6b8de56f58e7f2b1a90ee4da01670a0324041bb9da84e98c70cd3473f5f60e904abcb5d9cdbe0fa04165e5065029c5ea516ca12365a1fa1271524339b571c3b7fe3078edbf5390a1e61bddb26cd07444b6f7cf07eb88b0bdc10ceac88b77de7404524da9564d3afe35b1dc0ffa494b4da688f51d21ee5569756538dfa087ead38d6f431adb686f2d33d478771c93497784f57be95420809e2278861ec05e2c7c7e2aade9807fe6ae3cc9918ea1ebb56a9748e7670e5ea24227c1949984f891514d1df908e0f2b96a7afd3cb6f3295514fa003aa3b33f33e4e51302a389fb248fee8575943dc8ccf320d15d859e6e70373f156d0ddce88f1f998336242e1f7f96ee9ad352a3cbb5a2768df815e262498cea50902a843f093d8208b387fe7f05d1d60342b2ac1c3e4d8247db01a86b840548f61628b48af18f57a053273fad8d59470f566370de7a48587074c7b3ef3e315717a1fd90f6ee082dbb82b0e227e09b1495f662702ee1275e1bff4e1d84c836e55b6ebf026ead806645998ecd546e3f6c60e56b7215c145a72975d17ccce248e6f628a694083c7775d8c6b0948e83f2d6f778db3d21ee2600c9fd8108f2c59eaa25501a4daaa64090fc67bde4516091f53417ca5b2116a09caa87370026d5686e5a92d1f79bfdec3de5f160e3d076a97278a0e3ac94ffa551bd148476a3398c2a2793f87cea4d55b6f0c2a7c2aacebe4e2261dcfa21deabde623ce8153ce02eadb508563d3dffd780f170fc5ff66b28bd6a83e7a160e0aea8f93147f8f6cf750b7d9cc5c30746233971aa0b6a2953fb259081699f82b5d983eaef603d6db167eca5658578a9b2c9beac2764f783136397d932001d5be2b44f8c5bbcc97f2fe3b4c76ac612226e024d7891ee252aa4a0e8471e301aa9f303df2b8c55825fc1066dcb24b5ef032a597e702469983e4a9795a1f3c4c6ffd6ecb896fc704bc47bceff12887b5e601306a362cb1d7e1f00f4369b01643ecd5074cc0c161af205e31f9956fb8d630482b0a6f062becb5a508707e8decd376943f61af1e31bee66d39ce171dc76ce00859377d4ac772eb7d92e9e9b7e56aa8df666b57fdf6fb5c9dde9d787cf790fe42e7db3cde8d076f2dfdcb11a17a03f87e73a72eec1d6dcdd117445a3bc387ee24a9edb9cb2d1604efe96a0f6f8de5ee7adc3b77516c020df3dbc662a5fe2edfba5c04a4c21a66256b28fc6cb880a34d165e20cb077a10cd05d0e17621bda21b384e8b73185bd03c1cfc0d201810ecdb3288ed1fc97ffc013f864a81b20714100ef8aebe4cb131b7c449f4b55a45357b8f6c1c5745aa59ac827e42c03df9de8f4e400d740692dfb59134b3d54965e72b2b1996c0c51d9cdd17380212efb36ee335280a7a967f4410afa1e31aeb9f56fff3ee7374cd1830c2357fe3ba1620bfe39b98127862e13245d110809e9dbfce43257965999c10f034486925839293a38885f751bdc1dd8957d027b062ab783b20ab978c3370c69e170e1fb802f81abe07e3dd8af04fbdb5c1c73075df73d0173c865b8af0571d14825181f5ac423021e968d7e72808a4d1da7f804ecbf2a11fcb67e932ed5298365d3b173760c6b88e8cd97a7812ff7706df86880d42a46ca670e1a8e59a05367de4f003e4a8adc5a55614dfbc325ab2e154243cfefd1a05905dd03fb138d03e57f0ccd36194a012c3d09f0162e21a343aa686003c7715dc6f836bde85a01025a0fa4b6724cbf6f7deb241db4655a6956f3689d84ecc45afbc443ab9fc975b139a75f44a4a18f3170be92eb25453dfa0d894383086305a01643c030a865e825a2054b29a0e12c5af4fefe4aabede3385feb13d9c3004d31ef448d4e0a6d0bed50a306bb705716e2f969e3b22ce83f03a210030ac5a2e4d04c0bf54a90561b44f2997f5146b7bbe954b43c730fe8a9124d97b77dbb2db962949192408fd070608fead80fa3331c81be8cb973e3922ce9fdc67f060ddefcfef05f9389ff3aa0dd8893fb07b423fe73bd9c34a59142f586295df0cc553fd90090f93451103fbdbefdcd37c04d6fb76e51ae4c13ad6630d6a5714d7bc7a827127fc89ce83e35955807a3cc27a41deab472b16c767eff5bdf8fef65fcef364fae0c0217188758728846802dfd8f7bee6bbd327a4e653ef0fa46bc489ed9d39e26fdf5e25373a95cf58cf13727b8734b61ed2c425e0f9de15e7993e5a78a40d8ea44c0a163cdf2372ebb927d4aeecbdf094f9d37bdd9ff7bf24e3b37e7e31a09e752991b368601a9b4192f3ac67dd2734e6acf9390fc5877254d81b727efc9a3cf1477126069ccff99c7b037d9c973efe0d71bc09c1e68afd35bf02799e585f403dbabb14ebeffe9bf753eaa0db0df7af15b05d3f2137bee3a61cbdd76e3c67ddd63c90aeb93538b657ca1def5fdecfaf40edba71ff7344e9538363ef2b50bbfcceafaf76fdcfef5e9cf19f337e6b908f5604ebc5ae87e28115af943b7e658f36b79b5e8e287dbc47d5cd1e068bf0f6a98f42250a16f770c49918e43fa98ff338f749cebfb8bf21e7e5733862cef7f64dbf17e4e73c8e285f7e35586062ff18d4cbc20c71ec7d07656b7a59991a1c7b97c2e4cebc62613ed7200fe6acc984bd150a6c7b30d963e2f95e4cf690f8bb4b56f353779cfe3847943eefc1ec1573c537620cf2eb6b9f10ff1641588f73f5405afa7bff894c1aafde6fe882fffd6f9186edfb4158bbf26c71c6670f9605c7073466a12010961e27961c9e182c2cedca62b4ab2f68a5c77925878784c36b62bdc62bedca432620b52b0fd1afa95d7928e7fd8247e0ab5d7908e7fb825760467ebe47a5003fdf8b1df9f95e95157ebe4774f3f3bd229b9fef1ddd9fef59117fbe97d4ae2c8027f233003f64d6ae2ce4c1a42dedca411ed4e27131c0cff7bac0f0f33da5177ebe97c5cfcff796fee77b5e6efc7c8fa9e6e77b5f6082da957d5e8528edca401e0ba53085003017a8b41063a14a112255913d4a59017ffe97d4aefce351f8f99f9676e51eefe3e77fb3137efeb7a5e7e77f5cda95657efed7a55d99c6cfff94da95c39fff65d1ae5cc2cfff96da956dfcf7f33f2fedca34effdfc8fa95d79e6fde77f5fda956b7c50bbb2eb797e3e1885c7cf0785da95757cebe78353da95771e003f1f44729e27d467003f1f84cd987133143ce3af78e380af119f019f12550a78173fb1c996e46d1a80c3e683e0f82782e31ac151001c2a9b9b8dfcc5410447909a06e078d1013639fe87e41022e4c8cdf76d561085e4c821e4818ceecd4336232fe436a9446e1652711019f217c7bd37dfbc88e38a0f6464e4e6211c4f2487101c1f248790200f6434e4e6fb476e6e167f85b769c07f4d8e1c3537396c72dcd83c90d1df3c94e36b1a90a3014486dcbc119b2fc0df58c048807ce355b84dea03191960846154fd78e366037ccd480018540b181f8601375817c828abf0f836a959f529a450f3377e60f0a7709b58cb7a20a39a9b557898db64ab8179e153b84daa016e4ea18e3f2a7ccd5873f33fcc78730032aa01327ae1e6a1f17f58298c4f80dbc4a640809a7fe16f86f99fbfb1007cb30a0f034bf5a9dba4b270ea5937587fe3818c54b87988f578012ad6a716a002fe37c08d87e1ade8f402196524b9e751b84d2a4541f5b570b3db140ab4e7e603bcea36b1b4a7059b80147d5001d6840b64945dc83e2a0a2cdc9c7a7b9b784540146e13ebe36614fe041f0f6494bab9c886e44fb84dea016e3ea152168a7c8aa66e563d4853e0031921b979883e0b269c40bfe736b127f43c9051919b53cf82ea66f08bbc4d800bdf82092854135af85e65823541651fc8c8859b874cf81612808209ef230128f87820a3ef66d5bb70b3fd16ded3c101c06d522b121ecf713e8f81e736b1380840f2dd261bbef97bc7f9169b6c7828899773818cf201328f6fdd2695a7e595d0cdc3e3669e6fdd26368787df1c6e317c0938007804dc2615a784f01dc7bd71bc1fc828869b8770be9503009c2f21a7058007320a6ff60ffb4b78ef36d9f0900e8d03543c94c3537390c83c8d9c9b69bc779b78f8e60064f401191de0e6a19c47a2c373f350d0fbe43c8fdbc4e21c808c78783c9091cccddfcbd0b8d97b1a0fc40d00c30b3f2eb4c0c20a470a60a4081151003f440cc00b11757c1071e755107db00864fa0ce05310753c01c49d4741fce143ecd13e03f813441ddf23ee3c8fe8e221ee78e23e03b8404602b820528f330017ccd2e3fc96a8e30ee93c00c41d9d0b26396b7e0e31e7718838cf12737e1471de0431e78247ce9a4f459c0b5e71d6fc1bd1c6db88347fc59917c51affa28dbf21d27c8d38f330628d578936de8a349f12671e146bfc27dab860ac692e5865e68244352e58d4e3fc19220a97209e7280430cbee050dc64107485139886e845e09034042c239e7a8082490b2c53a2084b243ce3e78c0bc28ea4805b22e19528f1c7883580ffb9982725d218fc9fb4ab7bd46aab5398696a708237cf506ad830287a1284b50b4cc213ac8241223cc1223cc1233cade0095ec1f333880544c2f35f587a4548cf03729cff2581e7834be0f92911e0f9d608cf5795c004784a2c3d516a60080de15c61ab1a6463de9187f464fac400a907422f1f4e749f2a9ea4c43cd8498a7d1f70d0ad519a356b1019f6a7100f709fa6d8f788f084c5cc6e2a941a1970f77c94b0576c0e5d523ab09a1545d000c86e58ca3890848434c5562c651cb802a3556c293abdd61aae4e9a9348e9c6d58ddb6add2a4daea12e664a5d3b4d4d6baa39753aff868b7a776fb25d3d352a7beb6e8acff62f344d3a3dc19c5dccd9c59c5d6894031a85a293375936ddd163cb4baba9eb8c546a7dd3e39f4e3c33798365cf49a34a5384b35a4b7b269964b069630636cb7fd24e8076889e440c4b5912473c58ca625470d71ebd457012b9e33338cb3f1a2ed4aef972e23cf43561b287c780709e53b0ef6896bfb7c868cdd88c4127b194ce4227b174af75f585f527e29e1652dee864a3843a3092405525ecfc13a769f404866b9a4637ed24dda5a649cd358dd2ea5cbbbb945d270324624488691a4542a352bad0344a048d4ae9221693d285942e3c1ebad99ed38e89cbd6a4f45a0a62da967cb62db9871ac26e9ecf9c0b968fda927a7ae8b6716e3f1c7ff08fdc4962b6a3d5aa5e4837313c597b7f2887da509d9cc5f0b684bbb725677d60a9f334af7a584acf7a9d87e2aae71d51ef7e08bdd812babb8771042532be6801122b70c293e0a03b127677f70fc8b820618445a208b87fd5550e8188ce0f3011e29e752005d8bf0ad80f1df6b7ab106604f6a7817581fd6fda8502f62298c07e03591163e01e2a700afb17e9825dca8cf082fd91b4cb06fb2791e107ec2f81198ea882fd97f8114bd89f49bb0280fd9db80c2ac26554bac056c83c40c5651fa0821dc44e84a5eca14d13c0b80fd940184a64d9e20a2e2cf030dcdddddda71012e0804512b028f2828583e12a975a84c6681eea53656f813a229c73ce39e79c73ce39e79c73ce1e9df1579323832b03f5420d8182a160a817ea08989894fd84a8549f65db7edba89436f57976b3ce9de688a70f779a295094db378a9b477d249742a3f9de8684b7fe19eda5cf8c363a6bfb6d0c9c2dce7dd4e3ac6d460a66907cbd1b0d7267fb6ddbba0db5719bb66ddbb66ddbb66ddbb66ddbb66ddbf61beae6d06af266bb4a5ca320ac933728214bfb853edd27a8d7fe09b7bdac22f7507c9ed45b2bf7507cea768948acf2913ea75b5fb31eca1e56ee38bd79c2941ca9e3703d69d4a5e4c00c656ed1edddd5dddbbde9297456d7ed249d3aed3eb57b538d7a1fd1e92e671eafb0534ac954715729a5b4e9d627aab546bb5b4ad9dd6d9d55eb26398e8ba48eab52b2b826f5a4499a4aa552b4a76435c15d394a05184338db24746008fb834d6129eb800e5758159632228ef0b21c963222bca8b0b0282c6544fc20656429963222789085082bb6eda4d19b5127b4c1b45f5bb583f862460407aced964234216bbd62882dc421a260877181fb694f219ac1942f646ce8031ea8a052022268094137f50cdb876ae7fc98219ce72425e633bfe53ced33bfc779e603711e39134209ecfee910c688fb691782206480fbfb9d0843c0fd56e0fe418a2d42455421e44515404881fb6f5a16c40eb85fa7bb1811eea7ed85cd75f46103b6764e845b961fa8114ba71b0411d342872b528420e48897142444116244ac69addb49e3ba082be5546564b1b4034b8325145aec20c61230d0020bcef6b968710326b458e2b82d5e98e39ee3b8cf7fc3ddb1684bb364979a85f5d22c5af4a559bfc59421a612549a25ab344b881245cd92385b2e65832d4450eb76d26e469d25a48a43375fdeacf0022d62e07e01154037787a48d82126081baeacb03985bbc7dc5af3e6255eb8fa62dd5bed923b7063ee3791bbdbcf396f58e2616dd556a3d87ef8ad4fc91ef3e5cc9d8aae9f3b82edff524fc5d47792d2effbbed4f75c0a88af72b1768525cd086ccacbf3c0d6e7be48bb3a140cd34fa560befbc4d518f67b98efca1e5399e2d4cd9685ef296a035662ce6215b67247f5fd19d15eb5dd00d4422905d228918a15a752a9b7b287c4a99b97ac702a056453de77f23b423ff59fa8847eea3bca3dcccbcf08f730d7de252bfcdd4cdf8689bf071f487f4feb87fa0e25673be85d2977689e283143c1d65fc39a3843ef4fe82cffc65292fc3d7f4b6f11b793ebc1144658b00d965314c5203c295925fef4fd2ad19e5e251aa6f3bb790913acbd9fa8578f8a4aba3c5dcc9ecbcf889c3af20d3a3206e48efbafaab039a4ab2aec8739ee7bed1bd2fdf72e7631aa99983ba4714cea432034251459a11f49f34c0dc46ebee0fe71477f4c4a45a70f7ffaa7e9633efd3a7d4cd9ae948753a9d4cd4c284e7d97125765d8d4cb9b7ad503692b0ec1fc1467b08b33f60e993e2496dec9cf886a4e175477beed4f088dbd618f12487b2db01aa59f9021989fdf1115ccdb07c519d54fac0267545a11ec8337447561c1bf062fa30cf03de9314758ed4a4eeed077914e1df4a7789a3ae857b9737a4f144fa84b6911895dd6af7746d39e62edd61e7bc48d023f801a02350457066a088e0cd44ba25ea897152b5668f0c2fe5d92ecc12d0541e907b32bb0cfaa0d70e78067774deaa14b0f44b86b0ff5b2948926dc2f6b2208f72dc3e63aab517a9c1f1384fda02ad463942227b2f5a84bae441556a96877fb3c6b6c09abbd76ab92f9954a8f4d3dce588df5387a6c8a1b12e4ce8762b295080945f5a85db902617fd8f431a78ef97d4f538738bf0ab56bde2ad4a38f5a347538518f5eb78955a8067db1a7af4445d387c4ce84c9124f1caabfd5af51ba0655b1526996535c83aa90762bec44847d9c2b110c7b102f9ceb15ec44d8ff4486cd7556b5d459d552b7d4a4ae498c8f85fefaea1157a076f5a53146f460734dda9020562db5d69a54933cc97e56eecce44eb52f233a6e33880d2ca8c09e78058124c417120438b2a024dcbf92ed5005f7d3f4bf0670ff4dbb7ee01eb137d1d576cdd9eaf971fb2a79a8bc5242a119e8ee2ca494525ed963aba747c992d5622dc49aa66954d328bd02fb94b28110a6ac588ba52c4808950e16064b59100e5606f6c352c6812f37a3ce10baaedbac5bf8b25abb0a69e8b69d348a850fbf812e6686e76b42b42574c90a7fbf6485b7a1d3c700a1e4fbed35cf2ec1df7bfe29f197d8efaa3fffaebb956c3f7197d5f7e005075488c2688c5ea1483449ba1b397dcf3cbe01b1d8fcd85f4bc1a0eb259a228f9ea6eba069105cc3a27a277ada42dbb86899e5470ef1c9a3b2ca1ddc74efd8d13a3a7d83c3109f7ee38660bda2986c0e698a5a373a94ebb2b079c2b457bb80aa3c156d4ad6a2a03c21ccee03c2c9037d60679439a55d45a1cb2fd503eb13bca1096dc8034b6bbb264da9605ed81c8ee10ecf7a9a84829b902c4cee7461739835a2f70fb52208c870903dc090022082c40184208d48f638bdff498c02cf9945a51de91081ec8917aa05b2275e32279a5a9432279af0103a58ca4cf003b65c98d002ece9000796322b5a60908a97d6ae429a50668505d3ae72b0943d31843b2c654ec870b6cfc58a1a2b8e70d52819628c259a785df1859696b282c68016465b78d0031542593a4acf18d31192942598e1e9012c65472fdc75d59b9fe7ee29f7522950f5b2f339e7d64d7003b7d3ecb6cfdf6b9787137ec79ad58e9360fd1dcc02d776a91efcee130232e1edf1067aee9e722f954279a91f9c97b4b03f083e90868229a63d4e94a4424ac143f2d0231aaf63aebd9cd556a347d5da30046ffe8ef97c81e083da0b7cb903fecc793ae6e3f81fc63e6033f8dc739f3bd6ae2a1d2786e0b55f6350ccf30888e9672485a93663a4b13663c471ce0076c72731d719238efd1dfcee1d7cefac0dde834518fc546783f7609426e07723f8822d4e7da7f24091621b405889e977dee7eef673017c07df45f707bbee3e2882df67a48b013fcfbb197bd4996273e7d4abbe95a43a267bc07c7f27217b80620d29ac8271c13e681f045f7e4640181b264eddcfa9ffde8a4a520f7efd8e780ffef61949ddf0e680ebabc4ae22762c09366bafa3d94b036a5790ecd1bdb683ec51c364c2f563c1bffb6ef5a0c8859f11ffee76defb7bdf85de05450e74d18689c1fbc34abb7247afb44b49478fdae57f64caa8608f05ef41239d14c599773fa3dab0ddd359539fce06103682b0f48774eab33f2852ecdf9114f6300998b0140296321200e18e866743089b270e3d1bd686105609938995843dfad31a1ae8b89bed0de61bf08ac35d9f36cdc19c01bcaad153d6a020edb1fbc69f5845dba3df25ad6c6306ae59e4764d353f886efb1f7315568d564bd3a3d4ac16d2e0640c9b6dcc90cd9209248fc9730117ca340313b1240cf0a2b4d4019b2b4ac8ce2c9694e4ce0ba81f2c6d923bfd4424a660c89da64ceed349f3666fe2a29424674ab8ff0789f6f2c095e6d14844d85c513ed8f9b9afb4720b5f69d124204cb47664f198b376b079c47d05f78f3a7426240397244cb89f01d5a3c94222f9148b4461b3e492c479a4df7ff140a908747afa76e554baa42eeaf03e63f3e8f7256cfedf76b03da304b27f2ba0612614bbf6379af4410a3c5024f47abd623ef26626f4e5e6b77a72dec04afc3e0aa01448524f0f17dcffe36f76d01fb267f5d64b0e6f429ad6361b74404693b60da1b07934829dff168f5870bf8e5ddd609ff3f386e85d35ab6d1ee56c1d498d2812011599a4c5928800a8c80ab2cb4a43d2d1d9e13f45f76c989788d9abc1cb70a6a6e6d1dfcd00c3e666aa339a6cee896b337d9927239bb59816eb6ab5186e0a8664f5e35077c0fdf26a40cc82706e26e722a364b34462c2fd4082684853cc58132d5991315d34d1954e22eab18b6663c18d8467951efba879f44bb1896676eca3f95d348d8eba896691dce96fa23e6ad78c22d8ec47b8dfa934abbfbbca14b241455decabbf7a4c1d90d1a9dde7cb79e58fade6d10f8a61e7adee3f304d0dc2fefb8f3d44a3ce8f982e6c1eb1c43aed92ad9e73a5d3e31823049b2d8d5dcd34a6976cb282fb9f00692fa79c737ad3c97c358ffe98226caea7266cae538886d101692f6ff229066b1eb1e6d1bf59b1b9854e22b0afbd6a10c15a88c2680b51c1fd3d85c2a8d0a2a6d264b34fe95148ee7493f3cc4b61b98570c35ac87de8d5b8b0d9dad52946a3085b44407fb383fa6b3fc77f2a8efe7d139661f327194bc0c14a9c29f61bf61236ff8c20d8fcfe04931e9d4829a52635a949292f93a984ad1dfa82fb573430699e9e40f44e39a79453cea9f9c94f7e72979ad7e3a5c10913981cd89a8557ad74d347dee48ee1fed3909d0dc3415d70ff8c523d9a39858a0e6c7fbf709eb07f7166befc8ed9e0a7c85016dcbf82dcd2afc3fbd06fedd0096d2df2d33cfc3b2ad6ffca2984e005b7c37a6a1db282fbbd904667a57d4fe7d1ef8161ef8c6b301871cf9881ed4752620886fbbf43300bc1116e9f9e62e07c03345f2d1eb903259f6fbe151866d2d80214832a23526ce9b16b24262cb19128b2b44bbee0cb162cb191298eda3583a954261a25c47ccb1e35903d62ee0684dc39b272349b6de1227bc86d4abb66bec6e7ba51b9f19fb72a35376a6c7c3132e12a4626a4a15102cdaa08a14ccc266423e66d7e869867bc8cac4a103e7dd7d4d8c83c8e8c38b18dcdb5c1d932db32c3e1b9799b2be2d85c1b1c1b31aa98981d3432a152164b5e98ba958c8d9827cef9ee3b1ab32d3e43c2aa36eda85d36efaf5969d715b523d6670dcba81d99f059cb82fd37a14d6813da8436211b1bd6c8b2b121133324e76bbcfc88e47c7f8b3333759bb9334772bec6d7c8b94a42199c9b1d366a6efcfbb346136cbe5f46b4f9aec59cef727efedb40714dcd8d9aaf21856beeab7efb53cd8d9c3b73c4e66bbec6e62a0965be19383836afcac1c1c1791a9b1931328f93137edf551213cae0dcd85c71c76cba21ce2f35e264aa214e2f5928c988b30b971e8bb0357e06b49ffaecb31991c6afc4fa6da91e6c8dbbd1f8bc096d537ad4be0e656268dc4d681352a954364c2c73f38c8779ebd6616e15e526d4386b33ec4ca2cf282103411de0a12621b495e08713920fda0c86a05874c065a5282a4b4118d486147571f821c8184b321508ed10840c980f1448ab90468644d3145ad1c415550f2c8d2c30527460796822084d4d80a10ac2d2e081070b93448a0b9b7a42d584f5642a286c38038b028bda028822a613148501d38385c152564486ed41880446b01d8c44e083947433ea5099134cb82009271dfa4ed1ca91561cb8e6ee4e29a5ef9aa671da73df51ae721cadb2352d57ec435636c50a2c760a82aecaed9dc86e2f7faef2e9e7cf1ba2ae64d40f712f7b44fde96aa7474d0ca457cdc3d92f82dd6ebd12d5c5ce136d39ac479d5a6bdd9e524a7f524a511c0a45b9bab9bb3b1d83be68469dd638ea48f1432f2c7d2d71a132073b5fca7985addc2ae607cbb3f2f19740bac51fb5bcbb92189aa669dddd7372946abd9db49687b354a2de104e4cf817d9ddfe32f438c34ba0c7f6dbf26590e20c728676c94d4a39438ffe129061864dca3043a6b7480351d22295647b3b2a0a2b4e38984cac0de244a3c10913273438a14f9d48972edd894883bfa4c1c97439a55b7b72a2eb524731a418ac6929684909e968764414d4046b629a2129215d519a31cd9294664cb324a519d32c4969c6344ba2de0726352d052dc12861f948b33e6aa20e6a5813d34c09e9ca844da2399598664928243b863de167e784993131de5ccd90a13232de5346668627653c49838627c3126accd09919ef393333656468d0f0a61886de143f2213d7a0356a78cf1a35e6ed513e9525ff89e2a2933ee7ac52fefcebb54a26cfad53220aebd19dc6688c52a9d2ae6c8bb0532a944abba43339d3e4428f78d0c91bfa53acff4e29100d45f5a088d58a0a1a9492f522d02bf4d833d9dd4d83146598a18adb2ba051a8a0c1a8d3f3a3525a9fd65742354da328148acb1345e973283a5194a3f50269f5f42469ef5486d90c974e4aa96c8a0d50e762635a56d06234e8d23a4ca19452eaee4e29a594521924309b814ec7ce84a54bd049691b59d9b2654b8c941ae840fb52051443c80285971a70a9a2719e534c9155c4307d207141e2c225c9ea0a261d58f73651fa74dc0cc7b5a417aed21dbe9d5c73eb3d3deef26f3bbda203507764c529c8a26420a43b51d44b4951df77d52c4d8ad5a62675548dd20a54ff4a5fa3fe95be5669e5b8ea954a39d2f70e2871f91182a3c28a1f469d9e1ff4743ad55a2bd7dd40b49f2cde8324f724752982a56c8a2abc20032b1d753b7a74264e7af4a7a147d7a8b013c03bbed89ea82a6cff6cd2bc68158976521989e2cb6ded4852ebffcc5822cb597dad5e4a2badf4ebcddb27117f28a5b226a1274a29a594524a65526081b3a5b44b5d0aa247f6e8b015ca1c8853b23aac8185c10992e7c7591aad35dcb284028a0b346dbb2f775c7c00a67f12ad1c27ade1895777fab527c8ca8e3fc21bacbd53262e4a5c7e80f869ed48f2936496c45a6b93fc2099fd2049f293a4a735fb41ca3f90fcf8a1e4038a0bd97274aa394f15e7ac5ea8e4ce7c984c01dca723ac7ddfed8bd95c89b066e5ced4ae86694f97e4b14c3459b076b4d212a3754a30e801ce32cb630d09065470d6c1dad3d9b31fc57404171a21f7eeee9e220cbc01285830050a2c4a1a96b22962d6b3950636d72a7abebabbbbe79c737ecf396737d742b86e244c342831e99be4a7471a329b3d4c43bbb2547292e5d2ec676584edf96aca210ba6d60e6baded6969995a566821c9792510d91454542145194bb351a7d65abd356e46b6df3d48bbdcdd5df6021e7012a6d0000c0b004b29c410027729ef072c9fa6bacf51a7c8e9f4407a2c72f2d3ed3ef5e9544f9d763ad11e5b30f6e41db8b5cc5f61297b8111388772071608a97a61183a719eeee9132324e077f749f7e03f999977887be983facff61822a95d6c16a197ff32b6ba35a3f424b59a645353aa3ab14e684f4fab358effddad9e9e566b1cffc3b0692564bd2746f65357a67e5a3cb7ccfba1ba26274f88ac4ca0704e99b05851539d21138dec50547e7d5b3430b1d5495353ab4535ea61c9c18a6f73fbf9db2b99f44ffd92ebe7be6b6edec0f3b9e66e91560bac046668d7fc39bd2fac4c8a2e385b39c3066dfdc1a79fc479bea7df59d90395c459f4eb92650abf158e3665bf3f48bb549d0bc663defb7e06b4cb795aec12a4c71e172b1114b672877ed7a24ac87e385b146ac6eaded01e0af5f3233293f85265b2b2297c71891191882b88458200f9e1893ef6b77e0cffca9917b8073f06eec17b831112f0517f430ce05d09590f7728e953bffb24ed9a1333608a0428b594ce285e57e517987e1bb1f4fbf15b29a54f694c3b7d33981c3727b73d0af5f574f3e9398ee338d4cfafdba3de6fe6be72dcd717e694d4eb691ae05017b0f439cf862ae3220877cf7de761d562ceead80936d7a39a840452bb724dd2d25f8f6acd82fb2b12b2c7c4ad7d2c6c376f16f5f41bf554097dafc7cedc916a84fbee66d4733f3f23a83b63a4be30eaeb0ba3ae12ee5614d8fac212db4fc2ce3adba19337d98f30a5f4e977d37b6109e52591ccd7fe4abf30eda694d28d9ea8538d524a29a594524a29a59452ca34625ae97744d3dafd4f7746622818c462e96b7ea411a1ab807de1f9b80367956a3f53eb1330ac693690b4278476604da34a431a287b820a4dfbda546b1fb0e6b58b7aa70f7d6662b841a9bfe82ae0bdb0f6427899b245fa0c08b9e3ef626319134c0dd6b1166a57bf8ce2072ff09cd47e48e4c330af747f3dfa6c94493d74a8ce7c772add1924a8efbebb4fbc3b976e0b392b06e92c0ed53d07c50749f7dc7dc2891f0cf385e983a2dfcd269d41229fb812149f196d467b4ee8c759feeeb316a2375b1a9f85575cc17914923b3ed3823c5325e7e24a4e5f34289dd5a894cc18c97a582244330000000001a315000028140c06040281402c4c4455f5031400107d944c6a4c9bc8835190c33088420a19600c010400000600ccd0d08ca300a504c26e626563e75402612fb1b061672a8101761ef08312f627ea7c7d1d3490bb43440d4d9222fa6e7c16c5a707107144b9c14ee698192bd7ec61700d56f743294fb530e341c8cd3ca79952fd495e4cec85cf9b6b4c3839a63c74211ed181e92e0c1383d025712d2216d82fa8e81609ca847a0bfc03fd0a274b2ad33ff47562d7255b4eb43bd5cea936e7dcb8d352ca988e5b4f7f1bd3991729ffbc44292d4e7443ebd0351389eeb655fd2bd23d6c8c102e1173137863d46b6c78b26abdced94c918e3a1845ead71db2b5b989c7a461391e09f8686ed59383f391dcf234872e756b3911c266bf2389461d49eb6feba1f098f7f3641ef8dcb89f4bb3be2bc446b56555255c741937ec171a5ca300493f6bc863dee709f0ee900918c72cf31041792514d7adff35fe922e7c3bd554da961b37dfce572c6b12ac8e7e660fa381a11a8b557e752dd19e080f74bb2284960b73cd5069df0a5c16700a3032ee6ad67ea586a73b494d2303353b83197cf8f7ea71a758503724270b1e5574b0360d60e05115345532fd601f1065266d6562fd50e51cf567906804e8eb06e5eadecb6ef298a64308a234346a3524b61876f203b0f50361454b6e4c0f1025264752c3802ba91f568c2b43f4949127ea094b995b84701a2b3f57b1326f8f22797e440400fb0399c3cd672563c189fc095c195b8060eb0e8e51a84f58fb6d78f07b191387b0fe29121e1c7827d6db95e5eafe233d5b8c0797e55c5249fe6aed06cc28661f975033e46d78491394a06c54cd5071af0ab297ce8fe7124e99ec4934265fc55a6fc3843594f60d7b2bd9d134970efedf0f2fd5c10d9f0ddf5299d60141b611264d0a7422e435ca826428be5012b8d04add3bd44ca2ed17525a3a101416a71869db0c0bfc222ec0d909e1d717bbef8bb0ec46a44ae77a08aa5933401fd45dc050a712b30af78f60d27f2e67c3436089520b15104995f44e60602b794f110ea0a24417a85045301c0c2ac5e17c4778c592fb711e4f385e1c4216ac60944ba20ded377d42ab26cf900e5aad2acf21e83fc219848cbd363f37ec299e02832ba584d3a67c0c54d23be6cb705aa187aac271848160917eeb1ad54768beb46a40dafc8b4a027ea07d919362fe4be58b89cbad82310cbeeb68dc5b8d99adc84e45d90802a3d30382680e02c93e88370f56cff826971fc64d6cf7d141ef6e21877a221fdfb0c973e82d8e216c179ae2cdd7791dbbed82eda4dbc4fb62e1a4d86f8280b7a0fa0f178504d975625b2807ef4072c77e9ba3cb2982423c42cd99ca8d098d1b718d998c6e4f2f6a379e40a3c6068fbef1450a1203656ba5e8b2bbfebad3e7e380cb0a7c64193e7cac2384d42ec8b55b78714efa79cc938d2dc885e44643314088edf60243a56e884e4957948e033e94a3736147d3a84ab1f2507619d22f45c340fa906ba9b0dcb9214c691e1b683f02d362f1c816b809882f981e2142e17f495fbad3b8d6ffa17e0b2684684ceba52fc9d982201f6fc308318da464175147801c7fe206584afd3cd6f2b4dae38b697c2f0541b80731109d5db016648b2bd5e8311c0dfd76e425344a7ee262fae91eabe358b846fe00487159186834def53e214fa7dd35747f15cda8915df651f274ed5643f7aad08c1adb659fd468550d2977981de2befed0153c9dbad1b03d472c934675c987b2d83443491da586d6173ff48147e72e34be8f312d5a03c48ee41f2a70bff6061e19fc214fb1eacf21d0e9924f63302806103a4861a8c0fdecdb671d4cbc53d46ba67ac07b14f5d127f9082fa97fa9e7e06b15157ee61082b303f0c690cd473b8c745f73fe66d2b57b6ac4c5e8cd86ba9e495b031a8c2aec9f0ab38f50069dbdd5f87e80de757ca344c1d422288ab7c89d686079f190c78dda70455334c7bbc63e0f735a5d391d3d17e1bdeb7e99532e177eca172d8b5168f62e95129e273b23a44de8ea8ad2e8988c3e9945a36c54dbc05ef85be46b12deefbbafad127d7dde8cd7389351d245adcaeca2bb51a9264d46a529ca369597e7cd7a4d8af7e3c54186ca3eb3e253b81a9873fe1aed03d4c0547cab9082589a605413601424ace591db7e73167c4f7f4565eb899b0674024ef095ef8a6801025bcbda0ea78c482d7852a7e7a088c8ad83232a6708ca8d87505d2101ce2324cfef1d60b485e89b159183116342bcfc231857ce7e3959766cb22b4c0b33668e2d89757930f22d438d2561e7218a658f2141ad66d481807136f403da805dd7a88bfc4c80b14ec8d0bf98b2cf94e6ff4bf0d87e5fcff5a397961fc386e14f87fa609a920ed45bec270c28ead46eceb5437db2a1427202b65b4de7f2da96d233a9e28cadbf255cea55578f179c8f24755ff85c7756fa02422257cf784a966bfd4ef55e3a50026509ec17f75f3c61a009184d83dd822bf6b6099e9a0682d262ad6e4ee8a69e12d706ec2e36e3521ae1a2b0624a2868abeb830ede36b660b234d9e01ad36c43dad9aadf745ce73508ff54614ac5b8532bc7133b3fcf647780ce79607405bb5daf4593374a347c4c50c6d2cebd95512318da83c75cd137293c70870aeee2277d0189a27a8977532e96eabc511010488f8a23f94f7741f5a02e46f2370d778e4d84b6fb20c3f96363a10aa032264ee299b84c2346f360b724ff05438141ad54fcdbf6b69862be84add223c0a6419106c4b0f851a2115ef95e49730fea2b070f450fad5630b55d444a7fa79ea1925fdab1267b74c9f1dd60492dffd0658ff0070cd5cba692f9b6bbcf7a2f3df1cf922742ea6c21e16a45ad56d260a8a26a0fbe4b114775d3c113a5877c79af0198983936c0979c5268129d8751ed454560d4f04aa772a88924c9813b8d59588b2dea4bbebe0857946ba0a71818c8bbca745ba9c5815837ebe9ff66c266366db691d2dc3c2283dd8a19f8de720186f758f591150da4aba947b5a23a50dd6023ae44703949ed94251ce003a2bd45b741e721d4273196c879604654f0b2f6021fe0a45fae8cfd792a3a110d82390039c3f339d6380b5061d7eae67cf62376da042e8e53f650693f8361fb90b8f239f314f35892bd11f087722e83d72b218e1f50ebf825adadb3aeb52af97542154094376e21321b511b7cbd9835153b3534d811498fd78d2bec4fb03f521dc589ad888cb1ba22cec2089670a9835d9bfdde4ad71e5f50f10a0cccaabce726bc7f8065311e8ae8e33330c94a8ea739081fe943067080805cb29ec3b29b75e6b3c83a88cf23a3d3f884a831f4294d15205b0e2c90971b4e977ea3c98c4aeedcb40fbfa96af4a8b35e4a4550196870c2058845686f181b01995de534022f48af64200e9aa0143598b738c6c860e530f01fbd49ce2f9ef3018eea88abe563724d473fdbc2cad2746be0fb5dcb8f86013457d4b1c925f2f8f46b180823707117186bfa01064146e651bf39126dc69ba279456207a24523a75f2a962a56ae110e899aa78e5e60805fdfac44ef50dfd66f7250f2ab6781ab7519647ea7b87dfd0bef3045dcdf116625ddb40da07c30c0fb976b715b4cd684fa08e70bccbb5e8527142723003828e1c4324c751c7a58eaf1120a58a324f3d7059a20d4f42348d0db2158df9003b215fe8cf5282532ebaf283a13d88ca52f5e6c3d8d72911454bd4b54f69caae46140e1242782c460057c0004c98585ee85d00ebbd3ba4db2a6cbe7d214064f19e0cddf1479189e4513c9c1e15792cf09fe61d202ea9d3d3b3990019b9fbc807e2782f024acdf215e1f4221beb8fe52686a93678d307abba38e929193777a04634a756cbfec8b205542c812bbf0396905180311db894f7c616b306ee0438bc725034eeafd3b9fb84d73d407870d8cd2dde287ece8637e4a6601680ac5e9d27276e68290dd730559a9ec9d89303556b87e236dc94cf6c61420cd6c5631733fa4bdb4a7e1f37297bf432abca7ca5e60886517454b2aeb66983be7938502c622fe82b330cbc27f3fe37e5144e21ea2abcbd52839b2caf9233ac106b858b9bfec374553b89d4d3f63a09fcfda5379ccd4e1463468c5e4057041666938a086555bd72a47b3fcb7633889890b4552f28dc3051b3cd037019729919458860e70918ea59e28e85a83766c1348cfcb8da5f88a263771140ee816f836c860a5a75bb3e75d4da6dfaf81f84cf1ab00f9484a05548af38f63f6fd828b7720ad030ce02c951b4433942f63078a14dcce1bd890c42770ac56d974298ca23734cb102709527efb0651507ed4bffb3d05dd35a58f5364531e24628682eb09af546b0f511a67e026b7accf722dcbb3a8109c9d1d2098e55b2d773c6f05b63bfafc28fe2b13195cb84a8ec95f0d7d0dd4d02be6d5538d3a4111ef1a351a0afedc5775b6662343edb5470b86961b7bf4aaadf111391c5ae8ea2ac02306a6474dccf342808f8522dbbe926c9dbe4026d26ae76ddde6a1bb38cf0f3c7cd798c404c7ccda423916d41f4e477c8ace91bd57c61145dabbb12cd23e6db3531004b7c5f0bba97677e47f253c9dd9d42158ae9ec771df694376fcb42c455cd046e20b16beb777b3f74399f1220ea5faac5cc1077e248aa675cbee06131267859d6eb70679b10c41c66465493a2d25f17bbeece4e7c92ee6a4357408d536ff6e8d4c2e92727d37d72865bd15fdd7700566ea686372c6891940c4c3709e1307e18f1e546b5314b9052d053a322e64fc08d2c0e74725e5fd7989d25237ee25c2e2fbd3a23f8ec4e8c54d37f02a9511cb7974cf36ab84c45c4329ee159ed5b423cc24abaeb7d83a02ade563a44f147d184f2f5ea5ad2ab83b377f38c363ef7d498a25b22249a761629232095e8f56333203dc1bc0b5273511d84ba4b9ccb215b58cac04045038fccf1f7d24b4d86556a7a43cfe953f2d2fbefd3171aa23000a309531eab5734285838ee1180db592bfd736db840736c96aa22c458ecd96564da7f80a07cb405fe7051c6ccd58d2bc1d5eaac34efdf0caff665621a7500d50f7af5f6ed102a8ec92d93620b2d8237a1c174d13e3092e065e423d82a3a18acccfc542e2878d9224177d99f7fb799a129c2afc5f3a73ce446c391b82715a1a5b2ed6a9b4a34f391ed6ce298a2ab23fdbfa2db3a12ed9586e48a12883611ec1df4caa4fc9adc4ee827e7e43e461bec6f8181b3a01e6aba5252a3e10d28e38dc617b93ac5da9492f796f7643d25c779b08610c4f06379391c9b99beb37f5a7c3adde759361172cf3be2069aed42069b4b78364b27cd2443ccc953afb91717552f3b309ed6949d894161646094b550b86474d34986c21a2266afbd0bcf774c8ae5b99f61ca28440ec7773f7123040197b62da2bd1b3f382afd48c0a1a4408f220f71c99cf8a0ab7e36a8ed6be5c879ac32fd093bb46ee01d6ebc4562491a54b6e7426b5dc1c1241848728e48ee0ebc879c1277168c66f627ace999017cab67e1077b01e00a692bde5741789d355a3f300af214b876c2821a05630404428e1cd32e12010e2f0bc9b4c0442860ffcf8a0c8007d1ba18dcf6f05e6f592e770fc832965696c68d86d9e0fe2b141940dea5018ffb1417f75ab9d7934452dc0757ad5b5195c8db958b624ec29fc2670fd65e45e9d42fa9a89d41c0c032c1180ae99a16690284f444d57453270734050542bd5447ae5163de10ef27e9b8f921fe54329def1c1ffdac2d62065b7cca7b4e7dced49ccdbf26598040ad19432eddfbb2e2a57d9a7907ae86d402f24ff633cc2d7adc3e5c06009c99548d20080848983128cd3fe8c340976bd084f8d3d49631f88d89f5b4d52a4270f73677aec397daca084baa4969a56b7165d0c752330f2b7e6c3a35c9b3b2b98346cda5208b988fdcc29a7701713b7584168e3786b85da4c17394f618e0c403f0f7f5bb5f8708eee8c173401954afcfb52401e40de1f4a079062e423759446b8302cfca988c9ed35f00e614f2bc5301a67abba27e3535319a36999707b0ab49fb73d5be1a6c864737da2323dde43afc8e20c355df332f48692e712ca90ca62212eba0d14de010da4436f699902b1845aa8ca4e6b97230ea6669a1453b22ad8608ec8fbbf2de25789d9ef2ca3197adc79e8ff229dc695fb4677b117421262d02cdae1c181ccd7eed258aa81e09cbb94bc39df221a784a60b852915d7f484fccb6147ea70ca372a4ab9c75d080e84d2d302f012e6d5ce7955adb23e7b41dcb955ca959dbb41bc073d4f7f7314758c8c0346243c6c9786e8f903d63ea99b5cb1e83a92c08b0951717484e25b47b6ad4b433c69ffc79ec1f6a3e8d26625a61629b21e82d0a5dfd922a554314c4aff1960af7ea84d4c5c87aedbf315cf248ac0adccbe2c28467e662470c08e75fab31610d4195a90e699bd35d37fc381bb4b0851942a2dd69af54a30260460e18747ec6f82552f23da028d2df7112288ac428746e5d4b846fa3209c2524c2d64ae2e4a0955944468919a874798d92a3b708496c27cbec438d43b4d8a3ff31e71f2c15a105454071204a04bf831c70e1435c162a2d0bffc8311b5afb48f9121280e681e62829c47db1f00d341f84a2f45b320259169205b6dbb4dbdad50cccf04ba5d90cae50f2cc43bff7c9ca7509d0820ea05d48b8c2f583f5acf5340edaa3e09b8f7cbef89bc07b973c9d7a7a66d4ff51d32a02c0e00911a5114d4fdc61ac9f25c8263113ad6a67f164a7e1ab967b25262194433b2b918a18c3dfb8117c24185b065a46a3dce22526f45427313848633bd9a8d0af7231e485b51dba82f9b36df422ce55d26c438958e926714c05d4cdc21adf6e9b93347358c65920b04760270d51038fcb8ee8e3432d2a06fb4fffe05e4d92463bfa36a920fec9793af3aad38568bcbf7830f62fa07668a9945dd5e9789056d976288b6e65e40997aef771101651e7857f6e3dcd7f9282f8603eda9622a87d5d123e9747cdbff4287dc0e53a4c75fabfe52e4143f82db015c6892bc618b91e20b7597638f93a2726186a73de19818c53c02e49380c8c3a30efc48369b3a617f1c74a5e9faada8f5e4fd74127f8b301116f92a9138cf8b628558505620a2fb1416a940c0ef53a4e0bed3f73dac1be27759478a3385353b9042dce209aa82a31a25f491c1653c00d2d44e8ffbabdded7704edee1b6783627e113e2e13984c03878ab2ce0532d71fca742625b5f62e5229640db5af45fe24a9a28c0db169c16abe7e6a19208945cfbbf9722a00f99a0509517d8f1a140057963864aa202c43b5904e01d44b34295b5a34f2a866814601bf32cc652758c24deb4e649f044776ec164869422bf828118ea1c07a15084ca8dfff12c1fc41f623e3b8614560e0bef4e3e903252716ac6bee999dd67efb2b415fd716fd3feb187ed27c5e2d7581beba62c32276eecf8528eb04c3ae98f77641da008421e99caa6f21f98a72bc00948ff8c054ac443a01d03f46e2299e178eec6264020ae475e37bcbad0660f6831d0a525bffcf2444cbc9929d24018ad414776fb19f766b442c9d11cce9a85f8f9071544995428dfdd238541ae2c3570b26ec62225bf59722f327a8b0ba148b0b4155225a12cf181f3d0f06348c524d619d4630648e438510e6b17195b0c278c68abcfa30a22a31813b743b9e40d814951427d9f9cad3a6b710677106114aaa4b0dcfd114b3a78c4cb438a696646554e917da575a7b5d4655a715b20e0323555607562ce8896e87b3ca6e4567674cfb06e6d7aea703d3dcdc44f4a1e124b8d8ac5954aff2fa50256ab9dadf4b908c2788e549abaa9fbf0ac8b51f2c994a7b05745894127fd33d13d319e37950509aa50e9fb47de24ca004a7a865d01dfa05f49b7ce6c242ec019e64c028acf576179c77231ec3ec7cd93fac78df808462072759d91a703d07ea951a9dd393d1951c4b320218536439fea251ef3448976f857316fd0be2ae56905e837d46ed6b4f4c9ba1d82cb6ed4c4231463231a05db6829ebea29be54e283a8f4ae0a3d682b5679545cff3950930fbdd4eb13a51998b00378274547e2d66d8ec6867f64fb302e831ce2251bfca9ee069ec1f72336a469130988dab4a5cee90f8168315a4b136a85fab685992d0658eb106c230ba702add2e29b1efa514a1fdd2ceebce8efd2bc514f4fd22f42156e514b12604180ed0151c6fec621d4a945982e4cb31ec1643b2bd6a6bf050c3e019ee52458a53d815ad21df5f105108c010b45b0c5f93f727f03bb26d0890dc6b462c2ff1d98f8a0bce09eb3a3c89da029b37da05daefd4bfd2eedd13535a31aae91c92ea7171fbcb7300764d9cd7d3f77367a76b0c9e7939ca5f14bd300a3230b7f8fe29459431e4138986c132e0d82a8fb1ca2745f0a8aab8f1a642cf5bc02d39889199e030eeaabceb58eb9b90ed82a84ba8840d7242b9aca0da5415cc6f5019841f00a1d192940dd9e1fa14670886cf038c58bdfea9ab19895104e8571b07dd15995e65b22f946eb0218dde28aa37da9be2f9ba8e1827204d3dbd6376f62914549f131640adc6b8cb778e1626be48bb7f8f08959803dbe97550f199407cbca9855af3ec8a0503cc3cfa71a38470010218fb31fd96e71a7faf4db69a16037e7c69805144a23059ce1206904943f0a3b598c7f6a7c8bf7836b406710581f0836961c17a9ae5d3c623b879cd64d08004823e98f9a83e88e633d38740473d4679d944847d6bcd7f13c7e00ce8e816f33b4929ba5aa63df1eca20f8f65223b88ee033cfb0881c78bbf394ba9da872cf84eb1fa2a1201163a6c4632b9d3cfe541dd2958140350e9f7a3a473a658276f2e6c56d4e9850378292721f09c9351a4e76acae8daf862cb3e1b88f89b10d7d160a4581101e7ffd9822aad43801b1509bb8f103144b6fc2041370c3e0f6863d7e246be1bbadffa9fd80bd2b07c91b55784810226e66ab7093c0c4ed3000942640bbd175c48154ca634fb731a5fc07462da6302e1cc4f4a63490b7a1c00e2cb602c1f7a0c021255af51e3a6f625bdee96eafa07481e319fb4c442e5d449e0705eea0466d622673fb81ea31f74cc79749bc7f27674f27a49d3d30498d648e674be4858bc2162c235543951450807e037ac56a9ae0af0e113a78a71891a5111a0d13153b8fa27185f972a2c5bd6991444f45bea9130bb8ed6d8f042e5a6ca106098e8a1e57130978d251575055c7bee7bd8cca0e8a6da61b40e33961c47de59b4f955cfc229cfab460cd59c268295c68ce1a0911218eb2f9583119b08e0a2d277f3f9f96ccebe3e2a2a3d5a5d56c161dd1aba7580d8ccee733acd599df5423ac59e404be561c01009ea0173c40f4c41f2a1bf7cb7fb8c9e185d5852105e9fc381004538097786238044deb67dc8d027565a978f03abd634aed742fe0c0277ff83c6017270528a3f4c70d71088b096031de4f864d65e1d8649dbd19fce194423e0724204c3634567599ce667d60b908c4e0e71adcc903244ac3ceb08847aaf7325bb62b52fd9eb85641bbf51eb26a6a28c125ae5612b91b95511a27536e1843aaa83cca812cf025c28e84ebc340d4a2525065d69a4492afa72efad879d2b26a9d648ec27a0102bccf218aa72ef128ab9319f38154389da67addf3f0a293351baae80d14f4594d68845139fa02659d6a7401964c5de2c42ae90a406ed9421eb7d427eeb92fc0398b1304bd56b29454dda357e66f13038965eff9e1adebc5caa30572622102a58d50ee65ab68ec64343a57da1eb79a4289fe9cef02738d852bc82c2c5f444896804f9dcb65c4cf786928faf8790937b11750453251a1f22629204bdcd7a2f01dbc88de9b06b32110828c2adf707180eb7330fe4110aac623fcba3878264e8b0b8005dc421f04f2f359ba99b7b7c6f22be231c8ba1b42495968071c460062b8b0bafb6d5eb3577ce07686c583ff7883a99388ba057eb56ef51dae63d3bbb8d3099cf817e302b5e3af714d64e3fb141dfa62ce08d46cac6b6540f4bbc3dd0a305f761f10f5dafd01b9ebdce7e3049c55bbe9dba67325402ee84d77899588747b16412546912b89f464f23ec43d10ebc3e2df331c9c8ade2a6fe8332e9d856abfea173f3a149efe2705ad59366be18b94c3a3143c008a81442072ebadfe08da91f715eba6b2094990d804c96c2e0d36fc1894a1786eca927e2ce0bcde528cdb23d0ab3eb008e66a7d9985c06b7c020081d0150dda32ca33f8001fb8f01f1f03bf71854bbc403753463e888207385568013246501a6ec00269cd69a76a2ae4a7c5aa4d86ae3c3e25772f81fbca52ca39e703de19b4dc7b8e3d9cfaebe5b92d231694b7430ec8b1fada2aec737db9119081f6fe8cddd73b089b957586483829406e8aa82040e047f1171d43ed8eed9804b247681a909cc992eb440716195ffe0d85089b4892d8be6e1f1975a29a85089031d324e09a04a85bd84d6078fbf72abbdc44c931982ec635575374a1ea90ceb8bacc4a99b52c8aec9cd673c7305e6d1324bc782f88f1419d1ec1d5d6bd65bae3c1019235bab2ba4e8a53ba71007b98ae2c03aa219a07ff011a3aadf18990be58dfa1dd7b10e914aed68dca0939131f778e40b7267c853b660a6131408466c887f2681c5970ba9ed5fad400d85bce66a93c1164fa7e7071c7e2b8a56c5ec4f732237d7712e3197a04ae0a7a052e4792915846fa1fc9e227def7fc129c5e25d5f44694667fb26379446e2c861dceb59ae64220958f030f0288fec5fbc6f21c61d06105b99d491a67da63cb497806946b96deea686d43029cb0be4ea0c2d5cabc1f7acff3651079379efbac39771a7d4d30f37ff0b9d93917e936d68605bd02e9f5d6986b6e95b1596e020bad9d35a7fc8bd7c4fbce912d1e2cdf0c6565c9c0b007b08b4d0bab1c05332068980b18c58f5d2d6da0dbc7f6bd6ac50309d19b533c4200db41bc4b4322c78c3a5791d876df736549ce78775ef7f39de858e7c77453d05cd633afd2065c17d9c43bb5443e0ea972146438380d8e5a012553289f1f2a0be88a06f6495542a15725a7c6b912c760b421c12c7e51078216cd2d492d3c8e64b18e337a509f3247346ead22c3842b21138262d0333a49ce523c27bd4226c1df987408c44daad7e4fcaaac4a697f0e1f1ee9c2f13c56bbc4c18d843e0b1189feeb2c0b372a6e1ab280a0e71c83f1275e3aed7f1c9fe8d6109f09ecacffbb90920371b34064d6b4e83d1276f28ae26dd84b5929f73286de78526afbcffdc054677b4e1c5dd95ed55150eb7a4dd86fc07059c33e68c49c0cd9ff52026b73d1148f9a4188f5c47765e958de5744dc60a86fcc4c473112d88e1c21241455b82931b0380027049e081132d4bf8b8f400898e3214dff40126de90020c5359e6ad00d1a72c178553683369e1aad0ab17c268a42d9bb2b9a56277ce2f74ef3cf45b6d43a287f56217083b9f0597a7b6b01f6777ba880aa691958298926e7854d6d677d4acd0a7da9d6406467662b6de1b650a15cdc329d71739ff97fcfede928e724f312ee0bd8ff109f16552362161fcc3926e505b461f6e940ce4725692fe6c2bc36c6cedc3fa78d0620e3d764707720f251fa68e9c44120a6dd619df6d119829c8a1b33e0748b11de2d091f95108e7c94a7e11dbc67287bf5ed96bda30021c91dba0572b47c4000f00d5091f0149084738289e1a302cff86e061a18ccaa4e086f0e826361b692c0874f430b618d07e52f7217603e8a7d37051566572de545b476953036500f41ccbf7538a34c6b3c7a516a71fd366cb1f14296d803f460bd844b663e86dcdcc9a37eb19c28a8057d3ce47638cbacf193047e125915009aed22ed91708b1bb5445744ef454b3e228988f1b52fe3f9d107bc298e1e584a02681bb146c70685cec65c96ac65b7cc74afb807b7f7a1c42326abedfb41e3cf3a0d6761f27153d6503e8e7e965d2d593c3c5391b197ed44d58518a152a0439c7641c8e7c134d4840d23047a6dfb8a48118ea283b296c7548857946a408bfe149fd0be2d10981b08b52a1df43d8464b4ac67d3d45f4cecede46e250a3a5cc4e3d9116c84222135937be10b73260ec88ff70b251843c1d64a4a11af821cf1587009bcd29f42c9d3b785990aa7f2cc0fc5516aeab4dbef09fc8fa71e9949f7c9152984b839ca8b3810307834f4b1e1d7e7e81c0b3a0f308721dbcc2d0119c3bcbe8151a4d3b6879b42fa5d235297bbf15dc76f4b0ba7c71068c0579faf03f42d5fab85f14d6c4679a2b55657475fa681dc3401f9d26f134350b3d776cbcf9743ccb838b0710910cb6a5b82a5a433ee5ff718236dc1b958bb4bf662329e3591403383706e3aaad23bcc4bcdb34dd5cec2d6ec1e806d4ee5cad5f47c2416119f18b1b8dddc23e1da644cc301b2bc403b291625576c85ca20c507dfa0404022c66e487292670b0429791cd6bb40da64011ec1b68e604b5cab3f2fc9213ffbe037029cc18d86c21ed614fcc3ea41154437ea176678362b8ef9d8e4b21c3a8e46f53e3c9edd10edeb298dca7cfc833135b374922282c2e45cb61b83b3c59a4b62986b585c41b36cfaecf901d14c9216dc3b7810cdca7dd36dca65378c5439a0bbd87dd9b846c995a913d60852c618f236b71a98af101870552c6038e99a69298617a67a9af4f71ef742b500dacde0f5828e498a8632200cd554bec1e59e14d3a43610a4e10ee995c4a892a1cb535742190f70a874f3331d2cdcd86f9b0336d80522dd042c91afba679c423d4890cde62238cfa895fb9e2420972e027b23b408f27e03947f516dcd936881c856e1f61a4c7c0948767e2fd7be6be53c776fb4f07350585d560fdf813ecc3c28b48f421fb642973109b41f50399df1820d328e7fde2a5f06b9d41fc72d359ed48bdcc31363beee43e9c03f66cbe9f1cb69a11728bd6e52e03bdf267dbfedace922a61534b8cecb2bdb228d32d338392282a53ed4bafe17e5a7a1ba344bf2b13673ae84e81e3b74b12ed6ac34f26021c1cd14d648962a8a92118882a4a7f1f3460743ad327485b75b4b1246b69eff48eeecd0217c7e0610a7eda0d7b5434938a068172e48e3c4d089b41cf20bc65d99c4e359e3eb61d3f01d8ded86eb556e825e3db6a5ead0117c586e22c2d23bb08742f9e54356d840e01552a7aba52ac139570e6cc8bdfba457bdfbd9a465aeb293f233a91a1357f6792f95b71dfa5ca0e4f5e2e7b222a71fcd57c84961bad86d307a1d301f12c467b76db27c6c05111db5e80f6a8fd83a82f0a9e4cac7ee23ab04822aa315404cd083b562de2ebb3468e30d013c114113e3f0ae3cc92f4095210e934ad25c6aba8415036e75a81a3bcb89a11245ff08015e48cdf6a10936646f9bc299b5a88211978bb90751cce09cf6b35cbaaba47543d4a16c8f7b4cde76cb6d1f967911ac575bce1ca75c49cdd3dc9d060219683c34d0ef9e65df1165a7ec22ea4b91b80a910743ca87d7818a1a055218e8d66c2374f4de9512015f37bbb8804ac1a81598877f762258ee9990a22fa93d4177e8605675f53da28da8cfd0caa050b8eb7bdcbd8d3565daa8cd93333d86b243152b6e0b29270e2df179ef42cc0117cb77999323a7f3c51cc2309bca00d78b2431248192e90fed983dbdafe4e07e8ff266f108188a968d437e03c008234f1145cacb01a39b025bb7ce7651ec3975cf9db8336e00fb6b711d290153f835b04c232b907fcb697ccf0eaaeac62763afc01795275c81c7821898d31e87ec91782a47409ab5be8315e6f1977fbe9c0f44af41aeb2f008105d279ba9406730063d0a227ba163ac6b2a2427eaf76cbe8a2e89f022a1afc4a679e00f92a88642a368cc85541388c5f77b0a763241bfee43c05742ac2113aa8dc58d2486fda87a35be795b094e97f7a5d660b73a8c63ddedd56132fe8880101db700b93fee7a35bbf54eac81bb5cb6ff72f43c602dc9a9fd941c82901222fc430970ce3a5c94abd0a4984bb84a3968574325f35511192a94ea859cb5ac680fa1d047c2990d6d857a0be968d04dba49a42f1692345fb02af73d217a0f9d2847c599396a8fd34ace4fa7bbcdddb3347f264c087200758e39624e71ec8c49020bfd424eb067505a68365819584638f77e3aae05f000c4e3f13b9f8d270539ed3ef800d9c7d519436bc1634ef8c3d0426b7f598ee33a38cd049d1e24ea4bd9dec444a23709a36c15a809921bd00aaec888d05a53e022465773ce9a7e78d22b6c96ec004072020d6e730b7d337cefd4f4ce83d3bf93f5fb13cfe34efed91d30a7585f08f74dacbebd0ea29691524049ce1af9c6e3e024f620ff481ee6d4dc4bcc62c4d0077c3d20776dc0ca4a609ace480a4a4571f7ba33426788824fabc6e00d4da134abe78db0831138b55f8e72b4975a0dcffcd14caf377b2126c1de1e026cb4ecd227681a969f1101d2b137505074909454d1ffebb8193afba6e9062e4ed81fb0a88400db95ea5f83cb4f6aae385561cc5150982f9a8540fc92952310f1fa2dd7e0607f70764e7e05a238e58c2c80d3327c36994c70682fd4b3af2ddeb047222223790a23faf65afd5a95584efd8f8ca68f7dc1c23ea2cbe1d0de7aca3b6f648003bec21cc1cf1176fae4a6abd897ac5590dbec88f27768ef703c68b4778b56662f36e4d7129c335355f2652769d7835232b46b8961d1cd6b4053122c57b7b62351d117ef45d249899da72453dc924601c77a687559bd1493c0913ba6a4f7ba215519db114c9b425c70686f840c58b81e212010fd8362bcb110edea1f8b7c2fa41a0395cc5c831800a94dc1620f4bcb95993c0eed2d5d5a0ca96dc6bad46e87f65619dc354b1f4a9d1effef4ffc6d3417d162e0caadc6fad76c593bd7fdaecb9d535851d8b55025ff5287f6b28cca5dd114ddcbc9a2bde4bab3779c477bcf30f5ddd96b5a3266ef95d84951640c5ad6170cbdbdaf2fbe262d3584e150dc8179fb18fba6a1d9dbbfe39499bde41d2dfdcdde6bbda231f0efcd5eebb94eaea262889244674233ae2b351865d226d3840e4739a900d60f854960fb7236624eda2bb536b7a7799ed32edb8136535b9abe2e70eef6b297b9029dd474556a85fdee6fa997bddac6a2601bcccfa8a87f73878f42c1441a9e32806276d77c914a27a49bdbdce1f57da7d18b089470240dd4d0fd93d5d547f1d71c6dda9a4e22ea4e2b7d8c91b1eb24487bb9010a5c2095991768c9338557ec037c51bac72358035cc3b4f363e5d80ef0a9ff5ec0a61106981ec6a6ed82b8a5615fdb3eedd3d2bcce44b08d69b7888ab4124f8dab4ab48631589587abe909eb9a3fcdf60cd4d568049a8cb4a768b0431005598d66ae54652a36f50b6af982482c1d4fd09f99f485c2e72a3871c4689aa81968c8cc2f7ff6c6fe9fa312aa693e059444a30aae3ae7530c3435b78ebc5c026e17da4626ef147b4423d56e6b794774b7c1b566c144c5cfde31340c61a698403baf28e899359fcbd8b5a7098e5ffef91a8d5b8e539d8896ab687be194a8a8912626058761e9ee54abbfcf07a46f52567ac3e24b2736116d5b9d1dfc7718ba3c522c7b4e7d01eca477fd71b56c2d3409588cf15e5a6928c29e709f8240570d334dff6fd6b2c0c124cdf0aff23cafc7e89eb40cc61fe94240cc6e5e890e0366638422d28b2cbd01f870e51832891fa042748d1e6743130e8a00927c41e117c75d4bb5828013428ef575fc6843add51bc717f18de2e3fbeb703057beaa594e09d61ab26886c7632c25819ba31b637513c5ea3351a31c1c439a8cb7030cd733191854beb4441cef40aa51c9e498c74efd074ee5aa3117a1b3d85843140568b4c223e864ad547b0c1f7ba5d911904745121c616a3c816de5a3df54e6d4587b4898967446086b2bbb5a321a119429476516b70b8693f9ce347369147b7a2c562822e777b9cb4fc30a680050ee4940904cf2fe5f6e5e455e7b0e3d89a657ca18061c071e4263f831222a0b1b9abb4e2ce843a4e0ad22098b80d2cf6931df9d1c07fb46da191ed9ff640e5102b1a79c3c0e0f8647268cfcb291247d5a711fa2b25e93c1d20f4e3dad9d6510d4f03ea511f06da1074dee35ab26e0c4b726b71bd49e9205772998b1dd0257e548b1b549fa7e205ea05e33118414d31e8bac5eb215eaee44e12563efb5b24f621ab3786e596d59488508a4fc62d452efb1c64e124378b20241ccca8e6038b17be6c06af1afd3f2f1c1aa7112248c38a5982920b565b6f4518121c3db14567665d52afd4a20a9ab402e0cb80858bf532d526464a496bbeb4ba3dfa68ee97259df885e60af3c2f6eedbfb694e4f3b326b7ea6ecf8ca161f9234b6e55691367934ee84801c054f2c9832f87a1803a8aa1750a716217eabf07c5b3831869379db3d288f94a6d1bf4307c7e9d983a07ad1b74b402dac2fec0bc7fa6dbd327a78ff8c9295cb167c005886d08cdc7584bc378c7233a24d274de732fa29c96a22e25b4e80c34d612e51701910537d4542c1e73f0f3606bd7f48bec5b2e6b7295220bb7717d91e42da78b5f8fc5ca15d7ff9519ff9147f525351698db2fdf401306d7ff50f9014abcb3d7cfecf4fab95f8a50bc1fbbea8dea6bdad2b2c6fdc20fc9b1dd8e682955884a071b47c91c8a10ba39eeb82ddecf5db5492a71c73da45cafd5cd021322f7c8d45676fc4ff9eb35a9b053ed28355480ce5f2d6c8caefd3e0a0480a1b5ce25f974f9205c228b2abe428c3cfd638899597ca6c5fb8704dcaedb2099360e35ed04a40c2d8c6bd218e5f19d3a05b87c05ed0ed66b84f982fba394bd861440db4421e0fb3d4e9fe8c4fdac374a739a554e09bb8aaa5955e147fffcefadeb4d3f813cf40f839576ae4e40dcd26e9f65e5e6f5edac84e8dc4ed22b9b2dd6c5724bbce1e97a80e6e08a5e7c3a69162c497809ea24a39bcd4ea8ef30929ea9e05ba6345a57d88cbc40be46b9fc028cc639439b5d9d3aa91f5d7fc560322ebd4a716a2d0b3aef15e97cf96b1c8b1ff60d5a3f4cc5cadb8cdad5d92150f15203ffd474071a2343d7ab01711fafde3a5e10253e7e6de312935f8f3e42fcbdb5b99d111dc9730e07952eae1da389950c98c5a12eb84d7f2caf8f7a0d196333ac97b912e0770359f2050561bf27c448fa5420baef481499f01387fe58cb76b83fc11a94538da50ec827fa47ec3c020c3849a1d83dfd7c2121e4bc7435a297450496879e262f8e6cc050e9bff25075cd1b81f58bbcee17dd85c0a08794570f1ea2d8cdf9c79715ad94aa96d18d0af7f8130c6fb583268d6f9e9825beea8242da1f52dbb4cb66e89e51a53b7e58198d3ee3faac9c3f98b79afb625d1c9ee6319f14e7457a9e16e013141b158d544ef14757e3bc26e44e6bdd2bb76d9ebaf181cc6a22a6374496d4873b98925e3533f781fe1dd394dbbc9fbcbd8ab572ca71b871a2855d7b23054b1b78e0856c181a21c8df2bf54128bc049bd569eee896e824d34337e8be2b06ccdbaa1dcacefbf43b5b39b7b143390244b7e55a2b2db3b7a173facef3dcbdfe6ee45ec7537e6547095f07371b61a22b1d00813caab6264133aee04661b382412e906278572aa5ba6512184f5dd968ca85b55e0f80e458b2aff178df10dd6d7b886bec3e46bc6067b0335d6e2a25fcfb80edafd8c444d01b444ca8c10a10005afcbdeba85c33c6b628b3ba17a8f280936f5f44f1104afd93e00baa81fd89b21013294054c8787814de4ed928b961fb39c9bef0e405f99aa0c051bcf1db2e91f756b0a7142b3c670862483c554c5843f2a201476a2b6dd6e8567453da66c7a82a75c82e461da61c6502ac0419de96daabb51e01f008f33f842e24e8796df4aecb1c9651a696434a223554ed95bd4ec1091b80f83eba503f861d5e4127146fff191feea9e7225298e31e0c4ac7f42a3ca2734bbce77ccd4f925b04bbc6296fcb073ea065770caa42555c87ed53f6c596b1936ba0486aa189fedfba71235b379b5eee297561e65ac00fa302a1783ba020a759c14f77049808263215149ebcc2f58a08af1a41cda174ede2a4b871eec4deab5f7a0d2711b346276bd77eb16f37696486f964ae00966940f176a9e1accf2976601b6741b6a2c546263a9a589ba53462970f195a7f3fca57dff77c492ae56f00a6713649e0fcfd2340c2feacced0e7702fb3844d7aefd31c11afcd7476d9d594f1105f6dd80b20eceffe2d075e0e051cf8e931bcf0625a72a84afbb92cec3315cc6da2451351e0920d387b5c04102c5d9f410575f54e3f8906481aeddafb3b4db7178f0649c1960777c5640cc764207e510c870ca62176292a9540bce8bc7b3f7a231ae48db6b90b88021a382a757aec63aa107997e27f9a6a52694887b1ab478021cfb8cdd09cd408303e43eb9e05718e853a0e972364ddfec66825d40fb912bd38f1384364654fc91f02d0a1200fea0eb21c9d942f87d17b6ba5885c904027c20bd82186d45758f35887a9adc37ebb046f5a40544710233bc2a4a1d5f6784a9fa50c12dddc5f19a9aa3c6aad5000d582d294d006066cf6aa1044819f042cf0ce4634b6f397ba5816e92d8a01301147cf42caaf9b50b2042f0310437ba33f28950e3e7326b55a5c23924d4f9fad3d4547224caf82255d28e03d7cd9d5ec1d5ac70428c10af14687853532d0e1988fc55e823819687d1cf5fd4130e59ff4c1d4a87b1e83d07706b8f04d16ff04d2b90c11d1dc222001aa60b912d3d16015419739d51c91c56ff2499cc10480ed8265b06ac0d4a60f3cb26073ae8659421ee310f440deb4c5280e5cb1049c4adeecc1f8a84ea8d977913013737237ffec5605333df4556ee6db6e9e6062541a2476fb67241fa08105d76d4b214cf33955cf1caa20186738b1b1e576d600621f2d4cec17e05ffcab3bc1889cb57c7e974ef17bc6c793e959f4fe04f1c70c1da7a3bd935ef782858fe0a68ac2c588b274ab732a9edda440aadb34ca1b172d25ac22265a4046b955a260c42c1dc9346bdca2ad08fdfb9ae2848631d71ebc04f1248d65edcfdae2e8aa41daa51c87600fa5b93904f4ef8a23aad67382e680f0b9708160867e9c98c3612d216f796ed2f3996d6e8d80f0ce42ea6ee017d652ea0123e352c7257e6e4c653a9a4089da994f4452f12d001309870f3bd75b66c0df5bbbd03952f86ff723f56bde7fd5d66ad36a27708f78581684acc9837860a54157edc83740b277ad99c885da7f0accc0c85e14bd4589c6102a80ab118e3562af5a7ca64f1d8ef1abd9a293f9e0112af07a92d34d94c8622ec13ba3228cfdb5aa4ae62f4928715af2fcfc279b696ef3fd862e80fd2276ba202eb0d8e5e2718c2d76d9c2c3703bf5eb9340debe0222e6bc8acdacc164ed4b49b45a643f5c920d10fd756c35a32efb9cb1ff1206305d15029f1fe12ec9903844d539722a765f02ab19499ff57ca60313afcbbcc73c60ea2ee852dcd8adc8b42443a8cc1ae89508dad69643189d4d9f1069309d165092a99cc987f6ec13b8b96123759f476408d5064f5daefb4b67e0a436f2ea833609bc66b1a035300cc2df790329fec7b538d2005bf02abdf82605a01bf645d6a8eee3ba08c730599c77909000be615cf02a81e7edf91383d8020e40aef39eba92bcc69ead55cc543be40517d9bb7e465dfdc85db483245346eefd4b731cb641b75b7a158727a5210b4dc711a4391bc4b27985e68eea5cbedab3b17016f9218e65c0c9f3a3d73928e65d86aa4086178b25979ab3e4ce02a62128fb65c8f586baa9631a82f3dc4b1562897bc2c989ba755a8373bec89bdf470c3419a86219ae52e7d14ee755a3594cf4552332165033f857ef3cc3d0ef838cf31b154fab0b9e58acfc5338d60714ba40bfd79c542035c17f44a5af092c2ec2a5947dc5ca644c91a1233ba8bbad59458ce9041241bbf43521d8dfa01cb6e22e97e8075cf34ea397434bbd37e25615d04dc8f37469868b229bc048361e26ca6a7fdb204f398d8cccbb825fc3f3c504d34ee2fe2656c8d1284cb4f9e9ad592112acab174a4d9e5d4de053a5d8d18c89e9ec40b9382cfd16d8c11d7b252123aa71892d950926b6a74e8def3b1c995242d42fd4a9ff32e8ab73091c35c29198ba7ce1688db0bf51191cc26684a44b16f88fe300336f6da3503b4858f526228a703f753eff346abea76de94688556156bccfb109f413521fc45b8084744529344fe86f20d3b41cc497ede332d1f2a57d6ce1502d56173dfd800f065326242aae7462d555b23460152fc51770f65bf2e05e6bc63c56c8ee27a4fed2eeb8119d8c6a4754ea4acd1e35fbae0ffe284bc8d467ca81f8599ac90ee0ba3f537b83b8c2702637a6f193ea066f5159ed8f948c4517406de988c97b784e578e7879825bee231b12c85d25b99c68570cc3a5fe5a0eab4cef72b017baaa784c1a8c57b12485be480b7bd019195fa5a67ab3c277797bac7837c9b40d1eb05c3726661415ec4ede9aaa9dc7d46191428f98b7b8f60751da31c766da5ffdd2e23c05d04783c4ef68a711119a7921f3ab15c6d392f48444e3ed993a3b06a606cf7c2143141278841b2265d4878dbcf7935387530c3f7217d72f5e5a56f9ae2a352df4f4f303de226b4f1a49804c9fb8d515c02efd2daedf9f901dfd2dd81602c008994e3a3ab2244b8203245b064562af9e940f0c0106d1220f22a8884db01549cdb6101df747caa6a7261e4ef0f4331530bddd6b013473062f37f02c2b3adad3c88dffaf655961b3dd50b3d72b75850ebd63d3facf4bd8b752da76f40741d88744147842e860e5c6b7de4bee55925e1ed2f679257617182d8dc848416a61809bf0fbec27d67ab21b2271e338ad8b232d2bfee0323296cda6738804b238705b557b5d68f51852d89b47a26c809b8d2e2132c228200faef9fed0e3ee0ddddd2f30d0eda77a1b5d46e71bc41ac243f4f1db89a7ecb5e4cd284e545b411b567d85e5e1221fe44cf9962f8decbae8674ffe54e5537f3aa84cbcd46245209e74cd925c4b56138a7b9e0697950dc3bbacb22af6a0049295a27ab668e128d7b8ac8b65ea6304cd119e778a43bd1b33b88ac5bc96eddf814a54cad878f30c048ae0f2140d0066e9a7a5b7ff9975a51fd9eeeb95e36d74f21f057a9dbb84d5b1700614062fa7e4820a995e131408947ead278cee58e33db72c503b345fe1703b04be94b903ff174811aadc2a51cd042a928ac260903c1cf2c13b67ca170a35e11e57735593a3e3b669899f44951a011a582665378ed36689506365eed4c7d8eb3668ca43368e0a4353666b2f210172acaa064fb6c428a88c057c5d22829bafffa3df00e6c260f1645876bde51d8b5fdbdc3a63bdc933be1bb19129fed414383a1241e5d77c10fee222af4e46fe3d9594e0f647a65ad9d227a1b3be2add588bf5e764fdbc690f4af76771a25e84701f87657a00d083358b07991afab4e5dbb2df3c9e1ea5a7cd208def158b01b603199f8ffd1af8c562dc4a1d2efd3b2f8211d9a45cb1354538de2ca6486f856baae17569d5b1ce85e7d864006b11a5d78b150fa088201857c745519f6841bbd2198d6faef0d3ece02d553b4cbefb364a0b1b1cc4158b0127cf7c0419053e25a0b2e891b94ca41fd6e7a33d0f00e9e4f8d85aae12c8872056c77240cdcd6f15c4b68b0a673cf6fb7198f68a225a3b90cdacab2d19813a686baf9271f8c4b27bff583c3bd19f584469fbb5a277cf565d65a910ea778bc013bdc4d937897da3b66a4feb2e1e4d702037787559ed45924bb9b1d26fed5dab00e5ce880486b5a57a729e9869e59e8fc85a4ca6c0fd5cae89a7dddeb4aa1eefafdf8b931b9d1764e95ead0ded00db1d2285b33fd79b1696adb80d10364c5bbcd4a429864784bd44cc36ec80b70e17e50d63eec95015be6afc8ebab0d80d6e08d11c4c43c346519434e955dec72bb0b41dce4a308deccf701ddbc27523e6dd6d86bd12b08013d8ef4b8bba8c9011a5b4cbfa2b3ee11b5841552d94d6f8c8b065989631db295e2a1fca4a7c025cd9349415ae66c05b14c7fe170aa84b7bab9f13d92f782213ce2241f4b7c6a4750661b96d975ed54facf5d167b50cda3add637099915e6940ab1a0766ad1ad3afc6923471a152b2840b125ae835b64fb08cf58795feb2154ee2ed13844afb4c5d72e1a7982e21560a65e7983b444b8e434d392533590de8a8df96b7b116cc252a2c1f93b5e58d680a7188e7e89640b57f89656ce246f5a78f80efb62fbb805c183029f46f4129690bdbdea824a734d2f9591cfe5d3a9dcbf149e3531fd70f4353cb4dde4c8848d2e293390cdea5432314d2b09f2860eab7ee80bb0eeac43ddf2491c8962d2571a82e8b7b12952359a0e4e626cdf56f6883e43a100eac6ae993b33464876a25002ceed02aba831c04a0c38df7626336b387788c1d508f776e9caf7c3cd9b3a344e9ede93d6ccaf28be883e691cbac8ee68f5027f140c9aa4c4530827a86477d446d90a7e2797b5caed9f487acd7d30914b7bb1f0776ff07aa48c252a0af8929d530bb6da0d032a6e0bea3d0596810725eb27671508085354e59bf58a75eab76d83512b04077db17cc90fbde216ffcd0c81e1fdb0a629b564051ba715488a38513919ab5316e32b807c76c5120cb83f462e47cf38d23b42f0bf70846f2441af6f967c60d1f9a1b273a42a31ffd07f02eca9f75c97449ecec4eb5a0bb8240b143ca76a0b07e5e075d23d114ef96c9dff25b6efd206929623757512a42fea84027cb16644724515859ea13cea69af5841dd3002c391471a0dd8c2faef0fbb5c594c232404ba729fd51cbc3e7aed1cf86290d1164ee12d981369ce5379fc4701befb853e4cccbdbd6f42714cd705667f75504e333e226962cd3ea4e13da8a65a8e739a3447f3dfc9d321e478d066a9ec8c0df4874bf75e2a5c55a7157899c8f2c69c7230ad6e777d1a1208531ca4ed41940e2e14ce3294e3f03dd472eaac5d84cdf4541d2368e8f9334a2d0a8dff142531d68d0bba399a933d4d254a77f225c220a921e46702ea33cef8c68ee05b737f8ede078fb9ece58628619745df7d4f2a34250ee2f821cdd6eb695613e1cf8f1421b31557eb57863d8e38dc17b526dccaa42b37bbf7f538595e522b1c0824db764740633fcf082a4fba47851be798f2192a841bee25a3f7c1e8659ab3e2b37d658e3940c28f3c12791ea8383e50c2e907a9e638dbb22b0029578c7f015d19e7c9f9aa48bdf65bf6e5433534bfba575d6d89fc81cb198383adfc8e70985b526b792691014bf43c95dbc0f007646a1ae469d1596aa252c0a34d655a528af03a231873f7ef30021a99d5c56effd426b86f0c4b1daa1e20168b41e79a5c7f485049abcd38a4336083ebd69d4c33c201724b0253adc1e2cd4ef7f0a3925e346d68bca6e39bd015b405c194cb8fc31e115508e0ea3e734ee1a094478ef59049a17442906462a8fc6b6292bbaeb76f006ddb3462147c2c223ab821dc6948004531f0b558a5e3ce4991ad04d1f03ce89c64812f152152a8552931923ff633e0fa1556f60b33469bc49836a743ceedd93f071cfd1c5556b225a85255bdb62ab1658c30eb40fa7f09a6be1fb013171643ae86614e64c83ed04e80bcefd48a91544a6b9c308ba925a7cd0bfb5f9ff39fb084a51350ec0e698d6979f62bf7f8b04b6ef035d486d9fe750d8820d3543d7cb2ea49cdf96a798d1c79a9e2d760cb6fafd9bd566df56f7dab0667ad736e977684c0bc50f9f55300d6a490d041905addb4e0ce64059b5d825ba04f096691be73085324439f9fe5026c406e4bb21ddc62df2393ed140291220c10da4521201f9c0381ac16d16b19a11f853d5ee1b05ad65a397d4388da19d3557db4a96405172fa1341545cb8e63422bce919b62ee7b419d1c058ba5abbb371b31241271de244d9619f49ed83421cf2cdb8cdc2a1d340cb139ea4b13403c9adbd5a37c460cbb60c1edfc06d8205383e679a09580e9fb328db6972c1cb2a01d41cb8cbb6debb9a256256e96ef89d129ec79df2d1db1f0857b7ce8c2b1329ce1008d043016248b47cc6362b90d1da6e430ed01a82e141d06f0151e7fa868b9a9c75c9eb4a03a17f47e9e1b68d9b800d60515641ecb04e02b065b28d052333508e50124113522049e4fcb0810189a77b06b6dae27d4f39fc02ce96510b8afc8f49a2b6562989bf4807b695ecc915e0ad5e614fdd2313c488d2f065059f71b4c61644ec53b2418c28900c0c8dde1fb765d8cf9eefd29839e85b0d86d8008d7730bcb2ee69529cb0ef9ca6e37643ab68f6f76672c7e1c1084707092bf7e95b4af0da14e1f66d95c2ec8ef161429b140b9127bac999bdedfbe92250536820bc243bda055f212aea561fa8306666218548d0b72fe11489e30d972ed0fb003c0c666aa796ca4aa7cc7f800ea1436a200de25d5e3b5e189cdf78afefcff903a87fecff9d55d88bbd744b890c9d85feb1c0a5f78f85dc92a340e491a12999b65e0d234f2e3f305148f4518b9858db08930f1d2f98ea3c1b19d289df879f2a76cea15b10e136ddf0ae46347308d002b24f883a5a0bba96bd16a586d1972b68d6796f331992c0b46635e71b413b0b1751be87405385c383ddb7d1306c000511f19437a5cce2c2f7774b0c7c5c63e0ae915812b08f6894cb521fcd6be373568ec1814a82c8fffd0cc8d4647fa5eea05af774a7a96a30c15757efaaa36f910271684b246858c7a30ee6a27a8a40949baa947370ed28ca402d442ae9e9cb77cb38b78306965e42bb8d290e18a90788c86e268c4137bba41efad29a470300541b35ca28a40f6e0c5acec41f5166b0e3ec993e5af1e823f79efabebedc394f38225002a9c095de26248c435776d82425e25088d1cee16aa5db08d0634b32bdd8ee8d9d17870feed7e0093284db4f1c5e4dbe4646c0232c0b8da627582a13c7255887267d36e7e68112c06a4eac3211f540159c0a56802719bbf9f7133553d32ad884e419dc8ae994c21c416a6350ff4673045a5327c9858fb3aa255b5e903e06289d2fcf41a7d1685683c1ae908c9e81059222275fc2e74a2986025498aaa1338570a539b390246702422d00e06785d0831d204ab8ba4e50dd0ad0534103d416f6d9725ee0c82f1d7131611f8b56b0d218484a831b7a77238f7ff543cd93cae200927566f1fd7b43d7864b25c583b6f18e22f0becff9f410f5e2b2435fce0fc8d10700b3c0873348c87959145aadba65dd8e5162a3a0be11d3543c5d03c8652b5e8fe96e6d8048107f55681229e8c85be2c75c07c261de931316bf89e0f06a4e2486879b76f78828640f6ff6e27d90d9487fe2780f0aaad6fdb42015f5371d17ee040af0769cd65a4e152cdc78d6c90c982a2a545a951fa97fda899483a1c514b93c401641e46b1570196cd14db826ca84ce8c1c74574d8fe53f189f9778386e8ba66c3b1043a6ed7ec0258a05042d7729a253f164aad29a5c321c9fb8d9d9d61bff049b0dea707c882f0c762f8908993a12afb46204ec1873e9c273165c2abe25bf9fc2c065781efd13a3cbe27b077235eeb9eea33b17d3228b79d2b49368d71948d1d55af00fac31a5f53ef56368fd3b9b3015f40e30618057c91842cde080855999a81f36fa58dff182f72b0819bde4c60fc3772cfe91418369161702744703aa367a725c3090b292365313694fe0b7a37dbd65d06ecbaf78ccedb7355ef1349f6ddb6f014e9b5e3856aa7eef9577170901807347264e8765192ab9860194ac949164af93cddc799e9e6478acc5d8c4a3757419531b6d9346441289eceecd2d030207f6065a07546018863dbe127b28a5ae81f06662d807fe8ec73decb913f61bf65a8761cd00f7308c65f7b0c7342239eb46e0d17cc8170518da4c6f5dc88a0fdd5e6b6fede23e05d9e8d86d1057a6b4fbf05fb634ed85306d9c359fc29cad844c1b92e3cfb97d907c3f0e1d7928f9d311f211ecf91118c17576f0d4f9596e3ed4e39ef7ebcf1b85dc8b43eecdfaf587f04f1dc8c25f8784e29128743f0a794e3de253795498fdcd0d7b26d5de0b9175e24f23f28c7f774c9e2c8cec1ff1f3389d59b7832705f7a610aa257b3fb31e30b4c1ad119c451fa6b4c83de40992e7671149878148a4e3907b7148c637966168bfe1894fa7e74e9f65d9a9c39f6d5d1c8a48dca3bef9602e3b72e1c1b48fec5aa51c871c09de501e4352c418446c617a0438250e01ad4424621388c5c5036fe8ffd41b8483f2afd71a9fea1562d4353ddeb58e7bb38311c1e71e19a5d4b0e5db788e84e17759197223417ef6b004778f5a07219cf3e19c73ce39e1fc09e79c73ce39e7c3a9632685d2944a18da7c11a6fceac831645d3246a5d66d1df6b3c39d8703022134e9010a1ac0008a2caae8a1dd0e67491d23f217afec2aaf8ef3569d65048a3f5b69c2e0720e69387a96f4ee6fc623e08d9d77f3c1b245e95ffc6365287fb12866d700776ae0ee9ebedb1075e8a71f9364cb4704b2f1ff50d6a8f9d5ccd3cc78954cea256faf3bb7218640bfebbc067843df876cc5a40844ffb50dfde1d4d034f4079b56fa8b4d9b7e8dfe9e86fe8cfe547a868cfe7062f485d1df7dd15f46a936a737fdfd49f3e0c1f827c6a268148fe2eb3e8945f0867ed625cfcfb02d2b23cbec31e6b3d1df8a6e4c1034dcf94f842c5ae1f2512d1905edc33d9a5df1d85308c416a6a312cea27f755116560a17554fb1c1a60f630e36ed3203820943945a1325e84224cfa8c196cc256516bc3832f2e6c405391311c41093283a0489024445c61bba5c647061b8c440f520c36ce87275e143161c14171563b88e5c46361e0e95cb0919544ae39458c4228a4eec71cce683a5361e70c718e7a653c6eca7cc62d4d389b83e566d3e75269eb4cee9efe3199bcf9d9933c749e3d864666c563133aa9c510d6fa75b7172e8d023295c0c8de6340ff7d9e3d4e693d1c8e91c3473e27897464a9bd5e9874b3983fd8cd436ee3046ffe2d839b4af8f519b4f8db1461d1c6df3b93557d3363493abf9a656d91a2b35ceac86cd6a316ce6d0555c6d2bd5b5b45e952acf285d07eec403c01d88c25070667f3af3bbb65e1d4fe7391d99daba18b38e6afb60db9fceeb70f2722eb1d4aaeb8cf28c4f5fca1b18d6c128d55e2c49a5038a0041b8f7eadcd01b4ab9538bfcc12b3bbe9742d62900de44ac7625bc6c3e990d86f9e041b78e8c0fc291083af495f1b3fc42a3a1e053dc5c9358ca2ae5ac35a3945208a1bcb4d6aa55b6cb535e3b02acb5d62aa5acd2d65b693721a5b083379432c0568a34b1d4a8f46894b24a69e31ef41c0c35f336289ddc493f8129a570e6c8b99cf334a79c53730fca4d46068dd22965884088299d12c766bba2d6995908b10ba595558c4ba90582d0d68a27a54817ce4d4e3a27a593d229b539670d50452995d3ce49e7a45b528e7f15006f24fcad4a8e0f82083a6e4c0d6f6c37827bbfb3fb926936dc70c62921ea832e964ecd6a291b7acc2da350a8191c0c0c4cad1f53678c8d0135adcc90ca591921dc694523ab549bb652ad065a81ec6c4196166cd88fb0aba86ca7985972107af20332de9036509bd5526d066a5b30abf6b313421bca52276629be526a85b53eae1a521b026c5291e2da775b5fd28bda7c32b77982679593567bb10c6bdb897b8149c5a450a922a72d4626a350a8191c4c85d91a2061e0ce097a94caef31b11ab33540c6ccd06ca9d5cac606078e1c39760441659a1aeda67e564036413884a0149f16dc93a9a1465b69a9d46a656393a305f76466e04e2b1ad9d3d87cec7f67b39aaa2b87fc708fc81685ac61e3caf75ab061ffbb8a827a06e1a05428f4689e747273d31b127a74ea1b00c092ce6a79c816d6291168778b22c706c49f3df1d34e08ac7f38ab880dfc004618455208adc025976a271740003cb48ac68399fde1ac8d0accd204000295d34f1886611fe70ff7bc851ba6862f1e2f16e43a777defde16a48a496f5a5fb61e30b16a5446417843bf08f32ec89dab26a8c018c9a0e0608362826d5f8426b698b9d10411d99e7386ab8a138c2e771341094e5b7e4e72351103b7f9482c9e48693d1983002b5022c2962bd062eb2d2f0c9c0ce5d8f2af952de59321fb003e320b274334780357162ec8786269862a7c8738c47582b3991c6c7fecbe20067726cb2b0a94285ee8608c9eefb734f2c41570c7c69aa598a1c9125b4a99b77cef1459b065d3a7504736c35e35e961fbc7cbe5208594524adf86e4788a822ef9b94195824b6ec861c60442071925788871010f292e86c02cf9028797255d8aa086ec90878e704f4670aa22870d4b0d9ad11744b0110f70c86c281233ebe8eab50e6eb9b910778da7dd0b71d7f8194fbbae26cb68b4ec5de076a65f3f6a3b61f534fa85b86bf447bfc6e7ed041a9fe917e2d6f44775e7409dae31e157b0345eaf50e37fc4bd7a1e1ff21c1bfacb9078ce4aaf903dadb1695b8f0cef6811ee9040a3abf1b8c60bd386fd17e676c1056e57fd349fb39d50f357bf1077d41ffdd51b603b21fbaa5f88daf3481bb586ae3181c60adaff883b7b1a7a8555d54e642321964123287f0e44a33ffb335f33bd829d469ea3d5d73613544f1f6f3dac56b977affd1a61464f33aa2ebb3723e665f4742fe6e96b31fa834d3f1a3ba5bf984d97b64dffd328a594fe293fbd4f733d27fbfb30b50497c76b7d0ff21c2027528f34ed4fb67a64cfaf47b2554b0059f397d8f335fda98ad8b9a260cfb7f5684f2566911d237f2eb45485e675af2ed18af1aaeaec5ef481b3a9aed576d47ef4b6606833e38ea616525943d4023ef42070812c183a8e0c70b5a0e8aab0b2f77a0ebcab3cb3eb649fb9c1119cc73b1be8512a1f7af4a3cda629385541224d1db42770e04e146930059230c860a20c273f0091ca2253a2c68722435210c316599818c2a01438e59ea726151d34e9e10a22902c2145901fb22850841b545162e224cb1351b809f02dd276907d2641b4144505444f64e881155e021c6ce1d2c50825558c51e5087e0205ac19ba64d14112571125dc07fac41001ac14d94049173498210a12c0178ca023a513596e0fb26512102082cb16232f8ed470e43d644fc8e0427897a63086a0c1161bba10c2855ebaf024ae4512169021640a2e5a10f1b03fd59e6faf3851e481373bbcc8f03f1cdb9b1b464971852b54cfb5ce09e186d73db86b98727c9f4a0f219c4fe584706a992779621886edd8d84fec62f2ca7931cc6298feaed593ce9f931ac9257f3585d3a56cf24409d59f06b66a5b0c955ef0c20c616690f7e6ac6ac13d6a3590b881b8a73992add57e0beea5ba64fbc36a20bf519faa66948e57accc8022e3b0fef2b62ffa536d4b5487b2d2ca06d9fee7484a4a718948b6e24b136918a03cff732598e44a583c47fbede93b9396d3d3973f9e839f3e3e755a77ddb36eb5e61ead1d90fbc244c67e642bf6545a2b96e45e95380a710fc83d1a7fe210f6e3cd1d7fbc05d99a3d1c91fce5230d8923445018da7c73c758e9c319f7b82d21d52a788302aac259828d5246f9b4dd56999a12051f8e02aa4d00ded08902dc416dfa29c09dd3a6d96522a390820af3889b71620bd3292465d95a36974d5148ba41120a48e90a66ad45f108c8d21789fcc1250db0d042544196b3a96849887bf433292f3f6afa72d0831824dab0e9432449838829a33c6343ea28c8a249e40f32b5f00388e7684564554ef140a497d8c2b446a3055080f82367c0c161f3a97ca767b35265cd7170d8bc2a1571f840fda97ca7fbf426ac9bcf75924b809e04eec0cd81b9eb6b5d142ab22405cfd1b0e7b8f88f6ce58f593cc8880fe94892753dc3e21e5dda1926728d32de9e7ecc727afbf41d48b6b8a7f7a9ffb8903dea5c09f722aa1495f0907cc2648b63da1ef59fffbc7ca6cf753e240b498ab30c805f3a5447c3f744253700fda84444d6a8cd9effe1dc3ddd4b4d2ccb74301cd97f7e7494ca29a6220dd5c11e89fd0791304ffbcf9190b4c72930f237f79c5fdee2c4d14aa73cc14d5b224bd9ca4f8bb28e5838a593968d8b0b894a4e95b2ce5f9d1f6d3de2ae99863fc61db1d0f7203fe22d7914b350ffd9d48d1c49c9a1626c5a33083d8dbe2359f11c4d0bb9478f50fb5fadb53ef6da53edfd48ebfce51ed5347f798e46efcd9a1264e1d75e479d4b718ffa517d97a2fdcbe6a3a1361ed08f6aa6e390f624f7a823095df1a27ac5af7813d98b22e039b4527f2ae4dbadb8473dc9352259e97a4d0b30b4813865942310f0c6fe7d92ab7c4bdf62a9e194518e43b285dfda58b4adfd14620beb88c459f66d36840553625b6bedc3d8b2f6e71687e08dfdaccb1787b425f27c8f71c9fee7fb83596cfb5a96e44fdbd68b7c66011d80fd7eeceedbea296944fe56db23153f9b3ede8a3023188f2050911345a28b73d45e5a963404aec43dda8a2fed56df4888db8968c84458576dc5ceb8c87e020f02ee1899b2876216cf79d10f520165ffb9b1e9deef7d48268c7f727eee155fd915285ef0a6cb1773e69ec7efe683515330124ac757e65edab76d1893368502b2e87f34121193884300912de89168529fd427258a4eb04e19e5991d9de8de9ceb4725eed13f01bc0902de6411da6ee4c8a64f23930f21d934e8458d9a8a8a22d12b1261aa4cc729cea28f6948ecf8f226168bbbb244115f37be885e9e046fe8c7291129bedc8b2ff9635363608fa1c5119328fb28bd210b7b0c6763d84bfdb536f6786a518703cdc96dbbf96c39b39a07de60af15c9d26a6f3586bdc530ecadb7b1c7b1d87b1789dcc3b297d84722d8471208451d7063d1c8c67ec3d663c073f063cf0377a02a0ae18261586c2c485ef1028aaa08e152e5a78a102e5cb86869e2a2458bab0a2dae2ab2602657154cae2ab4b8aac8e2aa224b963851ba9452d7f4f828b5f7eeb98dff4baf12c286ae17ecb05f367421655101cde94eb6c8e1c694eb0a26242ef697ffcacfd580a8a0011f28b8e76e64e4c3123c2071622489319a3c2922c50926519828216202c311368891040f9a70d2848a1e1cd98221081da440a80b911b6478f5f892edcf235b1528c368082445b88270418f33b11930c40b6a205404072a27e8f125b6bf0ab2059b762092451758acb0610957624327868481450c5b8260628c1e4fe2270a2103f80224603822064b3d18a1e1071d58e14818714abea48873464a82b8986011032c3af811d9c68b2530a0e20628429ef0a2254b50416ef4324306bed802c509a2bc7c00c28825a81c0cf1431222405a006145042a30ca3fdc40f16084f194981458283161a47c78a962638b1ea0164e1001469224458021a447c811197880c49528be1822c30e5ec4131448b0451446e4d0f4c30e946cffccc593554d9348c44dc104ea0b17920c90b288a1219ee072d5a0092d92bab0e2446c47b252e9920e4069228614479e8c00c910ae19e89083d68319c8a043c64d2e2c347061a9e2c2d2241be1c282c40a5c584c800387e4c222e485065717384009e1ea028b971c5c5d4ca1d2c5d5050bb6dcd0d5856b7ff92b134c93b8984962ca9615c8e0044be4e049e053ebc558af4b292575ed6eafbd1d0fc9aab1ea6fbe8dfa51571d289591d229a9845546387fce39a7c4611323f4c9849c94522a679c5316191223bcaf9ab9d8c451734c65f12096a0821a92eb862ea417d211d2cc0c266d5c5ea14471500cc2e2dee468c895c9736675a519b5b8376710dcc976a67557b2a6152d91b6c81e25d69f4a2af1963f71d67c2b56ae5cc18205ba12116ff91167825276ec702e2a217b1231798efdc9b427914bf1f864cf2a2457adcaee41c9fe5f76a9749b4426f9438e8f9383ca157bce598383881348922449290112a22daa1889386fa39a383c70dbff5221ca19c076576153cc39e79571518961a8baeefd8a49b1830e4028a9a420f2940a49b2b21243141004904b0a28410a0042e89552ad54ae29889ea8be40b2b59862680aa12982bc6ce882420c2a5d641654095a78e9fc7a29ad10c7f37474e2fb6f51653f0106d3965f6419e6afa8636a4d7317f80b7a584c75d99ee22f1a3e7ff9eb8d384bb2b4a823e21075386df950470cb325fbfe6290cdc36cc9f2253f06497fc19dd3965e6cb98563f179137c72e4465b64ecdd48becc5947a2e7c0dcdf6f2c8cb638caaa8ca1644c43796da5f3da4aa7d349e7eb94447c5224abd1961f89a444cd10653f588b11264c983061c26407274e9c346982c5c8f135950c18da7c0008daf361f63261ec90313774e556028d9d61ffc98491e91a47f0c649a6af2737046fe6d370449e632956e3685f2544dc108dcdfdb06decf8183efe2c809d64fb785a5ba9b524d0d855d3b735e2632799d638dab452fa3636d5000842c238c6e9d721845ace979b78cb2a5e15cc1f1bcffb5f49a6940a6fc99f2a678dc35bb4bca5fcf196ccc59fb154e3a87ed1489e8f21dcb97bdac7be76188d5d2d153b7b5c57bb6a6e08de64cfe39449ceb29a6d9be43998fe2c37b4a78e5f6dd28e3e1689c6c610eed4d8f13193fcc9306d0ec4fdc9704324ac36a55a8609de4c1a3b5a19a65d63d7389232443c778cab6eba977596759784b92d0955d32be5107c4a3a6191e1438ba16ce9a0f283d403639d568b69db8943e9ec88f026c280a5dc7cb8d7d3052c37cc67107af7d6e0f76d826f18980eba977a0c3708c0e043510c3a18c1134558a1450f842c98bf5d4ac374dffcb1f1c7cd07ebdb7d1fd82f3ac582b66bb847e9ace5e47426e3420f3fc43fb66e420fbfdc7a6020fb7ef430fe0076eb74590426d62a707cedde9c55aaffd418db9c9452faf9d82ce0c8d76c079d35e574395d4ff72084d207ce8e31c6093b167066d422bc913826903f937eda8670c323d8f29ce59f555ea629a238bca5bd6bfbf3b6a730d7b4137196bf6323dbdf5915c9f6b7ae64bb57e4b912eef94442f279e439527e1e6d7f08bd5e25ebd4feecf9985217ba29d4cb6f5d3d026f6afed62ca394524ab59f0d67683c2852c068cbb7f2ad7cab7a6bffae5c2fa24de36df6b7ae9e8646a67a0ac5910da9d8d0f57a6d8c030201600144d022dca94f028da7210c0027fe83200001c0fc7fc542efd7c7de66420cc0d623fbfb9e7bf7298e2cd35ce06c7cb63fa0f4714babd5520a00fa1f50fa01a5f406d594524d29003e1bfa18b594d2ce814ea09fbd8d8d04fb4e2487e64252a5ca99abb57e8d6d168d91bfcaa4b4eb6bcf03b8e3426462f21c8f27c8b74c558be734ad3613e45b1bf7f70ff3158be77cb72e794e55f21c9acd84a86a80eaed671ddc335b8ffbb6d3ba2379245bb0e7e6ba6916b47db3d7dec657ed575f69befe3c02eeb8c06d1baf755f8c7bc676c2eaedeaadb5bf7a1ea7a9a16b5c889bfe0b73db7781db33f68cb7f61dc84fa0f156bf10377d7c008d060e99dbd8d33092b1a751247f73683f8e343435367ee64655b53cb286e6ffb50cd6e7f120cfb9f1f523dcf9b77fe353303774e6027f93dc0904348126d0049a40359a6646354326a561f48b764dc7202b9a0cb902300415a2e4f9f57de85fb1e21e9d5336add5769f6627d29e2ff7e8052a0043a800d4f1f2f3f2b32f0077e0f62d65924c9249324926c9a4117cc09db863538c6bc5361f6ca1b732a98403734b24328dafb5668f86bbb9a791e73ca19b09f5ed3f718fd6f85041b2e8136da13c8fa6917bf43f4aa25bb355658fb5b96444b4e9cf2589c35b9bd6f4e73df7995eb27aa9ce25542beb1d9c869275a29a52fa48b2f626c9a27f6fce2ad57fd3a6d368d3a6d7ebf57abd5e57cb58553ff330177ae8c956bcb76aaf4606f9f354d0400b114829f5b36151fee6d25ef27ae8ebf8a8f4ca1b1c94e0e49052c65c73cd95e65a6b944fbbef6e58a93c922fa38c324a2ea2d84a5c1c411d1cf871eff6a509b9979b0fecfd121dc9165665900c92413208469db9f277dd91640b8b453767d57f2ce2f4e743d827004a56d0f59e22d90272e97c1eaacc7dcc52fe64d0503c2216c19df8130a27746412378f9b27441a8a6040d6fc93feeed53cec89d2597b588cdc0232b8ec990d5b4086d2c631eb6a4cb89ffdfcd9f56763aa4530608bc70ef68c65ece921d8d36fe0c1fb80b3e6dfac7aee33f86a4525aefe34acbf14fe4d7fab7dd29fcdfe60138e8dbd64d29d27fde1b0c1fa5ba5823455cafecab3d1479f0f69796719092f56e40f5a29c1b70fef8130933ac09bf9120718c2bc424499e9cc892cffbe7cf9d9590522db206d81dcab4d57f68c3268febd39ab54ff9e1754c2fdcc12a94db225af386bbe149258f6fcabcaaff21ec79341489f0f35ede943454613ce2983246bda206d81649005829b8f1350969b2cca9f0c4afd6c198475ded1969ee7bd64c59fd4ce105951ad76734f6fcd1f8fb176bfe5e6e32ea594f2699435a8dbb1af269dafe554ad72c69df2168ef4341d7fefe5d348b58efebc4d778439122747d53554cf4df79c4792f5021c63ac5608b156b0c058c1c329c80a27b15e2daf7ad07df78537b07bf72aac556e3f5720550981146deb3d9e11a0daab15665f176c7c1e58da1548d166c122e1a57ddfde9f9f10ec1ff5e3869b09aaab2db64859c4879b09729300863d8fe7a07b7e0a58a6928b0a29aba9844445184555d0b0bf48e4dacac3c373a6500ce2c91ec1fe56fbd3914f3bffcfb1cab2a5cdad08974196709db5d25504dc65dca7546aa589ed2b5779192ae8f45f4b9da295d21a27d4dc8375872a078e6bf393d2e9f30b99e14fa956da7fbf03e68038b6a673a2663188655fac13c271b2083d0cb31f1d466c632ec4d4398aa85439bb3cba14885726c3dc128332e69c73d62256c4000672880f11831644016b0d308a0c8248e152e9ac9264cf1980243704210196a32b437aa610263657952898ab4a0efbb4a1ab8a1030b625b6251b13788b46654b624b026fd9967062736273627302caccc87838343332d7bb1be3bca85e20007bb0fb57ea413bbe3d92fd7964cc32fffb3cb2057b7a3e9800ec3f4e8997ff38255be63f0e494d925995655ef5627fe2924642f741260dbebce818ddd3b2d7963c70902c887a3e801f0411c917af9e22f27f39fa96abcf360099fef498f3009097eef41ae3bd37b96df766d94bfcba315ea4961cc53df634a5fd7c98afcef99e94f31ae7bcc6b994365335353534c6a333f1c855ec541f53d3759f6a7ff8157bae6cd160ec45668646cf783832efbda81ec3cd67c6f378d665aaa99e6e3e33de1e51b9abf29fba2fbf2abfa866e4178cf116317246f7c71571493820b63c61cd0971429c7744310964c98f4642ec23b68c419295ed182f628c321027c45d7bda6e664fdbcd5237bb199064751c1127046fb2e4cf36013579cec70971919a6de284e087c342ba1e009291646b32499607600ee6c4c8d996fc45a17b85206492addb030e446500b165dd7cd826044ca9a2a807f348568d04f0638f69ac79244bde1fc9925f04cafec3afec5f9adc93314439064afef06bbfa0802d997ff90f6fb125c6624b4cc5966f81644b4673421008b28020d0c6d8774c21e1578c8fa72079cef6524595368d91f06b8ab75c3e7e71812cb87b60a005b2e08e2f9b2ac996ad01b2e4e3707bb0406cf9972a594e48dbee7cfc315b8fd35b7bd2ae36e7dcee96ea3c86103fdb36fab88b3d9009f6a494e40f662d76f75dc78c9139f980d8537187754024ab4602d8bffc8bae4a12484d8af1227f9cd05791b821d9125204cc638fb29b6aeb91d2194c177d9f505ddc18a68b900b823b59fe0fbfa612bc914142bc3c865fb2659b9af0cb6ea72e12e9629064d9a6fc32e74751251a6426aae4f3056667b87efc72a76df135aab4657dac59a8d38afcd2e439f13f8e08eed897cff50077eecbe7481075f8cbe78e784ef6f265b61edba6977c675d093862ad8b9cd08b12dcf1978fb5e4f81f379534cc095ddf36c410e4675d24e29e7c4e281265a12d630d3602d118427c999f06a8e42d175539ead01000000002e314002028100c078522a150244b5465d60f14000d768a487a643415879324864114649031c410400000001040083234336483009e2fe482a072fc0d2750530e7c29479178d3db2eb39edf6c77b09cd2741c1c9a03064baf701b3d0a96190816a681a5476081f88913f3b3a634c8fb7e56119ff565404ff04f3e135920185f4b1eb8d3da82c49f80c52ced2800bcffd0a3a0cbeca88cb6a4a66eda0001540a32ad5f39c15d2b053fac78ca9bd0330ba854e350b4fa942404e986a29fb63fa43c272d877ad3b1e5ac23f95032d256f1b41380eef07a0256a3b960632f4207904c6fff44f2f71c24b0a358a651231dde159850b9be1db9e4f8649b7819ab5fd2931d56b020dc83b3c30c95b6901ccf829943894280208706b790694eb202cda463150f5582aa48a5dee8cfcb888e4ff7e077690e1858c11e09613b00ab81669a7f2c16a97ccc2a3c0a86bfa1412f169fa79ae429b125bbcc3290ae9088cef79235a8b15ea1dab8f101cd5439ada51558d9406d9d24e5d281ab2ae57c9d8d04478ae7e278d168fd70e7ab9c68f2940fd2794edfb954c008a4160f1aa0e58a009734d543ee322506e5b2756430449bb6e1f82ccc24b4bafbac56c32ae21cda5e1f19ca0b91ba1d3d139ea266ee9ce49c55d19b3eb4384b348e4a479dfb61de70a5984547eb50c55613d47857d76a9c289fc8293bdd31600bb20263bb12204c8e33572dd3759b4cb376087a047ba930313ee18938a7bfaf446d4910c9f36922840cad27a1fcf95138d644eb2b474d1fbbe465bc66b2b21edbacaa840cde71891e611c1d0a532780700d05da87e344004be540d2041963a142f627409febb94bac8de59732e4f517fb6b562a491bcc219d156480774ea49ea8908b0647f188c4694471cc39d2c518a4ca302889cbc33e0680196e91c4a0a9ecaa68bb5d0f6da440abe5e0ed8a4fae9133d6f612d7735cd32eb5368c1fafbe4187decd22a435a042beb331a7f35ea9c69898a07a250ff4eed106610a45c007640b24f5472963f0f654dd1abb4e32329e0cc3ffa76278a5ac7b79656e0998725ee94464a8b2c4de1af01899f81773cd343286e9ed523918c261d836e62d697863e883602c013719f3d8f30db65a98a5fe9994c081e84684a0272350988bd751b16174baed6671b92eb19dcd2ddaa74ec69662612112df10015cf0e39ab5ec5d8f66e8da78f70383ecf3288c5254b4de47e7ae888879027f8338d338eb4c71c36bceea1740b20e5ca271504ff93575000b20a60660ed11f7bcfd80e2fc75a0b16b3b02290dee1a5e44b3919e76bd2280927e8e44bb3a5993ee88cc7b52c3db7690ed075bbf86e2460de786b313d39ac4b656d65c026a616690e5e67436f2d0e5ba4012328b78e9de3eb96c9920141185fe5faba00db7719c6ba5c0261a4899f624002fdd9946c0ba16466501ff7a997d49d657ad1e6a646dd6692158f3434990eaf0a95d32dde9c0737fd0656805e4dd1061d722bc45afd4e4538c2ac5d912a4aea3b21bcba19db38cc14c281c524ad1322546beeed4d968be574fb7c46932dc75875baa3a550d0fb74412b7b66500d1265d6d8600da5e9ea2b6fe0122c4cc194472321215e83fc13cf10659b2bc63e0de333bdf457398f58d686df6bf15a08595f4ee13d5ac793425b516005e9af8aba4705a8b2a2c80ae50a29552f641f3377f10d460d0fcf6d0c6e4a65a999e61f5746eb3f6486d3ddec0d00fe4e0eb2e3a625ee903c0052640301b804a1fa0c1e0c1e204a496b05e093ab3ac585565872307ad93af3549b3b6646a9b9f255b8b4e692832f09751023955957c45fae52a3d6990cd9020a104e6dd9a7df156023229e422123e3a804f69a3a76a7e2241ef81d0f9e4e7d383c862ba2d8fa980d98c74bd23ebee7fc7bd43bbad8ca6642e18fff3c9aabf950854403bf93ee749e7cb5965e5821d4f04349f2b4145a45b88378211a3b534c3606de3d5e29ee4bc1c3bc321423d88d62ada3748c0da989d3a068dbbdb9cca25da098bfe6fd3e9d8bf89d41549f45d1ab241188d725c983f090150a6908f03acccc77e40449f9e8c841378213370f2f624f79a92dc3b3185f810753bc01e4378c4fa50af73210cf7b04fbdb41bfb77f84426f97a0dea87d87256b74290d94168ffb238b1806701f3715d3cbc781770a3b1aaa7b3da4e07410d204467851a6d9f60e106214f7b77409d960d9baa75c3bd68a8131a796c3f065e89419dc036f45c13a40dfdc26c496d080fb3e6ac99d1fce34b622bb5c60502a128765cf76d3efc30142d8bb30aba5dae1e0ca2404ad2da3e6d1e1b4e23abc11e6e08124abe2c0130bb7667e187b8dad244ccf1eee191070d8fad26d045f7b606f041cae0fc300138c8e52e02e5956ae10c478584547817f965d1c14a18621a7efec9db1d38286b1f01780b6546166c79c28d735f368ed2ec671cbad4889200993dc70a4be6ad044ec1348a9f134c535163bad0c5dd0075b57624f09c5b01bd8a642e2bfff0f08f103f113e3f0f379d4105f2c26c416aace868e05d789bfef15f6e8fee037d238885625d64b730740d4ff38a5a89c48934785904d54f80fac7f2e5b6e216add835bbcf998249d236551be74197c33fc28daff51e38206d39ac0115a10494bab230fb39de14683e338c9c9ca36b48853fa003d9b7e4826504baf2b2ee57a8775ffeb2f61d0c4b575c111e90e19fb6f56e7e7be0d5258d1e26d029a1820233d78143170c40b58a677fd3b9d9cfa0eb27aed1cde0a10129c25de9421ff861221854b3fbdcd55aae209a671a75772658b063268aba97fbd1c6141f8776acf08b06d088eb5b8f30f90e34aedfe41a88188d1c12d2eb0924c46f2ceffe80b234b223dfb2a398af717f4b590d1dec0fc1844aaa79b7ec0465cb8e466829e071c65c92bb01bcf7101fd778eb5e4894cc2154ebb81c15c8527b9b2b06825465bf31cb3fe9862c48ac86ffc5da9d89075fdf6a014b4f3a77d2ca83d842b2ee00d885f38f8d5cd1e0bf99dd48bde728abe563a03d62daea9e5f627886fb8b96769606dcf39ba8ed261d6654ab8c5dbf2d30db3c822dc60e45a2be626eb437238a55d16b31527f8a6d1129ea98e7868afff4443892dc28aeb172d9254413d74cbf881e7ebf4069ad1190e3e5484317b62ac7b7c896d1c4da27e95afeb8a90cd98cce224136c0bf1736040a337353df68fd6b46673c31234a92fb47ed559571b1033fc7304b451a608d262c0720e3bf6d3ca5a2e8ad8bb55edfc3c0c358ae943ad65c8b1617683246308cf1d51f08f1c14ec05f124006cb7e0a6e96d5ba12d93dcebbbefaf69eb6d38acc6c97024c6b8cf08b906bae76a145a00d0f267ba884fba031d7aabc813a55509c95db7a39bd47b0d67b86c34ad81a858dd882fa69b195120de2b477d05525a5fb61268a439bab411a84fc461a2c5fbfa9d5a4a42a12ff438b49f32a32cbd4eb24f9e11094c856f598676a5961d4f9b59fa8e77e8d71054b4cce10f967809b9dd8ec41448abd3efd7350064549fbd204fbb689837822b58a37d6181191cdcde7ed7f17376961410a51e7d617ae304bbd9a88530a9b86550e0dd93169d62195f33f75b931fc6dfb9f4085d01e2d500204aa98e13113436717413151ad3c2158ccd44c9a02c2de7096dbe40b0ec5ba9b26206d45a3f24f055eaa6abf9fd2747d137d22553531eeb99e01da18de456a6ce4e284a0741c6e61261048ba014851a51adfea47ea81b123a4310fd433137b7c2a485fabf7ee93a511d48cd5091e146399cc9e47c6d4394c8c22c251a2efeb5e5af40ce4048cea84363e2e64cf1e836e695c2353d5e78034fbd388e9dd5d0ff0760039795afbf4ba625571ab2c99b3393cb6ede5f86104f0e4b268541d481ab244f6d5bc011ab0bca5d3c8da5b544db20284d19e9fb1ec81fe3830068ef651e78bfef715bb4464be459e3685d910958a795c54eba7a95a6300798e01daff629fd604d1cb52ec267d78aaf309a9d55c73a567895d7e4a1f0c51ab851fcdd40909574e5dd7cfa51f69035c026eb24e1f80d1c13bc9c78e0e2a3fb280704328a21d924bdd0754be044accee40b53a895efed2f32bc4583292d6ce11f9b58efdd3207ad9c93e28357b05423a09a415927323c7ca18eb90d1ffa811c6c09dd405b3d1ec8587fbc2865468b8c9fb04818cd1f7867074bf2065e28be37d0e2178be60b729326703d485322df94c27a49585d278b1d063d8d063f06bb7c9aad83f84b733d79c38459426c91093432061a6bd6f3774b11efc09923479929827f1760106828bd0224de3be71d20419e47cc88ee6d9e1a0256cec832395941e19886c9b0a68d78079e3e58f2c27811e8316b5bee8ab24d25a27971949c784586e85c284a333e0f5f50123aa5c4d65bdc2db95497cbb634edd3752ca223abc5f55ae2f3f4cc41eb2015f2c1c1b7eae347070b106ac9ed784e8a04df9c857d96f0c6569f9ccfbb7753b434cdcc664440b82ce24823b7662d97e8e193f54a5117a8e59452db83f82b1022b96a545874509db5f30250348e87c6c3be834a47f6f26cb3f13a0982aa06e5c2fa28978e0486aa3c986e4d5c0b960afa4a192de7fb41c72a18cc5471b4ebc21ee3c54791fb4220c31adf25c205f097885a4b9bbc8f8b0c248c733564f6f17732e6604390e0fcfbfa758cf7704abbb1704aed37e43ac48b854ca8207e4411bd4848cdff583141b53ad0efcc0ceafd9477c5421c209761dec8bf1df5d7ff91a12cea0003692c57fb655a0bff67118d617ea9902c1bbea10ad282ba424055f18bac852970322c26f62fe9a35e761f19a4e311c8e58934d68d3c7460b8aad3b9283ef99bdb8a4548387f1b9796a9baf84bf8f5c1f5bf2743aa4d393b702c2119fe49f0b040617c930b35f9a006fd6ea1f7055ea88bc944d002c5f88306e5a7cb759fcbb53b42e8e961ce955fceffe29c187c5c9df7dfa4a085e41eb0f4e562013576e2154115472cf757fb7a82d15a50eda9f4c5a56f739b72def38083dfaecc945b106a2da546137ecb825526ba5d8dace8e71f85dca935379713906b9bd0e7b8d812ff517e014e63acadd36c3d4a61ef4a39c0c630c37a99271f977d8057800a85b8a2e9ba42743c5fcca9ce81622d7cfb9e9068f98340d2a49d08e4387b5de928bdebb2d21624c7afc0d4d4bcad567d89ca823001023e6e98004b2c8e025cb77fa518b164492b9a2a984d0642b00653644836730e9e233276d78d03ec7cb82e5703ecd2cce6f1d38b15fae188b9337cc3c62046c3c8ebd03c13ac01f8c688e6e0a03598017905ca4f614a8871c213c2d2f36390650b4fe390f5285123b13b94341cb340a0c4a86736cb81965e3177f5307f2fbae00fa2cd396fbb67002448760857c792ccb10dec4357e7b1322d45c5f6756eac41f238afac55818084a451650a80d8a5d962a9c07527879d0e2b30afd550881f70ccdcfafc450c2612eee8a1df984fa7972e8c7a03c49e0e3842fc929bb5c316f8c471ce08b96f3e43b6eda4ac7071f34366d2de63fc26774f8ed220ad78d5fc54cbc829b5551c1e48209fa6497a8f0d5a99d063a826c5bc054927c194945b29f3a48e9bc08c41cc89968550be3971634072bd7c7ac8760ea2ae215b0b1b9722c37d98dac8a60d54cf47c5edecd557f41c1027693a24d2259d862cb166ca052c3cce431a22759bb76414325ebb5061aae9a5b335ffe4f0995005d80a2dc31d66d202563bf97eeef41e4bf122f116e0c48fc186ec248a8b44ad592128bc7fb3c08852e3dd2fcee520411f01a0a40153eb7d91ee504da9cc5d4f5dd66528705212dc06232f41ee4f8f22e0a9a2508958aee4c5bb5a31a54c22a4938e50d04db2be4cfe65af2b30058f05d202da2c22153321776393207fac5fb64bfcbed827a61597c05d05f231b097a2a40f2583f2b81df66436a723cdef98fb0cc5460f2cd9b1ff7910329d2c3d7c21872d6161cda0fe7c217b846e2b515f71c823894f47030a261149cc83af0f37f8863d73ef436c3019f48a7b9cb7b8b9c801c58132d641dcce5d2b99b6e5ae122654c58bde5f27141a5018ae4c303eb930b66100c5483bd1f9c794eae81f399750be5e4204c4294782804903e6d277759b2d1d300cf738a5ba9a0c3c01953eb645788f3d91aca4a54528bb556df726a055fbd574f9cf6096d500a233eb2d275ff8b8653e3fdd388b7a12e5b3a5d7da2068c0ee58ea074fe66d047855012293575f9ab94c14e36b130d1c0fee74dd68cb80edd3bf875d417375672428fe2f490ad6431a9e5b98530f224470aec32605fccfbb320bec6c0a47e1f7ee188e3964825ad4e343612440d6c6d0370760788935acffb95fe9e458669f2668132b3f2c60f84e7d2fab0b5a31dd4cc7eb7f778122b0d41416eefe5952811695220f4180093b64be9d95465cc35abaabf9341b0926d31ec1233c67b1cb3caf3284fb24dd0a3612d21341633a06103319610c934aea0ed1b23b2f5e8af33953dc69feb29de03e168bb654a8850c8366b5898f8739d5f9a2940167928ebbe5f5b1e3411e960f4961f21ea07945f0d16f55fa9ed4b51886e48c795ca81546182193aa407d43d0043a2ce94739f1d9c41e3be12b63f5c3bab107f59129885921465e5163a551a975f0871901dbbc25c9fab0a822c0859d95380294e5a5789894a2530ce04b7b20ef0bbc5297900892b8511ec79a2561dab6067ffad08c76094412a41a6b78d112a5d35facb1231c96d990fb5b6464a699286738a6aab1ce4253e36654b4b2e8456b6553926af2c98285d4bd60a359ed05f92c9f333f06a6e0317cadd6223e909ea77d3e61eef3c1ee8cdc919330045638021154274eb5b85706c13dbdc3aafbfbe49bb2fdc9fa1853c8572d5840aec00156ad3a290f4b0a0b5068c8dff0c30fb8ad82eea3209a7fa18f79ab454348a28ba9e4cf33d266c986bda2133a014a8fc8d8296a7264151641454e5a83b18e632058f577a71ec7cec0389b7beb3cb4ee4dd313b028c66ac55912fdc14fa9155a123ab99f3be368524cb397d442b984544c5ff5f5f211b7122dbca8b19093c5386eab14c61eed3fde48d2bc00368848ac43a0fea5e77cf39ba2f102950b6dc2ef5d3c2c9dc592543205016923037c809eaf32a193139c40e255c084c3fa9b5e6cc16db8a0a1f3a450e040e461ae480b92a813b0b57d76e830b1cf74277c9395d14750a44074ad34a037b08bff8a840e291ca7d01e815940eee24c903b38e9a55eb9f06447a381ba0fa9d99131f69f674aa7119e8772d48ab76d703ceafa18789ec96ee870b3d3401cc917490e0474df45328e646f1929e97656873607243e42e9acfd1f66634274d4a4efd9d6695b9eb9a0f19f98ffc7fda0b1d93ef0521ad6056ba761e029ed91ca9202eca08eb7f11b997e977684ef9cea365cf0ef405feb958595908d5cbe4950be39c1cbb952b45d66772b911b1da06a0ed61fea3c3b09a06074df45c51bbf01dae8a25a21e536eef5a7039d0aea7b3d75d8f8ea3f0ecc29d56de3c847ac6505edf85565610f2f4327be1c0528924be128b21ea33f3dc9b99d09757b0653dfc4a43ae3ea6679cfbac599e1567ba5a05d359be73bbf47cff9cae3990068237a02087aa3970fb1052be21212b50b33c76a8f559d05a41de60f8ad20d495070a75bbc17cc4103b6a28c783d19e5aa9ce5e97d51d3b8a84859eff2240d285d899285dd745bc4a09d647801457661985eebacba0aff7f029e0fbe34d065d868d0fbc162583d77588943f00618f9131dc86843e73d7babb70331258f1c28d426c75ceddff7f93e8f00ec99f5360ca9902fcec4b78ddcd402b5ad43df464fa2b19f196a92cf2e7eb10e4669dcd3314f18ff60d65727435a454ff0406d6ee33a2423f74368270be79b3ca108431119448a3f82c36e0e3dcc78aa2b10106ee418a006d62d5fafbc5a6d95804aafb7c81313f437340daf53a13b60256b4b30a1f0d46996476b915a7ce916c07c8c338981032b67c9cde4e64179cdb96f32486beb1a6734921725c2ff1048cb390fe2903cbc40972d1e5e2be36594df17bab073ff1908970642c0e8858ae2651adb78ae0f97a7c3a77cc636d609cfcb2c57e826c1b8b3c6aa5a835ccbfcfee95bfdb9fa7b9c44dcd0f760c4fbc170aa14b577b646442e656cb1c8dc2c2ec387d172ed887452ffa2a8457257e1fdc31de250aae4a304fb49bd99e9eb15a7c8a9a4e2899244300ab3241afb4d0a18181c095c4dd648a056a2a42c54b842569601bcb8bb1bcdb0fbd31deb981b3eab4f9b8336e0919a0ee054f0ae2118507050e3fbc7def20e9a1d2c7b3c4c91623071b99e133d70129bc8a2d769173b855ad0e5d95d7396572b4a2a5d393aee4a52b7858eb18f77b6a48c8a267512b643c42c173be3fb4bbd66148557e572cc1f4c4bdb7f34962bed1844f5bbe30c1be2bcc207d17ec87a62fd79177a5892d5d53ba750fc3b12537161fe1f4a1bb3c653d562a98e4eed38f31cd142c4a9ab52e9a01a8816efeb0e3ac825f9d66b4d9e04fa482428527336edb6069076390c998e3e68df05eb895b5bc6a6e1061e536256b570443d42c993a0918acc0f26e543351bc1b02907e2116d86230b5f48de80afd8fc01e170a02e2d0e52c0d5b644ff25b28c9a8179a73583afe6d26758b3aaf6ba479d0ae6b721a0e2933cbc802b300d9879845c1ebc5560001888c4004fa09d14b69adb0480de8e484166728e2a658a63b90e89710284ce809784509cdeebf2061fbb939ce58d8ec0ddea841e9d92694e3bf3513b8a46cc94793d19abee23d08205d9e2f29ac40dacaa0374e185621006b0a89d425233a16b0cf169d72af508651d8ea3702e60c21716374dedde065ec2e9bfefebfc31ec641b47824351b21eeb708c16e515286d0f0404ae7fb25d4c49fc701533ca39745ef3f69775f6916c54760be8e8d2d7d02d6a8a48dde812faad075cf82fe8a126c3789ff765a398f91dab9cedb8cb68e7caa3a374ed39aadd0170e8262bc0e216449217408edf9be6afcedde4351cdd5d2ab807fc02d40158983b4bbb2ace74650397239ec16b217e7a651d1335a0c743ee2107075dd8eddd36720c5ecc0887a7f88fc176a4d6d79a9d028ab51c273afa5a1b5d9b55b412d9de8565c06e9845a195ce5a6fb7113d4b61095838ae82d6c15b38a80607a655828936a6bcc9d6c1f26fb3d9407dc5482f417a1dcad7e987f090128fe22a1e1442c9eb48eff030a94463f1561d57c3827aa7b924ded5a9dd59afbaafab519f2ae168aa592d966a60c2b3150e86b1916b6c366b3b75d899dec00579f90ab8445b8c3a2b8fecd2c03a053899e73a7324489b4ddaa0752d403237c1c6cfc53034bebb0b18648405fb8a17aa85c6a965cb9b7f4c80172e35c8f37794ec3bfa986a79f66645fdc09a88b4484f39526ce9c94368bcd2d23e08446e33f848e6db5e0861340abb5691fece059751f4897b7beeb2f422a8f68cfe3a853953f26ffc914f28ece2b1d34d41897c166471eced1ac25b62207397549108186818559df0e263761dd28a9ac1721f77b0c41473de73983d2d5231f0fe8aa26a661352e67a1e7a6893805fb6e21d51d8d9452f92bf21d2429021bc4d1a9a7873899754174fd4cdc3d7e5a9c575932524055c10c33a0c9905a5e664abe0fd25b81f55e727f2085d49d3dabe9a4236f4d4c47b30606eeb738f4c51bbabebe573fcbdf9cb8738ab72b2b95cd9052bde12dc92323f5d483f2d4b2645c96a62213799a419a729c8ed482c8e6dd8d8998d1e84332777d4368d0ae794b4cc69f05f3da1014567c1439cd4eabbd8b3eb38572671b2afae3bd89852c847b858848a0210670abe1fe88849fc733cbdf9091fd88951a73bc94eb214b9b6ee1b4d29c2854bf8624c6b15f14e96da429031db037f29a309143a0e8299da8c66a19fdc334df1a86ad7511787f82e683b57117b89b9d45e058c53e694c652755dd48f1e96d00722b80f95567e932d24253090b0fc270c4b090537d612d4e7a19a421907296a40b4553648d841b6b7d4c23839d10bd589749b6f33a70a3eb0fef9cdeef3e947250a7c16aab04dc6823ca6ea8cca9bd0e8dd00795e2aabea21e66894e2d6b52125ae56c9d046de985713f310ac1baa45a31abc4b6772e0af8cec8b9d4f5b177a9b6ca76cf89c3fdc428a56075fefbfab0ec8a91684f8badb997641f7f4a287a69e4e51ecffe1b223fbc4f0da4276378d62371e7dc233e7ce2b4e55050fd51e61746ac1aab4daa636733bdc8578a757e7dbc61aca97b8d7eab6594fe365799ee15b1e5414b7de5671e206b61369c3de954e31a65e1041fb5fcac2b029ed985482ca8e98d184beb9b8bdf63049349d5d6a5624cbb3241cb94485307bf10a8125ebf5fa9c28ada6a131f1896bc894d404f026ea6d272f7714700683b885140e8c7ba0ce27d0a2c839c64a7f1c731db2dc7d98fcde65e2ee42b4105893047f95e1d5d78a525645391035de9c629e1244b366e5025ea1606602d72a75165f7b5b0f0df73dddd1eacfb4c3ff57542b2c05f242818b472d960056ffd438175a0eced16ec66132aa6051e7c844127b3c61ca8cf570a7c6d5bafd6e8446a3f143faaf1b2755157dd42227b750d8fdbfeda85de3c45df060b8eecc985b0909d0dc98305a3c302c4873f30b782b47285a46a3830fd51c0f53ccaff669b6deae5236123bf59a241b829b9ae36bc9ea5d4620ce55d04062649d83340e2c8899931991a1aad6eafaad8233e5a0191bd7f40cc8be5cc8898495cec54e310c2d63e8b7931d050a819492f1ba148f189f3bbfd4b7fdd429a84a20be75ce86d25cbcb4dfecb65c0cbf1b623eee971b6c9c557cedca017f2edec0cecaaea10aef7b3ed20b31ca453a5867fcbc1e5f6842293d9a81bdae778eabda1f9e59b00e3b69620616541192b1d7fe5d02fa0b71c6cab4c52dd5fcaedb75d2aca3c11bfbe3b872b3779b86cfb8f491a21c607b680fe6d631f63589eef5b2a1a110c3600da5bf0e8f8f3bfed2c7e4f4529eea257331259df3f3407c05b877f15cc8fe53b7f88a1cf5d17e561a6702acac85f8e50e61f3a9eda3a896d2c38a9b753c2a7e308620f9c00385f0bce0d2840d1e07065941775ae31df57b214a619105536dfb46ce8d881d5a61fda0198a5736859ee50e7f2980c09ffcd7d11ceb781a6043d19e1bc1f6420f72ce68446bd453e561686bb6ed3d336af2fc855bf49bcc7157e6cc4d674fdf4d4982becc97887b83694038340905e7a303c889c0f9942495626bfc18d090b22368e2a4c29fad37f5eb4ea1b789e7c4fd5d7c2c38264256cdeb8de58fa5ebfd7ec4a7bea9b7b466b9aafa659bfa5e0ea855579157a3cedbe1ad8e97097ff7b0a2e62ae2f9be2921c582ddcdba0a02f1004358410bdae7d7bd7e0e9f53d417ea8969421a96d9f909de61b6c54ecd563ae9dfb337064ae115a843db95cb8c2e12f4c195581ad07aa9d710f0855925ab26159c6687dfc5b7fa2a79e198574af17dcd25fbcc9a971961cb5cdc9bd151f4381ad37548478d3dd06dc868a7803f9db472db7f5a0bf593d93fdc1aab627dbd17d487593805866891b0a032776e58c5dc8a0fe3411bb0a7ce161c030cadeabd0b038dc995f1228307cc3d6873b8a6aa9bceb0839d2425cd62e13b3735d2b79a74201e46ae55bf0a91be9616b60d09cac014c06718fd8f405a719ec185415c65619b0dcdc6c9f582a59624724684a8a5bdd068542d84d35fa6b580cbff835ab40b49d718a4988a1bee28aef2df9fc86e78fe47cacdc1ff97012c3a4a3471eec25733fd536bce26cfc4c01317a2999004727d29395c1fafd21381d236b22bd09ddf7432f8ff69dcbb19d26e4f93a8ba539045f77102c48e518bb64054faa1b56078a3176c03857f908fea4ca87abcb739fcca2ff3615a9f9fde447134685a6c6941166b00ed4a287c81bcbf49dbad3050977665414b93738768beb6f3ad2598e9eb8a60b04d797217a1cd5fd002ea0ec60596d1347a2dab19de6ec8756f48e1b93fc6ca78269f8ce628db2ce580b0c5a3dba92722f9cf13bfbbd1dccf4f8ff2b51fa9ddc54819f9bf23cf7492d38fdf67ebedd0687c155175a0ed2f476f7ad232da8607c0f49c75bf746e56eb4927bb7362fc6c9d51b7e9d91a115e99f2898f7ec93138539e13336ffb8c0900e596bf42c37975783501416386e88c4ecd4facf09b01352225e82c29d821028264851e996856740ad76b4325e5acce2386a67950fd9dc446a41d84c7d0bb7a796785a4731b0c3c4ad1de1968f74c4a9f51035ec2482755e21ddaa5ab5aeca6e0faa882ff4cd0200f417e04ed0144d81d6cc26369de0ef2fe4773b08dd7bd4edfe75ec93c5aa2831bb00c60fb07cb28374574e0bd1e2c7304ccb51446b35233154a411b6cd00fd803e1819f634167f24b18a9ffb939fca3755dc1d968c16341d8150cfe5d6be8afb9ca8268d887d5d47b93d57e58987cb0eca25c3b2362c46bfb3063732ee16ac009ed08ea2cfa26e46b9832e86eae2b1f3c8d809b11791655a11b23e78580efcab1562b95fd303f88f13c091998db9a6b01bf5a8b96bf8071704651d1748581e914d74649d83f77077f554716c1e816530e60fefba0771748fc3f68ad2c2223672078d30e326e1764370b19c75adfade80cd5cd9d2f6d62f1b25a44b2f09f98af4f7b68315248b34962046f02c98205875212799a806d0d39dcffe6c2db4374857f095395be41913a99b04b7c5a941e638a8b896e8ac44716432bf33451e8d3af59a3f36bbd040bfa1885b712aec81c7d88cd31a0cc55e4e593f0084f04aaceb3d166ab9257f894f26597f8d7eda9666285ea410855b72521422ee73d8be57cf2fce7df031da8750bb3e0cb9e905204efe0ee0b16727cc8333789c0113ec2d68b50173184c322f12b9b31a5b8b97e91eacbd00d08427f520bef15f089adbb4b1b43f1d4a8fddd0e2c6dca5f747a3e9b2ef444ef69df45e1a4dd6fe8859fc1f6dc696786a402e7d15574e0395f7119c7e3ca07572d26eacfca7c9b01f739bac4745767af0f2a9d884da771a889a61d75d63e9b15a409fff86af400fdf414a6f42383a0a710ff80f9322478e8ba1b9701fe39f36a6b58ce38cebbc1dcb2ff26f130f37e934234cdbfeb782e32fd6d0f778b4731e973fd1eb99a78dbe74a0635d0288b71a6ff2a09186b9bf76c9c5cd014cc5ef59f101cb70a054d9f00eb3b2dc2f23931ccd60f93e22cd3507afb1c2037d96d954fd6ec888c08dbbd57caea32867329788c7fc1c7026f3b28ab30877ad507fc1e2b4522ddb25e31de08e539405f44c7686739793269a465f6104edadffc5952d242f16d44761f4caec6027e5b73211644605b8832178beef06f451ea75e12e7d4980cc8f9324529a33257d31d4ac3b2500e54d6be385b524c2f4e9bfb0e4a519ce707c3b2f3debdd602551418e5af716c23c8921e5b99110b97dc1c918daeae5e517c5288b35cea0f59a473f822d752f33d6615f3bc996ce42ad6329dacc7fa7cfac59304b810a49fb0c3551119e60bac2a4d41a4703c848561f0442e78656acea3c4c00f1e1d5649714d0c1ee166bf233673b39161885c43ac933a7b960c6d5eef00d0cd7154abbdf876c617cec8e819db192d05ec49eb1471b81e0678f1dd4a7298f48bf2fc869a90d61da3fa00757da74ba34c90164fe946fb4ff1efd23934e75d4453f536d206ebe8d013d05371046daea9c6382fa0c95e8078e6cc2ea3f95afb43bf2753ce3c05974e69f8094ff485454a1b8ad88b35bff349288f0464d71c6c7dbc170b72b76d23a8ba6243f8b9cf508adab3ebde90d4a1f1479aa5308d9227a1de924092585b32de1ffe7e84501fbd021734398342954e896928fba8fea4389bd23cc98a275ec6b555e70fed599a0491e64c206a194f03ce813ab21cd293d5e7aafcd6550e2f17079dbefa48d67c36b3a5c5ba6645913f8f1909db34ea3910aa013d4ad43bb5bfa64417cb2d1ee08fa20df4bdd58184f153174456b5140c3345b56f72fa829515d77c112ba1856edbf824712bbf6b8d22c2b9dbd7fca229bb2e42ea362c9c2f96010133d674d933fb72b6b4635a8b0a743b842e6ba2ab1dbc1a45e90ef4dbe5a257c7d4e56b7f9b506bacec8f92c3bab4f06ed5ad3c6b8889b0b26cf286720cd763db72447082d5ef9b0e0731f6e7049f5b1923d76487fe1382a7fdad0c7fa6c89214634973759cd38f553b76ba63b26fe018bc05e70f6683f4b1b97b17cf1686e2a46b503fb39c3f56dc3a7829c48a168fe4b1fc433bf36941d0ffed807be9be03794a91776ba7e105a4026071448d78f28a9801bb801b67aa1ae286f6ec1ecd96c576193d2abcc57ca614bb9d44bedc25d52e19fcaf3f9b21e3a2e7b8cc895355652bcb591a41e61f598729634c92716193b516ebe11c8043586e3cf7147c3ac77c2e94b032cf4b378622e57a7d0c20368cb8b936caeee2cb9c76dc649909d802dd71e1507aff00777197b9ced10c3aca55567449ced1f5c0d063dc48f3d2029a586468236009552e4d857ab312384ac53327332ac86f1e62c4df146f154b35bdb4845d70105f3280bedf2d762628d8489d3c283e2f2a70ef36c64bb837c6698051b8c4b6a5b3780cfc169f1b304a0e5938d447ea4075e72cb46ea9042ba56b10385adfb4ed468c681cf72493f404a9714a106d92261b8581a663c11253f352fcf9db358c84eec2a72181e189a2111873d2a61e3fff22d5632b00dfac8e5e6becc89af19c56cee7f1689c1b33898b90def8da167da42a597a386c009daad5fe953ea428f58464a5f32476c6b5f49369191befdbe49be744207fb3f5323745b3a4287705503cd6f99e181c75c6bdf2ea558037be105f1e89a654a3e0673ee5cd470c45fff9b3993fedb6257c944e1905f138a7c6fc9f0c948d01bb111e51b08f89cc15872593c7f65f5049d31b74d0a4c4136a12151b7eed2eb1abddc3463a72feb663fe6bf1b9c73c829ae22dbc7bfa43779aaa5b131aac41885c149bb309119e4c9f03712768b57cfcb26a933f1ed64d907dc067d404891eb6045739006b540e1e78e208bf80ec8dcd5e6aff17f09a9948331e5c8dc7e6d8add2b0b0f4d505c13f00cf48d5143bd7a0f40c163be0d4b311aade6287da68f7c17df68817281f22a3a4e1fb5fc3e786dfa6c0c5249112ac388563427bc40efd44092d5e5c024786a1266d344527f529ad8f3d0ad07f48b7ff8c72fc0f10fd0d74b8ee1b669a4a029aae7f53d45c6602677f46bf61eae2c6e03efcc1a7ba28d10f5b583a916349fb38c3c131a83c4b1e10bec93e4c6317c6addaa260c47773518aa304592034a81db64c400f779f73282060e5c990e5a42a142a940eb182993fcd19f3f062aab0410994e6180b22dea810e002f8109c8211bdc1a552928cf79e79367ea87900667a82b471858274c0c56f36dab3e5a8088ffbcf520f494abfe01d8ff9146955577c683022e8bc2007f7c3ccb8314fa260a23f9381467efc92cade88d66be78e498e7fcfb501fc231da43f197a3ef498fe0b1f4be60f7a83efc0a04515925bd328700cae8ca4a69fd680be5be70a066794fb08124c66a43e519b8dc00a7a501715e468829aa152b9c7575b0c8d5bb2abc6df8f0b65daa7c3efcd4cb65ce0a9630938946db4cccb7e336a96108fba18199931ab7940793e9ee491e119ddedaa59e50b595f8f57ee151920fd2204c5aa8bea88dc031342d70f71a62edb639e84e6cdfdc9b202e313e10d52887bcb8cf9ef88b40d976e00a2381bf27fb09273cd785f7b6b16e08e0239a9a58d0142f1a67a04cdb1f9e01fbef682f8c20d290878afdd55a0b6a6e8aff89de40504cc721192cff7d14fdf25fd5fb0e9af8e20520505e984ca162e1a5e46ab9ed5a3adebf4f5be0da2bdc70b894dc6f1fa0d9312f707e353b3144c99518906c7714d536872a73815ae992cb5da5eb456674bb2574a67dcc277026a89a0e98179a257ba503364d2c51a07d1eb4001fd08cc785d5f55103ae757d5d49b11658ce40f32585cb64651b80dbe89c026054938c505b38ca66ab696934dbaa98f62e81eb5ac804db39289271aa63ef73879f17ad28b24a40c8ec378021ea4dff062d158b80632cd4158c531863c51aee06e6dcc9e26470092a0c54b8125372c1459cae2b0fc5a707b414300b070f5a6f8b6ddd8e28da25f0aa61a63ed99c206013c008ef771cdc924b8826d4b837308e8a3cbe6735cc7d5a809c972e7d6dbe5d3e8a91c791bda83cf462b5a5067ae6892cae5d5f11e5acb4ab57e9aecafacfaa0f178febbcc806007bc5809541b8c2f9e85f6a7c62207385f92622a5011862e8c0d5ca3e87ea2341af354e078c306d414dd5721074ae937374fc974b4528adaf00ec0fa80632e90960dfc2082f2280db392d8fb68e7044267309adac6d4256c687f474006d9275c49cedc9677e2861f65ee1afbe96df426e70ff08f2c1493235fa57be4e79121e1771e7c1243ce34e121293f048c87d28849fd34878eaa762a0144fa506915bd3098e1759486a98ee51b12757323b6222e90ed38fcf94db56379f4a5c040d6f134865d8f9d31844ec048c1a755055013eab0f58d1b77f2a3c064c0231d5711d15aa69c3e586054c0c5a89e1dc2c2547c103e605616b6f8e07bd49c22aee2c011a18424b2b5eb1511fa8ef9d05205ac8fa73542878f3c9788e846f4452b2b7f3e35f388e04a5f57949d76026421344473571ff9a1814273948dda1a8a6e6ff8a9fdc659e34af6f29594d2be7442273411ff6b844beb1f67afbe895eb1ebccb60cefae221ee20a103318cc4e67b9fcd0a93a4050a4396f20b7cc761e160f5561e5236cb32e586a4f4d198529fc6d4a91a53798d292500ab179614a0b1b5d0939df140cc4d3167a3694d133bec4c4f1263cb03f4fef4b7307e20706c46e5d4760e45bb5425a649aaba8c6bd31fcf8b9ab3a4b3dcec8bf6a2ce01d6afaab68beb920230766cb7dc2bc6bdbe1c3d8f8b231024657907c51c2f02950ee343ff8d0882fa7fb63f589b8b38656e1aa51c22346066f6a50749811dabb5681f46d0a3dbb5bc773d5804a6f75d3e2f988b161a1a3e531aef6a360946c0f87fab62a2354ffa07c30fbb4d9ab3a7b38cc8a332ee3730b8507100224cb2c49c11ae3445e5d09c721ad21fd41d0604a9459ac586184091687605fc3b68b288eff5555ff1cfeae1575fe62eda70794f9fb55e22cf825cda4c8231c3350e019c8a4c4e831aca1239cf9c2252b8fbd287bfcb51bea49fec0e8a2921e6185e7b9992e657bf39b3b4a47bc9ae02552d3cb3089cdb413b5f3374cb362e63e4c380eabc7f9400f8022a44c4a12e6e3a1a1af0376ea1fe01c7759124a3bd0e1a03bda10ac8a0039edba4430522df68702851d43cbafd16374b83028dfc560dd4028de354ff5dd73bd6116319e78241dcd40ad62b11ebd4dfae57ac48fe24dd7a1c24f6173a65df7b791089ea08dafa436d2e429cc8004671f77c89bd3a6c684e7c092865c40faea64f46142dc928d33db3fafe5c36e37fe206b25bbbcfb861b24bedb1bfc17ebc5ea9ed6d92cf64b176b30f64660d135ec0f4013cfe86f5be4be514d05cec406655a4ecdbf6ff5572f0be3a444872ab135f26e68f86206fba26d2489f54d67d9b76ca3856e99dd9a9e82398d4c18a37f0aaff6f1909d453fd83dc44b5b8acba9dd7729fa5cb0389d39b2b1db2b4fa5c4a40b1b4d2b2099b51360fcaf8eca7909763212da284f0dbdbe15ec5e462af51737b0a21077d87a5be420192d9170ec7da26310d8de2dfae5f24e1cad2fde737978853ef5f35fb70d01802bf1a40dce843f73481f83b9bf73ed1d912b14d68aa05d1a0c05c43bbafc113049922b4c8604e5b1f0ae9fe5679f4c63ac20f756c9bfffc948ec1f050554109adfe4a456a233a74930ce997b8252b614d17cfd7f0d7112e439033a918862a9b58277195eccf047dbbc30097f776d2e5c32a84791e039d85f3c894e84e8f203be4263de2e6167b28f2c94645127a3bd2f439dff3b25b08117473a315429c515ed79a71ac18c0855eaa4138fa165bb21f388952529da28836fb37ed58995798d542f515dbfd6e859cdb6ae612503d18222d42e208d71909544dfcbf9bbce17bf4db300fa3a193805ef4cdccc7a2cafb80b8c6430a3ac63cf07def6a177235a7ced45fe897a6a14663a6539b499b4ad6e6acbdc56785fa5a70cd9c9e10b71573812ae5dab7bc54de2cc96aa04e8af517e6941e7e20c84bd5fdea7b82125f1b301768c16ae22e8e00b60ca7fa5d4c281b7e4bf08632089281fe65e0a2be13b4e6e5755062034b28f910345050d300322ff22f3b576922aa0b6c487e98976291bfe0a4a61d605f89d0a61a6d3470ed70aa4bdb665d75bcb1eaaf9dd0d399c5958ffba3bdea2b388638557b6f2b707c35b7bdb4bdd20344160a34cbcaad61afff5aa78f18fb52330127056f72f8e0098d644db7034464b218910ebc971a7e4c8ef039e37d272db41785540c668042748e7a28b590a7f0b3747c4f496e3445b0f6038e52a0a2560feb93aaa0abc4feb89285508d8efb9e6735c739bd4a03dc1232976baf625eb3b1bcb25b3cde7ff38103f5cc0fdb9f1aa127da232fd227af643d7eedb0b84a665c9a15f43057822e9a5363d2f809efa3495f8fbdbe1f1048939b1423f42ffa0cfac9daf96d89942a7f90a8dc5158f795d621c45143e69dffc145b7c7491adf3112737ffbe5b8720ee0c1d15d35302129eb8d502fab3ec58cf0d83d6965962b5ee0ea92b0a6c398049588e3c5cb6638abed601c60041ee40f4b644729811fdb8dc59369e529169f5b786935bfad9aa3e41ec4772ba7d400ecbd3b51b8ba486134af48aaa3a11c31f57fbdcc67d835ad39f2c195df0d8343e4469254064f45ace1eabb507e920ddac0887a9731af5ece361d857f2f12632c05c6216e3dbbedd6800d0eda5b92a81355042034d5bb1e8588907abfbb64a2cb62df35a1554e55a0e4503309f5637f12489982e2cd59d609a91feac17a4b3ad162d4c1e789213e69c242c055f0c761ec839e0c08ca654025578cb369f327fadf4021104e8847c593dbbcc563dc09d10e8e639795cc526d676f49acf63cdbcccc2205d49ac0c09d68843a2c7e60eb92ca8a1a40e593f928025ca259732801f000a068484ae7ff16317468a1b3d865899c0019956817c9a4a5a011ed02753075a069e4d935693968bf3f3b65e142a3e4d7ca50afa2e5574b9f96b85e4d39f729fd4fe642390e73415821b154e00ee708adf5044043a7bf2d4e23b558a6298be747383be8c45f252c9270c8689df7e655c0314de0534b8bbf23e024ff95152944a3bf4c41f9ff283428f248c147a4d188612c0f1cfd7fec8e37034262881fd54cf445d2b044616c832da76d4897efc2acc83787117c11fca2a7ffdd01f9ceaed23c04779a9de58e597b2d1f54ccb6af8ab24e74ef65835eee5daca186d01f493c3686eff585d087c74994add1292193557593abb9524018f4ab296886091f629ac6ab01b8ce24bdccbd97c7b6a34189203b1fcd9439e3b89bf437f79b6c3039376dfd1757962a5da8e5a69e4a55c335d3092d693ad0f896baabb58da1086752ec0e0b5086f5a10f96c38ab61d02c7b58efe53b46d0837dfa1ba0394be52276d6dae5b04e4ae4a75dd895fa9a471f1e4aecd84941c1eb6cfa9d31ea9be8d22c86d3b9055e32124ad1748368fd4e608e2b16313c4db33e5f8d80fde5ce0b1db1ea332a050bb2f0d28184011e75d96235b33c2b0d003877837097ed265397df6be9a20ea152a80c841070e6d44976a50840366d01089b14ac9c89634b2eba2266fe9d98374e157d6a4baa0ba99ff604366ad37a28db6e9cd61bd4c4c2a9650f61d7136c627c37b42596c77055823e69ce17b1f5b6ff37a92337f4829cee44d544a3ddec768b525b914d50e5f1e3f05a742780aecfd969c4290dc39f080651ef2a8e1b81c6d7a2203941add6299e1f4095d46756157647130d9ffee71fcd3803ced86ca22acadbc07b1c64f2603ea5ac53abb8ee4134112811a419d0634976d40b62cf474490d2748d47ed76b6a7d0f350b8390f60b959a60cc6e49bc5d1a8661b6a2245f18461d37a44bee98d74556f6ec4bea34e552ee060215260695f62c6e9a3b84de14e8eb73357d3e8f87e5ede51aaed07a14146d43a0cef0443688ea74facfb715584fa3636e288769f76664da7bf46a899eb0a290961cb905eadd2dd047097c9782fd28ef96b7ce704ebda268ad20d2546b78530ab9ba2f90691f836cf28a076a6fe0fbee1bfaab0fac31feabe1b3512a3d947374946a2e73069c55c646881d9731e7d32e18ea9ef6ac5d64c78cbd62cd585b47f66cb58b4854b6ab4026a771a572400848ab57867a6ba2b0040a9129b14a811437b0fc40be614891c03b8b42020ed23d8eed8e4ce32fa25d2bf221624742b8de325df28ea4c02a8634516964029720c7a7e3afa367102accab86b47f1659285690021a2876b85f3868cd4cbb4fe653534420ecd0e021da18ddf1425ffc3c27649e0797c62e3b4ee638c8cdea0acf803036957b388bdbd7d8abb8597046ed3c119eb8fc941ee2fe1dd7515e25abb0d3ebce206ef68220beccf2cf76565e61754cba0119bad636e7a6d1fed7bf02b7d9a3ffc0028a0fc7ac0b6700902c73296ec7d3f49481ddfac285ad40b319fbf144c5c468716d9a5fd52786f9d90daf51131056d708354b7d4f336ae7c24706422727302d685ea303766eea84f7cfb7cb782111f999edec9fddce1f658c3458bc2d4aeea58ae158cd022c95e3d827126ad89439777f0688224410bf568437adbe0a10d03853876591469480ce35dc2494a97d6b8aa073152bdc0965ba06b730b095f0112f728a5b5fbc87c8ed447414ccec8df6f3a640da5a6d490c6395ac1ec263b3862ecb4f40faa69e87a9e57d0d62431050cb51bbb9cb41ca86c11598baaecb3507eefbbecd1af628a2f629f49f8d9010648d7e942e19b91e46d99263a28125bb0538cbf138c51b773804dd398178ef66fd11069491f367be35cb206b38fead8baf6de3168563ddd5fc9a8dd050b93873eb4de35c6edbecb8f7511eff4c9f233d0e7227fa2bc73b52bc048d143d3347a3f64d51553cdff76c487357367ba1c170e2d1c59cd21d18fb70d01f32ec2e390022542c2e5ee55bd4928371c1631414ec014749d24f533f831358c6ff7635439fa19d2f6d9f6044d524ca6a6fee1ce0c5cdfb73c8dbc8965fc08ded3e1f2af737d1312651c4b9ddec7393f5131d677618083bd7e2f170379c1923446b11ffb6201c81375f405315abf311e4a1457666471a0cecb12025077287d7d791000047c88f8ade7e64646031db3542362cf4cedbabc1809e9f76f7219e155096083e1bf66230de4f937b628d90c0dae709e617df546588f03e88e6361a341a503b489b3bd6f4ef4eb059bba59947c936e10c03297e4df575e3e32970820ef647443acc80512ff697d0a9161f7d71d1ab2abbe0e7a330512098a028e44dc409c01b7d4af8344ddcec9519d6da2b79db0fcbad66f1bf71db130ac1d1241231c85ca6886b5e4058a68ee834b965c6fb1339a62a5a44a12bbc609d0264cb0d2207ca6773e7eb9aa7347b05225c53f85db1e411ce10735f5496b0a7b556b841e1a9025bff1053b7fc5b0c794e2d1066f98306a64e5c2b26eefbf065a31b46d9fde92aed656bc33192cfcd0043fc49386935e309619524be081d2a249966d6c90aa65c86a585e4a5d586afdbb045755e5e1a1824921e7c122859fd5a6544d694fa71b66b1f7d9345050169321c7ba8ad5790a0fb3e51b1c18cc8e997e7930665494c25301dbd534d01f31dd16dff52b9f90a7b7d1faf30d6e9d0736b9613158f9697f8b47c5fe241cb3141eb02026d5abed87f32842c46e2f60065a4c65516ee4487379fa01b0a96a595dc8d33442976e24ef89bb81b8b16d407f50a96553dcca05f6db3f99ebba7d6843210c631a3fbd6fa3b83a956ecfe06f0e81a745f745fe3d8c07a11b925dfadc67b54d7b417d18e59a0f91b2af771de1b7c74892bccee47c30dcced64d71e95e3318ded0e6080e711d85f31ad9d42522215ba5db17dd235e1ace26243a3f51ef0abc9c78edad096f5a66e9d21151d8c076ee7ac235e60faa19ad7a58d80fe31d22500586ee39af39a17d5496796c645a14fd4220136a4850afa4ef07315e18e63622eed4e92dfa22a5704ca6a5f6d7bb9249d9a2b7f8b5db8c838b9c0573de1c28e9b3e31602ba3f426fc4e3f5b5a065552514e12617e03baf3f195a5b773f7b67b916f35c6c76a4abb4df775c253941adbe74dcaffbd88d9df098fc8de37c513795f2e818b2cfbf25fad1905a3cf0dce10b74defacac98da9fd720969159904f18fca525fae75fc29557e5325f80de04cf2f86322317c798f523f352d594d7b59bd3406c820d1826f903a5c7e8cf47af46da58cab66afb62a4431b66d6191dd1ea9d47f6ae959b5dc32b83ac0b43569c9e31609d7ae4c78d036273a4c6c44a54413ba52bb42c64b82b6085b318c37e1e16fb04455a743fa0befc31fed932b1845ff6eee43c8ade968af16711ca708895bf545045747b6613026f2ef380f131f5b1aeb747efbffd5fdccf60f2c70714c3b78a9e81660fe621af89af089cb9805ec8a7926fb0e63d8ed1dae1535a844c51605ac1a5b178af66acf066ff1a9e007034392eada737a7c1178f1780f2e668cd676b65f25539f9f2c71ecd3b40716747036e88c9472139df68cf6a8f631ed9d0e10651690b77f8802764cb90eb3eabadcf97304028b4d9e7decc09cce793d8037927c499b0d4a3bd361e49b26f0940fbfa2543937c682adcc72358401293640b0b3169863efdf8dba9e87d45e16e8c086a0b9381179a3193f6747ecd119d4deb19b2411827b282ebd8b732463730baa6fe7af81812dda02307c57a9a7ad45ccf02d40e33608c09cde89179b6f378d37f3bfe309982a2501d2fd2082d7141fefc3ed6dfb895f24f8804ab4f9f83f2806c95368a71b43f48e8f4ff38baf7fb65c994cf454612e77e0414548063469e0cebc51b2d2952f2df51bfe1d142607524fe9c42a8f13a9fe583d53644e27e9f233c84296b4ccf4090a590e622e620cada9a46deac62a247a5181a67d75468d8839161021995868e7c968623e821ce69ebf152cc9d994a1458e77ffbc667b40373ab8de25c4e6b0bff62d15d78f647fedb2e449a60b99e40a95184e860f89a5bc357bffa5ad51f6913510d9fba320a14cca5c514523956db7097b57bbce434e59b5405031c1668dbaa3f3cb0f79d1a169aed983407d0153d0715ce0bc75b346ee090c9a30004b7cfe363276f3e06815ccda6acbbde1da67995462989e93e3e7208ac5980d00ff3e1d6974681bd07a002267103088fedb8194e30039da6bd569512334958ae6fc201d1d8e753fdf9544a7c335115b75c69b1ef20a2f7218990aae0a83068f5cd6c7bd5bc0e766cbde819b00a3c377eb42760c870ed1c5aa66f3648282cf92fec0dbca033d63ac4932c784220c61c3bbe064dff37979dcd8d7b174774ad45dc6ea6e6ca8c33925dec8b4fd8b0c7b6fc6acff15cb8197b3dbc6ff34362b772576bc1157b495be9445648121d1e6c7ffd5cdf7b04942facae66e38e9558962ba4e3fa460aeb3b4a65437634e4affea6914cf55d5ea54db40a447fc5d8a43a01dc80741678d799e5693f9d7c7b9311e161ca23c20c9b273ab9afc9b5b5f7d4b59da6ffdaa75582d54620234b0f6ef1455b99bdad53a05cbe07f3f7da3c7a75cd2bf961f34af6b8b9c2d32181eb0abb1e1f709b29882df43aeca3cba6e58f4870a9fb5d13d9e0f3f51e47e0eab2d2d681c4bbc0d7268a72c61e1736280f28f54803bef37cdc23775e118c2330cc60335f844972672301e0f6c9e38d22bf1f629843df6a7026260b083fe953670d2b3de0767fd3ebdd4e3beb2480d2d888e7c1be3d164c430e9a3686ffc76e1a625c4d90f84e8d4169300662b8fb593714d749eb51e08b90245e892d8045c45021a4fc5c62d540ce378b29d4dcd1fc0522522310c441ca1a0dc618267d3c3fb489fd0729000b9cb2a45ffdd377cf20045f18944b09dee9f4e939be099fa42093761e312e9c8126b28ab847c6259cb90d6b79f307d2526f7dcfea9b8d6161e1c5eea049462c60598beac60abf5257655d96e61846d8cc107b662cf36cfd6c4ae06c9d7c1a1e6405a3ac0091c805cf1f89cbe8101e084e6f471680427ecb0a7cc4fd4e5ce1e51cd4ca2dc83dcc7714970ef7a8a212abd5f07ccd15a23e9c8012f544a1a1c793ae2720503111c86cc055f2059225d5cf7843326f78fb2667018343e481498c5b037da03b9c62cb4c6229c80e9dcfa082ba0353e7dbd3c0e6d67443408513c1d37210a48f8fa8da7449a91e9867ed1781f303235bc3a2b2afa167886f0a0de197deff6e4a47297fa2fc1adaea0e4705eb2af6bef66dd8f15a0a3b9c2fc4814f13deaf3a59399a57c804016beb5326e861549a9b8028e26b0eeca3f769343d04e4212c1d3ee9bed2b8f66b97171ea80939835e403ca86dead3ffbb38a3b3166975994cfcda88279ab3a050ca28e426be43b2aae98bb9d36209da4422f1a8209db97173458405ecea3ab4f926323468f72030432fa19d3e80ebc45e7e704c55d4f1287ff563e33dcb99694718af0db20d4e55b59d4ae19fb7a926dc0fcecd3859d35279d751253db6c190ebf879d48c130dc0472e8c9c81037ce68b1a46ceb47604b1a84745f0859bd106e454540d98718af35ba76ef645767b5a8475b303c050d39dd523ebcf33b319dcc66279f1d4df113b2c6081cd3b3f57ededed18d4f25604c054bc24c184d38fccecb95f11ca5062f8ce2b039f5b4ed6d2b7fe390f3749263b6e78ca808109685553dd8619701c9f2bfa6080aecad8d4d51eb9785c3777347b1835a215b48afb6ea239738c381675f3cc15182a607772c47506da8aea128e43c6f33e0686d032307a0e7951fb2dea83496749091599a3622f1bb916afff0c9973c50d546c965be880ba7a7f681198b17db3ff48c37af12e5da43ecf6e31598174cd1a247e47244a8ba49332417605e7717e10bb4bc446b5c26a898d9a7e676b2b8218a8eed3fb726097f69abfd0842ca1030c57353ed79fb9412d0b909a3679d7c66c1b79935d550d8a67e8714e12b34a923a80e1acc64630f0500c4cae30c01beea6092a1a76676016c5e16988a99abe3d49aa4bf13a2ab57cdba98441daa63067fffb08543f6938acfafb9db0b2a85321d22573b043703c254f921d273ceae36bc71014cfb6a66fc4d7f0aeb9bb93023c08343a6a7b827f05d76286de7895071890fe36ba1a6a78d2b9f3b2d30951d9916166b8290cfd933659904add09e0922d73e2d0c83a9b1dc5c9cfd8e2f6bf52a87f4e888c6b9d0bfdc5b8c628eebcc3e19442ca16b250838b65cbdec3d145c7368f4be19f178fd9a261b4330fad0ba0904c8ae20836bd4837a19eeaee5c8f846da8040c8fa0aa2eed9cbb790381c6cce8f110b090ce4c8955856f02746026c440b712f92359abd62381807b505dfad75c5fc209c68af08ce451f5bc6fd40a2f20568868d9de21608035c63d5101b052725b1917ab8dd2e912813648ed79f0537947ad410b4af3be097b3993b3e4b783e5666d74a0c653e5beff9e48fe5a30859ef7fda08294656224bcc3f3841875f4ee554b28d59d6156410796e3e979284484d191e7d5e71c1d4816c880b319802befda5261b60a781a87e4665f49c87654009f361049d2be3ec977ae0ee8788d7d9b15cc12c38e4e865434ec58cdd93f1a484e5a71e5bbeddee36c21bc1f020cb36f5a2b1a68ef22429555f397d6704918ae9ee99d25c3f54cc91dadab7d11a8f37cdd1544900bb20f7c68af2c1221e2cf5316cb0c56e220067d8ba237f2651104375b3ab2a8680bb87bb4ccee8afcf9badd916fa845e32d21d3e9e1b708637fc150442a1ab65eb58d8099a29aef27555046e185052220140b6570a6c8d67ff95a934febd6be69a013c9029053e3076c7667d56a00b821a1772110e4fc77b7dc004c432f1917367ad06222b490212a76aeeb4fef09a11ab6531984d8cc98bd8a082339ca30eaaf60bc11c74a4143afc83e0e5774c19c599669b46362bc97d426591c45741fc5fc427e3ef46ff928c4362a1286f9b284f36797244908f70f229ddddf1904442f0967fbe4459aac4c03e1f15665bcf90af6f41bbd1823281d7d3abc3d493dcef7dcad7984b793f7e49a2b72071d94356b40280e7b9bea8b1e9714427268b1925725a2e5ce2c3f1fedd515eb509c188f895e1e7a05bc319cf5b2452f57bed12f015edc2796405af0fb75def808c1704bb0e24ebb84ef9b501073b4c2d7da39634b2e80a74278ee3276c3037a38e6666aadc9bf64ded3f1846e3baf000debef859b93f643ca0847aef9405467c6542a313f408166704116ae8ce0b63d66782d53b6ffc6726bc0b23482d9a116c9cbc9bb462f4bf4f86e07793db837021e2bfbcc868f2448bd0d3d0743d48e652cbf59534481902080ab3423aacbe54f616326906a2177dc13762c3b6f0cd443b6cdd4c6fa7cd9f08b9e813742774eae0488c3b38339edc5a9c9d58274045b683bb2745cc00363ee0f5f85b7d1ec7c0a910198f72be01d327236d4a955650adf15f8a59200609847bced45a697d19acf6525c81e42aceccfecba4c6c51a47a6c01cb9d09d6060b6bcf29807c5f20e5f213fed3de3986d04f8aa5a5f16894e50a0767fa9b33c0e068cbcaaa734f7caa078adbf42bf25d8c24d50e8592f62bdef34ae84f7a064b9c0af443fe8111f49d9fa21cc33a424db7fb152300be0b4720c4823c7b2d377bd42f4904a2105cedc909a210f57fa526ebfeac9a69326202ea9666a24cc21407561332d65b018bc08969ce8d04688d8c8df08861d33bc8b605d4fb5c492707a0c5f6146779829dc0dad6cf846fb87266a6870c5684463e4dd0c152835d3cfc2c35e2178aabfb928b3ea1610f294d11bc8d38ba2d15647ad6726ee00af104c5541269b3b04a124c6b4ffffdb4ab7732a714104309761c483cbe999e110ebe5fa6446934138d6704041e93bb23e5ba58831a58003df37854715e5a22393be3f285c127e37c45bdd07c3dbb5a3c835f8c10d9f2f098a24dab97120b0bb11a181606ddad641d67a8f6d43ef1a7761511aeefefc2000c7bae53f37b6803064e3dc2a468fdbac4f92e52c8af5c27ed75b82a036f5624db74363766f8143d3a4343d5450c9e7e43ef9eb3e66f41be58f29d2def832033dc5184f487237d0ddc7ada16c2a959c39d89092eb91a0911faa555cff5012fba4e5dac422ffe0bdd5df91b5b87c0865dc00768c598a32c4d4f4a57989a1032c75fcd10b19e4b3bc084308e9d33f5b97f3349b1dae0f95f1141221ae688114e717c2191be9b657ce2f81328fe66724e51bc342a5ff3398f087c50e49ecd8ab9c5e127881d1ed16632106d0dec5603ca2dba6e5e50d2193707b1465e1cebb092f71d8a238d66b96d2f44111b91cfbb8dc095cd63b7f4c922a3ef787be6796b7b79e6628210d7a9a0190a396701011050ad911f21db5ce7ce946bb7bbf61858d0d8048a19f203f80179dbddbdb2b794292519ba06c506c906a2aba69020b8fc83a297850b50b45678204784eb3fa1b02dcf310ff3ac43ea5e7bd67e569192861b3c3a82ebab164d61b528bb61c9c4086e06d6541d7b9a70e6501c4f8b441ee17596af3aec344e698c7ac1a817ac6295cf74afbdc8aa2a3a0d63b166504b0eea08f335ced73ac2adade34e38e18413e46f21aea589156dce756ee44e2e577c168e3b144031c745e1f913c38ba38e3ee39f19615b3cccbff898d79ee58f746fa33398165f10cbe970391a12a51ce74a2d02df9f43f2bd3fcb077ed255b3256de434d9ec5f7060619458f04df8d9024d2ec069f240937f9f85f1287c3cc2cb7fc2d72d1c405e7ccc9bf0f5e02bce1483cef295efe8c01c3f2fca1f0dd4805cbdf8988e017fb4f8ee7fb0bcf6934756b868fe44c661a95233fe4707fee85e037f689f7dad9bbdf70cc064c06e2683ec7ccccbe0910e9c413de36fbb1b0f9cad0e5b1d067538533c58913b714f5a24ce14f7d322fa751cc79992364e7821877221d996cba0e8bdb890acbde2c7c01ce140ebf88c7f07f33280014d3e83eab14d475a7bc2a2bc3a57c7b1bdbb91815906be0cf6cfedb0b0b57f5e4097171dd565df9f187e3c395adee513670e3cc22b7390358e0239236d545ed3ac1ed155f288031cc0000660a9bc599ea7e2583e8ec55109ea703a74d2f5e78a8cb8a62a77921d52872267fc816a15d71fe5557e9cf6c08adc29872342da64efcfd180db59f99576d5f6b5206f1df92774cab2b6b3e535dca93677fada3a580cecd50aacc89db853add63677e25a583d83635b0d12b6b95d9fbc81cd50c962ac428beacb0efb0c941e12560caf5f26b074e260f9db7590a0dcd95b602b16577cce56b1a280d0239eb062bdaa283b41f880083e84400aaa47328b3fa35e7aee93198ca2e363fd89e3d400c91e4890bf21c4486f649fc5b9e1a0c874010c04022d532b5650c55e5e715bde0274b842cf6eefba4617ac75f1a65b2ffc4649948d125c51fe5452a52107d7c75961e7cbb7e19379b81495ac39458a2bfe9547b6b9624d292d6a291df615bf5e8e88bd9ed291a4712acefef9f5e3315b971fe76a3fc03aa543e7bbd14efbfeb4af05ca8a3c729c0e9b85f5d5be475fac6b815b6049a369df60059234fe9b9c2c3dd41a9034dab7940eb5ae2b49e3cf8d3c66cbc123a3bf515f86bf5e16e9e8fa57ec2262b991751587a99618d2d283c96432718d1e4d61adbaa5d8b14d92c6df2508cb2669030359c34cb26c340d61c2f237a9c39c4922d22b8ef57c32f1685aa5bc86caee432fc110f883fb0eb43cca1b1c2883bdbc21a670bdbb176ac780ecebf7d75ddf78dcb69e1610f6719294eb1c745d73d268488be415d75f7236a543f71fb548488b2a9b4a602f2492c6bf2f55d9ea3a1a92257c8802044d349199aef3e974e29f542b3587481ae7d34ed73807f130f789b3901cd4395c7f6e491b2b7b87eb6dc3751f1dcaad1d6c73100eb7a6b0ecd3618b5b3fb07c3d9fb901b9414e75e84a524e55760ea9990923c113d95104696208cb9e3ddbfbd13dc7491d4e971b58ea4224cdd461c9b80c0cfdd7378fd246d260226b9c24e3a04c03b2ac8261fd0c6c8672273bb9939bdcf91912b682d26798e533383e333fc741707409c2f6d83a3d291e593c2a4bc1f7429337bd810daa1905b0d65a9965e144b31802395c5840873a3af4d721f90775e8ac4d2565d561e87f3d7fa88acaaf265dd14a1d6db462ab5cec1ed5c96d959db235d88b49b35946a0fc326245deb9fd3b3a1889924fc985e4f6f3775dd3ed972b7a75f84c4f51aa6840f50deeeeeeeeeeeeeece2877f77677776f776f1ed492216a006554e97821b735f0a34306d261a33a0cfbab589151a3eb9034fd2d6db4db308833dc0982228ddb319c9b04f1817285130cf065e938bcc6062af5821152b2b0a295608f9bf936dac5079b03070e56be2853ed0ea5886a7553610a175f97c4308c62a078611473cc9dca15ae2b9744a9c27b09db3fca405f32524653bfde47bd2e24cdcc4073f383c197b00417f2850983fb4b5006bf17e8499a7eeaeeddeeb11d3514dbdcb6a6739332fcf6d3f9ec545efe32d01c83990cbdbd83c12fcbe07782a0cc0bf4cea757569617788a5c7aab8df780af1802366d98112428054e501084045938b1011493ca1340dcf929ccb02ee1954b9ea8c10754ae683fc806e361c49073ce39a7bb839605f4b7e75efb6bae3ee6650b97d73e5ce1c3ed9a2b10e6056c69700586b8bb5d1ce7017be17c9665199661dbf5956badf5f96ad1837e4e07d7681a2e7d0a481bc6e1355ecf50b1a670c5500c3f3174b9eacf1587adb4d3e8e734a79c4ea7d369ae66505dadba19295ca30a481aaa434a9a191f955aad56abd56a8de3388ee3887d0d57d9cf95d3af9cdd3cecf9b45a9dae6cb2668b92b055c502f72509765cc2e570603f19939bf988594fa894652fabac94e16438198eb4e1159cd05b265e1327de8b16ca7525926685256625cbb5482cb4dcac84631914b1225caba589155d4af667e46f81af4c03b8af1f01ee2bd83d0722d0fd0572a08295bfee7e32787998e7bec301e4e561fe56525612bba5836f5c803880b4bccb7327d380978ff908bc7c0cf8430808d48ff91f2d7f7d04603e06fce1f2f55f88b02236bade276243e0c0bc8031b044c98a015f4026e1bc3c4c0a24cdcbf7430808bc3c0cf8a3fb97ffc13d8c4c966520eb580103f32fe08f97878181f9e48d9797173043c265a5ac544992c67bb0a21da7b448ac24cbb55a5c8b6b5592e6c40a4b965d5928745d5728f42b9f85e48d5a59be2315e4825640aed5e2b292a4f1947dd222ceac4fe8f9fded4f8b56de3f2b491b792f954dd9d1f674684111234db9d5abe573b95efe7ab92cc82d96cf3c710316b2e398d95408f46e068a9e96fd91fa9c954c5f66ca4a5cba563ee35f2bd7e24bd521f367a395cf9e65e0dba4ee0a2bda71e52d7f8bcfde8e2dca388495782065f8db6fe5c2869035cd0339a344daf0b7010c7080031cd15392a512362a61a31036b2a3cff8731ffd5884b090b466f1e1fab74ffb481affd9b1d097850bea70b8961d2f5587d7ca6b2a916b75ad5a80535d4a5969d26a37edfad92697d9b165c72b55ed3866a5ac441b092cc31ffb3ac87346d2d85566b724cda5836d9d9c921daf1ded68473bdad1c3a19ed520818b06822cb0caf124066dd47ab454871eaa926a91fcacc7ac44e64af654878ef95cc7368cbbc4ab45aa3956c7c7cde4db6945dc845c1755b8a2366a54b4d6752d68c3d18e707d2465f88b5a15d735a0ab4139e145cd090a2f6a4daebf8602a88d27bc0069054fda8799d89907e35a539beca0d6469ff141dac0fc206d5c1c91362d9036ddabe44a94ac2bfe952d917138c88b3c0a2d10838f1c5ed3a646f98cd75c267c28be06822cb0caf1240613ca4d002b0c50ac32600944d12069fc5f7cd812244d1692c6ffe5c346ac070bfaae96cff87ba39820f36b61296fb980e2b3bc9505af5677d3e3467bba9ac21dffc6b5bf1e52b2a28f7cd42216e239a49521d7bdc875e9a40afac87d70213b3cd7850a2b622611dbb96ec2945cc77ad5535ac46a517dbfaeac3837a843ef5687dd6a110f97bafbc53e77372fbff536b906b3ee6eb2dfb052cfb8787fd9a215ab8b1e69c3edc2c5b3ac99ef62827e43e718b9fed7e807bb222423f9c85a168acbba9b4cf61b216b2ed091f48c3fa844890beeece07ac9062b6a233ff6524ae9b1b888deedb4f1db72b62124771006143d8f035db2ac053c329f35adbb61bf61057423aca87dd546cfb3966bad9587e43489c4b17d175f8fd983ab46edbb0d35887537a1ef26d99e5e6b935c34a9d61850b4dad8a33de9504569a97efbd02060731b356ad43c3db2bc942c2d5e4a96167fb9b0585e923648dcd422987f01c5aeabb7a5a5c532fc5d5ede460fe9d0733e2de57d5acfa78ddde21a1d03822d6d4a87ee48dce4a523f3b1e75e8bf191cf74371f8f8faaf7e2230f14bd1887f9b49ed27b49f3eee605d4b0e601623dc3ba77f192c8b5681427c57e22f789de693ddaf8a23632cfcef51b2e6bc4a8b145fd3e3e4f9e489132650a152a413208c8673170dd7548e4c0adcf31dc6e0dd446adc7c7bc5a2a09bb813da6a88db753bd6a6d0c955ad4da286de8fb6b4cb424b8467d7fada74558f6f3b5df5e03e5ccbe1638d3c6ab75fd43246953b523d7cfebbde435dae825afd8a58ddaa88d573678644ed064f29e645be0c4748067e08bc61048dc9d5ed497806205f59608db57d691b4710fead059bbdb36d280a4e9ed0a2bd6dbdcfce9509c526eff26bb23daf7a5b552e73822b67e96334792c637afe2458c75bdbb16b8167e740856211d5a61b76dfbea687bb1e66c9474bde3be47df7971dc6f60bd61e3ba8eb6558b9a8e562d129d8a53e97054855470e2786b84bde8ad165dcf1b564718564755483d559e3ac4561f2aa996aaa9eed4abce0f63b9cc29439ed38e448c855169d104b92376b482c29c734ee17a0cd721553b2a4f4ffbb4a8c24c42e7faefe8b0670a8b57546eace3aa249b5d92adb7dd8564356c45a559e0abb35acdb00880c343ba9734eedf0eac75e8f837313939a1248d3faf285bd22ae34b05312e8fcb540c1830a20471820ad6e5ee407cd4ad0ec2a4b0d85f178e4d5269adb88933816c2d9fe854eecdcbd651225c8bb04c5c3abafdec6e647e6386d1309e3b84f1db15c22a9769f36e526e2c7fc2a207af5cffd9aa4d5c7fbad394c876fde9e83530ef4f7fbca6c58b9487c280b680a6e0c6bc4853d7a9ea39225ee48a789163725fe49ab07c58533ee32dfe8acf757f966a96ca67bcb341d6c8dedf850a2b8494e13f8310dddedddeed3ffb9d5bd2b44b6919627d05baeab91a58f9a0b3a8934dc6c8f18499b9a4d321b30e9748203f9bb2a09c07237cf9de7be0c3f0bcb745ba99cc6b7a1d4a99398161c4ca6f26c23631cca568f6e73c9bd2e9cd49b6eb9252f60756ba551df69c4281744859e4eb780d256d2f45b01c93f92e45ac4849944473868c56a4a4db4f73c439e576ce9c42492d1a8243471d3635ed80871a61395bc57a552358412641ca1141dd699b8195a9eacf20e3340d7be44f9f478f43f99a8ce335a3dec1382d12b11016caa715c5098ae78d9999999999591680c39efcb2b922aa9492c6aca167d329021428da5b35829dac49113a394518e16149d20325ac1cabf4aa945e74c2e0b677086a20b96f38500067eb0a6ab5d64b81afc0efe074205059a0aa1011a6506bad3368cc2a756043208760c910437e43acbf046da05e323365d94f59da70415651142557f49c90e239505d75aef84de6088428c087300577a79462141427c5e8a4587738ca147f8bf869f067c3ff020cda5081c66d1b347e5c3fbfaf3bbd06e88ade3584860a3b7cac30c307f5a39ae215806fcd3c17ec60124b8371800451920a53a8b5d60bbba8bbe0fe5080b84178327fdbc21669970adcfdb64b8360e964fd542e062a1250e1f0d9e1556beb8e9dd30989e91a09b9ab2923211df67743e55ab54aa5c21955ede2249a097b2143655ed013767aa181ac7dbdc3a7ca338ee3c85dffd5f5a87f737d0c45a48d7d7f46811169e3f2fe9c0269f3d28245641cd9922c1507117954d3a3efd3c87b9f16e4ad5d5d8062f5c01850f544481a6c06d810180e060453827d976985339946a12ebb9a75fdaf55877e7d7730482648dfc9d2abc4ad726762c5ce699d16d5ee190113bbe8779fc897b68f29aafc19edb46fb0ebd3a989907c92be5aa956aa95aa06b206035b4a4f314289561d995f5fc57c7de7b87b0ed62aafc142a15028140abd666a229da39d341c5c7fda3994697db1a56cd9b24fd794dc34243b9c1cfa7acc1e9cbdec322917957bc97979c7c2e45e03c51957fb6d9bed74bb66c742e843df91f9db86710d989f3d7f5d4f16e6edeef3312f1591c78cdb7f5d415acff86311d79f4993cb0986e3993c9367f24c9ec9337926cfe4edd8715dd80c1c178f19524a44143132199ba84ea7565d5ca7564dad329930ec5bd52ad555b1ab542a956cf56a8b2b004eb46c7a2f6de4ca0ed2a685076913b269f1fe9cc344a40dcbdb7797968f779034259034fe2c1f13f9accf48293c5ce738a3980d52e02594f8a43d7750129ca78cc6f52f9cc1cdea709ea44d4b1bbb833a21617f7807354f944a35f1809ed517b37754873e66d9f367a0d77a9233ee6387a80e793af4ceb8bbc9503e7a838ed3a1b73a44e58c2d1267a9e7fa92283eb8b309abf9d0f7a1432fb917992c49e33f8be8cc1c7fd177765a344fac8bb2a2e7e4784dd76aad96b22dc96a81a7b4c0ab3ae7a94f96e5f68b5e5b216b300fa48c6623462e8d1ff6913433421a93b23a16d2f58f818a0f23912dabe8e3bafd2c511764242c55c3b8cb87ec67c3302558980e692db21fbaea1c2a72261356cc7ea4b448f471b52a5bb50849a985bfbbbbbb56ae3950b471eb05f8371bf74595edc43c975da8ec948d395eb9f7cf7a5ac437fbe930fbb491cf5cd9ca07b2f1fa67638bc4ecf475ced73a31cf9d5a24663f315ff6c3c570ad03768e12963b7568c2cfb81cbef02e335d9900d25577e08cf00528be078a16ec3e06ec3e97e7cfdeb87c8f84b4a885d4435a04038a2fa08feb3698a9c0eca7e5cb9e44617bccece7c76b58e55dfd169f56441ba291349debcfae62b0c16c256dea5b4fa361c556b90e66555c07e90ac8cb7ebcecc7cb7ec4ec87e3a86cdd2f069107d51aa945ac0df142baf2ee8ab63c16b7030ad07594c82a148a55d9cfed4e9df39339c97cc035f8fdb3272dd2b6bfb8efbee3b46bf5f196fdd0d5f5ef74a48da65d59f69353b52cfbc97eb21fecfa92d75ce024b190ba0ef40cf485113619439ea48dac4c9a4859c4756933af38b9cb48f38deacf83bbbbe9715dd7944a3051b9a6a4934f73f269c90f902ba2d2354c436a8913253f2440fd18b9224f99cddbe5cd1dba32507c0bf0e870453f6f320d967555d9640cd1c32992d33aede3a3223a1bd396a471f1db2c2199d21993ace5352eefaf8d32284eae839794ac4946e5baa8e168242e29e1b1e7faefa04cadc46bb091cf5061d941d60865a0e872ed68adf0587260b1e166713f84e5b4287bd210f143a195b7a3edb1a92c5b7d8b583efb182d0a7d068a76ecd0a6acb02ffec57cf1b687e5b36fe51373dc950f7d627843a11763dc979a50287bf9ae2f6bf1ddac3c8ff0beb0638b422c600a1d1ec1cafb02941dae6024179265a15c8b6b71ad0ec7677ce298e133def22e2f7dc6c60c1c3ee3e29301404040404040404040404040404040404040404040404040405a05d22a904bc9296055960d99db4b16929d112bd2e88c7446b4ce88d619d13a235a67449ba233a2d5293a235a9d42ab532841d1eb9a72ca4f069f525e97fc78f4e8d639a76c05d1972cf6e154159d7da920964bf113f6e9b05bfc58465d3fb444d143fb00a3250a10b040c2b8b1a3c3122d2a5c10850726681441fa0729ebf1284bc28d6abd0fa5b7db20d344121e74f880153ae0ecb084e69e07c35210b03c50c50f2d11ec00f1414f9645777777c7d0a27625acf797c482c544132224a822c90b50adc455850fcb25d440851320dc90ca819224aee87d9dee8c925004a9c10a942002831dc880c98a0f545001150269802344c0832770e801054a189b5ca6297e107444498f112348605192b894b40c9885d0528113495640a409540ee8115682fd044617e54477c04f0c30398a1200645182e8c6e6744f82a300c16a6ca2830d33386d328a8e0d5f338b52029fdd3ff04b891a777ab0c1080f103ca0c41159941050100812051d76967012a40a1086d03c124a10563cf0a0c80aa6f8c188284198a70034162069ba17206dfaf6b33c09a96209c1620952543122064bec150078c1053db8820a1c4c900516456c43f020ecb33d2104c58df671c2c4079f1848a1eaa10a6a1b99050ca3c6033f54619d9a58d2830323260a0673b24c4e229add820a0465962b4d8759c0564699a188132c4830c4112824a4b88158800b25c76b50b18b525a25cbd56166e6a7bf81cb92ebec5c9022bd0eb6109bd81cbabb4fff893557f7608060e5357970d3290eb227bd40be95a5d97d87c9204f9ed8638f02064e2a29389bce6b0973b6ec8fde0bd09f1db69452ce209fc83f5d4a115f29ce70e71c856465d913a01e8cec52299ad2465e4a411907e7cd2ea3b6972230b1a9f2b9f1e7768b534a774be91cae4f623ea80decf5fe8da2e10c1ad7a340ada597e8e3baeaec31efb4c1c657f53927a5f4fd37a794cef931d8648bfca20c5e4e4116fbe3f9126c2833d8a60ce704277392abca1552d6c0dcbf1e322facdcf92b77823230f09d3f838f798fe0c844806f5ccf372e70c4dda0a0cf3840f210de6d25064510118592244bae215251b4cb4f65c00232f92bbf05c013dce5f7d312a1cbdffc95dfc24822c5bfe7398ff0be9c80f92dbfc79f9ad2e2724d750e35b1c9183e39b0870f7b43770057aec45c8942156b5e4cc095a28c2b0049d31f5a8100be1929a3bfba2cc284db2f55e026c841b1f2f6e054b756a62b970841c89d71e5122972aee551c213ba38fb89f3662be28e2b66cfc3bbf6af0fc9aec7cab36459f62b74b31f0c2058fbdb5b16e88b3eda829bf69866b5f92c1bd735f38605451ede5d79f99bfdacbbb116e46a0e76fbedb32f678b426fedaf58dbddb0fc8a7db97df46eda170afdcaa68542b5869ee5c5baf2dcddc8ac8030d06bdf3e0bc8adbcfdeab5af7da1ef480b50c66e2c9cfdc4182d5b4bcb045dae2a43fd95df5832fb2cb2c3ac85bef5310cf075d981f571c5d0f3e0ae7dbbf2d77b2daa7fbdec6ee616fa429fe872a505af2876fb4de3fe822184fbc4197e636b419916e4b5a00ccb5fc07e7dfbf5595efb196e16fa441f37c492752fbbd00c37f4f1e06e077238b08c6d6b51bdae18f74a616a98c7b8b8ee9e6c53bacf16244c6f9e524e3ae76cda210dc2f3aae7799ee779588bc530cfb6789f6d5ae6799ee7795ec56aad15f35e709d37b78c9bd3f332eab7614c215891bbecf97450ac92ab503ccff33ccff33ccff35a78d6b39ed7c2b39ed7c2b39e675fbc0f67d0f03ccf7bcff33c8fba4b0d14d3b9fdb46298586b87b47a0d1021e8cfbfaee7ebafaad199236de8f76f542c462946e9f454b737a5f5a29e65cd35e8732b4bbf66192c5b84619e9a39586edeea0daaedb0c9e92e8b60f99dbe533abd6b5c2f56399b65c897ee2e5f80b0fc933628a5742a9f2ae19352181e63950692526137ac12c199995f683049329c03adb510b846632dd8640c76d595acbb4d7a51189e77619cacd3c5199744278945b79ab98bddb21af3a7b864dd2993747b926a60f961a81db29431bb03b37ba1351e9a6b268967b8860e5c33639ae0f6305975883f01028a2b0081fa01e9858062ca4e1258d894123520a104087060e9954b94c8816289122898c183b7f496deb25ac9dd34bc56e93d3831a30866f64260036b5df823967f8794386025d5854dc690bca3837a1b95a1548705b848d7b008583c9c08bacc927559065d7eda72f2e5bf71e5d8062d4ab5318d16c9ee9612078819ceef25efe577e47aeb3517f894bf90b1ca313a6ccf62620686e07f283fc6c7179ce0cb195367c3005fea46ec8e13efdc5c3bfa86db2df30228720f39def1ca2b7a3b68d031c2266358008608bb03d48102a97a000ed33929a5949255b0754b004b62758039e46a47b5729512411604086477efd08123879017959d6c2cb6b1c44a29bb566b3daf73706e26acb5edd2217b2b494f7176079feaa894eef515bd6434230000e800a314000028100a074462c158382267ba263f14000b73924a7c581a4a655912c4380c196408018600000c0122223323336383007ae813a2abf34e78a5ae6b60cca0f4425d8f313ac23b9d2b08ba8bc7de617d82f475de09af24e6c688fa8dd211bc13be92757d84ee3a13bf62b39ed42d0fb69edeb53a2fbbc271f4892e829758e5e9eb718194d53c3d35b4a3bd477d481d14d056bbab00dd766dc5e0e9555c3a0cd0b3d73dbf8ae0e9c4107962a53a81a7d36136f653a70b277780feaf4593bb07c0d3b538930088cba76d4a9d127fa7838449beecf14eff85fad1ab364d521f1571b2e697bbea1652cf0c1274f992bc45eab945802f5cad23a4261baa8f17311b6874202614d5062c5f7c215724e8e58bf10bd466090dbe7cb55e913a6e08075e56eda0c5f50ca878b3ea4d2f778c5fa0962534f8f2ab758bd47343bc7b09c3547db508aa50efd4172ec8121a7cf16afd22f5dc50795e886155172290bc2938b5a68b9de417a9dd861e25a418be7438d92db5f4b2aea911378512ab35b62f861dcf439757658f653f3bfed1d909dabb2d3c790e3976c77f1d790ceec85fa848b27bd17a8fde1c7149c5bc4f4b6316714c9d651b8a88eec24b35dc4274dab64e1df4dfb92cefe352450c813a551a036529f3fe1aa3972fbbc7b038ed4e6186939c5a0728caa12824e645dd554a70b4e0a9a2537492ccc63920482834d248053dc6bfda9d088d17a1428ac466aa3234f9023a0f33e6843e3e8b5593d93cfc97cfca1571bb4ca05bb21d351a82c93334051ca80df67145f27e1dba3062552259657bf625c9f21a2513534028d29e7187e6e67b22a83d25bbd571b0c8bc78b987e02e5a6c3d005e8af687c36f3f8aebdb954a603073b324d28672c373c1d815ff8d9bd02941f5af0da2265b070ce4450b8d7c631863cf127f45715a5632cf4254c9b0cc6834581d9de628fe2f1bd38dfbd99c02359725841db1614597a624a12e93d89c36232c1e90e38d708a80de3542aa00f641ff003c1e0dd54813b63b47a9322b645e6ae20c2fb52a574d03313053830a682f9f5b0f1d4301ced104cbdac4eb89e2f05fdfd616733c1e99a0ec27b5318f652dcbace5aac66b42e7be46a3ee43d496e60af81f8463b6ead17ab91f187f8404a44c08ce09455bc24689f2eca8ee6c6ad331b517e656fb00dee14e0e9f9244c01cddc66df2956aea006f4127fb0242cf0abbc47d672d98aab7a615b145b0860ee02b3213a20543b5b2b1c1cdd9bf18d4eaa054f98b02e1c930d719f609d0a0975279d9f19cfb4b3b3aeeeafc63aa7ade0c031825d1062bb186e2892aa32f67a6616bc15473993be97fb4b6ff77d8c6d06f20767e6612d7380bb54fc21aadf581ce27bc35e74d92304182dee827e7e1079e6b668b478f8513ddb584fd2f025cb0b030f85f11f783ba63f806f5da2585cfb5a3b3ef977d735c01a5b4b0921ad9e6f7a017dce35b249e831c01364f1a88b4c6f5bb17fbc5f3f6188840646e66c3803214144bb78f9e030ba2c6451c6c730748058edc8a4daafcfe61e4a012b939b667f99f3c1a91ec8227ef87552e022803e28fa4bd5c52c46f2134100244318bde27b53a1f5a8c0338544aaecc510355e6640ead5bb74be13239a4c1a12833d247eeb37d22b209b3a9a3cde15b4bf079b31e9e646abbf0f44330bb6f61b60c2d697581a809f8d43370f3566794239235f9319e3d7caa88f3a5988fa2944c87b8a3916ba5ccf89d7ddb40e73a6199cfd1964de6f87647d6b54c54fb7c95789d56f6d2b1ff44f98a0c282b7751c87c56ef785cc2d39baca4717c49637e1a541e232c709774797aa205cbfb8153c7090312f57bb83ae5d7f86f21b3d00f7338fccd4c1de045e4b2ec4031c5f9ad3fd607f4d2165db1e0fb55afc52c421e10fd338c3701fd06a7e1eb522fb699de376629339c3276ff1583a89206fe6d5aff75e27f4619cc81aa59edfb3bdc2e35cb60664e158c04af34d804d3c3ef4042ed5e95d49aaf68b19f208817b35eb6ada69365634bcf75e3424df17f9c9f89e58412be08cd46f9b3842665e6cb1f11645de87da08230810f45cda6e9660fd5708c2b5807b418f69785ac7dc7962efea04108536a8d57de136265f16ce6cfb60a2e5a220f0e72c6e85d16e1c413d1f842cc5e488ce9a251720898d0d19ff8ca7cf51126c5b633cccce577aa4195d6e95fad79c579b37276e08a062de0c932d5bc617d3c5be4404776b18c17b3ab19921a484cb760c1005179039ad8be6b83fe1be906f83e122a131df838c94b9e21c67591368352db2b064048941a576c5458a6aa83541760b7d6dea16922661bed74b5b7717451ba548aa98864e8f1526ade5a75483e81b7941d61349d09feb23437b435c85ea26e3bfb255f07a9d4dc682e075ce3ea3cea47b0b7d8142f5a6a74f9612108fc9932717ebf6703cfa1dcd9a9f328e592635023dccc7b724e518a53a48f70dcfe1cf4e229808e9c80ae4546193cbd4824cca45b36b39108d1fad3350e63b7b94dca2ac6096e9ac6f23693d684791e958990ce4661b3f1e9c2a97322f562b63272143c6354661b39c8f82b2f483e42007155cc6eb164acd463f66e52d4973cf2986409a2d8c8f4bad7d812f89683a2ff7f94511765020e6894930baba995b9f460aabc7767600db5dc27010c8f22f40fa75f5ca6fafe1a0891cb775ca0746371c6a274a4faf607165a5ab5654cfa33ba03ad520a59010873c0474bb8b774d84bacbbc2bdc4e49f422829d741c4ce0523248b32b5b409748b780960715d8e2fcca693fdb0308bfa3279470f8407bd22d401b3b3c1bcfe35f2088a39ee0f5b3d072353279254cf819b1c8946842a2502e880d4290c2a8d69c38285d60a130ae61bf39ee204b7d96659084a1b580e52f7c5c1c4cb1dcc28abd61efdcce77917b6406d292e1db022632a0e6771348e6c6bd953338d5a8ba79fbec5faf73ef9d4217db1c11fc958e12dafd61962c818370e8fb1810c9fea18662a3b6266f2124a6b9434043db09d52774e335850c7bf811d5729c8ba41a0453ba558abe6362c7d6b2ee206b814d9c0691513ff8d4ec489fd41167f175d810869840cc63b81af26e271acd2c47cc07f1897f29905fca7aacc6f91b83bb48f646697b0daec708bec72641cc8415cde64ee318c0c4f61a25b9261c08e7f0d1b8d872552c6a34c4eec3183bad8ff29de40447b9dd3abc1390b9534eccad847885c26814074f7bf2ccbfd779149adae82374654a8be268f85f9116d4e54ddee95cb4545ae373a84a1cb733218e0a8e1136b3b57f4c252abca8ab26a35df34fbc7cf5ea7d72dc3ba656d28a1a5b750fb5727cda68b5150c82ac636d6d82934e916bd3075ca13b3a0d2f89d8ded185269d4d2d5ce41746d1303df241e2872e17ba5e51c458d9e61eff6b8e54475488084e50a77910f6b35f204483347021ecd63451ac6a09322cbfcc84ee6a9f1379a7dc8d108172e694ff3f3cc4251aa50ebed8745d655b4ed9e1ccd14bdb7a8b25d59944fd507278ec665619aa62f00166956dd5b5b40f42839b9091c57dea6c2c1271b7272d1a352e1317abf7ed214bf1194feb50982d4b215d31fa0c9a9583010c68f77d6eeca2ab22fb9415599fd07ad30fa3803a799ecb7bad323a8533a69c3ca94208b49c5c962a4aa0f84e8ed2e935c9408d8b809ba2aa6b3631a13aa44972b8d50818b22af66cc4c40a6597c603147e2d48d66ef8a306b243dc8f4721367e826a37c080260eabd995f528f6153582181174032eb21a0fa530c9ba72280ae7c8637dc2d930df18ab0416035e530f1c419f47192db4e623162d63acd4ccab12e1fa375bc723897c76c011ba4be9af158fd4cc4b2de74835311e90d2eb209a738f406256343008066e6d4d76f81318a8e6c05e7911467bd353e0ed86fb1de7156de6356b7f07a7d80b59b8b07427024a351567f42a7482d3b945ea2d1192bf1180d9993410107d56943a909b2be641165c8f901430cce2277b542451ffd1db7f2065fdb8497aea5904400e4ac96c800ead8807f81274c049f56548d75966fc0b8992540f641be86be20bb09b35274ae23941ff2c5423475d78d9e7008cb1f8f9c1fdc80a75bb9d81f0cdc30ebce3578fdf483b2c610aec4900195a5156d09a281c6a13944d529b666a61fa28663b1a5cdbd3a99d7dd51f7d96dcc66093c66891c1aee1d28399c588f0fa666dbc167eb3b2a135f96b300fa043fcf696f63b09a1ed8365500422f3e1dd8125d67d089682cbd90f1db71b3cec9f5e3f3c3f49f8b4e43934844ac1949d62bc5244622aa4c6fe9fbb322e40c0b411196dc069dc8804ab8853d39ce4b43a2b1edc98c848be2f577a12a6638be4872b131bab447790044cb870f405e7985d4da356d00f64276a584a223b61b761bce9cad69880a984c6472a587c1f27ff7f680848e35873057645811aff5e8e6b009e1ed2107ec439e1891ba2e776f564a6e741813b143d7619e9232b343c0156cf307caf8f3f0b2b642f1d47c5122faccf9639afa2d26aae2ec1189cb7a27863f1d82fe16fcf95312bad7787a125d056893cf3b2b803293d85190e927584f120d98989613fbfeeb583f88bd45185744bd6723051d8916fac80e120b8f32d16a0e8b56495c530300678c1387113e33672a338034380b5840865ce89d2c0f4537716219e1da636862e1ddf2403c1738464e62ca29a2fc26cbebf5f71c82a756afa3b6379012e806fb14d1009122ecb526feec4ed1e2b51fcc8080f646530b7e8e8e371eabea8ffa19f175ded70db2e33d72d6c04b40e4c6c4402c490d3d8702fe74579971e5fc62d26a9d7befc0d609355f3f3c7cc346ae03111f80a579d00ad0160c44c65621e1a67fe1fd886d49b30723530f630e3d3f7b11940f7d4f9cf2e9ef10366295592a7ebf81ff0f178602527f127da9ac9cb1d1b33513e18197c02bb216678ba572c9263620f0bfdd4fa44a38dc26a7b7d27129cc7c6aa0ac73f1bca9317fca895ffa2d713916bea95b3544e6daac8880330e94c2e748c316636665ea72f278a22236731836bb7bf0af35d55a427f9a016d31723407d1e51581e4bf991bb06d0acfddd59e28845b7a5a4d5e447fadc7ee06f03c52499548014da998f3f8fa406650a2c27a5b0a605db491e2bc5de2d97dd26fd7e32c4ca03861e745c5876652a617c13ea8fefbe8e1c58d0cbe29b3146f443499d65ca8ec2f60ee2bae0a41917522dcb3cbd2f673588b3150b35ac3920b1b04d3f5257224e1dffc696546ce4cd06b418a76664bfd909a6a4d5d5f193a4f4e1515ecb665645bcd851b95afc78ab1eee8a6017dcc40aae9cf33646b5eef1df971fe8c16a834e56531d1b3031dfe161c4a14641afe6adfc48f88349dc5687c320c8a7dc03e6e40a4b1d7e6b2da4fe9ba7fdd27dfa1db557bda4151d91611cab0aecb289049c3b7aef2cdd11f7c41ca685564c1b6914e21de8cce87db6ec9690d54a0c33a6d22485e4212449a4725e69572c56ca3b7e97de6d612aa9630b258b16f980d8eecf023a0320a2c54a603259461f95a3896931ce4fb7edcb48bc66912db2fab6a287095f5395ca6a436c45f4a6558b47ec160002ca0016a2bd79eee3207b2829c2ed1e3f4aca770165e0f8238e6ea5ed257559420521e1b6cdf9c09777386454d61ee76d59e9e5c488372b99587c2797bbe37aeb34d8292f41ac7088e2026b7e6bd851564f22135b0376b7cf1e3c65350acec88e94b06d1c837e40afa50f117f9dbef1bee6d3bcd7a5c8a8a1b5a937ee67629df25f1106e98fe5da90abde28bb5efd7d176c0d5bdf257319f3cc8a5bf21a81ef788d8635c83156bb56bb42523acbe019385a00bb0d9051b27f6021dab1b0940b785b122d1e3ea0d4db8d13448f4e35631ae77f2863afdd53bb0a896c65c2267cc7442399f099d777bf7fe31e749d58523e4149d59377f296faa203d1ad8a7a3af067e19ae0d91c2c01ddc87bf911c13cd01bdebd3a5aa413238f2291713df2d81eed52fb57e223c2f8401f8bfc4163307d1ba421d44f22acca348ae818280f412bd988a1ef0cf0fa793554c9e536475f5bfe6cf7476d10cc51a918bd79db829153138ec24bb4fb2c42746a465017b0fd0d7a2b122e6084f3948fe37ac30f1095e39e8c568c385916f6b259a6f1a74947617c75b29a0a1ffa9b0f8767fc39e2fddbf3385c78c07adcb62c1d710502ab0f972619571814098a859f508f73405144b92058c51346bef2db520ccca04d1217f221f694f06bca3034d235a14e08070fc3969bfb409a997113ed58c50193d6981fde0a9b00d61e896b619f889fffbf3a18edfb38bdcf383455d51948448200f91da4e7aa24685d710c1028fc3990707e6e80389f7dd5ffd76cdc07c5dd1aa74b7be0f51d86fed1a07e50771a7c1103af0f74aa8c52291dbc4397e9ac237d15e716f8e4fbc60d66fb77d5c65df497c541ed9b972f004056fb5bee560f43b88ca8b850e68c6137a2ba948dd383e409aef6936fb3498e5c40d55669f440ca0c535bf817842171ab95f4f777341918602b23680cdeff8a3afd7d0a5406558bb89d890605356e38965461eaedd4b7126e07b8cd05fa8b677188efd582627269efab66c7c1ca04829cd8319fab911f8cde07043f290cb13245478aa17f3db2c6418d8488050f37e8b024d65d7fbfbb03a631ec67f3e268cdf12a147e206823c1c2bed03be5fa899c67ee099879b0d12c255643ab1d1a890fdc3c060453d47808bef79ff3a8dcdae62ac61e2e5cb17d1c7b899371f558624f3b438786b07bf3082675344322bdc42c06ec5ad3da0b068f72098c547e8cad4db7ac62fb918050e966562328ef4bc33850bd61db4cb72534004e050ac82aa40929bfd8ca52ab7f48419497ce42b6ba2d21e227b2400c3aa28423402459e5337f07175f17a26623748a880f84e0564f9a9bd90905b413d1ff40a4911c340e416c621d93b3ff8eb7cbf6a8a5e18e93e36cc1399701b3644a72f34a4a616c83feb3718b743a9b749afb7606193849b23e0ff5034c636602510862fd6da1b886f8dea108328e2ca29ca5eff19f98d9d0ed1b157772b9ca8ce75795e0b4655c158bb19825de4b8691c23a7710c525b81ae4738bf69b05bc22dcb3f23a9784ce97221c124c254ae9569bff3f5088b7d3d9be6aa9cbd05a3460e03632f31b96c2b28b2759a173d81f81d686c78412328c158a766e1d454dd5364a78424fc91aeed7b73d37ad6bef9badb011a633fe7d2df2152e5f62b1b217ab77ad3ba0ea9693ddcdd4bb099eada9818c231d4e268d13fec071179ff95142991864410d4285729cad97b82e2ad518947aeaef685b39fec6337e2d38024ae58dc376239b9a2c19f4962238d6d38c8853ad69029a61ca48a1a9bcca81e9b89b93076e50acc0fc32d13b4935fa1f82ec31cbadc47c8d8afda25825ab4e112f29bdcf402d420082736a8a42949c85224f4c5c58550d8d1f0b635396b67144d3e9823698d7a357e6e31e9bdc30e8ea824bb42ef8f009b15fc1260d50dfa5b31a8f805a87aac19a2702ce09ee544f9c0d52ce88f2d57ee7622f550d7c89263a07a6ff77485073699123141919d50e48dace10f04cc648dc1bcc5d8b24ffc298cbf14f993483b0d41b435604f7cfd71d64a9188a2a65b214006d1dbf2619e2fa5e6887a56b8acbceabf42d19d71752dd115000320eee67955833d26c9016e806d72531c18b19e99b59a8d906ebff3497cea330461ef4bf9763272e57b6b67edb2bee46cb29181220204c1189fd285538346aba1c60f6ac85d1d166093726c7036311ae499f06128a915dc7ab01c17593c831dccab23c8db5f7eacfedbe19a086730f1c8ee3301407a1e3101033f4c50c1a1b119d9d0bc124b237510ee30b9a84e036f4e8aeeff96081d0b253e28c12a7c1cf291a4e4ef50aa2b435f5c8a14dcd8b30c7b509c07f78350dc2fd6c6b9b691a5807769f7fb702d016b2341559bd13a61471541f027f5644660fe98c5d005adfce7d828184207d40fd5caed6b41dd2d4a10f93012827d5d29ac644296cc9fe544be23ec122089257d3cca5c1715c9eb7349503bb399c62d2c858a85729d564e15cf02628609b0942128044c67eb7384b228bf9f587240b8faa7400144a6c63edf56f53b1d64979c6736701e33fcf11219eb3a732d07957e06ad9e7d13b92443a647d9809d079e9b89cf502ea63ab26b1f379d05e0d74aa2f085c8d0e3d5a3671e8bcc0d833c7d95b03b8ff3ae2be20e145153ff99a9ce63bccdc393e49488b155021008d48a066ee13e754d45b4989e694fe000463133c4b47a14e57616aad215d7f7af9d92c65b66b3b39cf11697168dc2b19eb53d2ac30468f0bdf6e9afd6c857a034efacb816b418a22eeb5dfc747936ec6fac121633ca06194678ffcd39bbcca8b0b971380f84617f3818adf1911d5c37063624f2ea499bf48f7dfb09fa22498fa0a9cc2f6ea6015eea6c0105cdde6826308a0d115485b1dcab18e14fae60252f931e05577ff53ba09eb5774dad2961bbce5a833ef0885c6e32e5e0af6bb31c0d0f84ce763143668fb6800471bfe7030fa73ce740e7ed28eb40376f6d61edc442afe630951a9f003332b3e94b9bec066d0554114adf2b60f03027fd64934ab0eead266530cf038030c9407e7243a14063164f62ccd87dd4022eeddf9add16acc37befaa9d80aafe37d23bdbaaa3d4742646b51fa89771c42d4760635caa9ba8f539bf573023a244482793b118f7aac4c0e64e4eb1e1f1aa3fe4ef30aaafeaff0184783d3dffedfcb5373636cbe609de0bc33a486ae679ca915ffc34075a0f2adbe1d340b1a1d0ed46e8cbd12fa13153b64379392a1436f83fc0cd6dea8e68d424540b3b9265315cac8a27e4d710bb3ebf710f504605b2b80a74dd643b61aca09314026bf917046414a89e430cdcfba6c6828535d469b0c90b63c549af09a61572906ccc4571adb2021f3604aea2b075606bf2f2d0723d51f79fb701554e6e3b8137269f5394b9243d83c830aeee00d90c03972344fbf4bf39be9a3b0dd8dc5968d6266d63802d8c734869be4def24f1867340f8679155430a392384a39cb2373672113dfc4235fcf63f2d165f3b88762284d0d1530d0d7778b07c75b3ba101d1cd97cb389454ad81828202e3088e0c8d0cc38a24164180911cd01f8eba523f075aa15806ab37cbbf3ce6c7a1aa10c10f52a7ff3284b4088a25a7bdb56607fd98ef3763d00b7865884f1b5f4b41be76d5a5c3d9840c4ed1502993198822b14d5b37309a1deb9320f0026ca35c1395046171740c2db420f7b0859cf61d6e060109d0dacf4cbf24cf9ef178a914bf9fe0f7a3fc7432db5c1d01664b56dfe9011edb2e92c565f452cd869065cfb789e9c34bbc7771f9cd77ecf0160ab7966f93f96acc7ef382202f1085ee9af56b56968d5866525848b07b81d70f337e658197750d2ba21d62900fb1280604ff10254d80a3bea301a8aa9ec93dc35601186c1a52394174a5cad5c8bab28bf022cb4778790caacc9bc7f40ccebc606d6e3dc5945fafb2dfe0d9fe5aa3fe10eb8c4198058f083088c023e41289913ebaadcb1af523d039c3d0f5b7f9c8fb5a433f50e6041c175078772d1f1b16a75e79f1f64cdb861e6dd02c10ac8865e7eefa9851301987e005f2fd616208b44def48012d0286973afffc6f010632852c07372fdfe1b86e069a3f5febfe5845bbe73009b10d3500c9c06b26e2c63b58f6500a29b6d81b494595a30534936547f8558ab5e3375018acb122c4a2c34c9022126ba5d1d32f90268be484a9e5bcc337396792f69f86234dd0733e0e10d4e60c6f76b1f34601f84f5875f1b91769e3e257fca15ad64b4a51986897e5e814c4ac3053c15a4ef2b9326c5cfb74fbb2dc006a24a4f85102bb34dbd1aa2809cdc90430063fb7e80374dd211683ae0d946c4b6685e6d6f397e049e63a5c95d0593abfa9901e353d1fed87229195e0f5e58933fa202239025dfc7820c7108fc6f018e49295c5c4cb1e850437aeb0c97d5b5c15d6d47c9446346de1e8512df3c6e77e26cdb9448f28c2eec151d003418da8f18e3894ba576d476c6f01ee709f317130f9689b74eb5d2261ce7ff5f1b9198a177d3b8298177ce76c418f62a5c90662cd45e91d57827acb8c0e971529af75d6966c9863834106c74bbc479fba6c7bffc0d6f34a5aa9ee1a9d7b111b137de025265be3a85242fadef005ca30a6634f3248124b917954564d5445bc6cb0efac6e70781a572dbb80d5a0245b3c50ecb16093a7dec3ad9ec92d54340721ca6e0d443d0ed0f1291159f80346bed464841a8a927ec1d60c664efef81444a93bf3217f4ce44e217a04a2e5d142adde2fb340a47da08409d58d1307173da3e87f2fa49ba90b470478b733804ecbb04a005d580f54cd9a8350e2a758b803a15ecf2c3872c84cbb022a706aa816d5f86e5717c2558a585b746d1f43138325eb9afac343c4023bedc14ac78ca8872c045806d4d28bcf647fe706827a3ef7f403c3ef8abbb22c3ce99ede893631fd9fe5691e710d45fbfc26a34fa68b6405e58a60d3a26990a0d9f44ffe189debfbf7366587ba895659d8e27e509ebed59da4d5a817a92130516f32b1b6f06070f314b22ef0207524dbac55c4835ad19ec8ed4c159a01f03d70eec7e995e2428a981d46f28f087216ed7d8befec136793b08e7c953ce59674202e24be945ad7622438ff43771256bffa5057ba6faeb353e030ec0fecbbd27a59f42c868f4f22e2ca00b6b73e0c74f530e78b1d7c5d466bb2844bed5ef27bc9722e49e6a57e91ba30c813f4d3284701478e1e038b7d9e57d943f0530a05b0c41e7b910e223277cbedc100ca7407390533e91df4b6c3da2349ade31dd4acb7b7f3a5e106e7d4dc27292c81e08cb2ac683abb7f2ba2bafc738f9663ac8efc0a3a88cc6361906532726e6ec4856d281d0dc4e27ebbb8245fdc830932c68f43c8bfe4ff85ed58afceec9ee35cb00aafd628cba5a9c00f4bd973c61d4efa1a841213eb18bb96ceb8486a7497b0f736e5972a744f3ef637ed0f8bc0188bf46331e60665c2df3053d131bec1b5db6b16ea3d54fc8230cde7970b51c99b6ba69825aa4cbd40f12c540dfb8ec87c35febe0475978d7eea25f4c03149a28b38ae39b5df421d0d14d0755160e1f21adfd77ece461e667be7e8b207afaf5f71d99f99b94838e03ab6d35f97f6513182f4aefae999fb7058b8926929dbb2d7199e4e8177de27cb8c937dc46b9123ed7e8b269e995c97433ea18498f7765a712d613e25d7a161cd4b4937e750b1a189a7670dc7b2d21cb4cb1822f90aaa78323d8121328fa33e45f751f2d5207670515f11fcf95b3156726be23964e8e08696718557f2ce8586aa45a84038ac5e6933619d4aca4712405b4a7bc3281f1655a3c0bd0c18acc4462e3fcb8428cc41b4486f08df010888ff2ef235b9f17af1d22d425e3c698be05a0e6191ba829a6f9ce22819288445c10d4a9c5221e703bdf7d39fda89553ad7dfc1c459ad5e27b45b18703c2802cd481a6fe5556d4416b0c803e47fb916de75a17ccf75f9f8c0e16043b723186ec3b652eec6deacf36d009f12056fff6b2a634c117752979e6ba5a532287fd4680a2a21171be44e5f449381e64461c1c681c0631ccb86eb44bae6dfe654722bc0597d1729e8c7d7553e431ad3366a6dfd45b1d5ac43303cf0f186458590168335a26ea9633fef4bdf7202e89ef054f67c286146a948922cca433f74f130d17345a8f8ec2648df92052db891b6523eb65c4c8c76ed98f82b452c54e24486bea5358284f4841a72b22323e194772e622b4ee36c045dcf391b3e4ed8f00a0f5e29b1165d3d83ba4dd31a6bfa69c365c86bbbb1cfaf359d00e99ea4c366578881eee85d6c99bcbbbf483647d3b9fe2fe3d76eb57d7ea7fb3b1a83ef458fcc0f4232a245d726b6d0d4173b53bca2ed24498ec3b332872de7778d9d8935ceb1b5dd0b79d5b42a46fd4cfc1c5e5fa4adcf1308bb93387a6ef2563794708ba1565cac87ad6b8e632379b53e1fb9c1ade298d1ad5b1415c9d0a5a630dab4203771ae0010f387fe0b127c05321192e9952818a56f75231a545b81b431c37fbf507851c5c44b4a24590e258655e3723b959d3271923ccd5604ec6ac99f295a2f585f34fc6bbf31cbfbb001a928cd12e062989938172ec23463d03d9ba884f96264fad6d37fd33abba5a61efa096c3fe29afcdfaad67901b8a22420fa8870336f5a77fac7677de8d7c702e74c63f2544d60ed5332c547b84b46902022aa528f1451b24ff2e2e95bf2257afed232cd42f38738924793312f55cf0916163499035c9a7b60f822af306a44e3f301d077afc5b21baf18d7a9ae3da009efe7152eab75d7b0c5e6c8c7e4ad3909d9ea36dc954d733886c1335d7d0ebc5b962c4eb32a58b22ec314638ab016948e9c6500c127d19017eb37406c21b969f559d209285daddcbd7c78f4e125b1577a84e629500c10d8d2df2fcf14dc7f8cb8bfeead03e71b93194b72faf10b4239811a85b4fd39bb49d7706f221386eaa0266a813c7540d5621cb1974e18970d3369c7d514d302eae260d89fe2de566469d4dfe32f606c3047c5591355e9d6d4ebd900f5eb7c0b776f9cc28bd87accea5b47bccd4b979f7310d2d34adee946a685355f3c2b6fb890e73583063ff7a49f38f2aff0df5a53661a0ebdd9c667d76525421dce679f87dda82a0d8a1c47b969c67e8b86a3984378f2dac42bcffe445b71d5ac38332c42e4c5e86cbe81ff09f41609681c05f17b2c78962ca08ec7b74d4a5cdaf113a76163cf48ae7783ce9ea496a3c8d10f09a6fb97aa2d1a6550e2d38aeb6e7c3ea164cda3a908860e28f43f34b39f95926ca6b15e8ecce25abb1cc05f4abe7ab653e93231d8b0552f226b1dd411bd38c9794392059a4cb9b134d48461ad4f21faf605b153330d29a9a4b0230be069737a887f4b7d8e4c3c03d57291f16817ba5476d9762f72398f2383ac0e2ded070476a88129709eb586293e33a59d75e8577b226ab6371067fb2c11e449cc06d5da961434df38fa3abcb3a4735c45b51416d6cda5c7564255a5732c41e9cd6efa29c2001a572777469b0dc22a58f061b538c7298f5c5b44a720388bf4c65b1734e2244983ee8aba42d4fcd8c6031cca1b98e77b017371b6eb077b05e9ae2ecfc2af4011a58c37326dabfa333efbc681882ad5de2491bda34abd9f355c89b939e9c5bd4c676d5c204faecd5800ec34c7738634343c5da23e3818703cfc8cd35e5c2fa88baffc21e474a0b81d2b5fab81a551e6a6f3cef2c7a39d816eabfb4791f4e555c2e77499ec1628f3fc7cf3b60e11aef343df60a982c7f5f45f86797226060b399394489772d5abaf8f2d09ed9849d01a24cea17f1f8da9860e82cf8e3ce71c3a439ccc40224894b4300b30ee5ddc1030fe99d6bd6a21ea4b36296a005d5c8797ac889e991e30d3182d28046a4e3aeaf77357042750a34c4623f5361178b886eb6e8a078e26514738a495396ae542fe82359ec48f2b1f713ded6c4b3cd0e2725f994d12ce405564c98eb546058826b1de7ea9230e5d1fc0e48f4c8529f58d0ff7d679c6eee45b33e40d19cf8f7dc0c65d96919101c3614a1db1970864633c941f210c88583b6f450144cd0c416e482a9bb06077f207061f0718f4adba4858889c3356eae683cd52ff6971324377d789e1db70d6f486ce6b7826842d59e8c42acb161cfedc67014d827aff7a6f226f10a118bb5211b41e39393b9534cbc968abeed1dfd1851c83ca759cf1b3aa4fdc14129bb07fa8fb536776eaa3557850927d7d74dae60c3ca1ef02ba5ebb01557f0cd9c9a6805d93f31bd01689a68412bb176d50f57d5d4f91eff1153b9dc30087b7308c91ee32c622b4374ea615b94fa1b3f6fc81c73677336f45cdfd3354b4b5fec3ba881e7be657fbd1a6e9d8c493bb8313b712dace3e750b6ddd9d2ae9db5f9015742c292233bb00b203ebb2934f6e09de860d8dc9b8a0a6785963db5026adff2bd870ded621c1cfdf14d1d95f6794a44f618491419f7c85470aa519673c73e8e3f976d54153cf59dae4287901628113c8dbb3672fad48bb45026b4cc0b26f15483ef57c091e8ccc9ab92e2a2b267dfbd2bd6c8ae676f3319c6878c36feecf2a71da14d784c9a3c2d0c8bad1bf41436cbd17e9ddabe56e76b623a4fdcb7f7043c818b2c40f5924cc2aa9dcddb93bbd48c591f1f057be1f0288a449dd69822823acd5f5ed3199ff792dc1bca2480e3dd91a5f425dd509090eaf86a4ec1bf89a45936b25835822fb6dbb2dce226d12846503f92e7ddffe854e955d2deb62dda400af917f72f2993f3790ee4ac2467fb59bb4a7cb4f49e1048bc70043ccdaea6b610e56d495505ef5c2816603047392e684560a8bdbc28c679eadf490ff84fa6eb3fce3bf73e1fd34d574aaad828a59f28e6760b7cb61eb901cd4f6307602615c6dc9124efe270bd299d1df5ac36eb76d2cdc06b9fc602e41e9880e9f0d358411dcbb24a228a04510364b4c19ed22135d0cb0ed3b758ea79301d34ffb0f1f490b53ab30aa5b0d83c1df1e8d393bd087811a3de6197a32404771f9f9c54e0d6288390a7575308ef303d1a1c8b04ce19451ded4bd6749b331a34c62c4b2cd5286aeb5b84ebea326c56b531623484b4783a19b433a9cb2c30f90c881a3dcdd1f1b4788a940c868202d845864d04e2a84c2870c2ffcb04c1343c8bf528089506a282c14f44f103413ac0535b30222ac1460dcee8c028223c8d2cda011633582e24530e7fe80a5c6b5e934b3864a00c96bf45a56e7877c0f6a0896ece610656859572faa73d9936c56698ea22bd6e71225be0cd58a335c6f30b1c258bd71449442f4a376515d16b885bd186d12266a3fc3d2f0f17fea999dec2814d07ff5d2450f056117d5689d062275bc52919bdc92a2f762c81ec80a81d48ac557738aa3f9663358694fb155de006787c21e65e7452301d6975d0f763a29e08ac330a5e62e00015686e92baf31d3ad247ff5a8cd868319610c0fca93af7a068ae31df089da051b38ca99bbc1b8a1f81853bbc847be734c042bcfabf03090dc91a34ed0c9fdd00007beca7ac91ca440ab98d9cc305275c47fad510f2a6cf8aa756524e5006c23d63a5e450373fd96f4e13092b0b86848eb40f81b484725b38b2832d0cf0a359502381777f14cd66a6d365fe3b22ac7f23dbf022a5978bfdef848ce2439e2fa311e56860e9db0045ca6aaea89bbaca4c76e7fbeca445e6f13291cadae8d2bca5853edee1f3853fab97921bb5eb39ad89dc0cf20f64e8b728e004b6c4c17214ea2b9df40990352e68c2df84d98c659812669c2fe9bd9c592c5bcd513170227c17aaedc1d62c0c3d370ca24a01cf03d3afe863ecaf1de448913112fe65c9b3e9539b855d92d648fac1880bcec19fff08a0015f7cab151c917aeb1ae88ea2f76b17469ab6591f222530ef63e1d923a51ff82853edb9b34c03eafe7e7cb036a41b8e03d917e5c1ac5d2dba66c5d449bf9267a8a6dc82a4e303f942bde96b74eb46335226843b10ba55a73c807c9f14870b45320d0240e947e0410e403393d7d81e124ca1462564a41d93715ea6ad7a167c91aa581494d1686c91ae8e43c76fc6b81377686ef9a8826607691ca201af565d2d4ead072e5659088ce2d819f091006da776986f1c0f5eb8bd2afda0bb079aec13507665e69fdb23964926723f91a169c6394a5a2cc9121105af2e26aa2fe3a78a03a516cdc7dcc4757600acaadb33dbaf84cd95d0a3e738e11c759c45a4666a29c550dcdd381801e9ab3bf196de7857438b4e6c165856b35b09fe6fa39ea310340b868630904d4d1e31940ead36af1d0c14c7ae024a29e34372e4880da330e3a988052e59cb5cc7ead2021e885f8fc59e2f7eaff12d02e1ca45be26bd40bd36838d5809dadf46324d677d460a252643bfaeaab8b82d3301be4afc89009a4941ecc80644e5c26118bc4cb05328fcbde324d167431c56c1e39c6c01197fbba390eb25d3d8f6e0db2591c485e82febcdbfc523c3ce166a20fc9185fb0b784fecd6e97db8093a77b96eb080aea085108a595e19b41c9c5b783b52be233a13380238e15a5f403a764f1733c17740ee248b2d78667579c18200aea9bb34d068e28d3664e64aaee14de16aab9e1b9ccfbff91e7177b97c144e56aeda50f4cbab6196a625ef881cd372a05d06fcdded76f0be8e2bedcac92a5e84c2915bd5660487bafe9b4b1cdd3b199554de8160385e62229808f2b9ed5ecce26291e2e9c2b14382c571a547907746f44278636820b3140ae3021af33a123c5b82548496bd38cc265daf9eec093018baa39b54764282794fdd6aa5919b146bbe4bf1a022c5eb26acfd21f12e2335ef80e8260989185231d399b1066408b55d37719e14f2142786f698d3d5ba6476d53cdc7820e4ea610e2a136f59d0957352a8db7439f2e35b9bf864a05958df8e890a9b80c56cd8f67bf4ec6f9db25b9dcf2b44b09d13bf523d9ccdaebc715382c7812d5a704764cde3a468eab51f39d3f7e6b1649eacbea36ba1aae702977cea14adc887cbb888edfbae1124fdccdb9f440b936e6a4ba4c28dea6e6277cd22568eba0859df12f00cc7fcfb8ef7150d161c3f4a8f6500c2527a6885b3bf7b5615de5c5941ffecb837c9458ec3eca9248f2750ad5dd700b8ad403c23a67788835ac1ed0bcc39acbcf5e2c32cb1c1391dbe906be57f3ee4c875d083fc77e3bcccfeb7c8e54821f72b83897945e113ebd58f824c78c2718b602a862f1c842fe3b0eb4539e872df72251bbf945af222462abcfe8707c984bd3107bb6b5d29242e9986808dcfeb5da44311e250d3be56c22cbddb713c854e63630adef0746fc99f881474d01c63a358f231a79873473fda7b6defe7a0801cd61096ec3bf394a300fcf6e72c4aadc91acd5da8f1a08390357bf1c83a52cbe16895d13b3d9ed708b3115da92ade2c776c81febb78bf980313e5442b63ff057ab5835073440ab2d22041d88e926ecfedd82c36b466dde4a3d692ac18bfe31bc1a50ca08509888986622e35005023ca1758aa7f31b4b961104c8ec786cf45c7c7a03192dc41c1a8fadcc4e3573361bde830a37a7d0f3ffc5ba11d0362bbaf62b4d73235c302c8b42402c0c1b99f1710125dc6639c16dd188876278ae4dde681f2aad4c1852c053574b1dd8c78bb0f3b9e1286f456794af918babcb83d12ad6a89da23ee0d5d96876a82da182531ec406c8cf869e3984b31e214dd8c0d541d9557bf4cbb14e492b4d0551db1ec241dfc2130b81e1580e010221d6319f1ce6d86bbae2e26fc08c9763d6227a3f002d02e18d2b4628f8abbe579f25ba930b41d5801b72905d975cb72d670a4d877b496b8238547fdb62ac82d9b40fee781cbce33daeeddcca0aa0fd9627f191d57963c78418e4d3c3c3b37178191ba5db0196f9eb1a8fdc75be9e32bf68cdce77fc9179e954a42aeebf20123811acc8f1b0f894622420312ac73bcf5854918d4c790d544531cf0e1a7dbac4199821e7f4d8080d3a952a708dcc80e233982d93261970d6dbf897c710250a4b66fa0629081d64877ebef6d4259b92274e9b7e14ef168589f610bd6829532698862dcb68890de21461620869a7022b3a39c6a51714906549be10581fe4fbc8b96d42a3c54c9808cbfa3834ae4a2cbebede7f433d12629be01bb8897dbeb027168b513112410347e6c2a5a9743501dd28c20600fb4e4e7d4a4901404360901cc0ab8a286d486fda823a42b1c9e6b0325cf1f3ca0391bda39467ce8b36568273cd2c28f9b10287a6f53a186f765732c3fc49bb6f908f74527c68336101fcd45b510a219800143b467a8972ca85a0114489f14da450898b007408e981f878b39f31a6b2f4eb12fd86e2e1780953eb6f1fb367d0bcd20bc3ba6a2e32b0c3c5d874e17f416208ec8d301504088ffeb5a4fdadcd69f24133fd2b580106cc42e70a11f6a578a4bebab29effd2917915cc5973d17a30625a3b0c870af2c5cdccd5c0225520a842620b8eaf5f301ee681caacb6587f5c559da0605c30b97ea332a4adbb15791ae70d838df9e79f2c15e527bc94a462c67d9836932559d13c94ab9b72825769e411a6c849453d54f88115cf4e50f9f5ea8596fb909197b84a9196b7900e4857ed8890dd43083d422560cc72d5a166a091e7b04a7ebcbc2b98d78a5bf91a06b6f1ed603efeef7bf67ee58553273ed7d10f337efa12f540548b86912aa10e023df329bd7e54e1bdb1c25e2d271024d783005572e7a3766aa4b849b904c098aae5f28c20cecd40e2f4600143bf5d6ba6022f8b9bb6f345476e39afd60f1a88cededeb85bd04eada9cda61611afcbed2e1b5838c8a4b1e84345970098aa13a4798cd6dd87e1d598e65010f284abeb123a0793e8689e61e081dbae15b1c23a58b61ed9540e52411dbf722f96d6949529301f2675f6da1875340b74b064ce9d6ec6c4d0ab0743095ed3b9729ed3978849639c9a531431811dc1f70f7012bd21ff3d4ea84c5c5f02ebc5cc144e77c2c4af36680976c40534c1e59b535089ee753cdbefcc46c5e6c6fd43134f6f34041baab33f078b809be392ac57b0a509e7141c0019c1e01b48ec9ade885f3a3cc42777dba79a6871d22c138327599bf7e58b6de6858ce8b8e9bfed40c8bca38ea3ce99279ae8f7a97c20e0ec22dd49112847dc011e13b406a563dac2a02d2ca344413c7a4cee78b728c6094b9cca9f08c981a369bc802ff5cefc2ec62e6906588d2eeafbc34fe1257c827eb6ae5ec9a8bdb18ce50f7c6992dc36c4d1926f47b6f68e21d8d3e7973236c0ed36fd909ce4465f50166cbd9a45e1c67c1875f9a766c89a0111cba4d20a09d4c1134102bb2ded705dfce0a7a57a82c8f356c2841194383d76022d77a0f34b6c796866b6fd55f7271a24118ddff3fe8b532b1ebfb1f4fd77334b9d1b709d2dbeffc156db605077b4446d50391c4a43b4608653ae248d9eba34e3cc39c9e0827034ddd223ea2303ec28060095ca52c4685d849a62394a77422d74fc14c8c91122f35c1ab4cae7de83edea3b19cc36d20cefaf75c54fdb9a10353ecc3c9a24a0b3362b00b611b49d4d53c143a6b6d30bb6de6e54d07904aa3fa3f9b05616a1f140923117c6e1dbf00a0ed0078a3dadf50356f3f01002adb45cd4f3bab7d3c5928fbf311c3257b0e721609016d97bdaf01461973953db32808643e706d326de90efdd89bc92fb31aa4038cd652cbc40221fed7aa6d8c6c08e0924a71f68b3e492058e7cee3307835d8a6f301406525ff809bdc69b39bc730ddf27162e04177f66c06cfb47908bb39348173e5e816c2adf1f21b6021f272ca9dcf503be110f697bc45c9ca3a33206a581c307af300695804568335b2724ad1d9bc5c52f78913311b3ca10913d1c23eb5343b90a74239ced43e23911e4f1770b4cd5565a740cb2e74e770a881f2d6ea78d1d00735f73e710ed1544299a156ce3a3ae82e17a7d0cbe2b10b090b9b6a009a27a5820aa9c2e67a22404d6824baa8ec9194d46532e49403f3de20cbdb2d333480e42007e8f35a7680ac8244ba751a34d3a1af9253f335ff32b48fc307371cf06590721c71dc1e0e2b9f20ff0606dda2065883ae7cb3f345a2d06c1e83f30a9d5af1d55c192aaf4e57736b90f7543ae016d3aa16c87e7a34aec528c970d2f4c7ee529427bdccdb564679cf6e9d0f31e77435c27ebdbca85bc5e45b5db89517a45ce415ec52322273115b531628ae1bcaeaba96c8602205a2adc3f2156cfe43dd87d2d046e2e38da3b51ead5731b2f5620c4bc0c071bdd22ffb1550ed5c2376f804ba5f4d56892fabf5f11924c93dc564579426a7095926d8fb27b13e92f759bf62e9134280290b89df02fd9a6e233d56fb38c317e1f6fafdea2006377068e737f373a1d0779272b6f5249b9dea7e355ec1e90a3603a8d1472d7c472c239ce8906d34f26fcaf0b3cc62bae6b076dfc93fec66eba407535613065201415b243386a6f4f737355a240d1f5cdb0bb3c11b1d49547937e6546aa00ce0bbc18baa5e5ef644871e1bde44a4704c81d44e9e429441e30ad3c27b729008c3d4e025cdd0dc4b4b39af7956c7c0a8ee87e68b9be265186e7811f291858b0e94de25cfc71d8843c73e9a41cf33191e81a97ea620c73940ed468b26bbd6327c1922fb2e0414ece61532859f66a711a8975ec104689c9f5fa04edebd6d67623264dccfb4648c14627721b95aaea98f71be868d10813484e0ed0338402eb792aa4bddbdcde9d288a490b3b1826ab911dedf598473673155cf2a02e9af16571fab366dc3866dd457e33b0301a2df5b39f7bfe7fb099cb0001cef25cd8b7c33d9a81901382fb441bbc0c1ef37cc43d4a80df70209b1a92000bf80d108c41ec34bad210885430dfc36641e78e9b07bb3da426655453900efa47dc30c0aca7c931fb5fa0e8946fb64c01c164fcc7b2161738967c63a5fec7a6092df5474c4dc52234381be19242f8e0e3d9e28608a1378dc220a484ce75b56ce3fc3d1361b732a4e23e7136f11d1a347febc678e02ced02421a40cd04adb2e2747d9aa48100d3ea2b1f6c7f9d11fe05dc1b439e83e777e4c6d0663810459ca9996d1941d627bbd199396bbb8fb4b5892715dfe14db4513c43024c665fe3c65e792eba840e53ac2f32881b731f3ffb4254cc099a54ac3d760168b9d5552ac8edbc9b1755f86371108470d32cc7c5df6711030f8956416a4fe1311438a8f30d62e6d7e819447081669415bf5cec16adf51ef2b1ed97bef601bec24e7ccd7f2041e08887a75888828463de107d1de1b6c8d9737fdc218430dc7f18892da188f1221634c740d258707a6b6ef14ead46208779d6de3fbda761495a16aac47f366f0abd5078f043ca6e588f814e39ca7ac0142fe45125b351c5d12e6abc0cc4275d55f3664d55abcf196d13113f0ada9d1e15e309b0a17bfef68233c0c2386894ab0eb0d5e351e08ec559b8749cbc2c63d0591f12940e33a07696247c616a1446c14e83918cdecdec1720d5878e74b6fe09b3e6071e6acd0f302b2fdeaa57f50e515cf539091d59e249d5ba6c4d4b2e296cbb5803bef9be079b17ddcc4c5e881e71e94075790672f16d18104046e82234c62d5fb4720df87dc34437210f77510d5d3f9fefa0f1330581e398e0da3f950ff5d54ae83605545cdaebf230bc4e487280a355ba5c0432ae0b396241d5a48f0379e70b5c7627a9a93154272a2b487c8b68b2f6bd1dab3c87da541286fe2a83e0ddd7254bc20d318ea29c26a3c39079825a31a071197035484ba653d703ecd66d6a0c4701135ccf91abca30e07c34e9bb40b1e939a65ef34da955ec5db16f382639c5638528917cbbff06726ed88e3a31a6317f94b5d1af4067662ea518c4dcfc5727ad4ed3b6de05b326a2bc63030b3dc9dfdc15fb2b58c5c8dd245ff34f040d5b022ec8b75f135c5db7b189d32c61c6a63636a58ce7753dbb5d90449573f441aba5c1b5c6614c55df26806a9f42612b61178d719a04f1e18bfcd9d0e7d93885a25071a08f21af3e8c2fbcde84771371548a3f52018e82fc19f37867902bfda50c9cbd4523edfd5d5b5949548fba72c4d3953c9318681fac755874da79be21f0b539a84854ef6bad6509a7c400de74bec2ccd366748089815cfd743e41f939ce784dd5c860aa182bc021962f9f81411056e455d934790342b0651a81bb76ce7ca21277c266555f33b9b80120115ea18c451ebb0cdd8ec7e73e5c3589f7f9b66e55ecf6ebe88f9894c4d483225fdfc5c4e653209bb8d5332e7b484a1a5c1aa6787f92b6f23cd207cbdea050c854362f56497887897ac23b06fff4a7351f3b64240e0093080ce4580139e7fcb7da3eca627741f591ade840ac7f9460adb930709ed3b271c25986c8f2e278124d2810abac4e6420e13adc312373c163130a23468f6be6a39c7d3e8f81b9dd545cf8c11efae02c287623c781c8b3e5a824530f8d2048343dca9a6b1ef128c769ba774b92cd8ba83d5e05ac82260ebef3716384a6a6752f041580e89c7f90992cc118932a0370de0878e4a4a143cfd23230e39384688f850f0591cbc7a7521aa19fa64e8c51bf7ee5ca1d9898a47d4dd15bd8f425d22e96483bdb33e2f1b2aa0ed0a14287f93b5a1979a5d502dbbf5b7e1acb57125ce89f4c77e18b061fc2fc4f015c09061bad30a98ec611a6e7248cac2a1df5d24a041bddfafc56cf5982b32c261a444758c392531940c8490df887a48f42413ca6c2484e876b1c09f33a865e3a9d5ed65d16d64e9934a52ed34b3485e757089e8a41dc1d175f5f64560fa14e72b3f789438ccc1a47ed709fd7d35f36c5f7ee2274ba8bd2f99f8ffe60cf682f126325cea7b49863d9264ace29ed8f93731cd48fef9b2595b88c4191be69799f82cfa760576571f25141f1d3b89ad2cdec9065d0e08343ef4accbe9fbeb45ba01baebb42d3d08bfaf1c2836e5fce473a3af982a090fb415db18a73dc8548e878d8d98b600903b06a502c5eeae75b44f7d69c9591ec24742456e08177a05acc30c9c03cccd3c9004d405484ab54e6ecc1d64e676a1e691a28d86e27bfe2fb7f9706593c5b209513878dfc43d0db9ede86b56206b820ef946f5c860cac76346c3bb11c57ac2aa70717dd20b729a6a99bc248562215b42ab317640c8055c23a82137bbcde13e6159c4f82eb4e3e0dc18ef4da7fcdc8d53c9a9ee6c41ee700f06dcce634df4fa0eb1b7a40ba6a6f873774eddd81a381f20c65bdbaee6048454f2cdca251c0d1eef4095920f8bcfb5c7b4764c104ba26b8e1629733e83e5ccbdc8144e1587b34f9aa423beba5ab64c4ac00f87efeadebe0ce569de0e27c2b905579d1067358a70f820ec4d72b92a1c8344d695bd3809f59e180418368f581152ea1b52214f4c696756137d81781019ac435a629d956a5b1c6f0658d9d5adc8e4421caa23393316f2ecba023c60628da1792b1a6ce3466899f6527f63f789b97f8abcc99fadc353e8de2af718d6b2e8570f548cdbf28113584ca8d5340b40ec6fd15c3aa36ebbf8c7114276fbdbec1dd603bf179de1be117886edc572324b6b858981ecd9d370976e91665c49d0eebbece818c74e5b635c0e3a4b8cb3cd55b23807774af510cd346027727849d08bd71a8f7d4e7d688dd35d9201b90325b31d081dd30bf893a1bf9b772ad9dadd16956f9ef539cf2a684ef571eccf665b42b0ff94cdb007956d53bc3812070f69200d6bc995f074f74cce5b68b9592b0333a3e95389ce4aa7042fe86cc88742d2795dbf28ea265bf8529f174d1ca8deac53287b0e55356750a0c699b2131eac9ccac88ea2021decfd9b413bc18c4bcb944d67a5618d22e874ab92e58a121c1c9d40d7d893741c67055390c154c748a0d34f69c279809caf9021bc8d30e3d1cba4ea351e0b240b9b66ee4e17c4a02b8bb710e815ef4feec7c66c5e859b05910931477e58a8ec7780e356f1bb7911ab22e888809b2b98f754aeb6e5e37e4e549a0091ccda0fa2f00ee8f8cbb7f245e5a9c56289de97b392ff37ad069df99e7b05f78f2dfdda86a9778521809b6aa877930482b6b00372c2ebda291768c3df5af7480185f9e94a80ff384ec4702507f94b94f208f1d5f1388d720023cd966ba7c87832a472ebfedcc32d8216c2629eacd6df1e79f04eee55ef937b0a9b6a014d4a149d0bf16885525a3187e14addabbe36595fb34dd00ecc26dd2a9e4f8e1a501e219c70c2df9e4cf2ef021ee55b793a37355ee830ee48feaf9ed2c11883d01e9b79383b9bcdeba732191ab56309265d1a916f370666b05a87a4318d371fb0abc967cfd3874c0b9967b67dd61531e765b6e2da557bcb0e0dd6516d44439a9b25e9d9ddcb454795d56a61855b601e20892eeb3f88b121043bda0cc9e260cb42bbcbc4f14370e460ef62e8e4afa77d652c43d3987aa6ac5006baf2295fc7046b68d0d3ea06c617fbc4379928553c55394ba37f5a8a9d1a7d5da5db6471e40020a85695e598699b283cb5ceeae76de916802f9a29804e4fe881344ade4da50c516d96df0ea1a6594c57f2cc098d9615221f6e2baa392a9324b04b08aefebce4c2f84be1b4eedce4f97995e986ca6e6b6d60c79d0deda4c444198158a9d13b3f959a09ce639f7c39ee140baffb00a7d3d29a940446dd55a93068ffc15ad2f7abc17d88b407e5d7d91251d0eb7eb5edb116b2c026b34e01d3b0a0cf1465b64182b1a124bfac154b20e5bfa54fad4f8257573710ee5a314a2990d3bc36a680e5fc14e128a057e6b61d52ea751fd9b2eaf0c3167b83b6513cf6165f30056f938365c4f78e535550b434d3d20181aeb79e363bdf592d972c7746f8de16e75496406cbca95e9c35be4895a28442f2c0511857005f10c512e203dded83686dcb77c2d653f78d62e23354b5b99358e647077d983d20d19c4abcf7829f6865355db8e8eda6f6fdf35a39f539ce45e2af8e40510dfac5d51946b8c8402983ff73330ecbf9abc643c1bb9ca2b147226df4cb3aeefaf054c1a46138e0cb2ab2aaec5eb947317cd03c2110a3bd86df006de3904baa09948cca8b9433104e0b4fb1d03186773ee7c01375540d96100630818f039bc8718c3aa50f054cf3d8d3c13367e7b6d2dc28693cc8d1d4dce97e5616001302d0c5dda46014136d562722a41acebc200b189dcc60227a39ce33c74526a5208b344df7af35a9dd31057a89b347fbad74b097fad546a958ff7ccba1315b83740030be154389e9473ee55fb8758003096cb006debf2b744887da2885984225ec7e08074e25d54bd65a57b6287ea9fb2bd0115025611282622f578341cd84e71112c51583f1c2513295afee92b4bd898e4fc26467eb6a0036f59184d257075af48e50ee0165629c40aae60ec2b2aa51ad040ba1659b44b9676672cb7c09e4b797ab6a47a8030acf54944ffe5e3504f9354e6150d3275f57c4c0b383f6e20da68720ceee3e9f46e36972e5548c05a47d21c97a5810144a9c7964832e9888816a3bab0bc4fd902f47e2087b4df5bbe2a01f0f3e1d9c1b5e3e030294304a52bf1d0d6592f3301fe973af7d61fc996db80285161dc083d649ad8992aa8db2b587c5a22120932538ef3eba01bfc7d40df91fbe2d1084638994f18aac445aafd9baa41b59c084ee27674082cfaf823a751867ff2414756f54b14993e14656e957d01368787a13ca7324f52938c28d5f0da0834b50cedf38ed45b2681540935a3f89dbb06bfcedfaa4d9e808af6a0f853d4041a30b244bfdcc703fb7598c88b1224edb19c3f9f3c2e2f61dec5d3a1990c1c409fcaf247c4d26ba2b2aa5d98e48d55285c62ccc6eda1dcc04b00045e398ebd3bea1da40513dcadf64f3ba89abc12132aac984c2e1685ff9d3ca5023e9d5b0d15909d043087905729d6a37e5fdf47c02a884e6c219260e95c651754f643a027157f31bc9222a8300ae74fc92b2b9e868bc93227fa335ec0e56d3e426ea710de24da527508d29a4021df7d87453311efcb9270d33f35ee44c96148f2e34be67d3cc3882587e0f126eda820221e76c4557b7fdfb792b3ac8716ea8103ba3a68a0115d43d486ac61290c75f2d0b32a8c9fa2fe1a963edd2f4c3cf584901d19fcf5af95a107ddaefb185b2233698b62c5145c8e444ad452b9597b3d3bc48bd70d583a747bc8b524f698b0f428df3fa93127b2d36a4e630fb94fcccaf9d6e81e84e8465968088937aefb230094b4a7500d764883266c1ae006f90a5662b97de39ad93b7bcb3999dd44d2d7260b062f83f8105aa3c6ca9d38611120a0f85ccd284d0f2b99b12327338b676f46ec28ba3cfa3b257c5d24b1cf7a86515ab3ed3d01aae04a0409370578f6c68c7f09ce3537944416aec9aac39900fad50853c0b59bdbaee3a8c5ad6028447c7d03aa63e65fa245707746ea858aea351241e3e695406b7b9b6ad11003deeb54c21d093d10e105d41c219c34056d6fb1b42257764e162e893337a9eac143f547e476048143e66f8c0fcc5871e8bd350cc8604cece1ae9375b9c0cad6089552c74fb649f609d090ab33d3bc1e59fe0a79f87d9dddc6b324b06300aa9469d334d368d306b8fec5d33961506a81142926cb9f044b8a12077eea36f7803a399841a7ba5b9da77c1a6f85a1ec60ff61cc2959585c440ea489aa81a2c8eba2f822a18fc3b2058f445e4a00984c34db93d95eceb9a314e310043d843510bf41ceea4e4c941a27dd2de0f2736db781300c3fe2b7f4a3da0ab1095f475ed41e2c2215c3422d41cfd689bfbcd3e36d5788cdaa840c3e6ef6aa2cedd259db219a67b59a12aefb5a48b0a52d3564102bd5b59a29b54f2236db0cd39fd83875b3d872fa4cfce5a11a5a4c7490344bddd1d4c63478e67b50676d62ccf0ff71f7ef7c361a2e7037165b10363acbe48dcc12a72267e1d6511e73dcbca64d3a14f147904a8e666dc00162a79be1f10aa5d06dba14b85050768a5f7c87ecab5dc4e739b84bc5f11567cfb0dab85e0df6227e40b2cca46999ac49157740282bc69ace517f1258ec10404b5a53d9f4cb891408c5cf196e1c919031d055329284469dee2d994bbbeaffd989d64d51f6a83b41eb642dc0e327e9badc05b4ff82ab570f61ab6c986b7a78d0f60438cd56eda00ad2216f532636ebb65f3d0b7f2dd514b1d6abac18a2f80c3c692474b7e47c525391e73c4f46c993dd3b9d88f531cd6e3ce8771e3c60ae19f556442430c3220e3c23f9bda470dcca24ac7b7a74e2bc114e29b386ef8923e5825e7c4b2efd82af785180e7f2a85ba4f3c25c7051d5252b510732a3ac1d5ea84a805059ae70086180984d49808b474d63d31b8159a378f652e888aa0d2cc55aff1c8796dcf376201209abe4371f0e20f7fbbc6a71027d0c3c994c6be23b1b0c23792a8485b16a895db79c40d14ec12d71e94813e9bb901c7197d1f7daf0a4797810cf3ef3f8085048f86d349788e39d67db0c687a509d0e1824d4c0492a3896a4ef4bfb49eb553ad05d0b62b7ed2744a4417b49912b32c126d37c590cf4ef4cbfe19d637d1534b68a45d8c2f714a477a03e67eaec7288a7acc2344f43a05a8cdfa51075da662017746a1c18100ecca57294bd920a4c32920395348d96c77ef259f5f8a4598429bc90416dd60710f71f8fff44e1ca9e85aeae11fae5eed5609ddbdf7a73aaa10bd9471caa23f5d7af89f2b0cc657d4fed7fc77d017adda2bc29cc7f7e919455c4b22029b18b92b8c2cc4936ae5320163e06e218c85156a0fbed918a14e7e00cb096a9585b21bb9a2065a36ae06b91ab97ca5fec1988a649ac58347d1bd5ddc9b5ec17d50f4a50920f5d503c6ca59ab4db3dd49fbdc501a1137a0cf91676ffb080800f0cf9334f3740691b60af2ac588d8fe62cb02e3ceaeeded468e6f1742321d63009a0a353e8de85ee35064f639ac0f231de9f0063783d773e605b20448bb16e3ce4fb003f385b58dfa6d8d6a34dbd3c2cfa052aaef5a81ba3f5e2e447dd2ea3922b01ab3ef637bbdfebd24eb0fa290d0d47ceb4182f3b408f7f17e069f6b7d106a23f024412d5b4b7296084655419349d3c88fe785a015ca8e991966319b5c9f3e18a9b17f079edacd7b91c9584bb13bda32f06a0e3ba18c7513939b435f0e569c06ad64396ad9afb2467974928ec90c630e97102d0d094df7826eff10b8d9c5840e02e4731db3d3053f60d6a5d366169c928ddc20bde57f508118df06db95627c7d9572cb002a56ad2107a3662b1752a4f4a6c49d392a00432a9bc0d6e64521e6d0fc34ddec1f86eb14f46fd1cf05f86039680606c06e9193c6711c35a68a9212a40c40d4ef11f9c58f1009586777cc33e31e5382d1b9da427039918de3163003833cb99fe34ef79d04150fb633e3ee7ea61ca6a9ebe5f67a7df21969fdfab803772e630e3dd7ec520e05184627eb01abd3206c6e14242a68bf70d4c09f21201095757f31f2134700a1f8c69484f36c7dbbc8344707d435dc9f1ae171c54c72a7b23ff7b24cf84a096db5cb06eefc8d3589358728890a75b6549df78e1e38d323e2a46c57447fe231fc9ead80a7eccbce1d1878fdc0297390c2956d8d63a0d404babfcbe56ac4dc170365a6635177e9bf1d2a2ee084fdf99b5cbbe07a1ee786e190f058540f7b6092eddc95a88ed68c6daf4766c0ae6e9b58f19a8ece69e0511fb2bb9d681cee38304e18d281add23371029ed83925c5209f1b294fe196c7b8e93596b9355834ecad79fa433a1cc351d257e02a7363d85ece890c3e9659b64403555d9c83471f300ef527d9e1a1ef32c26a4dfa258d02ceae457c8b9b1840b507c8c8a1118eea16002f73d8a2a64c7f6aa6b5ce7edf522e05dfc6183aea8d8e15a50ab2d8ebf78f0f80830eb936e95f85086babed6509510b09198757b3d425bff5a993d9f475b87a5563d2c2cd5aa98c302afc0a2d44ff477f7ef7822799ec0e3c9f0dd4f7e0b889b38fea4eec48feeef6847280c7edea96a82f878ea4374437944a8bd00959b1a15f336a383bcef581ae7f9711a2a9b96370b148ad969dde02e1fcaaa6db8060c0e874a84c7bfd9109c03032af9b1665d40d0324a072ac7e345a432a834dc196825329e5386f2226ce56915246186af4171af079099c408c4a6a7241ce9c753c0ae19626f807b621980196467d1f0040b6e01973390053531693ff83e3c0f08fbacfd92ecbdf7de724b29654a29fb059f063b0635536c4c177293315d60ad88131f6bf5c78e613e6e801f37407f7263c594631ec8c02ac1715dd7759ee7799d4e69c7075baa5dfb38cae50fb67f472c011bc27e1ce5128916cb6f7afc867e7f69555295b25a5295545dfdb8a48aabcfc1bea42aed380e06623e58cb763a4b3266aeb5330ccb644905c33c48d6d56a773777076145a35b7f7e6109b2a34096134baa0ff3f1943fd67294ff075fac5b533f11d705596a239176e9b7247b8ff1c35a5f5feb74eac6b3f1945425a292aac823e21a2fa978224ef61b4f4995811b4ff4c08ac5b27aeb87ddca619f4c4e7ff4d26f49fc89b52e4d1136dc78361e47a9e2ca2d0fd7488ad54cdb628eb04fa13fe31c9cc1e045e5a3c48fec59e5895175af4849787488c233230585e4cc6461e5566b041d807d371592f3ed88d8f6d9fc8c1168108e4272a697db2d81782b106942bca009bc7157ebc76f260b1bdfb12fe42f5faaa461097cf4b4d3992010c98db1c4562ad19f20096654a073e677ce04575c0efd95ccd999af42cd691e80cca1a00a289472e67bce0e97acd36382cc0390bfc363b0d1df6875aea1726254c6e83758c5e29c184b4ae99749679d3373779f5182d13d52ea16a4f23fb062a369c1f6c739e79c916364ae54647c5d7e96d25d5ec138b456acc69433fb16d265e51baeeccc8e8594d1c61d629c8d33c11afe49de868b1867f79c4e7c6c1568dae1f68986aca07dd8aadce09eae0c4973676efda8f7e39aee46b19a699c77378e935f77b78e931f77378f93df76b712273fed6e305c7637981893699bd96838f9c5bbc9d84edc0c0e38f0fc0633c08c2ba56c8104364b931921246087081536f69bf9527afcc9de286ccc28295d888d39076d21b35b878d6b48d9a61d6ca4608d7724cb537a6f891fa3e44ff227c1ee8f94d2cf06073f640fb991371099e0d44bf0caea0ed158b1fe61091cd79212cbd787b0c88fa558fd4604f9f3230784c436a11f04be5b33942c7aa8b8a728b256498b45dd103616d10dc986357294da5abbb9a67f7265c9755d247a5a8bfced8664437b69bfc7a258e437fd1eaff01ba6626991d4dcdaad6160389775883e16c6221922dbf2b12f7e3131d8508e93d39554b84d8bb18b81c694e9ec827d762dd9438cb1dd67109f94dd4e5275abe2e9642dcf66ee2eddb108086925c6381304f712226d280e11ddae5ad87df2dceeee06cbedae0db914cdeca00f47cd00c1bdc2b66d5c823a1fb62f38253825ba1e3825362eec9f7c670662c2c2ddf81e41ce64457b92cddddd99a5d850fa1358ac208b2a99a59452ca38a59c534ad952ca184d2699e892594e6e196b16db3f3bc61a92597a169465599593d26c6632cb6296799675b6715db32ceba8c8b22ccb6ac56286655ad06c66328bb4524a2bcd3ceb2ef358b26726e0d393274f78e024b3a435d824b3ac724a39abcca66496940b463996b2575ca794df5c43b327cf92c69f52ce9f958aed9f9259da2b699d73528e9f6d9d52d21a446ef38e6b4fa605b65f7672ce3979ce8ef3e44b309a82366e6666b2a2f4881eb50e5dcc2c334b96ee2c33cbcc928556226c734afb40059b6ba4945ea6a43364a1b30b50d219b25014d023ba45163a4316ba45163a4316ba45163a43169a214b7e8cbcae241ba881aa54a932a3e5e86ea55874fbb7b08fae839d12cb1fc623111c2bfaf1df78b23aef6227bbd9d10ee36a976d2cade3f989a96e75d1adedd5e560fb777803fd4c20cbe16eb22021d851c515d775408eb00c1495b0751b30f2ba52bb1aa859d038f3276a376ca0275c43038569a4b513215ef9d3953a982e66ca0d1b68c23057730e619cc99a2c192ecd56ab9deca71e710ef94ec16c95ad266bf6542f3569046b6162e60ae6cf4cc1e4e13a26b9ab164bfb490341a08178c07431436471ce1f47e160a786232646c6e43650a802d8d8c8c898669ac6e954038b89d359326bd2f5ce07204ef9f3c038959382b83ff327a63a1da781e592fcc68be34c70125965abeb1fce95df10719cd964fed8307fb8aeebb8219a1eb68e52c61e5cdeb2bb67606ddcd23db2c9461b5c874d4e8ad54cabceec7252ac6698333b919c14abd4995d4e8a4d67f6a4063292934a677639a3337b12167766af582c3bb3cf70e5ca952b57ae5cb912031ecb3bb24ac2c3e4c63b43ada300e768ae992c3807ffe8a41e3b32fec4bd8caf80e94f9c1b797bcc6d70ae269120219a0039caf3891264e70f39a3c3e4f19b558ba5b5aec7fa782cd9c1a13ce9f55e0b7450c6067fda60833f6d705a75af54aa4e4a7aef967f34a16fff700d13ae89df71b1a1c7fab949ae8a407ee34ffc26c86f5a677ee846deb4e2e484dbef0de4a82721092eab8b40df06bd1e47458f1581be5e4b071b7a2c8fe5b5fc865fcf811dd4414dd42fee4d1f36d195690283d03cf74166fce737c3ddc1366a23cd9a4270e79b9e0383706f32cdf9a68f73b8d9d75f11a74d9cd35d839388a33470ae8cf082fc26ec4e7294374586e6f358331fc7547b1c10b69374be285a6eb81d73198a1622de51809178a801092e5b8ed8c24a0e73aa3b075014fc10832d97394a972da5e4192f0c7223163fd460d483144744d1440e73ca6b39aace686125cb3b4f8a3892eb24bad1c8e098d8d063c5a86276fc464e4aa77cbd5e324e38cc95942105703f7de46cd03a186e709b03b75386d129338c4eb9c194535216dde1304948d663714d0a2c6be537a1c722e2f2e52723129103ceeb18191b2363e7aae425f17cbc1fafc9f59cb48eed434f05404ffe0a1b7a2cece97b473887f64c03e3a88429755326c6b6d79560220784a59dcba575b77ff36eff94f5d47ca39f7a35782c46c5e73ecec931f5e4a691abddb9b1d715e770bad599306ce8b1bc24d7c3c1f3c162e7ef708f1571a8d779d8e71579541ce54df186bca388e31171fae1466f07cf487e185d11871ee154fc244c86e80e445e4bcbd9984ea7f49b86050b96b9e27eb05ccb4e077b6944b260bebbf8e21a4da5aa36a342854a136d0abb847b979133f1588f1df6548a1cf592e2bdc78a389a2aa6e2d76a5573b57d185f93078b7d3857338dfd68198fe537d45c30314eb9de973a9d06bd96a3bc1e8fd5812faf0bc15f823334349d0e7d9fe2521c35a48a38b388eac88d495873e5b160923497e7e31df190783d2164af655912f71ecbd56db1a1e5589a2be2782ccde5b134174691f48df8f4a33d8ef2583e377ea42cc8e1d2261e8b1ee19a485957f84d1861b831f2dce8487e13c613dcf8947589224e6cc594d69a72e36fbed119dbe6b1fca6afd7e3bdbc299ecfcb7be2b5bc20cfe549f15818f5979438e7ea4e2273e5a8f837be90112b37d4866efc506b459ca86ad1f6dc0b4770657fa10ff78f821ecbeb0122afd7725454792c183807c6d33a64eb3801e7a031f284fec3a3d232cabaf131da37daa3e4b89b19c284607d2405285c6902882bb4c8418b2d2d54a902c9359d689c5297a17c89e27a37b43f8505b2322e0ba550438989c52e0ba56024e6056bba2c94820a4a1751b0ac924d271a1c4505a1135c61729454858a156e38492fc0e0238a28f9c26508269210f2295650726576a4891dc270d223032972a808ada08229a4021715aea8d23f315cb2477d8d97a6246488f80dab2384301a341f1766e0e2620b2f9e70295a00448de85e454230b8a1baa0a3c814383ce14596167c88a2480d4550006672c7898884a82e5cc9322425b4866051410b3c6039e250c06009ac886cc78892229654e1614889131de1e98ed870e56320031bf001c46fb02b3f04bdb34a72e53711bf295df9cdd32cbf01c095df2da02b7fe865a1232dc0cc40ee008048081756907de69aaf22b22e05a8d244c9094174f1829fde11a3c32e0bb1bc4882066338e919a365ad8c51c487314e8079c15a2d312bd8192a33b03048c860658254c0021488d1e48a18377021860b56bc7cb158bc2421d97a198a97a31b0383172d5ce0a5c80b519731c230b252acbc36587959e8880ca6ac42479a905fe3c8eb866f43e3103695a7e5051269a5a750048f0eac2984a410c4840c4d446901142cd86159b1d624c4e281e544914d77c56ac5ba0c51cac17a97a174c1e244172ca8b0f3e64c29b9a8cb1033ba44b9f26dd8ec38e2ca6f80df70573e0f1a50ba3c61b9b0d205881bbe8d2cf296b3405b61059243b281299318ec1c82e402520c26fb35503654376c422a261877594815830a05d7e2fa5b2b15899d56b821285c7cb145664c2ce662e628b6960b298b0b89e7f68c19252c3f17526a5c50b88802a50b2ea06409a2677215a34d359a65f3d65ab198519a3dcda8462926376c725d0f18f67196d5fab5a6e9d0ef966c1fbf8a6ddbdc3a4af94462ad92aaa4a2b1a4e21c3ca5498b377e4bb6afdfea733610f3f194e43a9d25db4b39b73ab94e47a35936658cb16211c326d5b24a6f735d0f9e762b369760335ac1308c7e19fdea9d258e7ed89595931fc41053e9fcb02a61e5bc58abb4535ab901e883259556da91f289f6b2b4d2be922aa60b0e2f1f525822228e0a1b761137a5fb1b6fa8c8e5f26ec604e6d31f41fe3f61c32e926010f9f483ccc75eeb66f4c068d6fd18813e0606b1a1e00b474c7df7d506fbda9180629d8e83dd7b9775337a4c0966a0fb3182fc09069124c4d4771ff25008fd61f78d49d089bf937eda7d779ad6e978cf3bbcad708e1b32ae5b3d7d83dbc9cf16ee3befbc8c7b42ebb8ac5b3dad1ba4375fadc303bba7278aa762f7b48e26826fc417e29af82e2b2e23bf099be862f11bbf9954fc6616cdd71cea222b56f00da705dfd080717cc45414a3a8a8bbee37c93246cffb79c4646242d1ea96375d8eeaa322ae8946f3b5c4865d5424391fad63f28d7ee1c6c85bae0f46c5e71c32a72b370255712314ad9e5425850dbb25c551710ecd97a3b229ec0777be9c2097a455c5152d40dda583ba68be8aee7cddd8a9300f584336361ab895460934ea8481eb0f472e17095743695f09288ddbb82dd330ad6a1a189680ba59f685cdb28a9d7ec7162ed78e061c492b8670e0f860bb528c03708d23c0517e0385836b62c081001cd5e24040b4329d0cd9d84c29b75aabfce63c9d6cb5a7d31896b3a7938c14aa35010ef6dc3818688373139714d7c46087587ef2e77c1a77ce29658c52d65aa79c54fedcb44dab1996d1b849b6beacd6dad3c926f260635380197423044ef9cd078ca215c33ee09b1b8cf2bfc1370b60d40dc65900a7fc17c057be3f8e0801ae01e1834bc1d88210bb12fc3199540e7bf961d2c7d6b13b62402a63f6c3180d8ce2faf707c5858063201135eb2e863dc739e863b57eb1b5e2b0c07701943b8ef8248407700dd7f8cb5c6962ab5c05dd2f47417baa3c648caae501017e15cd8042c90dfba4e9246bad9c06d689613b16c39c5ad40cd20f79b9a26ca0e4141be7285de61c33be8340c86510642fe4d21772b78c9334ae09fd4584d20ce8b10d7fac0321de284306b66fe85dff9ede9cd9633f3b11b28f5f18b3974fbf7e3fea03c12ea5943ef6b113410a7107d097cf5f6e7c8fb311cec79efe0ea7e0043947795c36ffadddf26cc14e3fed88d28992aa5482d2091d926784f7c5fbd221955473ca114870140dd3fb7af74f6b56aef9220aebaecd84bed4bf0f2e77ec74e2f7d781bed8fb37a3df83ebb3834c34b0617f20b0097db18fe2a83999b9a597fd9dd44bbfa390b0be7295a3660eee9f6b1ee91ea2e1a9f9b346187689adafe4f66528473e37ec1f1a446cd846e00f796bedba9f06117b9a270764b73b30b23d3bb0a26f37f17e12b610777261bd33e31a13fa8295fac4c09c40fde3a8f973670b767e151bffd4d28a6c5c633e536f008f14be56816b9c88a7d554945a28b5506a61c6771aa9b57412276d2fdffbf15811886b7e237214151a817c46f725ed8af58f0d9e2e27c53b2af59492946c601d311fbf7402d60163c4d28a784eabeb0d79543c23bfe1291e9157e45d21038233c0d0fbe16a600984397214df702c482eb06ee428bfc251519a782c6d27722a37be86058b238edf30f71cf8d333e8c61e7315533020a21e6199600d0a0eeca67df63232efc9340642635a8679ac98436f1f5fdbe0a623f35b04e21c3b30ce64219b2b0c9c1eabd56ab55a8be2a9a84db94137ba52b04bb8c75aad567c01c5a9b55aad16dddefb328fb57de8b1bc24e49a786cdf30024971d41010e7f04e53ed382a4866c60d3ba9f4f3d3c429cb6a52b4289a4b73a9c03ef19b70ae58f4c7447bbc521f1827391cf7d11e4fc5ef8fb21c15391f50c684c160d250d05433cee346bcc77978e686ced3357292731ece5184339e2247c579c58d2f65c8e5288f49949714d387de904774e367206521b1a1c7f27a228e9fbca0a8bdb496e6e337f35b3d5058faf3c864692e8f45591b4f6b3eda0fa8b51c45592fca7a51d62b7bc1bca2fca86926c3e8941946a7a499724a7f75ddd9e6ed1ddcf6aeb5105d1642427443cd2584240577ebde364e63714dec92acfc4cca64c2d93d7dfc691471683e68ca89881b35a01feadc611ef59c5c135138c7f673153d2c3887f61fa857fbd0cbe2469c081453110825838a60cf9be2c60fbd276ef492e000dc00e440ee1d877b13a8a9da8be6f29bf85a14c7d15a9c8a5a8b8ad6d25c5a4b73797c6909ba00b82c74648abb755ce8461526e97a3fd9eb5f73f5d05c27ee4ddf63877bd3eff0991f6ccbc8743a54c6037ae2a857c4e19caab95646c417931be71319349b74d724cc49467666081b6bb57635570159944c8b326091b375f280676bdadded42e5bc996c8c458d7cbf7d79049bf6fd718dfff62f2310ef165f9a7a708d4743c637e6e6012ea39b669a91ee3d56889a464393d9989131cd9864b40fb8a4324e2c83eb383d9a028dd31d45f78355a1540ef0cb71d171bb17c1de4e988c8c6946049a8e8cf6610d940d9cd3338c0c1c97fff4c9087bdc4fe6634ecd7421fc9d1128a1268d8c4b45a0e9c8190e66cc193468d0e82096e497e881c7398277477873c8f4c08b36e6c3496fe5d888d301521c855f2ce5eb80dbbd06996b606060be3fe6eb4e0706941d7807825f0b72e9cbb8c6df03b09a80db26c0297f286caab8726484e96a600faef19f11b2600bc946702caca9477762125021303e038b89c599d5e6384ba3f6fc19b858fdee938da989a11a050299975214b5d13e79b92dce19e36b5c16b938b92dcef98512876b7e3542ac7216a313a3b3468d776e58a78369139b12a3d38550698d94986bbaae391df4a5ec3e655f5fcfa3b3fa66858c36346923aba72123221b77441c54e5acfc47451b1c319e111b5698eb5a183694254f066f8b62c3dac56cc17d9be642e665df7ddc27b1f0c090af602c8ee4eca533cc0536ac350355c40f33cab6d8b0c68f129d624afb5040ff736ab1b22b36ac29943849a4449760602ac539aa894fcff597496243d91f091f06dc009c16369491040cd0a400bc59a7234f73a3cc38689d11465e614d344898a5981858be71bd2f87d3c30130518a0609dfcb5c014427402a9aba688f727214e3e2c7ddad72f1dbee9671f1d3eea6711bd779250b13c34593f75cd37fa9e9763a9307b775c9f9196d5156f6ea354a079b99554b49402e6f1714a2ece2c2ed071282203b44ba1cf9f11bdae48910aea6d1c58706eb9cfec662c5894a4e2292a0547902f95b240e28c06ca8c101ae7cba29a972baf267c7420d84aea471a5f4b1a61ad44083e452e5ca9750b0b8ae7c8e0b17b7e64a79aab65a913732b8bca80c55cad062f4c2074d10d168e162830732ccd0c18f0c34bc08828619528666bc68c20807490499bcc822860dbc487ae1b445051a642c9124b3c5061e1a2949315b9ccc30930411cc16283c262692ec962688c86ca18285982d5ac0c8ca84aa849442118b64821b4a5ce593221e52119dcb439a010c1c52162e6c4cb03aa42d45b42558dc0e0c99123c9b0c482a13449a1316b02692b21e78e812f50b184c0c0a227228887e810511258cbed032c4744ae248da2fbc0c69275a3115d6cb6505181830c40aa3c89aa2c4003061b978a2441839c06811860978084305e3c4765b94b04205299cb0f53214309cf8010c2116183d8001a4040c1d60b880d10283252f43e902460fcf39ea095cd3df9fcd18c17fc65f484effcc3789b0fc9bd7aa32c27677a3dea69b87be57cdd3ddc288b0a4db4418d10ed762280dace9639efbd27b7ffb9b73c07ce5bcb07fc30a6218a538703cbf7f789aa1896048bf3ecdc79c9af93e1c9f997e7e314fc37a331008bda6f70e04d39b4c605dc97c75e7abaaaf24c5f67fa9f4fda612e700816f9c5be27b0af3b1a1df59557e63e78ea3fa9fa22024c3ce951c92262318baaa55444943472f235791cab57a4d96eb2311f677c6397f472cfdfcb4b0fbd297c019f33b9a101f04bf11fc40df0e08bd1cb864c604ab2aa7ee78aabfbed34b0c42770a1519ba130c6de49cb7bf86145ea228caede72e125a818a8c55d55e749bc60cfb1a3d3060a32b8d895171543f46e4a8c688fe760c3edcb0f2dc0eabca87b7ba59531943a8aadfb1027cf5c61f00df8899b4a114a3acd621411eaf26e2a9c8a375340b433806361187e250d063937823376307824989e5a0b0dc91b3bc75c439fc08d768611c47d229df61a5839fe03874b9b104e912f4b10120460086d34cfc0cfd0cfd60604634a4c4ce1bda702fd8d0defee11a26377ec71dac7f0f1d1df98b474cc5f6af9b6808a9bb8ffaa891c01f7dfb876b5eade50416b81d6cd8437e43871cb14515373652521ff1ab57dc6d9d1f21d89b7dad600ffa3bbc22392ba6fc8a1bdfddc876521f392ab43c1801d8c70f81716038f5620bc3166c2d472cdcf8ee475c139f75c4925415a395e2d3d3f2e9e939ea3932d25971c43aea39327264a4a79f6b787cf180400876466066668cce1dfcfc0d60299d411b4731ffe5f0d4b5b7119691d8303491a22386a2c88198c01d6824373efbe01adaedc36fa614208e338726d18dbf9968b0b3a5c46d260cfbb40905a24f6ea42dca023da14b4b4bede44462be728a8e8a8a8a98bde03a1fec3d739df4d16a1df9ddb878433e9a019cc2a8a46d572635653422000040013315000020100807c422a148240a0381d73e14800e6d8e367466341708b31cc751104541c618438c218000600c21c62854433500e53b4436cfe4476370bf249520953bee363fcab7f049ede009ef74318896ccf252be80796e81c8713b534a276f16f7eef467809c58d5d69fc44fdb8aa8240c15a30deb9fa1865ab4e11112eda9cdd4d578db9e44143611526abaa15eb8c3f129edd5ee8def9a92168b0d000f1c628093c3a2bb58f93d05906b899e25fc384368c5cbf95e60c83f8efbfa8f1b2f75ae80aad2c75f2c24cd06e5da41d270141fc49a1d850f61734c9fb9e96f1a62129d5df8ba9d9ebdb2b778a353099aa0573e1a38454596f49663c47882b836ce61ef8d41a7780737ca2e1d2f8a583429cd943b5fbe86670b45cba27290d7b95ae2b5de6fbeb0c077f0428881d78efa6509e72ac83c7f96f44e8b4077e8edbdbdbf694d753498731ea27923a4bada0cff05db32471fd1388e889cf5c815ae0dd776baf85315baf144f0848977924530da6a60edc9ae9a50ea33a32550c8932028c9b28920f0b32f06ef2e4d35c01e7d783eb59315b682c7385941215b9c4d04e0b684fd44aff0c46467a4acc4b05d37b1c37ae516c5619625e241417a7d435ad11c8c7d4911493840a727ba7f3a6b36ff74a1c71c1e9a9e1ad933d29c8245d89dd5b115acc53aecce5d6946bf6cb0986294f7170ffb8e55ee8b04cab44f0f6c24945253171c53ba86aa3c461c12090469ee9025126908bb31944d9007520b8962adcb6988875332677e4dc31988a8db9efe03e182053440ef9072b459b88f2b61628eabea934664b0ef3c650c8bf46deaf67750f451d605a2a66f488e78604514cab7836891dca0848908454181695dbbdfb3b85bcf532275303c8608bcbc2ec9f2c38a17b659387a779949b88bd5852d09ffe3aa6d850756ff63513c2402da7501c3c8ca8e88cec0ba267cc95dbf95bf2cbd6534627582f9dcfceeb207d582636468c69499d66ab2a32a9ac303c803669c2d3736be941de6eab95ba2ca4a810889c55fc09dc24c24e85d096ee20d013224812f582d37b8b381e1aedfbda42add1f4130d54ffecc73e6765a35bfdd82e5a59d7720fdf8324334b5c1612e4f4477f37652ae5b7e978886821873e2a079e22334cbab3a98ffbf150d0e07d0d9f29cee2e84cc041e722ed0ca33e09a146f21889a9d13d4c08cca571010d1dd3b839e45951cd71bdb6517f6e58e7fb46f31240a2f4ef59852e09f80273d0be76fb89045609fdf77ba9bb6323948f6f121c6f1665f68f01620944cab07d535d07119aa4ec25656058f6583e884b2733759747dcd2d56dea75d55dc4acb16c7e8163784d884ddb1df3f9d3644bd45e42b50f98a084f22e1e0dc2d0f9a611e245d3e2f9cc60aef746d23555334eea9ef3fedab4b099f20b881ef86ca86d8d8a846339da2a6f5cd7b55ec7d6267b212db5d8162ec81951589fce14507c503345714e485005c3552d862936cc7174037edaa4ed479ac20ee41a812a50f7270dc0f08f302ed840f9069a6fef111e9bcc8310b015bc4c357471615c0c197e5eead9fd847082da7602fef98a022ec07cc92656b4e380c3f204a77e0473637b5ddb730fbd8de6b2c1983242f7910bccec7f6f9fca07afb80587b50aecaded948dc10d5fa928fd55e905a5afb2217a5a2930cb660e250d3b70e4692127167e8b8a0a6bb5cbc3fb6df6534c336f475e8d9757def23bdd079a6a9129ceae7be2ad0d304d45e78387be19fabdaf90fbf369f7dad69a4e23ea781f4fa99b568108cbad77a67f1c37a91faf53850cc8e9bc67ad808a60dbb4098178f3da6ca979846bb691e0ff7dc5732b5891426c00a2e0eb2165cffa2f697ee0154f3572b91d30ee256536dae27122fcc63bf08525001367b4add95ec5d5530993a40979d787971f6c9a0a3499e6c91e19d7b9b46aada4d683ddc55b3d39285e302ff943a47994d0ab8468f05e5439e770e453c2a5c31354c7ea704d1446f3b810afd15e8b3fee544c9926ab3555da581683bc8bc23196b66afe5d3a312a7b50a6d5b01c557023aa4f4faff44eba05f3ca86eadb705991fc1b8c137dc01cd62cf71a335d5a0e0aacbfda6987c29b9cd97c3937959d192700bbc406363711ed6fe08874f9fb6cd7e7703d105421b88a4ff2e92d1415a421be2bfe52a74b9a6520464f12a21bac7ae2a9a8ea629d93bfac868e9958e1c0c9c85cbbf5e00abc798a2aede3540ea4ff36606fdc1e1385f12fee145f858866b9aafcf48ecbdecaa85f8c4fb3065934bb7ecf63b0f2457ae7a826d455342b9b3e90974f8072855d1fa67b8a3f6d21ded053fbac871d4673fa3fa40deba8834944bb37263f261aed7d1f6fc5e123bc0adcd453ecaf056556080f2389629d7e59baaffb96ed849c80cbc20c071d07d556495215cd708dcb67ae6dc3f3ab67420444bf2d2dad881c3540a77c37513339fb78cfbf8f8d10d5ecef5c543b8420ebc9a7b242fd73552f1ce0342784dc31488bf822a26d1428fc90c19222c30b58198fbcc98f73566df9a680e9237fe1273122b0d75cb272c822ab0ffe613ec7fb83cb137b8bfa308c1805db08b3b9ebe0cae13ebc806e4740cf6fe5cb14665ed84263bab3aaa8c4bd9146efa934210b7f91eae36b3eca33ea41e265b64673b695bab4dffffc89acce5a672d132d862ad10a7b619735462485ffe613da728568c5d0652f6f4828461d1ea64c4c186fc1258c9dacba17a3087713d81f652b3c7de47be1567b2cb0f0e0c192e3c29a47dc1602721bb72e3d91b8b00fa48ae77c4015008fec7142d3eef0ef68b71140854a75c436982442a177de08527d35ff3f0fa86607fe19fff15c51139c58ce9838018206e59347840d3440d9cba3aa3c1fb74d8dd5de2a433b8d31965335f550d948f34d3ed14ba3abc0e213e03c95a400b3f368e4ecdeb3929ef5da7d36a19ff6a661e7af72a0531019a4b00e6156c0ccf46d2cfadef538645729c484c15e735cffba9c9d93c7314eba2d29ae1db3cab6ad6598dea6e20b990b66f62b0146585ea0b7536ebb150b4c16512d59a7441b16698b829f270e8f864ac3294d1cc91ca97401fe3cd6a154791a09d25b0074790c4dc918832bd2e6646bbf00936327ef5c6fce4a5f9819eca223d1c22b259324af9fa8642473230ce14e19a7cad343ca72fa186b160f91d78f26568a2e80050cf7dce668bf6abf2c1220445fb843e1f8eb814575532b2667ebcc7465c3ede65134ea03e0f3caf44ea26110237ff8e05ab89a11821ff59dd77c9eb2075efefece15a3734990387341a03a217872c307fba43e4d1458367dd7f851c7453074ecb7412bfa48909f8ebc005e50d2cfd712cee0d72724682943155b564ce39ad1148b1f452238deec269221feb38e508dd200c449769332ae0788c005891b2a9ade0f42ec8b23c2716efa3a9871f805a8581b22aaaf3bc7d456424a328b8b07e340c4b516667c4b06099903fe016616b276b627ad545f996a09c4d6b475fcd06ca8e63386bf103f5ca25fb7a211eb4afc0d14a11836cb8d7e86d8063ccfa9a7c2bbe0dfe14c8e1355ebc38566673c00e2cee5a320fefa8ec156147326184ed952a4776813c9d32f160eebc919190c95fe7f0ba0409597a333a38165e4f67cb6aec26cddb2c73e656ad701de36df56049a9ffb57641b35007806ee1b648793083e0173037ed5bb230fd1ac6c83169f5b2951ef1ee5a68dc12e02b1308bd3cabeb6179e1c8d7e046eeb6ad447b3923fdb656cd251b6cf141ae8c5c6b65b35a155f7930c54608ea0a56e4c1da167784037890b7c0bb2437c70ebb6e1ece15218415d04d311f2383fb037e076603bed38ac30d2f65806f86b56ed030fd636e405c08e33ed901974d7d25668609be1d013818416ee986ca8b8e56319a17fc1d1107f7b12a3d92ad6a527ca5c1141bc432e5ac05db6a2e4e69f08805695939d7c2a65a8b573eb8b8e15e9dfbfffc462b1439ed3d11f10221bbd04ed6b17fd6766804c200ea011482457e198253e79a388f9821470a0c0137ece2afe52cd8893da1a91486adf3c7406d87142b0a637206ff623df666253ba40eedce8ddb206d789790b95ceddf7ab3bcec7e7ac42f0e0ee1d0191a52325f904a63ed6e9f500961ccaf1dbdebbc6577184b85008ed1576cafc989efbb167dd892f0c9c7ae0be405bcccea7443805e10ca76919644d81b97889221f7d524b39272cb515687dc4af1ac419a14a40e6ecf9cceca760345be79fbfa09d92e3544b7cf892dee952a2266cdf2bc00d60a42919e11859628947ce93aa13a00c1ba93eb7127b233ead22c4e8f9113f3cf84b4c4967e8e42b80028206a57cee69e31fec4054648603aefa78447404d3194ecb32f575f5d95a30e7ae2c4b4791c41184a7ecbe9c85f39a3dbb918ed731957682a11c10a753e4a2622c3c88b132347581671edac79ea22a4bdab9c153082044823fdf5d469e0a1a64fed7f8d3fcf9707fe926c891041ac2e5e39a7447adccdec1a53021353e7015abef8bd2126424c4f539f27d1412237818be530fdd6bff549160fcaf44c7dae064978ee8519cfd473786d7453faabff2fc8ded1e0d2138b7355cab3df9eb3d7f1d332855b03828c5d8a7ed4ea8de8dc0d0a8d032840a185fd4e62efb06c251b2193d43e811b9e4cbc8e7d227302eee90e69065f4fab4473b84e65f03757818db42a2cea7e1330a8114c879e82bd0769b8e0e5294ba9c5c318c96ede844c3849443719bbfa349a33a7ba5667051f6d7c5145a1f72722eadf0971a0c48f8167a708fedc997fadf6a633df62fcf7d039c02cbb215f12b28bb859c41219b880039948ed360ac34b46d0ec97c0903e160d653611d495633c0f1e8bc66bc4583d451cc3a1594b5b35f26f8c4b37745b91a8adaf58c495a1c66068ecc9774892b5727893a8bcbc0090ce818958db868de9dc927653849a58ed0445e4a6e605a280fe8d392837cbb8ab043d3ece7ee00b4b2c7f769326c44fb463e031493dc24096835f8c79ab793af73a0ef1b1edfa4231122abb734725ea61bee345f4b798a920cd0f9a23a2a09b35011629076c32f15f38845bc7db32bfb9f4a340cd418f31e5717dd29d50db4c4892c5600094ded6519aa92108f4e448b1f11dd442000e3490fd38d8662e06e3685ca1b75386da3d8f492edf8c693265a5c37aed2d4e2530a25be44c843fb1525d5fbb69f230b3488b95524c6aa93d89a18456e483a883bc037ce2ec5acfd249717bf41505b3381e0014c8faf96f8c52d5125a4a0193e3a4bad143f5c40733f9996d4cf8162893166e157c228c1c0f6d968b6610c4ce06b27e7f865f9e2910fb9bc549ec156a7fc297795556c12922233c42e0f6aca4ac56ad13221e4f0394ed7732326b820afe6f3ddf0149440b54c613b70b2e90b6dbf9a043f2e4a5341dbf702e29475136f78145631f0c4bc9238aebdcd58e29dd20ee8814d7dbdad3c0a8066ce575649320a379b010e890c140725b345836edce6c380c80a3a8e83c1510cda04b7150ddda0cd3657912d78e9c25d05f0102189182097dd0b0c5a48fb3e32250e7055e4d524c08bb8d07c8f6503e7509fde955097499102b2fb85d0b8e7aa7d0b8656544a84796b26474be46be4de8b8af252c51e54f57fefc3cdfd980fa033e3d280390bcb9ce9df13143a2ae98f5c7ca66b55562808107872cba71b917cba55d2dd1fc4da2a96998972c084283b2b2624f93a076511380b60a06f1c01d7d1984ca96ed77f3430f28f0fead4acfe75185d0493d64e38be40bc8c1ded98f6d83e9632f222b7cb405429884d6844260f703d6ecca00a5b4d34ac934baa011b5462c1322934a44a0f8b19e2628e82871157ebd64970c6163d73466074ab5338ce199422ca75df66a0964174dd96512916b9f7c3ba0e1b1f7dd655f92ee3335d5b1117adc257c116c8ce0cfff9798e6ce6e8ebefccc9250b155a685482ea43d4fe4e9bf0213678808c1d15651ac5ea49c6f1c8c139a9bc388f63bf0fed3a1141986f82137a66ee3171c4a9f063bd4ce2961ef8e2e0f3d1c50383a3738e1a9c3a517bc15d1abde44af6ea3aef090c44caf3990f97540cc0eb5ed3bbc9bdaa89881e4127b1c1601e7b1b47bb203d3bb2e50420be6bf9ceec57e73cad58d0cb21d64495f6b221fd428a14dc2afe5e71c17afba28600124c2a641159720e1d43d8b6c68b90d7c10ed9d9a83ae0d45098cb105ee13a1ddce85c86c2061e7b96792d80b3365b1d56211c0d553d178a20fea481585a20f3259ee841f7d857a503f185b8827abd87a60a28e961e23b028165be9bbfddfd1665897825bd42097de0f28895c904555015df3c27fe5722a1f0a13a23c0e29c3f94b800da184243f1fdac8ffc6c9453d733ac499b24b717b49515c10b4ba45f998cdd1de25fadcfe856ea7c99fb6f4e88265e924ca6277e8d7128bbc2ab32541e0c50e66f7fd8c488645c8b60a3ae1da22bd52d05f1b313dd53c21cea09a617c9c8928521ed2403f52d1c1f32a932129981e7e5efa7e2f9293685e916a7701c053e48ef0f0a81e7f106ceca7b0179a3448469b62a420fda9f9d76d2b717812a90b98ffbe57092b54f70ed05671173de8248fac3a8e079f629f46888583cd4750cd2107242d8d26efc2cfd494e15d199d81b97a5eb3f874d2a845f0e887f13b17daf141d2461946346398ec6446115d6b808d8c5a8363ed1c19cf07aa479904d22e1ef35d5be58c070f74d90f1492ac418eac4f23a03552896ae40ac15d6809d9793f050dd5ada8efc44e6ce0b2ae54095bb9d02829954cca9e71807644127f14fdec310c2591c8108e6853aecd3b8004b7c434101386ae6f6150eb3a919c07f66dffbe76145db8693160da1e6ce5a6ef6f04fe1f3d7b2475765e9d6c01b88843e86a8f7287fb605af29cbcb5423af057ec51802c0c0304ede8c2a88961067f39f420c6ad0770bb539863b8baaa2b389a1d1d95ce60f20a30ad2667d4bc4c80b097757a50aafb2fc32ea3d2f7c2439f27c2e762b23beec2411c793da367530e2cc90329ce3406c39503b5b0c41ba210f77fd07f6f4c0cf7d164f4d23129007b4c515283d61c72d5c2c332106a4861da5791d96e352d37290d6dcf6ca9c9e6c2554b8b7f436806908bb2bbca17b873f10880cba43d8c20e23a54446242119ab303ed22964b4446bd743ee3a7c3710f5b7aa00d821f90e9490b1ef069d33934a09a42b63b1d8bad5eb06fca7fe07d6865bb39ca5c25948044bea7aa2f414bb0856eff9a7fef972539d5149de1d3062cabdaa756673018c47ebc919de3d0d84fa086a2f1307940d5cf012c3494f3371b77ae668035ac1384f10b0e31a1e39f3b03a4b63c5f21103420c1cf5ff50d5f5ed4f08598a1ba4f43f4c44d6a10408ca555406ee69c5c5224b9a25b07d2efb8c12d76c8e4d46735c4cbb33f56070644ea07c3a511a96f7e60037723a2596418aaf3f72f1e3f9b28979a7d4f15888677435dd97aacc1c5d259dd0505eeeb3ee2789c1f66d805800958f279d7b31d0b5bbaba12514e9b5c571d47723bdf307b5e7918acc0aad957ee1062534b1ea53b53b556fe50dfc8497d98da2d7d41101c7be727252367fa0acd6958e50cc12c6cbbb94c781fa3c1d4eb14adbc67f74e9a0c19206e28089409d612b6543952f82edb9b33b1ee7bafc3db7de7e20656290c41bf2960b0df25d24c1744d954f97a18e47884603e53cb3c4e083772cf93ac03c1d78f8c74e0e09a5b33fb723904fd98fa9cc37a40140d74162697a113c37f014214c73a9fe96bcec998edae63749137cf74af44cd48f40d9433c11e2778dd18092233fd21ab301abff6b7250c5d0be0d86718b75aef3d66001faa069b6837ba0a72265323b84a0ccf15ee1d28c46df60dcd140f3264cb2a53b45664452477f675f61b65d3eac5ea87dba811a27a1b92ed98f341cfa91e60052ea50adbb64a6e286977b5aa685237e904a35efd0b077350d6f4362475b52a196594b12ffc66c2149d7a3e5dfd6788280d13cb24276183a91e2a6f8e1c40e20cc6a630ddf23e47ab4e2c01de96447e3cb44c7dd97ebedb3c4f5997c1bf60ad1ec8a11d74d3d967bb94be6dd24ddb28d4dea6d08c124ffa80c2df9df9412a9f044f1519dd52bb587ece049981bd73eda4286ab3f9cf9448438a84d86e0d44d7cae065997bd5ad75967b1c9ab3b0e1acaada3d1437c0c400758f1be2fe92483fe40d837de5bad70837c8e1e35beaf4b64f340945e29f3f8817387104222446b8b6099a0255a07f6fc365c49aae423bb63ddb4c5951d7be767b329f87e38a2087f56f95203e63329cf8df83ea55f095b1e10a18bca1a8b3a5efff58c9e4d05bbf0f1312e3034294d043675740935866804d7486e44cf4edf6290a63df02a57025b5fd174b3e5b4b4b62e0bb6800a08dc4a5d7fad9352430a8cbd8e4d3025d123b89768d2bf78dd12a96ded3ce871dc5350bac2519331eaea968be7b249bc36278b88aabe007a48aaa7acac5542380599e6fb75c82fc2af92d947ed77c4cb9db4f096f36ef96c36e533b7610d5d7e39a9c73e4102f6856f9b8bca0e996abc85c84d7156e235cc56c727652d2a09b46f47d9b63324ed161597ce3af6525e9d4f9502bec831bb919734eb9764cc614c288c0af10aa95880b56f00674baaadb4fec5466cea1a0d1ab1e24fbb1e301b309b4e32a7ea9cc4c03a8e02dd0ef26d2f8ff2d724d14020827c770ff2bebd26c3f6b07f42d0d21ed7f7e521cefae0f907a286b8d14b6c8a3130c9447c121528e7364b8200f34bf23a71f812c81b330417db2247de06f72d47c5d1df64763ddbde420ebc8e513d438bdaffb4c42f42b37a6e8df2c16d1d9e608a9323009fa4bbf1e762acdbc1a8c541817a6e958433cfcc197869d0ba0a0d37e12bac077ba0c6b260b18e5376d87f1621401ebddb82eab96de3dea48f44623f3a659f686c8cea343b1384d8abd3e83697ec47cd81c63babd8613c353b31cfae31c89efb96e068ff6745492bbc5d1537b2c725c1ad500523aef0e8f11f5799a3f9136feb2c76e89c4cc2aec6bb9ced9c9b6c1e6eb04aefb506082b56dd3ca0cf718814ba67f8f390912c5c539664e62bc4c3ab7130486a51dee9c4d6175d0815b4bcb99913134b14f56729b0255849658c3ab2bf4f25bff66251c6024aa7e6c52b883ed97a9806606c0dafd94a6ab628aa30fa46756e456f93784d6108c83d75119acd2afefc832e8f01471a3d6b38c208fd14060ae688b14f61ae912b3c4083e086dd14579c4f28d82e955b7546816da03c980078f3e3a58fb2a2eea1659c3259d572354f46c54b4cf7fbea0138eba04fb332cd2bb135800a5d200d3a3f6994a7199da958fa381662e720ad667cdcc7604dc4e97c277636c8050a4b45cacc5fc8f87997fd04ac424a5078d96fb698766fd6ac0d9c743bfdaf51db96ba3e52c3c984ffd8f47d5c6fef070b4e25fd17afeb958722ece4b5a33e32e9128688439e38c1b3ab2109cce5e24ca04834b7f8dd681821133bdac271b3385cb2daaebcc49aacaad253b536049f67151554552ad5ba0857aa2ec0a5fcafd38456476f2adc75ce4a6201ee11663d86f37137036cbf8990816c5699e5ff8f58b2532040f59721f3508da41f9b709773b780f75d0a4aefa8d6a12b3c7a62f18b343d83a4f93916277e9e48fddd946315d63fd59378c305a4e2b50fcb84fb806403371c56a210005deefc60acf12eeb7d599dfa784e42766bdf3bb4c03f59017f79a76265dd490fa4371b85f85848e36ea16334bf4a3bfa5a1b900764a59a1e511135deac3eea309c3ca4276e40d457ae943a35d60e3914e5f83c8f30c27baef1398112234070f67ba273c03be7a87330909258a27e62469a17e4b643d786acce2b3ef2a8740caedb76d50652598329b6af2b19b0a01da25ba095639cab023564aec7e3a925b547c95a606f83dfaef7169456255b740f75c7b264555e54d32fad102fb77f28aa451c7825a9ac0612d6186dc81d81881b44f08145c3309ed696c0fe93b45cc98aef160988fc7e0426204381f96cb6949fce1795331b22b96bde707b889b278895c40267b3c464e2ba744a383a47f24eb76dd4e156fa7ead9b154995ebad3861e4a019745498b9ef9196a108a86664e27a0cfe667cdb5d0157679fa0967b8d888fcfbadb8884e47ea5183fe966927ae3d8340137210e032933d2405c3a5e7ef81df136325979f816a8273c7c32a4ef9832ab3837e475e91c55bfa7779b94fe3d27f1867f282c5636a1b143745ca532e9c6473741108cc29cd76501a23aec805374a2dc64fa0c4e6daa2642923be15d3017473592a6e0593599f75dffb8aa277243e5ff0324d7473df0113b75916c0cd421af53f06d19a396ee87db28c024530458bf777bc3814344b01944421e55be8e26b0ce8e46c3660e282f40669f7309aa71e4b1c029ab9975660b3295e22288389f71c6083849fd1c24751bd97c5e2b59306388414522d0db70a98b55f59ce7d5d1af8ff419994a23b64f99c8bf98ec94e21febb509368835ce2bdd1e64cd78ec3539b2f51e2087e4d99064e5a5d777182860faf645b8d12ad353ca2ba662a4bbd9080a3191a575d970f5a0538d2341f61496f13370b62cbd5cf7065bbe572961f53b4df0360428aaf7c66c8cdf3c823a51d21a9fe937dacada8fe83ffd61814ffd1c5da5b010ba6c74886fa408b2365bb74a4283eaf2bf5a3cbfd5be58b64ea6b5b421bb97fddcefb2846947f619d62981ea7130511a9ccf99a5314dccba20412ac4d3a77515d6b98f8d6d570b645953f20803524393cdd8974dc0803885ef83d1abe09002ee673c7ad2df49e8182f04b1d7cfb04d32ca95d4ea4973fd452d4a8346030a28eca506d61a494195ac1da8fcd953545d4611e150dc8d94da697d9e52e44a8f7b69f191a7b049c959279f85b099b942f4b371ef267c3a74cdab927b009c7f05cedc8271fd0989cb0b84475f1bc7892ec9e96361f7caf99eb2c310d95da94539580879aa239a90a4fb149fad30bb2d8a55b6b1e5a28fbc97098fada1718b2c5e1e7e69a1fcf05ea1ce119f2995e669c3ea0134cb9bb06e82158edbc0152d42876b9062d85ca296bb8d1d3480f882fc419cecb337ab50ad3c53bc1fce3ffc091e2ced4715d0d70536f655b288c74e47761a77e0a596f5c7ebcd7a9fa31bc5bb3de6a47894a320679d4f693098231aa1a552835fb89298aeeab13f9dc9df5c78e0236f6cb62028224e8e6644d729b7c4c3ef7218e749c42fa743c4c76f5bd8166b2e9e9859c27eda4fa6ac99979cde43d05e53cc2d98d868a509dada071b9b9c0162b7467638182869b4c6b01a9757c9721e602dea045bbb50d85226ac90da85c826ca4177f37af73c612b0d15264ffadbd49f9010b52e2f2e4fca6f521fb826d6961000b26d8db45e4f7e833e1c1926eb195233c0192706af84887a87223895e72087403ac35eb7376837883b9c6da5778aacdd70da1cdefed6a433e6d8ce215d8a0a845f58cea251788c1a2db4fefc5ba5ed377a35a135ddc7e896a18dde134bc167219f855ed981cb1ca95ff38dff5eee31f78e9f1b113651b6567792beb6f8d7986deca4e954431d386e43cb0d65d5aeff26ece6d9bdde31da448437cf40961dd124cf75c4fa1924fb7b912f3cad383d2b02139da4a120e2c6c15a3698abf4e31452a0d3249c98ec987669e715570e6c8c4ec9764376d64d06ede05b27b819458af3e0231790606c0b049f6a9aed4a7163687217c9cec2636115fb83fc78dfe7245fb01ed05c43c15db577ee5d1397e7d8fa802809ab1b446137898f53e819f7c5bfbe536ae11e9a53496397692356a2a563dc95a6196917540e95471473fd3b1b4e839c775c0c2c6088c1fe6a54efe06789c157c42e4ed9ebebaecbfa5051499ee3a3f74dfe07248f402c4f7698d9f274df36634812780bfa5cc75e6c109638a0dbb506502b070c86a1e919ab5f0a75434d0276cdc285a903f5ca6c7360bee4719cf236615f73ad483e00dbf5c58284a9243dd445269693fbc23024cc60610f13ff636d189a907f1f5a35a6ba1c013953390dc7181cf44e03cc77a8152873934f5fc94ebaed11ed62a6a2ee4de16c2ae2ba4fd2a9398296e25021d92d4cef37a0659c3c983de58ef2e0c923c6f28e92a15dca2122cc6bdddb216012ba45044a2a7c42100de2dbd6e4a128740e257e63b32e06f04ac8b84f37e88533b0141917d1b18ff06e503df0e0db653686fe73ed32b6c27cb94003a704c839497484921ed9b718718c0f39a73be6331f4f796e0e8621d29202f9450dd80a22385b03bda02b3674141d21e81b325a30f450a84a9c9e049b260371dd24cb762b5f0a3b17a08e83e489e4a433195631fbb7fe2e2a072438457b7753987a8d2f9b39fe6830975ec01da385daf853a0dbcb0ee983699d324ccd25b7b6d05008cd8b77fd5ed288c2c6bf01f216443c748c007e9a0b3b696f379cc6020c569759a544bf960e9844337ce48626fb7a71c84c32978137df55afecbd7694f831d5a17eeabef5450bba258b185e48ec64965e16dae70e26704677d8dcec32662548bb064068e2bdf57e263dfe2d22c339bb3106cd96019215d4bedafc692508183b8a2c46fbccf186de5f8c772ffecad9513a47e07089ca5c34d3ad1bbf144b999593b71b6afb837c74aa00f5c5b4150ab32149be8d07e1129ae22d9db9216cb6219a82e55004f5a244988e69697ddee0870ecc7bd27fe49ccb9e611de204dbd2f295b26421259beafc557d9b11aabb5180d003669523b2e2d7d4f6391e2a5d49005f460053d8270db8202854f0a04c76b59805fbbfe4f9a9ad64645b8fc6d68caeaa644b31510a68bf7b9300dd58167f1820d3b11221915539083fd07e51399e68de4e1243395688ca3efebcd575b4d04bc8f19a77fbbb1e206cd68092399a4d37a1f05176dee0de6bbacc88b7ac7c5acec8ff2f70a978861737b2e90bd6ac8d066396bc9a03dd70497d52cc386e7ca9ed9fd754a43c6c9c48e7ea97ba9d552526e6f5ace71f904f2015761b3c839c00012d94de09162ae832655cd57a69aad589687a8bc92843333d51c34ce073e8c2ac3255dec7e6154d2f6c7f0c1bdb5b5a8248bb018d75a38444c3a5c3fb181926bcae2b5708024e2717c97d6c2d8ab280e0d8b5d180168f908c4310878163516e4820c801be0df567318f39b8a3aaa0939f0fc6a81a331eb826d579ac53cf2e3c6e2fe63244879e63919ad8305400b988c3919bcca64d4b540173879d51a38e140f60c40eb21c83f69f447f9f296e2116a1b00af5a8451f6ad480481fffb1018f52b0e0211e9e76d0dd3b2f5b19735df9125126fcc9060163710fceeca20365fcb828491e4b3272158a2749e5774dc8912202db4d2014ad666b04599d1be234558a1df652093701e91182ae780fdcfcc8d390a0ebfdd127f4671089108321363b4ec57f610ca45624145335668e3fa8d8bf83bf3a93e6d5a0deb520c3863350eaa43158a978c3af06731bec155e2c8dbef05751a522a86c8c381f6469671e8c115ee6724a0b79e0cdeaa0904045666154dd7bd51cd6d24f438cb1dbe1b76a8c2837c64023dc61b6c380a0205b598b7073737f6c45dead81ec7a98de1553a9ce54a121d30d66b5f76376e4a5a88a46944063469f1c140c3d70c676b81b18d6a51342605e58392bb595c8c16621773652d74b38c9045341b235ba1efc75cee5d023fd8b64cf90df5921bbe261077c6953f9cc2f99b233c4c760c27c924e19eb62c7bb8c70558d40092752ef64576d29e7a00942b6d5d98f19b2727cd31a82fceee61be5a0c29e47e33e4420d2b187b41c9c7c8da2918561243398b42253b084f4d2b0c88527837c1b269100f16ab5bdd8245a04079887dbbabd3b38fc631ac18c09665a245b1a0305190e06039c6dd5abac9ff6eb83c08f5acbe04f563a274085e31ab3d4e1df5a1852aa5c9e44118a3d2a11f7d11df520c92b604633419174b205549f7f43e09c2ee542cab7049b56ac1fb593f3d86ed3598df64283c8e43e98218e88e1fe1144b0e8742d5d0482aebd807aecb533b400481e4285c800d8e066a8440d80d4eb1e0f451bce32ebc3c131a56300aa4ef14cb6b718bead9412884737d034ecdc0822831029426f67809107379bb89ea573db5eeeb615471bfb8c416012117fd90c478ca75262a4185d39db9fc0b400330700176f70bea0e70442953afcc5e3a226c93d0406a8705a2799f9c610e520d7741c46a2a306218c67ea1d35f4880d3ff69c5c2935df830da272e844b51eca927bf4827a492383cda357c0c4295c438ac895b035f08aa0b318c89b34417f1706344a4440b01ded1767bd0af6e531a07919b5594dfb4fe36616cbe4155baebc76158013f4de820f62efcc902315423b1377d8d2dcb0a1f53821618a73a30bed6f222f8f021ef900a30bfce7dda3195d67c0de811a8d5ae27fe0a15b933dfaff49a4e31febe4cc74b850638a72341547a347d3034f7d6beef08f5d0ec0da23a93520e8c83bfad8529d5d363bfc6086c75dca6bff49e92130636af7cad087284fc62b8c18d3345248b21d09c0717fec1537471babe822a9a3862bf8b9610f00f5370c1f5e5af90315a72b1132d69a8d31bc3f2245c35ec77bb3099b11b4ca7f9cbb38ea3e6bd57770e514f0da058174167daed444f8da1b5d192fe609a80f540f7f8c69ff7d5784e64e9805189c2074f96407f622cf97a18e8cda2b50c9358489daab440256b8905ed0c8076890bd45ba7c1192e34d51b401794db14701c94e2112464dedef1ee42e6f801904bb7733508c6265a67896af24dd18cc7d710a747bf9835c482f08a3ce0a1ec50f7d32a2d92019e01e4c66d7789a4aec891b32e4d9f39890046876b3aafd6d3b721a1e9f385eeb99ac3d5fd9fb0c93bc441e700f23cd5a2b9020b0e7b1bafe0e6e3e82813748c5e9c695b3e3e77c231320d26a99933e18a81e6e778f7bcb04121884977c0f3bded253528d7db96f41c3c4633a6635ce0842b0bcdc70223e043eb0b71da78c8f1554e2b433d8d126af3674452c5ad4ba2c9c0a085075cc5dde8b155c2db4ca3005560e3cfa931a847e282656bcb810286642d1d4321c85cfb814bda31f18a19bc870bdfd7cc85cb05f1cbccfcccaf0441e892da4a84c7ea708d21bb861611623fed24175d2292e1c7fbe8ccbc5f7429e7169a0361a891e456c5341bb78895a36689da9899c6ef04523774ed3e17d387435f45903989fc10ea08810046256cabc4ef2a3bc914a0b6e3788e6ff60ec00075124c7832b0dc7bebac8cef502923c57c1ed86656d5d03fced926a3888322acbfd147e14f2d81e4cc9399443fc373f08d74fa1a0afd2bd9f55534cbcf379ed13d014878b05ee1cc612c32a7f828fd5b611ea00881bdae1b5ed1c8fd0bc29e3203b74b3a72f97e3fd821e8e0aec8d74f651371f0ee5901adb2d0359f550bf88333858ab71fcf1a8dcd66a5042dbbe060d4a00ff6dd23a4f54c84c1388de19945c96c83eb6b168221ece520113602bcfa80ef29b95bd7b55605a6a5fd41cf0b3913e7604d24c932549dc324c110a9ac9036df422ac508e56e34081c2a0638b2a1c9ae6d16b6817059472d23efdc1deec6719f7712051e35f04b61e638892645750739d4a4bd6521395ee5903b02050aaa55732eccc350754113c287b406c3b25d91c4f8b9bac066aff46b63963a90cc94309045daba3ef8ceccd30df08449e213d63850b9c83a2712a402ec0860b1a951e882bc9b23141a50fe3de210d392501f04bf804e55207bc5597a1c5a35c09f47e62f3c10d31a15fdf689625f03b274b783c69745d6124d13f06539cc1c6d3825293421bdda4c1c9e27dda92f3d63582325508cd59543caac8aa97c9f885feeea02dd373dd87f5f2a9ba2902e6bf5c8745679649310fd0a583b0b188d5cd64af8fb902bfd7d1b49d7c0b3cfc9403c1cf2878e8bbb9483bd5c58e71568b1c7cc1b5d3c20dd58d0bdda78b937c16ac5fe94ca684c6eb6e20e6bb0daaa83f64ccf84e080ddfbf7c3957ce9fcebc494c11744b4ade239cb414f4625a747beb312504a5c3678299f01bb2698dac826841f2f2c61a8816978fcb210c9cd55815e7cefac468de8e83c69e16248e8f90c856b4d148420fcfd3342fdf4220d7dd0aa18a1edaac4f444e5e7efc535be6b5ccd061874218f13606e5ca3b30ab71be284e6d6407f228cd05a582a9d81110a62bb32dc7ab2f8587721d144c9ca5eca76f2f5b333954b5e3410c42548573066ec26373d4e408c9f6720eeae406a43a2e13bded65e505c902c2d04e9a9374bb9f01a1b9a27a3629cae972f1cbd18b69ea8740f43614ac9eb9eb4922f55db479203dc9cabb6a2eddf95f4d1a062892f21e4c336fa0ee9d60c5d6de3d96393e2ed5ba449213e9563bd0a27fe21168fddcebc59eb1c217a74b9204cae0dc497efd9029daf5b608c771f9eed8c910f405bc9b1e258699b5b3ff51d25f4dcbeaa75c70da306b0a30e51a2e5326460b50a8e0f63364a1505b5235914a2c1b11000813e703260d469916b8ae86badebe5b7738f16bc0230dc8929b0d442b63aa58703af23cf8f2ccffe273246c1023ea334efee08196a9f61d8a7ae2cf124ea3830b7d15cdeeb93efcadd138d2cf7d82f7316fd657067bc2adb5cffba22ddc269b19f2a103d55de07d6753c02bacb8ea54f91d811a6f9f429d4d9a0a9a72a53c792ba026737b89a5a2af5c1bee4fb30ffbbd7fe110dda433e0f79d2857d37254a013eed0d0b7f2ee11c70ec7dc9d9c7e22260955c57c72abc182f65c3756de05bb461cb1d6fa8945af337b48815ac07957958b7f85354ba1d1db2147cc30d86e704612ff18bef9d2750e9486c6e003a1e1dde8423bf79099e6d1748e68a54084be06e36521346f2eabc9b0ddcf16d894e1c481e5e1332d503462a44d6e335d30882d99bf242e2805b8e782173cb68433e969b5b13748fd2fa555784c4825c3c39c513a94361083dbaee7ad345f5378e3f49914aae70b7404a38300e3f1992b51d2f61cb8cee08b88317a8fb6d83d8d7e61f9f8b973a1224b41b103abd5b619370fdfd143fc54066ea48195b5ec12b8048d10ae1c6f3b38f3273dc53513b1d7a4a15179f3a8c26b85161c78fcfeea3034b21fb9ca6cfc7e785275a30bc87436911b4a5f53d17ef1882c076079fdd05a1f27037e5e0a1e1358c670c6a9fcb527e2cc37362755c4e3c085a922c66648186b6738d27722302e395b848fc5bab4b171ca504be38a873891de0288765d280de248f8ca8ad5b384cf86f0fb950264f1f2945c54ae6cfaa3ffe7eb9dee46d767ca79fb1888a6e8c8d3e13f5fa6fd64466a0bd1e5f1542e0fd094883ae9079c137aeeb068c33bb737f587e1790426bd2b18ff31615a15dcf38a7325117a2cbedf8ebebad4fd1c5eea25471e274c0e6997403e9ee39315ab8dff4f9094a5de918ffb16121b9d9a9c1081b203006e3159e7ff1631d0c80f6ec90b2d5f2b515510235822f9ff6d822831b5da9516f8773a782600294673db486723b3f2898cc9eedd979262827308e73351c15ee34ae988fce913c85e0d4cb3e2e42f851d87a08651fdc2e348adcb93af0dc6be426ca4bad7ae9d9280fa5c9650ac636a44259ef39bb23eabe40b4e66a807dc42742abd37114d6c7c410f7c9097d6d7179b73df0215c112fcf08449e4d344d79faa30cdf456ee22bc1c56b5f58a6f42067ce2e396679c0da30827ae65e786c43155f350edca4fcb88acd17a63a01cb5395750ec1a0fabd12d2d25e8095c0b6de250271677e71f33a5a9b23c082b137c045662bad4734c980340ec2c799260277b1987e1f9ff55db9f71dd4fa29ac843938f24f42d3d861c1bf6fa01de36d035746112b3ac5cfb9527cbc3aa213f64f6ae600771817dd98b692c8a267f737b265915c6daec0e3d3efcd02ceb2a0305c9ae93e4a38e28ac63902690f9a5950a9d2dc6127d90fd10d9c749bda6d42771e6348761acc4980241f86562499888801ca49512ba17233a82f8aac65df43e5df9fb2205dd0217d10ea53b59a12c742b0f1076908263a1edebb8a3eec18664c9bc561dfe104f0d5950339f07d5dfbbeac0b7857949a318d0192ff5438a329034b947a7930ef18de8dd542ea9f8e90006af9f7618df629ede24fa62af5454378f2879589a591e155d14fe9e17f1b11e3ef46b749635035357dda6c486ccad4b590c1a2609908c34ea3828f87acff11f031c7df41d0b47cf8b7e9444b40be027b8d54cfc4eca4bf850d4e2a522513fe3d133d30a2085473dc0e18f1d3bb2474919744c59c798206d4baf9af40371945c0f96de7fa577796253f5e19ee86c2c803f0c44906a6a51f2a7dccc5c80ca7ebf223329fb3a04086be3c20e7b01e67a24bcf5bd35f0ceeed2e7f3c9a66024750bfe7cefe12b9fa8ab9032441a84f2e3cf30634fd25dc7bc1281145a95e74cf5075283e6d9ea2b341db7cfdc78747d4fa4953a9cb32548c10280a8b13a5f9cbc7a39faaf7a35def0f0917e954f31fcf96e8e10c156509c28a59391aa18e7bd3a9a53d630ba479f7947ad1bba3e17a7d0f54cf156f88ca1ea10b2336d8f427674243cb1d32184058e83d641b9848ed674dd16e2123a41ab80036b18db19db19841d05ad8d9d090abc7b871d1fc2d3e5b052a49a27a58d6098c7b821ba25ca86122585bbf10aedada69c74963b14caef2282284d0c11469b3c3210b507e01ca4177768f0e9f21806d02beeb0ba07ba233ad007104142154f38cab0f59e761cdf75764a05eb99f7d7991db89b392f477950ee7aaf5bad5f44bcc289c803c5c350edb621a5ff45c29cca6d3aea92a8fc6f974348cd6e1f893db9e8724a6ea139497f44d9904b6be054d89231bca8208b349bc7ec73e9398b4fbebdf287a9cb89cde432bdd484c556eea4c787830c98cb80d915e032a585d7c50a914ef92f01fd0512331782e29070106cdbac62721abfaedb2b56d0775862745997aa5e0c35d5f4afec4e6e8195314f509c2df49dc6cac1f9ae9c320b705d0a2ada177e40d8822f94a39de00c57ebc919551746e37f5cab33c6ff4bd89d06d4122962ab7b4299d3d11848bec68a259503d88a99ae65d65382420244c358b5d3e180c340b09902796e5833745a3be74f0c672d0f8edd9da3ef7991fe99d6d2f1240b62b78bf7ef3e32caf40b8dc2c5856f45162faa1cdeef22ed985acacb7357485ad46f85341dc3d99a259f35cbe07b04ec5cebc5fd8c96aafdb40a459f7c6103492823524abbd4fed414eb66b08c78475ee16f537e8c7b2d35d33b1133b351ce913bce017b75542d5406f479d331adfd490b9c9ec1a2b5b76f29067234d9a66ff79f2f67f479525140b6f528e8160b8c560aa906047dbfe6931f84add8b6ebf6c96dd06e5830051e250f34d16238d1ce1e09c7e57571be702718c16bcf1e1dc05d1ea3a8e19c1213a8cbe5719c14776f292ef259f4b9bf77ef0389ee7be9469eb86daddb48564e8190f731d3133d8260ee386101aef52d0a83ed98342045aa2b63f972c11f22755c0bd87050d0d1cb792e982127a1595834589a948781d11887df0705c078dd3d0ab82e02e490a3d7e678e8cda831599163d97cc0310f27f40f5c6e97879cc48b35b50513a221006ccc2ce4084eebf161cc30f88b8a7237411cc2bf7d8d113a4423a610df9a3a30e4e3f56d92d9cc535bc8c4e058450730e89fb80a95476a7ffffa8af5166e5226e134771ca88782143e781cc643b54399272c5d90fcf9370d41b677fc23952b680f072aed44924d3c11d36ff9c035c4b7ea6e9c1f3bee183dbb78107024cafdb5e5bc908a928fe91af99abd728dcb7ba85a9b27f937ec277dbd48466b2e3bce237948770986ee52916b2469af2ac0877ce0fecf3065232b73736eac86abfbac691ca319eadc84c05afd8871e848b669cdf1b174c4093f335c6f785b83e3b3485bcd59acb266eb34333ad67b49a0c227441d5507e3e58eabc772a72dec05b77dbf1e5f39ccf0f857da9199ae43178b780fbfdc1134724a8063c39ce4e6e12b7d874026b0cd5cee431f505c63e95a36b947cbff7c584c586402558c798de3205c800c981fa1e212e1a89f0f2a8655d92b2946d7e681d470dbb57b409e61d419690e3afac4ccc246bc600c6b7a7c3dace9e393a330b83644c6fd9824c707d1c84b920ebf544f0da19d0f59c17063e7c4882679efc35b53a3282306aace7e7e328c9c2cfeff1257319d16f679a655861d40110da23400623fc8aa30731fe6bfeae5f2a9f916c5048f2b278e6fb8f0e95c48be888ee7f1549925c4e00d6110683bda8e9b5cc6f4fac7ece793992e4acc4def9f6a0587529399f2dce70847065263d0b802c56f6422a121d6495c5696b9c13449f00843ad37fdbd930af5b90c2a52f8cc789b56cb67c23d4198caa3a8f85956cbea97a1588a399872066d0aab905cd88952ff2e820a928fda254bf555e2d1f5d608a087c1ab0e05bfcb2323c3abb23ea816332b59746afea6881c235e35960a9079510d57a37f3e87b17f5b6d1e63943f899370895bd170af38f0a32e64f3a22b27c370276b375f65658056204762117e4ea63deaab68b0e5f2b82b40fc6a48f8ea5f37bc78363a3a74b27fcea20f3d6dbfcd63483823bf44f9c88f5ef0c4870f8bcd9a083bdf777e0a654bbd8ec2654d0b69272bcf90e9bc4330fc191d6e7382141c9dd06d0c88124e19de70b724ce05db42c6e75d9ed86cb4f03daa75f7fb9df8100b5243fea5c107b5501ebd3490928bd0372133a777717a1e3ab19530358ce1ef10a408538045340881f4c28a28aae56ac22e6353eb0bf0e381410035261df8ed213b072b826fa4658dec041a69f10080e71653b20c8b51190d450365e4e43e8f653006dc2659710d5c901d9112f7258246183cfced7bb59e8f9d33aa76daeb40cfef390d51a5ac1d3b4d269811871bc1d23a7353dc6980ecad5b17db87bd04026a7f5d375c6968281e99f0a18070a843c34dc84adecda30e57d7c5275b7e002ded94718e1abe07bc72108868a8f1d4067d6e6df7f7fda624ec051246800c778e768599a1b96550c7f1c1acc0e06cc6ffdd63a71d320ba4511b91295e1ded38d628298a2f863cf13c4fd889c9fbfa31178c59f901878cc16772b350d42a71863a2dc516a70b5ab9389fe9863abd6624618140dc0957f7de55aca467f8f7e59a9f02d743cac056575efb1bc14531729a0bfaa6ff471739b80b7199f3abaa35eaa5123382888521abe5e7b8ac0714ad848dd084f52e215a6053c1ee6734ba50e6104c6bbdae09b2807aca6c28866a81d45d3b41deb6a4f8a0a9f134bc9ea99d76b7ccef94072c46f9f87724562b58fdbd249438344080e3c58212509262dde36fffa12a8906183a5e4bccd5f9308bad44cfd040ee1c7f1593f1ddb3fd0dba34231ae7005e71438247316bbbdbbc884b83c091ed73588cb624d524eedfeb3a34f963d5c1a6fa5668f35691beeb7cde9d8bf415591d4458d92903f36e6ad0b4f7cc771ffb1768098bd59ac5a3549fbf87a7267f8603509a60b241e8b6b26de844398cca241e11c41ec237369cf0572ce2166f93d7c0e3e2c04c32bd14eca440aa573fe089428a10bba57f8e7447750d7ceb507a90bcfbc9077b50ecbc843f57134c21e15657ea01c9f7590226f20070afe4780ba962814216965bbb55399ff0179bd6dea64618c4331fbea4ce1ba7a03feeb84437bd98a3bd61debb925084da7c1fb7cca96508138d3858a26a3902b8ee5cbcadd60571c69d44844c297d7f3e85d1b9ffa2850d18997057cefe9e7a6eb63cc3323c009a70be16ebeee85c8272a2840b4003641f11b002ca234d9a9c9b8a9310949429429f71537c608c8bf7ec1b6429a0e10485b37a2f838c8f0af0d54c2a26464ca23fa1fc5ac27d07c62ad0428836fa844ce3dd458bb11383c801c797aff465e5a398d613fac4c9c9c474483349b6257aed792157e0fb73adec3669f60182798f83c63f6b63105416c386ecdc655d6d236ff37b134847f1af95923e2cf93be8837600681b746bdec344cc87636d90688f28e7eb494da83c2e4faede52f84e053f2a9625a2e9e3aaa92ed8964c2bd4442c94c41965691878c595bb8c64f50725d4b4cd2a072670efb2c7989fa3a4a6a3eacbead22d18ad0bb52515bb4ac382a71a0e0b0981df20771a76d7576e3b7f1c77feb31c70351145bad13b366700b03403193d50663fc720a285091258f05d46d195a102e24b8dc988c386b0b6efa7b91cb9040051746808d712b35cde83558f4156ac9ecef7a862344b22ce7f038814634dfff7bb38ca14b319c10802bc2f86f90ec519cdb58c46d2e72de77a13d0da0c2f91f51fcf2c7a58ad6ccae18f894312e7c7a844a1f576d233a4d288ff5aa39e904562a0fc706f186e3493836df7f3a5e328cd167726cecce53bd0a006323d33d210251c54955ebc5d71f59686c10d9304747697c4e619e877caf346e62f525575e317f592095aebea43b95a168d3786248408f46c58e9d1eb4a5b228f5269e04a7eca0431003c020aff4a62a76c4f74d97beff81d8e6b175a963c80ee752888b186d3a3eb111937f7249b22102ee15cd7c88cb6a6507a6a55c68f8534b833c7180003fece018905a608edbb204ee80d45a9ba04bc0e3fff18316c658ebced5c41be794e59d2b6a304761d768baa27db2ef5ced98efcc595b4e0e4db355fc32f5f909d3498b68ef28c021d4207ba7d781eaf37281bc4d123720d2ebd4805f790da95d6f7a942556b0fa3c31e352b23d2724b9e9ca77944daa9f421cd8264944c26fe6ca9dedb94ee862aad0bb231ca6b7eeb8691dc6b1f0c0388538d579c3879430d5bc535126aed030b08c6a9b6cff8de9ca40655376991fb9f3774e2c16a87047d8ef7c214506eca474708d500869103670dbb0a58b8dc3d41b488f554116d88d0a38b511d2188e15560c572acfe83232e4b6d2a85294ab4c736d05b735ab06a3b0510333222cfb633e5f89c689660094f846a047f3019da20c2a72a22585517f841abeb536b55c6a2d4a325f800c0bb35a1427d1473f47066d6bf245ab2327bc0ff451010e4315d1bb65f0327b9fc5709db16558772fa6715fe80694fee4213bc8b8f1c361c81f325af4f228c5a69caef0f2ee4172fb86238737fd380aa31b63838274f2a5215dc79d4211f723dcbac2c849fd46e82732e0cb2d6cc99c3f4eb9b6e32e5b7b8072844522fb266e1617408b1aa74cbf3b053d9569eed7f3552006a146985d3c2fa86c542d5524b98ec3ae2417134c29e429f0b4c3c291f8b147e07258a792c50e3a32df5ad81bd5e15ed55855143ba247aa917252c19bee43c271442565a4250d115bc91639267dd80029c33d55704cc4be97193b1a1e01599352f82550419090a68d00fdceb97d799de9bc3ff7556faa3a2527567f0ad6d422da211b8b82f7da27992947cb209a798cd1a7e0daaa413d8bf1fc6fd1b174e363b134b707aceb0f3ae688249f2ade1e5f11605bc8e7bb34af460b47600a68f513a5a5b45b2a1e381ed23af22f09da77e69d91af4ad836f1f1667523fa489adab94b67fd51a64300d4eda4346c29eaaf014b184fc89529aa2cb7e3f9bfd5da3863dc7bfd830e70feca527b4500c12d68dc621ea47e0b4292c06fd2ac9f247c77129cbf8fc3ed0036b1815fccd4bc3335f694e6b3044a1b1e9fa05d27cd21870d07b911f1df7a7fc6eb1f620f738a8517691c862e6fd47818a18f2b64bb64be853172c0c96f559a8c0584d6b08e44354bbf268ec1d57b095fab6f54af8cbe28c1fe817773f8ac60da5cffbe83cd3cc2acac4b03591ef352921510e0009145d0f938cb392679061148db24e1b9c77ef30dd7e6a44a9f013609d15e5c73097997f756d7e5826c655c819bd7cafe22041bc94601cfd4f925a73f3032515797826225e4e89c084fc59c4bd1a0e6caf09535bbc401f30be1931144d2ce7b176e9cd2a006983b5d33cca5b571f19e08c05d073bb2baf278e7df192e60e945e49e2950d0f51107d8ca2212982e6a22d0f2856eabb10971a708972d76a7d626c0dd22bcbce036759b416ea348df25ce9f69f776ed9f1f5f047026d58401782211f7ca83367aa8d5e30774e8c3ea0cf98f0d2d76fd87455de4c5aeb85f06bd32ac6718e5a35ad19cb2960a8ef5e07d9eb42305699dd6c56a1e2a98f63a9bd62a137378f3617b014499244e7899431270a98e11477675be434c275e801e6ca8cdf3be209a81750efbe9761a57fdc9ad012e5da299c19139f900b4b5669286a06c5566091052e4fdaca644b1a12a051b7a0f0cb5688a48a671c215aca5a66c097d23627e9b4f9beccec66253c97109cb4fbf0fd912874c79ee0e1408526a634983e97c5a5739b90deaed42aa5c38b68dce0fbdb25165370fe19c54664ffa5a533b650df3e214b1f22a610e5a44f8b465b1a5796a9c32fa55e62637452c8bd13019a76f6507735f6886f1162a49d1a045bbc9d26d9c88c7aa28d8cda451d6ab0b2cb189f6f58c789304694d920a762da47f28337641b7ba866475fc920e97fd7a031b01c93b29fec071cd1847b1bf9ca9552849d2e19071248790296e8d864e5402f866cebf8f2c15997abe233880252ef408bf905d0107c87ff0389065136ae2d9b3b286d7cd6c0858aa17a0b081dbfb19ce594ee78b6dcbee965e3a4e5f23f4df2ffca95a3824870b2a59a6da6d43fe862e640d0adc7da9d444f25fc7409cec0f3803c0fd073241983be423a2059f3aa4301a3e263fa13c4109bb215387f643155bd0e8d7aa08ee2b8d06b1529e0fa2c18a0de3a1003dce72149680e0677b811b5b24325fd2917c5f9095642d1e215c006080b91bce018915a8810004cd89353375f92db5a08a9fe603b2460973bfebb3ab4b2892635e32bc62ffadc9b1bfad3cabbc38ed925e1847448f820d7a11296f2de0ed7adf2237dfbe652ac88647114cd12e0ef5a73725699604ade70fb7bfd4ac0608bed905092a47c3d3cebf1f91c35783a9c5b7d44e207db795f655c42c85b86ef978f73e005b90f5c85035deede179e86114e218991c943462a816b202c9336e50b1dbaba5426e803ad3c9cde74c508130022610da7b40305c0fe066b20aaf0a82e77decae5b7f74339e113928a0610a14cbf3a97e0494b352726a32ec0aa922024d948a26fcba4e632b23056a7343ca6171f839ac032d002cb496f3271c48ec8399e39f5d7c6a919138507e4b8220398d9214bb033ac2787fb4915021c85eb3ae5a7004b3a3feb7d15cee5e35e88d2ef2ac9a6b7b127019e1d2220e79eeb2ed1c284773509d3a5878c1e1921107fae27c72b220b7742cc4706c71c1c287230ead8540dd9a6b91ed84d86c4ea7f2230e4614099d076a83fb331efa216b39826a22712824f986c01d112b52774263b8240eba708c0e407f435ca8bbd7d40388c300b051e2103fdda2f1a8d441cd4cd8f4cd039328b4cdeaa481065397383c4011d6331a8b2056572c82d89cb1faa562dc02f78a841c3c1a032af1e9625a301422a5031f81acb5f5b0455e4bb3cfb250283be3dda92d6c62bf5ba9f698e8f77ba63809e616b7cef05aeb61bd01e47c40bc77077c3d407105a93e38b2029092910b9671254c8bf7527a8760ff316909217b6f29a59429a514d8050b06f605efd76586bedab5e06b9155bbf5fc3edc460776a7bf48ed205ce4e44e5ec6c545dccf8ca53667a9ddfca5b6524fc74328b89c8434ab69cfd77602a676dfcd98b2e228287fa08f7ab39b39cd7aab03daab7d822aa1fa8268604bef934a88ea701bbb1c841042ad5b4737cfda005a1a5b027cac4b40d5fab5606a739897c7bae94261dd945a1ded7ca090569daf6146d9cfed73da46f6fdab9d9eb5aedcc674f5bfe474c417e517fc1609cd622c0a1108b8f622e9d8e1ee3f864be1841d5379d01b2af493a0dca0e670b762810d679ebb7f3b9702c4b13cfc0ad81afc1a420534f4e614b02c7eb0bf6f2c0fbfee7e589bdb1bab1b25b0561d75258e4a42ff37d538372081147acaef707bbabb3b44727756dd75f7e81ed77d9f0e49e4934f888c7c49227c5a84d974144abbc2319fd8c4fc330c9311be247389c3dce4ac938f148ff8edcf572cfa96061dabfa8081ea34eb45e8b0955a2c7a23475d24d68e2cce199f79720f85b7c4384ed81afd63c4fc589efe55f2b1e4fe3485e818638c91637c510bf962e42094d2638c31aee3308966c8a28a0f4bcc1c6591010853c04831d3e414258ba5a4226860c8c2e98c36c36ac2081ff61e16866275b94c1106ca144f7899428b7f8f8c507def3dc631e0c86b4e19e19362f53c32e4211cd94837e266a553534b5f8780cda6aeeabb9bba7a5ab69fa22e7e537cb38236cf854dec99cdea7f36cbea556dc7c235dab3708df62d5ca35dfc62488f714822aeb13d7206c9752da938b13912bb938365f5c7cdc16c3ec40c49448cc399b646f738d2b2fa8ba8fd9d24aaada3a1c7ff1a916aaa484e4e9942658a0b1bc7c259780b432cb53dcb161c5bbb1162d4d4953d2f7ebf834bb604aedda4e829d5039844fc7ef722bfdfc5748feafbfd4bf7d47cbf23b92f6d09d4a7a8ed4bd496df3911b5b5ef9ce9050ae582abd950a98d06c5aa8c1df752f98f5860395543d59bbcabc9b03979777872cc31f79a34abdf6979bac977aa2c0f16947f6dac8ce8f0481a71e4367c1ec9a314583a943fccccc93092e9d54e1a2199ba8763144b8ac0a2fa866ad65c1efeb73266ef74bf8a6dacabbf234000eaba3a18b57f19877ff73806145159d656e6185054656b6ced1ed7c73d690394507ee4885077950db463ad0bfab31ef7e3dc98ba397c475834d4109a16d46ec5b07ff7f4eb74ce93e3306302f2e3476e051adb0a2dc89f4f64ba88c89f9c0cbaa212a22c38730c6ab2575dd41314c33823f813a84993260d1ad7e35668417ee4664c20ae20b92bfeeb825b4d9a3469d2b89a9bbec32a210a83dabbc8729d4fed84b4208d1ffe0714bf1b415d4e051975ce39e7e480e447ee9b5583037dcf02622e854250656e9746b71c900a5e8d4ae0ef139f1ffeae3307243923ff08b751bdb3bbeb1b844668e8e4acebb1ef682763555332fb961b907fa7f1403deae7a3e4639d4fc5b8195f6e4046911b09927518c443a970a01d0fbdf8fe7eeed740ab6ab08ec535af72f1f4b59a6d48a5dd071eb0b58648a5ef3bdda401caa9b89a21b5267b549641deb24f655c2af5827b1719d7f9d41a15b7217109a4521098cfab3d6fdde4e7d7361681b9c79f3d9ef3041a58d923279e27d0c04aab593a9506430c6253347805c87bf83ac5e33de76618a4a66dca02d84f8e48f6d89672315310bd5cd3775240fb9b795dd8365d725b17733f90be662be87b5ee34f4905e1db98797dd7dd7f044f4118dfcb58611305b5e8995ce9efc5f7a87bd4c03aadf1716c4e775a23232b2e4cb9bb74af41ede720e1b5bc6b18051f8410012fc9fa7d1f818bef3146efe18703f3eb7e973bb53cdb5b03427fae394ac722d110a163104e88b282e1c6a710726ca1aca0fc207cbe6f3d930e6d2cf7fb5042f8207ceebbbb0d797517725c9efd65e8cf970742c871aac7f22c17caff9eeac983103e87f041f83c35820f0e1d429f42a6995bcbc3de7cdd436d4614340b11953aa19f06336884e96538198c29f76133f28d0dc729779f96f78395b4b1b9c1b1b1c1a28c0103e766b3d9705e8422801103fe9cff381c1166c0e7393900f01a26aa07df2ce2cd25acf7608649a1dbac3201d125fc193fde3e2d33668e61b307192119e891090ee2366294da445ca3ffe95f3c44df3d158176c5d75267a8a77abc9ff1c37f5eb36a7773bc3467373111e3602556aa2d9f8bfa91a62cf5773f1bc14c4bcbd3cf4a8c83bd6c0d229806b5bdbd5546f3393501764d8e080b2ec9f59115ca2158d521ab0adbb529135e05da34f08350cfe311ddca5dc9f2e18bb0659152cab931c67f3cbc05fa5a34482228aa73f1169c6aa905a8fe72e6d841480541886902cb1657371b8adad1177c840bed9ec998eaff8e54ff9bd5097250fd73fc939ae020a33a0b27cd1318042109943030e8279e2409610913b51f0c132b097077777f494bb0ec4851fb9da29eb8a03f237a0a02ddca3bd46e1ef86089112c929c51a2850b434964d871042949a8861d4618e0c2128c2a5e4ec50e4c78dba42134d547cd501104bd8151057d243413b6ee6f7379986f1cd1fdae450155d314a1c72486cda51d94841d7a496c402fad671dc6949993d2d5eabb6533443bda82ddd876b3a8ddd9657927a4c26ec8f63312977dd8f813f08f2bec16ed835c3c2302fed903f18c2372653920d96b1c912592bd73339633f220d7d65ac4481c34fbfd2d49519a6af6fb6278772590a71182863c7205eb97bf9b44d5b79afc6e3eb61d592965f67e16db8c60afc95dce08f533c5b180725d894698bf1810b570d34cb4533fb20dfed3b61fef877cb87543aa1054cd3e6eddcd8ffec7fdf44fddd48fa07ef9f29bdb193f769b1585a06ac6c95f974eeff00cf9afc2f0435ea45ced3e0c4bc328371a45b912d6b8750fed0faef715a22adce6893f5e221fe886d49ffdf9b347acf3c9e50a9fd398b650cfa9544165ff2b7c94d33c8232418dfae177f405d99d32ae0b3e20282c0be70808a7f483bb135861e7f2d450a68c8d17fafb659b1885ee61973f6dd5ef5e3252856f6b976fd185293b5ca01d7df21dc8c060827efdb24d8f5709da8f02fce81fb92057d319fb6e63c6723ead8f3174f4f90d54504105f401e25301f6e1f7ceeffd8f3363806f9ceab05aad1ed36f8976ad6620bdc3106651059166f384de34ad8e038aa3c535f8b7729d10148b71e8e01afcdcbb310a53ceaeacc0b2821f26c835e3230972f9ef675b90eb3d91f519fd3820fe1947647d466b1e2bc0ae0893ea12d006494544951f3e1725635a60e8df505afb73740f52b74ccf09da4da3f873d2d56a87c01404f821f781c5c12e12ff7ba3f8cc5499eb6e6729a15fa120e53841bb55fc6244bf74caf118a708dacd673da401ed28751b2c667e01a9760fb4d579b2450aaf1d69997294d06e99bc02e91e54b3ba3a90ee49e171f3cd399f0ce694caafb111509ab893fbce7ab33c9039fe9cd8f3c61883ac2891e6c4b02cd35032a6e0f34ea552a914af4ad5b1a049946a08ba1d4b4e2ccb16492322e46780f0333a722c93962a43f751a90860ae142ac5e3018176342ab35265680d6a773b5586b2e8734a29cda972a6b0148fe7ede589f03986615863186318b654d5ad50e9f2cca139e436e6eb35546310b4a32f28513bf9249be69414121ad8c913b55ba1a9f284a05768ff8d6631111ee8c34d8837e1d44d8af254bba7db5290d0dc6ab5ef5ceb46ab92d0ac1bad1c75f97b2b653364b41b5c8b79eb26c590a5762f854e9c269ad82f376428f3c380fad0b1a3bb85a0eaea85a6dab52613ed665d231aec844bed7294c6fcf39b5b6c9010b6582848dc008aadeecdddefc653c277f0c5c92b0cf33335313333333333fb0ef6e13676979f4612910fea9b384d5023cacc30ea1fc0141f96745caec7adbadb3c848222a04bd115883edc90aef17f98ab0090e8839a63e86a4bc89ea37cb5ea548facae7ea08f488dfc7a0ce9ca39bdd32e1804fa374db9a7b028ed42634de13df903fd7fdf44e0fbd0c1ccfcd873fcae8579aa874f8d5ce7b375ad179d9b156e930ed33fa8857bb54edc44bb599fa951ab9b2cf4ad4c08620cb010d106989999a78c40766907dff8ca494f6cd0d12942ec8b6ffae4ba2986a2f09e3ff787ae44e34df7664dd759e5dc4c14e7ffc0cc49e96af5bf946b125b38aae83d57e1307455b425a856492c0ebcd4963fd4e61d6a77115c3d41e3775ce483834550858565405929e37cf84e17750f9c3fc9d032bcc5772ca6f617d46a8bc67156d815b9194601acea43b8f2538c62bf9446f7a420b0d59ebf9efa7577affe15d3d172bd81bc62dc2e8f73f7ba99da3a5a515b966559f69335cce684329bdad4346ec6b0e9cf67c4b0996113cbb0f983655886619ffddc7e300ccb62c4b0b95163fae44b0d5490cf5b2a7ff6a57e95cfcbae8aafa351d96fb3f825c7bc69fca82d05d4db3cb60de18abd66b361aff1f6e2b77b6c5e842d8b13c31404b62a3f88d35faff9759bd58a9993d2c6c53bafab60bc8ee6edc5dbf4f00a8303f2ca9fa37b78651836a0a9ef56301ebe902d413e1ca16ffa270c6e360bdac0e182709342d5f3f6a6c244c9d7d11bc4698dbfd4a92ee84ab57523a4b60e9502accf487b1d7d03b5e69feee79d323637b5cdb2e5e62ec2fe3cc896e0b587f286f148df806aaaec6dc68f9e1a4461df5bc7757172707eece5f6521068d4b6842efc208c832b7c21dd231fce5755e02abba01ab9e5a18ed0c6881aacd45fbdf7de7b2f890632b59b1d6b45c398ea4fe346161becf26e12d156c77d9f9a880e1959dfb11a1577fbc003b82e47a4faa86ea03a5e7cf05bdc7a149c6377f8777a8d13da2dd2fb1041077cae9b93528d472b6e5962dc76efbd916a40ff116f89f648322d8baf2d998f444e295f5b823d9289cd4c433d120ca53d966999bff6d96b8f25a5e029498a12b5cb5177beefb8a0cd82ef02d50fbe76f766664106c1862ed05ef762bf657f0ef81f3950ae56aca6610bad638b40ebdecce8cd0a296502adcc755c51267c95df9d72804e273914ab59a8efad6b556fe5f00144034246706488862a5890be744fd7235734f9cd755ccd3ee5009d66ddb06815b4fbea2774953c5230612b90a37955f826f0d6e8b2e71a68a8fdda6bdfa91f2bd4ec59dda3bdbfc6fd789c4eb354e0dab18eae8127363920547b3b43d50a5c6b79a610ed5ee7098bb23a3d5499bf85ba073e3f07b354a7d22cafd22c9fb23caf427f55867aa84aedadfcf1a87f10266986a5faaa5acdec7eddddb1505f1754dd85a0e406011413aed10fdf51425cc31b05d984e7f73ada4160c2d667c256e7b6076dfd39e9405bc8fede72cfdff7dfee3afbe4bc6b5a48954995510da11aa2a6886a88d49903244959e27bb56fbb71dfa5ec04733ffd9b13e5b9ce66e66ab2ea9cf435506384f0b97b63f1a043f81cc2e750f012167256e20e23c7489667b7508690a310ce3fb23c0f08ef83f0f9bc1dcd7aef799c48377656db83d0df73ba3cfb5910daea6824bcdf7d147cba87fe3e1046b225accd3e2bb9f9fd8e976c755d2c7df1ebe375e6a99d827853981c0fe77160bc66f9dcb878351ca54cd4ac2cff3c74a365a7e6b3ade6b7c60335857a4da5e276796a6a9e532e365e96ea615599a0a252b4469542a18cb2d79827c7443c94e3e3d33ded307bb819651c13f5ce900e0fbd8ff9be0da0beed02fcb6fab60cf4845a0efcde731185cea04ad192e4e5c8004ac152bb6fddd064a3e53b4b428edd2fab7e1b39df8c2407c4a715632bb674bc5ead9a63d272d1028575938a6e50e3038d75938aa8c0d7b585c90016f1e03c18411120782074e40a1e58e0f46263d881bb1751e6092db2e4f0c211444c78108976702b92e062a68b1046fc5084143750a0800103baf55530740742cc800559682912c30b3b78f1e4556406a07654cb52fd6fb8bb8fa9cd46d0117278b2850c5e3d108919e362a8899700b221a36f179c0c55777777f9269c714a77da4078efeeee41325c497acdf0c5091d947847e12f285105ed68755fb97e784ff5dd542777f9aaf7f85e9011740f7feadf43ad0ae91ef8dc8d946f5de5d3b66e55bbd60c87ee4fa47f721408f613e326f520d77b867d7773a35919eadd6c28a0411ed25bf2a14cef054f08176d47435e4f7bfddecb08e90f41d42e077d4f4feaa07998675a2df90df60f7896a1a195d06a455f453da5fa7ce1ec40bb7e0921829353edb02558a6c35e4ed53fcbe236e69997d0509308d8d2aba6ced04e366144605eb606b63405ed261313657a967fb77082b581da9d17e3e0ad61647b946c0f7c28d5ebeef23097dae908d1ae2338030b31333b3fb984ee77a8daeff9d88edfb71927bcd70b9ec0af57e54d9db0488fb9d9383c502a68bf8d10687fa753f9a5d09cd58308b9fab74a9159f42cddabfcf1093b8309f15a11c51863d25193e1251f7abd5e5278a9ae920cc62c5526524a31325c51ea6285aee80da54f054d2c31c393140c2e500a020740709328a60827a6d7ebe5c276397a39414cf620a574228916407817c201932b8a5ac0430f3ecc204d142e65e88ade50da1445cb5ca08108209288d8f29ef53aff989723a2921a38ee00af385222b1709a22266241468627dfd9b903261d03c880184098614ae8f7b3c23ca060c618638c3152c1a86054302a1815961b5942076964687a8c57bb5d62a052a54445394257f48652a8b4c398f7024e162d1e908821ca961d94e182a68b18247068f98211344f659e98410a3459b8e410863862083331c61837d3c1100c649c2c71039923284f5b7841d3f42d8e3dd0b03d0842098a1b9a289a81931094c050d1a1c815675a80ed8072145f3c69a2a11ecdc0480c5fd0dcd04407a169073507948d911598495265dc1f249105931e84ac58c1022d92e0a2c4b7181ae18864c98922cf7a9dff54931c2d9c68c20c8df1c926524af92df85aa619e3ebf56212638cab14c5971aa30b5a9a284921c3132f95d0671f62d562209880080344d34ae795a0600b27557ec0822d60ae9cf912638c314a29a574413ef1ad8639bc74b2d23b8b656ea10c70525abd94524a49c509aa3422c9349191a29f0bfa2dbda2122f3678c941891f52425d90d067ef42639c31c6ad31c6189910c2b017628c800ba23c2d5929e384c6158150e3d31530f1825ee2190a254df1015dd11b4ae9bb126d275fda493729077c38e2e90a24a6000186ce028a1239d484bea7814146023550c1134d5c56004606334cd8a0e210812862b5e0cef91a7a15bda6bcaabc8e224b124929bb4c9547104208a19452ca3430c4f8aa4481468b127ca105342d3c7d4b42298a51090ab01872928331352071452cbae4e0055496c424a52d7450828c0ab45802e5043ed8a065872ba2d0428579a44088284c16573841868a0e9d94a4e4e4013fa881161fd25cb1d4c4259fbaa46089be5b217710bdde1222c0d015bda1543a915286518a028550b4a108114996b23029c2c9892bfea0c62e4c30a8a0f5781421e97cb36a9248a101972aa89316748932942d612ba41449c1e15bb087ecb9c977b642986d37d846a394522e5151255dd11b4abd892c4ac2210ca5f49fbf13686fd628659552cae72ff814659658c2088822a2e82a96b058ca2225a594d28b5095afcb92d376331a99b1441254ecf0de7bef3d26cb440c5dbc4879efb5640d6e6a6c12631050d4e843bfa118739ac011ea1b5a957a0df529ee0afc9446c20d777777f7281d3af4c74b68ab83495ebd6aeb828ea6082f27864929a59492eb300cdb828eaab6a55e47d3079afd1ec3b8ae9fbeeca7cff341f083fdea7fb06f3a29f6d8530ee8cdd750db8c9c0000e06d0050531380adfb5af300d872b66ebfd49a9fb1756b835ab34c316836b1a7147b8a612fbf37291ba39d9add63bebfe6af7d276499a494a997dd28c901a938a325a847f2303ef50f0602bab541ed87317d07b20bc5ed7ef10185dffd92950b098ce936b84ec832c177f1f0838eaa1654a7fc1bb9cdca29d97d93da65ba91df2f336e629383bff02984cb4527edbdd64822c041ae9bbcdf6f73ffe629e2a3fed5894dd4ec9e1f7f19e371b6cea7e2c4784dc64f1953c69431654c1933c6ea358ef156af66ae6d5e67d7d9dae41ecfe3baec715e87679b4f456dcd9aea81a0c6a920a36a9f655cf75ef57303820f829fec63fc4fa6822af8f355d93f2c7b55c601693622bc0b11fe45ea6b5e3c142115e3b7c27819315eb5e2ba18dc7bd5e36caa87b1753e55a5fa6ec657fd9eb0cdfae2bf9f33f59edfd6e3cd37df7cf34d7ed47b9ffd0369df8da03e4e051915e71f07a47d37b1cfb49f9fbd9fb362389cd1929b47826137378f6137f4319bf72e1ec98bf7358fe487ffb5cff851db8bcdc58684d6a0b887fa5450853ffe5ad0e602aa3da7a95df6281f271861efd88c595f4d8198dacd1ace74bff7411588e7fcf793ebd801426455c16b848feb18045f4081292e5005210621d7cc7dcb8dcd68edef4187ef052a558f4d5381360df6412e09b400d715c80bb8710301083080010420809c1c1cd7151c95eb8aca35b723f39348d715e99adb151ea4e8d38614ea69dafc21829a42d00b857dd0abc6140fa045aa990324103fc6d38f6d3875aaaaf6f263ea47aa4750d5b47f8f6db2aab684f8fd3fb499713c194324de8b60ce230fdf0f13d49f22dae3f5e634492978e26f80aa89baafafef330bd53c677f6d44bf1fdee85dc37d43a05bbd064bd9bbbf06a19cacf967da7c8deb029da7a854ae9724b164684800000000e31400002010088743e2a058301e92545df80114000c7084447e603891c682590cc4300a620c200610620020c018628c81a8a60800766dff9e8855f41143b95ec90adab0b9195d324a6328cd6d96f4839b5b30a321b8e9cb565ebeec99206bae37e54b4aee5c71cbfe0054b67b01a0f22f20f4de1655f157febab4562a6a461c20621f2b7329a121dc8c3a2b650e2eeab85028d14679d2537020dad1b654629620818b95826bd787ce50ae7cb0b6d2dcdd292be4f922f5b688659010c12d55541315f5654d108cdb58f15ac1a97aeba19ae4880e3c21012d077aaba81a45e72c951ac031b7a0b8f81ca26eb13abab63a9d78dbf76420458e24c9fa490101997e80a0661474c48277416356844f5add24bdac5066ddcde7816843772004698f6ed97daf5bee760fad1dbd6ea1842c76c4a707c1333813b8bfea817a69f0efbc974acdbf86fb70b8dd5046c6eb5ff6912777abbc50566ae890fbfb0da4340b7788b27f2c55a343dc8a497e8f0285d76dfc348200ca52648af3a6c80b9488345dbd804a87efc370db85cdb822461e2eccbd9339923fb301cdc4b1a9b4d1a09e61e3c14941f3a6abf5e10e1314a3b8547453c76f22ad6f385330aae01920c76346c4ed7ebfbf2e3cd48178ff2ca0f8dcbf342c783a3a0d0d8388ccb1a2b390bbd4d03dba69abf2d3e9a8409823e8ce1aba6ca85db014287eb9b146926998aef7b93203ea0c715dac5c4d3738c71324c39f1b2293f92b62b1087f07cf084696f90fb03d1aec74c2fd3befa99b5c0df4b3090cdd121f74845f6bcbc6b6746ad0b819bdfebe8fef0d8bb4846b31a64f18631512efb2a2bbb404c2f16b5f910fa95115e38bfb19e9e47c82a69f304b48b61217cf83611d68258eca82e2f000bc63636eddc8ef99985fd7100d3874750bd8333d69354d9074a8717b34d672ede205a4eba0231dc040aca143b0afd48f09fa91fe8d4991c9e3a322d088fa9f5dd221df8db90b518fb8a472d4d772f1ff9b051c60a896daa96fff0f212f25063308b00b1110d985a7cb2781cc7c6bb26952885528a5f0117bbc653792430681a49228419867f8eb2526b32cfcd4c2c70458661740b5e52f775476df678d2301a7837124e453ff57ad43398f3333cc0a83bdc150fbbef2050a7549af6b6ca6d91b9024a60b288717aad6f126210cfb2a2f50c369d09b302982af88094e09984cf21bc9e50cbf9b462c6990601c438d353e015725d42c767f6091befac4dd4eb9f105146555e5551e4104834a8e5cd3b44a114373257c318511caa865422b3433524f6b75d3c3c0b2249559efe36596730f86887f18f37e814b3f4dfc5139869a3df3d299a9c866393adf59a976abf2357cfe7f2e5d10af07ff4f2253ba33d216a06c70c2e43681449151cc325effb47c604629879aa3286209bcbd1d676ca9668247dd126a190bb7336f74d7f5360622383eebde973f5de3720aa84514848238105b2f9e3af9cc115992b81656ec644f223a5b9ae1e997c97dc5a7e01c7a0c4e1a84b43c532a01ff06461e65134fd4b7850e72d909104a8055e837e5d040de1ea3bca9ef527f1d8f7bff954f5289e42f0d1d7f820c784a8e763359912c2426c59a4312b0bbf83491bb70b411d16dcec494f514242506f4498d0c09401de56a1edb064bd24d33bbee38b534f81a13d9318f29006786675822cb49421645a95288c79e54cd12dcd13314878772b259674c9a99f2750a132fec3c713af4f5db0564e8595bbbba02fd6ed2679f616bd7be98b5c68879a47258386fbb56e4a3a448db0b9c6f70e34ba1aa32af1c3a12a1915eee42e79d92f8a5a1ac4b632be79138315426a2d4daff5e1e7159017f2a2c6fb4ebebf5ecb3379c88de0b9486f211647cdb66907da02f4c44117d45e2ee904a2bd17f100fec7edba0912ce44c3d4693522e37bacfa417c5c48647b4f60a8ef858b4348d294d22dc813febb02ecfd6b2a2e4cf41cbbc2e3faa510a384cc383d656f9ff31e1421a75604f54d20d753a42edc37e03a44f69da95e5c4b5ff6656366404b86d0803ee8807dd48c146b603f689d6f71744e3c2a0c6beeb68903b4a8ab4166f9687990783a708618e8f104323a26021802a73b22ec423a6ed15fbd63e45b891ade3990c7f3dff5c826e72e986a0bf4cfaa67da52b2c70a797c09f05ea22764965daea027161f6a40f23559a0b2aaa843b94c3388760930c70539d650f64d861cf6d07c867b7b95b5965f6e206706a60b80a5712527ac1052b59b92637d232695dd8d0d3cf663c6bd0ff1008b9cd4cd899d959d623f99f74163ab8cfcd5219aff4ed6cd3068bdb65e05bcb4da513b5d1cf822419ebf4d7a00dab4703c012e194d639353bb10fe63f1fd75bf21e41223cea54bb0b7bb77a42d59267d3b70993117e98dee0a63d4a35a2a9a2b28902711ecd63ced8a48fa9a349ed9a8965dec1af4288d88ce7fb71f24478e9cca0d398b624da466d1cb75234d66322b43b97c18d41211444edfedeb49a5cf70a82336334c91cb0916f9141aae2c90d58d17449a208f8222a405317b746bafc30e25bd1b40332a9b1a57fe48f47bb22e239f344adfcd5e514dfd59ef28694645756acf4f8593c670bb52bfa06b31ce5aa5529db653e919a2d20dabb69577fcdf129d06a155c1f64c704510184d03728683afe5895ae9df1dea172707d1f7ccea85d01b7765017b78df8828fba9ba65bedecf95ef16c39968ce888769cb9da415b1a94f8a9f045ceefecb08186ac76cb535e9ea8e60cdcad16baf983ea6ab5b3ebfae8ec167a21665d34c675d65634c72e4d85a196f1d93a4452c7ffe7921c4a11f0b254715972eb08f3f2b6b23efe793c30642efc7eb600f27c6828785eacf4f1dff7b3aee0497fd86b2968812ec866e8bd1e797a2afd1955775b0661143e53fbb0b8567418aa2683d0d7b61b959050f2fbc2e0a34e958b59eff527e52979989bad067195c197d86c4e1c28f76f7222dd0977be131e1e1a4b706aa3b580479caa5b212d6ea6e109f47960ad2c71f4fa8b95fdd8d064f3b365e39a9f09ba718a95899d0ceec97b8e140bed4f6986471bb3672a8ddb13c216ca10a0b7f3c2161b10df74fca647ee79e61f4ef2615db7183048686841f88eb89519bb2dfdcc85df44c37da7670306eda78a404c3620c7f038fc772f433c8589656c95376d0a2b2ded560561cddb82ab391fed8aa3b8545af20eb54d451a65a3022020e64d4bbb07bd6ac1434df6dc675447c7eb66ce7d4691092756d29ba2b4b211f759009da23279aec61b81612aa9779f7526a1f59e110cefb35b671010eabd4f953cb65b354bde6737615b7c1f948adbcdf13ed35b3ae9340735efb348e131cdb514d2e508b68272ba8d294ed55a202104d08080a0913861f268529f5d788ba535f8cbb1393e3dad0c68f4c653952d9e9bac35b7adf55b91cac6ac1b382f9b5a11feaa2ad2cef288cf4d4d036271ff50773cd51c6fa4797dfcd2e5418933d4f24c6397e26e8a5e9dbf89d78e313632607af2d8e1f12ae0f0cd81742390e718a8e2e086c398c402400e4e25316454b93f4d2cec06eabb5544bee4309fa2553c8ecc99b705e22243d61693c51c96294c766fc9ad58c325c49bf76d5081d6a7fecd21d33a2e7a5934679a3d4a3e17859ba58dccd982970c009f660b7c7573bc7c82256fd1595d8ae131a81622d58c4705975d9435cb0cbf7a06d796abfb5d9da1f5d3f86d2e6da46b5d18d681b42be84f692c9b34f041093c30649630157ffdb9639e4351a8451d83fd61e214fa1c0a9a8d0a427ac718bec1fb985600d0c212118a37949139a3d06351acb74eda8b2fec4269b05eb1d9274f7682bd241439765593732b2ca7921fdb1e988d54e7b04b52c600a5e138c06bdedd9412bccfabd26d2f7db0484fdf9e19e295ac4f0b5c072e6be2df1002e6eb6a6cff1b73e695f48ed74f8fd99d126a363f3a9179a2300a2efcea8cc719107fa02888a7dc5137c972f4fd3ffc90e06b9a8404b547b8301b17f4d9a3d2ae1fcd34b53167bb69f2d0b29be2389423845d646a729b9e2337e66cc30d4446a533e44613b25e4d858819a6401f533067cb664e07e997d594995670b62deb0d80b15f73d7961ef26ac433e5ea7d75f35377564d675c8519290147f370566c54e8f3982683184d2d981b1f0cbd6c9eeae4d3f311281052576718dc069371b064b4a1a64bf9b316e9e99cddc353100bbedb23b9ecad1900fda92f1fd12cfe01399009da61aea5c6d1288bf4db52f57dd6401e8a419ae199bd177fb010a688aa2be74a0cbf0ef328781089be87909bb2bdefbee20acff957a37ec4af83604688097b0f7a585f252f18aa78121eb043c662078ac955659d6007583776d0575f3482081903448b60077cf19af02dcc5f87d47349583e46fcd7a55aa55cfe36580cb7cd8573de4bb13141052bec3fd2ff728a5850da5be80dfa5a0c816407d0cc007f49b875f458b0065c85101a043f44835321e48e8d6cd457f798937aa9827789e00d511dfe8b483fc6c43faecff17a8f537e14e4f1db1e36eedcce7826902c9fb7dd80b8bd87b2f5066fef6efba16bb8b9dd7f768241513f94d15ea38fed706eb5c2efeec4a04d739498375ce2e61f482b5cb22a809503df22728f47dce1d8280a8cba6da311e3200c1db88bab703752d46fad909e0f60cd005d056dc05520c3b023d12af4bbf442c6641566bd5e85125df3c63bf95cd8d738fe698211575c15f252d6a88a1c937262ed77c9f94816868855a1d52921535ad3bbaf682a55b0c475c3933034d4eead02489967006d90401a30e5ac4c088c496081609d898df0e3261b81f47309d7d9a436033ad493a0f436809e11a27e34c199c26f75e3c812e5929c3b6f456650286e176d21f4bfc3f35e5628e2e8b8289af3958192ccb65dae761555068ed038e98d163a96fbe9a0acb1c19460b7cffc124acba9f25cef1bb5c990915bbb50bf0d83548816a371d2494df57bad840a4adb9d8dff9a67ee5606e023a5f69682563d16a174e46a13765abda10151ee130d4523e380597b541ed29dc3893e7a97352687e0df84d5788edd8f2dc45619f979f6fc2482d8fa2a8bb63b75294fa6adb62736c20cc9b1c9ef19a5282b18571cb16455c500108113476a112f8b05559f4b7aba0c70d058b1ebc83466e8375ce4553e60624fe7bff31837b5a5d637bf38bf483d6e071adec818e6d509812dc1e7038049fd13af1be68ddd526f3a93a661757b23f3d6b1e8007065ffa8325f2b387d92b05385fddc7729c1fa517ff7ec7459970727fd3c55e6c650b564ed2f405a510fdeb5888a3bb820b367e7da656a4d9e067d04c269ee1cd6033e7bfc605ed21755b8892d269c0ed5b2a17f1ccf4b81ff57b0ed31cee57f3330c004867b220ecee1c86492a555d10d2e6516620b0c352b021aecec9d9c83138036814f396083bbb53e3e57c0d70f6b3075805454a98b69d50ce065b9a84d21b9717a3822a4c1d94139e70e993f429bf05aab6244b213055ff44c169f5a6a73a2bca67b2801fabe94de1a156c32cd499d3c49bd7ea7c640fafe2c7d1b10e9507325eee5a5bdd7db7aab95a51a1e582863af5d278792de54d84218d50b12b8cdd176eb6cdffebd36117fe8a4d6d8414da2f43924fa98afc1e13e12adbb5fa71e037e769fb75f5e9c5fe9c4fb44cf8e880a0d34dad94ea0cba787a1f4d612e651f78983539590c6271b3ceb5544404ea3b99c20966eda6b56944cdfafb3ab5582e59ae4d44b3253196c004244a0ce89fc43fdd4445dff51a06605ec61ec6dbbbfaa89eee94559ccbaec5bacf7f86326d607243f864dc00381c57f115b7a6ac0ea0ac66d8221c1b8192fe34f2744ea3c052afb1c5419a8a07a249d453f0b1fc8c6d9fb69852fff9981d9b1f0376b68a7818a895a085381d6f9035bb3c6b3e0200b8477dcc001986014e03d8a79130b0a9dcc644b978225ae899d8289b1ad9d08d332b1563d2e6693a294e89846afbaa05ff043ca9f89d00f8016eb8a054836753900d18aef48cca16eebf93c601bec39b6016af9ccd415131c7e4ec216e8e1eec2100a4397771f9bec44e871b924317131c5c33e67ccfece5313028aee0aa6cd14dae53ce2137a8f411619a39aac351da23a4afab99f0f3f956fbd76cbe19172cee89dc42332676eec266fb29f364768feb06f1ae3d54c1e40328b21ef953002754ff7b557699e7ab29fbe6e2b1c0232db824b9f53ccb60441d33e0f8aef04856fafc627203e1cdf69b2b1aa517aa921bd9baa0e3222d1656129f9d5240c2257e6c13efa606d23793db7bb700a43eda53bfc9e29c59a4e178c5d8ddc50a663b9bd0f4089ab172fa600d3f3a75c619b18d3efb5a008041ccb47c7848fba0b2237babc3c92d5736f575eba357d91ab771a06af9840c5b9ce4a9e4bd83b2f6ae560447e94e0396104d6ab12e824c0dc1b304128d0578bb8a54988d1656c2bed29452f8c5f7e1c1647486f93411946bace1a9b4a5aec7c821bd426f3a872f11276abeec67cfd0f2532a8c626c4253832028632b505e822ad7c044367259fb7b3d274645811120f61451e8621a7ca301713c0135173ce4e4b2a72571f264a5b48fa1c5c2c415a801396c4022ba533c1a8af0a33597b0521e62b86789912c17b9eb36c4272e132697ca168fc818e4a00d21f2bcbb19ccca0162ccfcab521fd16f8620e829f203a56272790baf7f000d3fa5dbdf48d0d36c513dfb01419283b2fd428fc08aaa30cfd38806bac6a2c9b83c896a382f60d593a629cbcbf0a1dbded4fd6f84bfb09e06048aabbfa7557dd2911a112a0ce1d5f09aee95afb187299b2f0a7fb19527aae612a32d10d6708748c0e317f388645eb5eef721fac7e4ebb95253a4938537a10fe823a65dac07a3cb7b2087d3919a068727f1d6b53bf87781e672c22068fae011b36bd2939b1131f0d217fc42c61c83b3da932a34142b6fd1f60c0c58900e5e07916b98fece205ac04c9cda9ce66dd6d967d4fa89647a5a270b4d0e4d362548f8f728600124a2011b800d1936815d3087c87a2c2833269f9a674901a79dc99374d74993c44de11257211e5a6433a3c2d3baa412f68f86863c51f6406554ce0219a454b7e1109538e4b578b91fd3bb7165525e2480d571581ea10c04bc72873cccb38661a6c7d57146664d36c8995a95771b34d0dcf969dd7d8ac6d7cb9b74444d83616e6f526eca8884c87ede1e602266c468da2e53fac39ff10593b619439ad5b0fd7bf49e6bdaf794af3920622544f6a35026c2552863e32db9524d891dae3c713062e1ea0c43db09d288a3d964011bfaad2cc04c1a3bf0524e1630ed563fe5e171371e757e746fde284edac5cfbec4555cc5230ca7b7aedac1e33b307f77dc88ae2b50a108cdb5d02df70efc0c90cc795d85b4dad69b89f7c09510e92823e13998ffad43400d6deb8680274a98175d63414e4df2a03ad8931f68e3320ed84187430a4eb37539ed09bbfb9d3c2b14f4a973cb5d7f571c017e7caab78687f6e74374825a284b83223d09854ea3cccfbfe3caa417148f7cebf41c152cc5b5ed0e7cfc78a567396fc63f51ac4da89f8980e9562e1a21e9a05b08876599d0cbcc390b30d2c597e8d721f8839feb80f7acdff627d7dcead9dbe1917465adbdfa7ab3de15dfc4a0bf05f8077b64c2b219613f10b9e79d3f3d05885083381b4c58523055947afe42a83afe8a8b2a1ca053dff82c10b4a886cac2f0d3284ccf9477621d28f8429a186d26b228e6ec139c71b2a95208b1425fc3bcf8d04ca5165154b9b8467ac33b2c6e65b1a2d525719a79de1c745c045ddd92bd52939b4d719e9ef29b108428430ce5a96da2b48ddd96915975028ac404c7f71c50c46159e57911cc4e60a032b9892c305d22765b1e0cd4fa63c32220341c6336b98e13605ee8e49ae75f1a2040b06ecee2150e966d4568a2d518789ca21d1187dbe45873eea843bf0a7ee62018ed177556e781d806499cd00ac7f0847f966e63cca7f38f7b3da364eb0e56be0398181446539b3a0076afca49228f13fa6bb7c9c63f2bc5d2ee4881d3febbfd2f9830b67c4bfe705b83350f9b85604a57d359f8eaf4d8df24c480ce49af9c27e55a984a47c2504deb632cf7e5e0282e2e3424d18a1d61c81808fdb12a6997919134c6dcafcbd09a1e6948020db84606c5586d5c5ef87450c2f753d616730f4991c8dec844aec0a20843536b77f553f6428a4cb7145ffdd54af1c49d74c1318b2222511eff18be7cf20ce7622fde3b9842b3bab47a8f7cfe74898a320c6289f785c7c23776317a5818bd6f412d3bc36b7febc4d78e595ff26482e7d52ee7dbc749e33f796fbb5f906d9641d47c62f7104c07d239dfb147f4eeba5cb7ea2b24302670d1558cc6b4e5af77e8572bab641429e08344beb06e7e94d817ca1d98e8541972d309e71e5db3ad14e55067891643cc5781982bf9077433cd9fb05cef4d8da4ecbb87229754a4ef3bc2348ee0223ae6eed6f7396e235574004f3df6070adcb36ec8a825e498a30569f9d80ac142f010c6c9d522fc46216ab6010a841e758adbcfd0f4ff7f445cffefef18baca336aa59a3e02b25b35ade1a8c03910ce0954eb9c9ab07fbda82b4d119fe03289f48ffa8cce66bca014e3de215861aac0df07aea757b8f1c1bcbc4ea8d5d2efef8e889cddc87636a0a47f831953854055b13d36aa872862a76d6d28109c0aea83f4e06e3439c0d3ab0d6d0a8af38aba02c75d0fb36151dd3cd990be15436a26dd08560685997968477bd7eb9fd5b85505068f2e3bb084bd5c3cf420c87345cce8a1a7a2ffd5a8edce087a431eead6b353dbbc8ba833bb19bff1e0de3e72ffd6ee8e436f4d2e457ee6f04484c1276b4f2a72ba9c648ba5b247ef1e05552018d09736b4ae6677cb2f4681e83186a100afa67f98009b8f133de398520f5e92e7a729f69bb3042a84a487222419b627f4e27bae97dd414a354713d09704e146286d8e83b13792c29e8e9cc7d10116998c0a357a1f8e286e881ea2902033ae834f80589b918988bc82fee528c3a9ea3b03dc5ed0bea2922b7a9c2a293d976579014adf868b7ec798af35df3d39908ed04bb3a43c079c4f0d3c3be240abae680689a99c0584aced480a2cf8a2cf51eff4e2901a0c3f9757ec7f33aa627e1c808c071808a2c5316bf8f36b5f6a774008122cdaa77e5c8a8bf8ea72fd4950c1fcc8044f195563c9e1024f3acfd4863ff089260c4221c46043f587995b6cd3de22710f2d13f4ed9dd28f85b7c84f7810f94a6d7a59c94a5212375e268b1863d9e48f40f98a38d9345fcc2df26444c66889043d4ede62504c57cce6258712f8bc5f45a137132400d45e2b40e8f2142e10f5d25c2e967dc892abb4470450b583bae3e0d099f5c00bc6f4accef1d8bfbd99e25e09ec8825a34a36b66015e0f26f37ff2d8c2452b655df25f1eaf74205cd2e7651026c38359d6b1e94d032d737520ff76f8cb837f0957d18f5ef6424044172e0a7b277a1996c969fd6449a0efc8c3dd93b7c31c42781ac4bfa24ea22bf7c6c1334a1c4cb0175356671fa6d1e453196d155a2d1d474a8f304fbbc44c73be9e7afcf2595b6c3be98be50f14cdbb8ce64d6090cff481edf2c2443dca70a4cf5d328d8cb21b37b978999aab0576e5040fa3efa2183ac987dc651e9c1e2edf87ed87d6f36e36c10479e3c0f3fa45efe58db9f2551fb62b2c08a8da38e4245c20818afd9226bc1ae67618151e374f66b562726397359ca508b56234db830bf6cddc5a8d4ab0b0d8aab60abd21815e5ab51b75b6333192f013e8504cf966fb9b7eeb4bc42f06ee3691118433ee046e9c55e3020935cbd8d37b0248fd3eec1dc8394cd5d03cc7ea33dd8f03f230de8984fdba8ed38c334513fb30439400c472408302c262aaa57961c256c133e7799f9311c262372d4320e1e9fc9182204a86285ea8541a83d0cd05ec7ada5381d65ae08ce049f416355220e53476d845b538bc5d4a63c5a84db2f922b933ec1a8514de34c6cd1bcf179a9b8a8c76ba4015a58c59231005808063f088481f4ce4420949696b17125b44c29adcffe0a745f41a4ad06c2d6298d81d3504636c838027f421c44446088996a05f5906bb9c2795979fe1ad3cb8b2953855f3fa4ac9d53d1b510145043f9b232f22524fe21b121787e7d17ad21dbd4be7b22187f19e04687357e52f4b1e395348c7d040805690e504fdf60a88cad3b49746cf9dd8b6169e206bccd3567642bbe6d4ce92443b6eaf6642cd233b3a2e80d063cb6d0ef7b9f9fa8f252582ce40aec15ca7a06636a601377083a34d93e51cb87724dd02b5fa8fe3666a40ba7da33a20a31293a5c4bfd8361674e1e7ef42301b14604143dd4e0517f1316a0c7969676ee4c0d24d4cfd8a2c7d48cb288fbdb30070f1d8224c8074e68af8fa972be391f8b656281045a76dcf0bdb194444e47a105e6b7431adb24f0b59d3d251bc656d118069ef165c77ad631de510442b32e8c21cbf923540d20cd084771360505bf84e6ac6816e9b888d4b6cafad7058e6fbc194bb0b079b81ae92c9ea7c3d9eed292d6f7511d82d38ca0fa95354536b21e9fb3f9ea5ffc1e3bf7817cb6e9f34080828a431887c87b4c9d0a05fff559e45269baf4f5f927d156fb40dd29cd0f4a217a91e7bde375faf1317ec66ba974863aa6ec67da0d877ded4cc1a173cc200d7474a81c8f0f72df49a87ccdcf25b71a2e053c856b6cdb7c952be254ea8e447daa8b8e9b91f02949aecd430c8b18e9d425609dc47ed366366c0119033b0b5210ac872f2cc60142b828cac0ad71e0be685b4a5f66a78bebb575ec24a7e0f8cc00f34b33e4e04d2c96720b4d9779bfad39d4769ce4e374b38b247a7f6a1a00a9f3e219f20080fe6e6e09e58dfca7a2b70d1cb7c20950bd254d141627b6e0334ed9c6b04473e369262cfa5165be4e61cf24e0e22fbc02c970466fed94ae72019a63c56b4b0d507f4aa3d98650b284db16406d4836b96b87aaa560c844c8ed18c281fa409871b3e274e9794d36564781df8e7aff2d2c714ab3d743f89944fc419b10d25dd6411b4d1de08194a8c8feb0af049a3b76418685d9efc1f117362c7a5611654a9c49646637330e9c1bb169933c20e81884c71cecea04b195357dd3bf019fa3fbd48dc23d3c7414f3bfad7c175af1b78a8a71d5b205bd6df1c1cb43dbae66b6a83fd3b743dab7a384e4a646455ca57bd19ad592619ec3727658d7ab94644e4d5db13f857a38e039bc1316654332e684d329c82921975cf9050d605a9ed4569e5ef9d2878f3a090533c1f610e29ab76461e409f9925f454608c25715d21612ca44ceb9cf8e6a73e0c68350bddefc66670bebcfca43b38e0ec58043377233d8275afc339ccc0c09e228a2522bb1bb98f603d7b04d3091f32ad844ad6fb3d109d8dcf4cbffadb6db91d8f0ebb33e237816f2c52f632c58edb405022fe9885d0c22bf792b76a62fc02f47400d29aed95576b25b35fc492e630c60ba5e9e3c0b21086243fc5a68ff6700450a0a1ab639ce63ac2b723cd9826b064208ba1843a5ded2e72bc6c6664a087dbd2c9e78986bc713983cc8d3e2f936f7eea983291e7e67ccfd8d1e498a123b68184d97645df5a5f7c043b31436671ac48e567ca6b7b85b47eb03d1bf6ff613ce2c078c9656cc99188be5d6ecf65746aa0144d7cdd4498ad74c5cbf18b33fdf6f02298969dac45871c751456e31a01fc833a34dc17496cef8ac3855009f54fb3fa56346c353fbf60d061f1898b850f2e28e428600f452ae4120a740a82c7f62e37a43db358353bb8a335c18bc06616502a7a227987f952581a16fbd7c344539e6779a60e95a246dc06cc70e48b4cf9c96732b59b4f45409c5377d910cc3e5e041b585c0e219a5cd1245d48755f5ada1c6ed86376ff3841e20cd0dd5f48a2106a68635bd0902e1691445afe3bb48e8bb3b317a26629ecfdf2a72918c523bf6c264cd17b1aebb96097dd65c3019faff02369b8c26fce7247b3cae52f48620b66e875a1eb49c1404b9bd30baecca8097218ede35f31fc17efaf8d9f02bd0fc8f6e96b1d52864e05d68a828df696ba5d2f0e1b68ac894eec0b260c1068ee3f5f439e76b931309fe1654c91d591e1fff460060731384986e294a91bd0691156f129cfd6f4b8365dc352419fb0239c7842d672f2239bae9d9ca9474b13667bbb1773c3d8fdb94c221e071ef266db99e3f271843bb8d7a4e65d8573c04590764153384a54c3fea6dfa0bc15e1082e32f57a64255c483c3d2e02dc5742205fe1074e79b32a83e9b231563ac9d2a0262359595803e675b8d62d5bda6a30318ae30c1bf39f4d23b41295cea367a5596df00edff320b4f8916b82b8175ffcb562b3898b0f7d43b4ffa1541ab1af030c54f57da38d6b65f3bd462daf3d45b2da8895529d59f3f6b7a27d4311d46caba67c44d17f0d0e84c7aab96ee406ba8c0296fec366b5af4a33fbf3e5fc9287e67216b460d7c65673d90120115a91eb5b4b319af77739df7d0b9b69228bd541ab3580f90f83317f27de8233a726f26102b09e1e19bb93b1d2ef1dc7d42f4d66bf7a8d1aad3b0dc65b0549934def9d1d08e794082ba52ccb35eb33cba2f30671c122facb2de67e2c35ff4f8386ed13a6006ad8398cd36d9c03ba3da206dd7e542c3c4f590425a2e11c83eaef54f1bd8aefd0516668403f9a697dcfd01491389954636d0251b86e498dbf588773dbddd173661d780714be1bcf5d649578cac901676dd7c8b15eeafef14934c850224ca0eaf50cfc6e55c9a3fc843e033ca41780bdc871c82086e446f9daefbacd46231a3d238f26295fa1592892f0a94e2cffbf662ea14d0420475247ce3d49ff9c7378abde9a400561b719cf548f5749fcf785bc2074d84070c9f783a2bb04bfb516cbcc75994d2f1f22670a3128c956913a448eeb00664d7850e2e7726c8c818023324a379cedb758e0ab3188b5652ef8c062e97f7345eea7f5d8495d5dfe620e50f5124cfdabf00dfb1f272faa8d9cbab43a74aa944ef50155bc868cce27a5a93e86bab7fac4faf5372c91f85a56a051831efac7dd6ee0e503ada843ffc923460cdf4d3922375d9074121a1d476dc6aabebdfb428228dafbe8097e56cbe8d208eea56c31f3636a58df2d04651f2f0dd77365467e30d59fee56212f54a58f2f8c211cb194a218b018e99d9adb51ade19843efaaf235b47d6bfe9907afd1b0f8e9ae8975d5c72854b442610d46a16c51e4030574744de684cc5bc44bed819d58ffd256d875456001b9d6246539e4eda080c2803875b04ed591de5bd6f37c0aa755e5679fdb964069a7708e39021a25d5112df6a0ce59ef30d480cbce5d3061cdf67a37540dc301871ad576013abba23e0a21ea514ad080152608efbd8807dab1bc3f5d7b318d85ed96d6fba1b16e0587d6d23e0be7387969d5152cee88be1574b301880acd9fe2ba174ffef076e46a14dc01bc6ce9b7f3b9594745253806887d9bfdc4e483fdd7defb9a80e9c43882300e0f64abd0fe9013fddb4dc392ac8deab63c13c0928264dd29567a364fb888c83c5a322af39a159fb7cae81a664548a7f17efbf75040481bcac514a450757be7f0a13a07912f90ef338ae516fa8f044b073198964f6309b13ea980018ce58711c7b05db641dc67ae1bc74b64a700c3a5d5cb6b57b243db050ecb8253a3672e1a341c5ae6ab8fc5603ade64b89bb17a2438370668f1e961e4869f3533ae783ccdfd45f5469e9b5e909a4d7d1bf2298daaa55c43a7ed7ea81cd2b69e74ccbcd5d8f1a611d86c02c3c8ae11746b13e8dce85ae2636affb1e305225dbcc77f9b230bc74c5520c9783453b5db54700c52a67982bad48c6a0421f8d78fa93e0edbb6011d14baad38004f09854b4ef9646262c722555e208429af67ffd4abc4cb6c8b65ddbd76ab4cc1f4e7a1eb5125214bb90c6fbaf5113193cc507972c45d29f3d5bff5813efffa3b0c3a985528389d93fc0405639a245a1404572a5a31df178b408a79eb2d8aa754878a14513b83645ce070468c9cc04c3920f7e125cfa9c6bf08b27aa261dab750bd41264dbfb907fffb5141158e9c3bec944d9fe1e83aebb6cebf2d1a4318f711b785c40368e1f54f984e2ea0c45ddd95dca39ac2b279516e750f0265fca511279f88b6efd388d56f2dc1afc6c605a8d38e7d09cd8131a46632e040c40a362382b74136f9c3749a4ad62b01a9d871c5ad4d11c449b181e02bb7aa7db4fd7df19ade2adaa1ec8057bb5fe55ddf64ac2b48faac2b51b88b05d8d9f689153afa94a3c0bedb0eb9ed14fda21245edc19fa1dec7fd8581fa2978fae2b76a33dc21bd4421b8bd8790eb075acdbfaf718124753fca5aac2259680ca4f2397cd634262584b2a76fc04e258a1ac9ca7c854903fecc68c904d084ae75161705a2ad78a47a561c447cffecb515f46111a9c20985cc5443683ee794f906d6b99e877e892d2e59c95305e8b1f7c7f73aed01e29cf7f2a54f18e645fbec20f51673c32a3ebebdf279c1c56c91711b2830105739644a1d702fb2f56d5f4991be622c26770ad0f40f9835f305af5026bf4383d210f2a779bd2857668a4c5e7073f1defa0ca8f742c51f87801cdf1d0674574ba8ccbd3a45662754861cea0b80e0ef9f3d8f52bd112f6214281da86a8a0c14c8eea7a17c06272d1927463361b780a99e89c2f91a614ca5c844be55f67d5227bd0f7fbda62fa6e3051ee885289b9e0649999ed4169d06bad6f2ae9685636bcd30b1b4e21d5a379ab2259552a677543a5a7ec3463266e3ea376833262eb17a65e3879b2fb275a7eadda4bf12271e71a3ad3e7e83a2672f8ae22e87100d76702f9e42e8310fe695ba3ef0fcf9b14e3062af186cfcd472964ff7f40409622b06eed46720ebd4a2884b06541a6ef4bf46b40a7acc4c3c8220e90391e81c81f3b9d70e79f2c8917fc2c2894803dbc71e04b73b9fb8a2986423a613d10851f4bb1b0a8606d0a44282737dd40f34cfa48502f95a4f56defbe48b97ddc78ac6aad13ae7feb9465439cdc499754173e7572eb73a8501fb306cf263c761bca01f155b8e202df8b1283b8fb115f0a28d2824874fcc076958e4cbac96093088a0241f50783af9f2a716487841c4632a9504e99fbffcc16a827b72f6c5e950b614577e0c5318c521e261923121b3e52d49ffb3b344cc164c73b7445345bb943601f405fd927601790244be67ddccaf0e4cfe7f34f834c217e214593de49bce4c850311f4e4836f32fd7d34d6993af7226f47e2a429324650a14cb52d334024723a2fbe90e778c2a8254e732bb04085c476a015705820c83ed0ddce59f24fc017b6123a448d0474503e62f63c61ce7f661290ea6c21008354aa36df10d6f8512906d1d9338c9df50d7c0f2ddb107cacb3794bfeee6c00a64c78454aaa54786b4bd8f647ec60acecedcd98152df36c9f77693935227aabf1d3ac5c51a00d1d0942814a9c50cac59afeb21c4752ac01342b87745c7a8c9d382157dd5045925828bf68a08913220999fc14809813331558043e3489e8611a57e54271b8304d4a5b586c7d0123068136f0ffb46e90503272bc2f49c188f903f9d940b96dc98ee9c83a9928f8d63b28bbf34d141715f8a4f0850b43fa90823d81aaa7c52629aae82f247da23686ab08783674c704791b58ca082b0f95cae0f55486cbe0eba9a834623338581b401819e667741e2cc1e698c137589af11aa38a85970ce0cdf9086e5a9b707e0c46b0470eb52703757dd6fa475404e139bec078e9cb0472e3edc90c80ba9414f8a861ca9b8328dde399abe5ae2972576106ce4ac6c6847abe9919a458477a798b8da73277d840f24690a4627ee7f904c3a775c06a48b8363520865ad98e29b54a4aec3b050fa958e7072de85a4b0b59fbbcb6de1c546bbec28b3333f7a8a335933f5f2e6f3c52e6ee4bc49072a9e2a022e6a11dad9c7c56d63d72a90c09621a93befbea11ef2ae46c8f482c0d1767030270b49ded2814daf86a9e0a319f513636ffcd0d9af8481956b9f1368ac747f6d81096f793e9305d880a2a669c78e51c33d6b6855078e1c5ab6d42f782e5996093309c201934971c274b9bd378e64e5e744a8a898049a052dff90f9254f54c095d10d0243d5d5631b37f15918e388f8cb970830e0eba0501c18ccb5b47fcfa89b8985186a93d5ddc2e04bb03b602f7d81f95967543e4683f36f18dd8dd998fabf2bb1a7197a45a3302ae896420f7b7db6fd3d03f574dbaa4a35fc7739f210956b4635d3b7d4f341ae11e1408f93f623296775ad70bdd176dae4d3444463d6e7e26df255f98f90f3dc7b4d87fd5cd271e7897795653f8039ac337947382c4e8ee21dd801958adcc63c15bf2feded37cccd91df3e599197c87cecfc06e9db1c5652449daab900abeb3b1aa16dfb445869b261d9edf59743502bb694a2bce54f0d9b91118b2bb272fd07513973ba8d5653dec657ac6640bdacef048525d04f99df0f3687622b31b06bbc7b16a93ece0831a7e20e356b3f28104c7a1ca0eaa09330344066b60f35e7865994e237ddd5224ec038df9cc110824fb9aacf73b2b5c38a219aae972de7897d98cafb31f9e681346594ea8ad5a92687408a2898b644a4f2cf20610499bed5426b9f4e82fb827d03684a55d76ef1fe9da896419be9341ba80ee5a5f5ca07401e00e50dd3402e7dd31645ce1c07769b4609f1656112031bea3cfc2e7d422b1e59228726affb182d7828ec2f9b68d7d3681d9a6957beb5528d0d97459ab75a7c14644dd696e3e06b3981d84491c12b3a98441c01bbbc821e4755e102c0694ebc5ee4c41212ee2bdaefc87153ff5674ac996a39c024aeb017ded903617da67386a5485354e76e0091328b51aad3c682232ae1da6237a46af8217f5a3de40839e96278346eebb4686519c9a47575d8be171d7d1faf6584f794f2b509353e0222634a004a45bfc62f0fc71732ae6a6747b40cf452e81e22ab6f08eca9408c8f6c3eef82b35b451bec72528b915e0434737959b38a738080197a3ae31f844e89f4de231653539ebec528669c8cc5a66ad4ff71c28b2ce2afb1fdcc6e5b91018a5446b33933a1cad71a426fef52714c76fe341a5e4f7497ec137cb16f49af159b8f520d4c20162e382b93fc5e1ef0d9f17dc8dffa134057bf21407728a6e80c09e709091a9cbb70049f665aa1f372bd5fadd498afa025b410fa02dea9d0591e275376444327e19ef9de540956c133d1d88b581330d350abddfad129668b487c4367b1087a73d90899339b86e6c60e63aba1980046d8c3f3d7d516e504eb31ebc59e2a5491243abc35261b9e4f51cb0e08869dbb97e998f2e6869a346b891b7fdfb833a915a42f828e37b88270e68025ef618d1b691f4027286f360a81201a7e52899d007538b2963787d772df1846d3813fd18de11573f45208719b6431b6b5a8fed31609f4cae3a7b65adbaa2c2e2f768c9d4c4aeb8cb775bf2c2b8d9f71d98e9d11f517d33a42ccc9dffba17dd98530d601a3de2ce56d4bb86df5fc8a5a3b7269a2d52b133592f3f7740084648cdb761f4b35b0ba5e8d94db894ac94155ea0e2cccf32c08487d78d67b9f89ae97385dd5f435a1a1d3d059983f0801fa0578e511390d90b81e2a6f84a844d95a9229830399f68180d194ac711439f67dc37300f684d728f7dcea61b09337345bc18a9c61c667208cb4ff6bef3c0399e66083ffef64b27db7f0a7dc6f2914696f446de11a3c5001f990497e5e946dbe36c7ea9688c3ab2efed6cdc85f94b482f4c9603dc0130bb0ef57ee20310505a0b60411b8ff5347f611b78ea0899254a8fe8bf58f3d42840318a1ada183134e0fb1f9941c67705924464342eea9bc5833e64b3994e3b76ad743d1e2e13b748ba326b138821b1b53c56b0e554118ba732a0effa654a21b8765770723f6138a6eba66c8ad59605505ba94cc993fb40614760d31dfc8a110e8c2bdc57679f79819c4235cb1b89311fa99de56b57e6ba242f24b81b02289a2c801972f6733a21e2faa0cff27dea99729be760d427ed81e4da3696a76ed687e56e9a8ba6fc39ee257710cf6fec78d9be8fb3bd4660574a7561aa701a1772532ea59235be47425214867e7739e15128434fef1e41a1280d6d0af97c1b18e3daf7461993c07ad9d52970ba397b89adad55a6bd194d99a11d29c11051e07be6500fed59de0c9de7c8ddfa187cd84b3969c56b03bd826f42805aab231dbb26a8d92bb7e705c454d3c8738c449a2c9e3447fa73f26a55ec850606f82a129c27b50f607082a45160f69b075b7b4d167c5bb1b690c2df226698dee76c9472dd9b1f0a6ee979d4c09dfd05a848984d976ce3186b736dccad704b93b0dcd2ce94449c36698cebb12494a432dfab7fea1ce3dc1d7f7d3014903decff347f590060c661585e049622d470c4168f80e58d89bb52a72cb2c73d49b41cf9397dabe6506f6984e19a0cb22e989bc7036017f1dfac1367549bcaabb974e9c2d6c15990a0ad0ad388e08cbad970d293d980665cf24003c44ee6e2d5b61c2600d797e9e47ecbde178a0deae46c703c3952b4dfb6818429c447c9d4528d819485bc11402e76c3f96e2ee72b2f5ac34e860bb692423357e065414eac9b0177165d092d8b1d509a45140e59d6eb9df20bb84fe823f7d72514106a79ce06657b1240e1440656a3049bedd03dcc5b2b939213983a303829aa9a8bf43f30a037b25746ec4e3ee11454e0060a5cb03cfa8c4b4fde040d4fc00024323fa17ee05a9de8aaf2afc96800fc0924f91978b2f3e2396dc1252db67053ad7cb5f37838da6b45c1de0c468fb8c9e46102e741086714cea5c1889482a929652b6ffa81296cc0c7bf37dc27cffe22701f7b14b8df0538ef13f6bc4e9a76c657f983b15e1ffe979aa8a0e12e6c3a628fdca255d4733b985dd72eb66505a8ec19810bcc82011caba318805d02499c22267ea61ac0e8dd7866828c80f958e1873c81fb1f7e203edc5aa033398ca019be96b37c735ec186867722719c5458e11c0fe37c18974d8d7738e13c0670b852b0708a426b25dd0a6bc25b0dafb7da4adc9bfca644f65a61b032d4a44ed82c70ffe6e3dc246c4eb4c2e1cc21b23fde9266a6083be6e93332e5ae98dc9a9a895b89bce1045865ae68497ca33738a0a13ea80bb6a555e050ef16333cc2db560f20a743af95803216b8ae8cafdc397d7dcaed749057e1c01216b7adba7150a56c4bbfc02ae04de645744726232b3c5a69bde0574f07a1750915414519d097a0aa8884ed174cce8641c05acd9a53cc4eb25aec1e97a33f95bcc7ecf7feef3a20fb764ebfec4d380d06e9b1d1fd3610e30227d7071b4c2afd09627454adfefe0b44c48cc3148022b5437cdb72019e924e6a4aa523c4d269b673b19bd5c68344dab64b3aa43c3b8824be0277ac6149d4b8bab933446b699b4965582fa5a9afffe5a7933c2907715963bc9ac4a40d47bebd7670b5039e8c2c29d775ee2d4a1e565a26d6f5076ac174147cd3fe3d09525314a4340f905869ab9bd7a8d83e0ab62d248b90a6f39253d0e07ae909761252458f29fdb24d7689ec9d34a10c0c3c00191e13b5ca820fdc6c1b46a92034adedfa3b40e830c869d83c13ecf295dc26efa9f259f3633fbeee9c7a5f2eeb64646aa2f3841508a987bda30f04daf849b9a34c21feade7180075a9174c9509dd656dea482690c098d74422254d6cefcb2506229150529a2461114a9936715748cf62989971a4faec8a4c19a4a76b90d1bf66f1855ed4dba09c0099042a06a54f3abbf7031045d2be89b8c1e7d9e5971b7ef22967cbc9c5c03e09d079b62e1dafb1ac83837298bd13a207df1b22220a2a15d3bb0e964e2c0a24cf8c4bb2b26bf5572a73456f299cdcf7b5f5b419f9c7591f8e69192b8dd234cc0cbde3272f73262281b95377f66d146bdbd6f58c1e928f53d79579bb4083218e860619dbc45ad87520e5afbf2d753764097fc8334582143e99c26939b0dfe7cc0c9735fa330b539ecc64e4f836f2989772174ac4cda789b4b679bf43a50f39a0e94c7e4f8572b5ea9280ca018373b0c95de6f125aedeab2fd810fea54d74aa27253b2fd5bfe6b777909120c63cbcd56e836ee03bc33304ee9fc2ccd90b3c1522cb7798f71bc5c1266ca503003cc536b8d4cbbd1807f1a41a254fc130afb66bdc8de3ccc274a05966ef7aa0b6d284c2f83431a08e39255bf2ceaf15707d39c2183817d85a0bd49ea8443d448b2318371b6ce7ad1ecb044da4be51c93022de3a2286ea84497ed1d9891f79d6e3ef43c28a605fdd3a7d912961514cf1298b5d7c7ebe6ed8c4163e1d5491aca429b4f762b16015d7e837522d333c2e46da4840da1c575fc03e4a156478da1d98b8abbb67b8213d46eb33ecbbd2ed1f8c0ac4e1fca335fd766e24f7de7521fd1b8c09c51d574780f227c2b797ceaf40d02df31b205c1d656eaef0f22dbb19fe2cb4a1f4691350ba71af2711d4dd553d1a834f6f4ffa09459e38bb684ff570ae640b33a999c7a26acc1083c6792caa33bb043724ce14114be8613f78bb6a54cb9fcc63d1858658c91fd493a9318f45034611cb699dc722f2308f0567deb29286aeaa1917220fa36d08ca02813d3f03cdf9633001b71af84deb8796b629d7a05eea8e244b2a88defc6db3dc4dfd94b7192cb7a01f7907e738cf5b08351d209900aa66e95b153b74c9902e93bcf5b2c98d53bb64a25d0a70c61ef191b2b4508eac0aec981045923551c7135a4c0eff858d4daad350c75e42eb0b2205c5cfd3f75341e628db3617bbf2de68e8c4881ef526991f2f481957822a60e465502cbbd82eb1266e88de0c169de21de1167a07909794883f4fff3afd0cd273747ace057e5d92e84dde23c4026698bf5d3c7563feb64d1de2cd34fded4c569e0778c9967ac4f659967d14bfbcec31d0c4d303e4e36b7d2c6a399bd07b09168dba364ba14d10d6db7383b4e36c3475e2f0d397f66d24ae34566b3a33ac54fb55b68750e79416af36977d677481c903ec587cf5a8bb32825e2106fe97a4f22a9a74eb5b4a871483770df4b8a26b9084c631ba337eee8370b9f7a23d5423161435b7da37977c5bcad079b940b498ae0628253deb10083eabd554d5bd544f536fe8a83d61879c02d92419c3adafb8931c238d84b762ba86936272524cdeb3d249f33652e12f7818604e9c4dd3eade0718b8b1e8f43d718c149df8d8ab924c387b8055db0e4f9fcc1db95d9a974c9a3ac93f83cedce9481acff00231c8784e54c9855d5a56a5454b0758203ba4d5653207a9ddc4d939614eb3259297a85628781b6a1d1d43c6ca06ac1c82da69e017f0fa121f9bce96bf8595711118e8ef360aea00c3a7145aff944297c1ebef57b6167674614c05e4d5f1e31874fb05c94e34a57cdb0460e49edf75cac20ca4a0161964e61e78858a0e635cb0e3e58c290aa280dd0d084246986950a151ca1907d884c14cf15d6776fdc32b4a77ab16616321245b62f04e3251c17a1f1fd871f33024d0fdd87fe8a10d924113eb790a3eb65850e985f89c0419c6d1ec9a70b9822298f42a5f4273398c3ba6629a44cb06f4850da1856de09cdc5f7e3815240c17eb6bf99ae6ae28c4b4051f139ac8124e8797766856e2a3eb38a25a46e10d1c3617d4dbfa39fc44a7f90fa32d3335aaf2b2222033ff8027ef56bd2d711ba1f2b22a2033ff8021af56b7ad41fd914af858763a61dc9e1ddc18cb352c793bca94b3a73864eaed9bc0318a4c494c2774a04f825391ec0613674177c84cee3576bc7bda54930fb2a32c42e91b780025a4f2c3acf3475a3c20d2dfdab75701cf0b86332c107ab04649aca269e7a6193c763edbc69bbc96ceec168ae9733ee1055b0389fc16f662965015a4bdafc6e86e58980209c6c0dc8728bc6555a3e84424fc866f3bbd7d84282af66396b7e293fcb7a37780b78a02bdacbd4143c788b1d51fc165d0a16b65d32577af25be54032f2ba588b1b537325778effab174ee2d409fbdfb334e8df94d36eca3009c979d0f3cb413251ff1ed4cf0fed1a8ad34271007ef8da1476928776e799af05591005cdbb57cc32a27e54f6896a53b4230e70e949e19e589603eb24daad994f9756a299f78e49354471ae353558015d2b0ee74ef86f305a46ebe9331dccc8d686938b798597783392d9e2712334b1c625e598c4535e2a251809f8a3e1626c88de4cde5869d51b6c3b57072f8ca8f5d86e1ff62313dbcc4193b1fb612ad61f0ed34f4de4c4ecd438225210ce04397da167a921a8489c5d3b06ff19459ce811fe4cf31883d752985bd3ec73f62a0e53699adbc1bde38bdb2cc92b4a1e55835e903e288451cbe4ee0065b60723a30a199c8ca8d3d1d6e7cdb0d95f58dc9e24ba482a375e815d96f3b1a9b9dec2c6aa45dbf1ae878fe0d1818b0c731bb455ed48f984e5475cc0d268019b8b1406d3c906c73e8564a30af0fa9be9c3842b2036c1e318f91cd925ea04d05c855f6fad0a78f969b8b3b9d644a44764896011b2fd8bd1c3fd3820d4abd2f08b62fc8d3b83f5c875639e547ecc0a6070b2a2e0a8e1625dd7b1f4a42dabf3a32a3c0ac08a1f0db397d444d0ad5eece076a150f220f5446328aa6709e707aa9776beb5039c23f58e1ad37a78561a2cd0176213ceaec8c09063cc34b571fbccf3a47a0fe1f1146c7648602bd70a86fa0597d7e799fb12dfb40576e8663e51c2f2cdd9321709e327b0c91c59669c4afad094af1c51afe326336a8d8323b0814819228ee7ec1938243d592f333f0ccb9668da7784f4a6a7b1861f146f4981a4ea2153cc8acad01f4c273f80874108f10c011c8b49fc2bc2114d8cf39227722d183e9e27915adeecc7cf223d47c89e962f44e512028339e8208bd57e81454be9559d53826098b4407f2a30084b13cad45af967e1f65a450355d193e2667605c41631f17ac71633c88fa4cf299d2fc8f630ffa94e18f864aab980c2907b1281229485490ded60de8954d4d1da578765736a94cbff87bfb24e2d5da3b14eb5b6e338629f9dc3a59a3d17b9a3d6b25a1afebb5504ed0750f744d9a6fe58fe331f72a2428ae0a3e9ac2e99d0452ed215c37afded997bad2cc35cc327120807992535bd0d01145dbdde02621870530e94fe7308bfe88982268a4659c08c1f1c63acaad5e3643b49aac1cc5bc1b2c787587ab0f88e61962049ce5152c0467eb26223a4bc2cab6e1607b3783f97ea3fe7d10f0662a6b5d38a68d79e18d4bdf9cf63ccc90c2cafde4b284a56890504fb27270933640efe54ee7a88d039b3b829296352d6925c8aaec6195885c1a31c9700477df56351bda2b62341ff24ed71cbe18f5b1b78b1516dcb349f6934732652f5a3e2eae76c4160c31c7f664382c3d073896538d5b8d8d906f3a02087da5b2afd52fcffeef5ba694676b4e294294e1416f883e1415817251c44046871b4b25a2d2f5fe9aa28536fe2c570ad1e10dffc267f3735036372c4d0277a86c747f2265cb2e59749724e07d768ab363a3dc5e276bf3289f76dde687fdc6ab54d0619fb77d884d41d161b197e9640bf3e868df940e042dddc5b863c56e4db137f2693c859fb32309344f02538c7ed357bbe58a90b9272f749f74e7c14bd6d2e7209e836c8fb247faec6ef090b7c295240b2cbc8835249473088b3a856c44ac071598a310c2f95fa6acbbca6eacc6bdb2494b9a5fb3ffde266c93324af91e4adad357c3fd4d118b27ad03129a3f4a4b29fa4988a337c293439e6e99917f54c40c5130b2ab58298d55922552f6a1b4afa0cc5c243a736261afd9bb293d94b746389ebe528137d575a58337450ac40ddb412ecc5f189be9b8ed2c628df22ed70cbca976fd31f562d52775babea40924717d81aefa447d593fe0c530632db2ad0428260bab8c6c0db4fa14f4aff4344308d94f5bf2c278998f69b86c7b54ee0e69ef05a59a3f4d2666c05f4fcb26e7dd442dc01338f731bca82454288d718084af5938a302c5468165811dd5827be450c9eb7a0bcade0c4ab6d1614a23cfe2f1f910840d533d2fc0d90d69e8437ee9e095c8b4a87ff7aedc7e609f10bb2e42996ed5bcd84548f8b77aed0389571b061156e61a381cb331ba53bfeeb6b360ea5b136f3b0f909f803ba5c384bf55b93f05387439db9254a00908c5aed1244c2b84e3822dd1d78c46cfb16e2dd6f47d2caa6a487169a2f1cc42014211e7d64d6a702230a27e9b220db72adb23aef4c2f0c172cc9708992c132eed59f9f47e75bc65d5e76b90a76b012ab6924b518abb98d0e72bd7325d9991f1046f595343380d20d9fdb49ccb34465a19ed1e0c5a56fa2e3d2d8ded1b41d8261b26b7a7c7660b38384c5d6ecd78ced1bcdee2d3e94935a1a6ebd5ba94168eca19118e8d7282ebc061ea3954217e3648a02e14191b7b3317384c512c25abbd35656977a80d1729843124d7fe1e424d8cbe1599d2ab35b576a478b6c4d09589ab96a459402175b8277294d50dabfaee012d6351ced0066f44f44768051b07d241cb102fabb5cdf46fe01ccdc94ad08afd6ef62ca8cad4186b53c7703d2febda3e69de17aa43a3711a61c0bbc588520ebe2ac254bed7eba8d2bca074278d675e41893d415f5b5dcd613bec636707e91beb66b337ab96e67e02793b63fac9a6e8ba80f1ac69662286dee88795e585088f18e069487bf887faba1ce8f343bad4e4d44201ebdec6e0c1a632a132274acb1a6bb3fcdb002b6956115f8aba52b1f608e2c7b514633638de443bb93d6b4bcc5e1f7557bcd0837f7094546f154c796b6d7751ee879dcd43ed8e2f072f15f58265de3c45c8b6997813df9524f21ffdb17cb0207fef408f54d44518283c74ef36ac0bc6d8ddf739ef1b5d8b57b0a186719631b08805dead6ed19e19daf7cd2fa5a252374cc4d2e1322e78f0a5e06e438ac1131da6c8dcb67650258a1200204bff38fcfad56b41003e58bb612a0763a383268f62c80b2c312690bbad3c4f0e64755fcdd95be983fcfeebd607132dce4f279a8bc99129f3da8ce0f004944acf0ce77066667cfd7493764bbf5d05e11ccc5c97a3c3b0986b0d34025cec44ed4ec43305689a0da50f10b8a17d400845d21554f426b70f208cd00ed7bfea0b86d037c55e24d25672d5963e4a0489203586d741309b5d8da5600998bfef530c0ffc4c94bc282a8c1ebd05cc07ce55978862eaaf4ee805de584febc4bf2c71ace1b6a0e605201e25c4bb9d3e35017d8b510f47c224bacbaef66c0a1f16d843aab228ede3777dd89411c382f76f945026f969806dd3f9ce363fab9071ebc922d55f37b0b8cc3e8fc68a8b9f0265bf6a71fa4d809ea00f7f3c520cfb870c8be211d89ea8b321d1279426e6cacc699dd2cc312fd2634999223c1ae05970e553b5011f18bc8e1acba3fe3b8763df95905565dffb8d07a72a6c117a89001ef9dbb33516c5fa31c55d7902c585589091c323d4ef82379ff3680620458458f855038233bbfcc61f580b2d0f233d43efc7fb3b9b17a6135c9f2678cf79a1670b15c2f627c20abfc8365260f0ee9b6c762e4fb7075f188bca5d9b7ad549d73c4d72a5c85cb587f6e975540ae715018742c12e8689ddef40e8b2c12d6966a7234172ada9f0b41c3f0edce9b21e281bbe0c7510dac3be8cb5cd377ca6cb8141896c508ece5a753faa59bb2d854caab4a9257e11480756db197da8946e6495eed5672a4f6e0d1c9452366fcda2eff0d8603e61779509deb306ede9f0b3545105e6836a00836a35085c07b23fac186789778e5095385bd92bf36f0ebd11a98bc20dabc30d9b5ff4819c5beed8e1d6cc896c3ce7f631eae6b3cb8aa5eed250728ef9e1985cd95e3039ae82e4864a7192b774f590a7cc7bc3de95d290428d82103611041725119883109dcadfbba2a90525c5ab0da0da53867fdfea838cfb333d2efaee5bddee2ddfabaf1cd70f08180db66fbb58b799edd9d93a63b48f564096db3ef4661b6bb6403d9df7cafc11c7fb987dcec23e6b7889f60644ee351f51ea8cd284b4de9c8e872e868fa31c33409b25fc1c40114968b87873bdea9a8124ba618c8f32ae7d476f856531930cf99545dfbac1eb2bac53fded6e4949a3493895da0aeb7acc0ff7c148953c55810624af1db96484cffecc6004092a5a268f7ba2a46f166b1a6388a950a3b4b9e01a9f3d9b07332a690648b47810ab42e0a9e5a1bab1ab996cb4f29258c7fed9eabc5b5c1f119ce7d12ec5ce73d0f82dcbfce30e498670102aa27e304647b88983f3b3881c7fe1bf6ab4e3cccf9972a33c8c8153313d17fb11ec10115644596653870db866069b8414988bab9d2f7ea001128bedad9d0902a56f3eff82e4c474f5593765ad5739fce4ee7fd3380d80e35468e722033a9b10ce15000da63b065e81d305c9beb772e79e0042e152d83ee73c0c064b9e3f96e0339051d0bb3421defc96f305d35df8ace805591d50660b3ad8868a9a71382c1b90d1cc6f9fb0e6fc2a2463eaf41d450d8ddade69b23c0599f4eeb5c914a14ac559381a3b48343f687b1774d2ce943b5d00b91a2c495f6240a6ecfff3d051f45123d909aac6b7689b3cec09228e7c19b536e7152590820fc36129167422a017b52177971325c0f561118285c685514fdb0dc4685269964c815310969f0b27b9e98d609595342f73a86f07a276888b0b80b6941fa95f01e7ad27afed2650c204cb6ccf696c375759b000e885474626ea9f598b3dfb4538159415ec2a47578624b15f04c5aa96a7527ca1fcadacfcbbd50d64f18f9eabe293aed2970167f5a0710540209e10685ed51e86472f58a181d11de112f6183bd1f779db127d6f3e0556a18ad56c3093aa8ed0b5ff1f00c039409885a4735cc1bea6ffd6dd5305e40957f3ddf480b7a4ce10fa6203d657ed79ffd7786d21dc1d01cac6442b5690aad274cb72d03208f27b0945d62d870a89a1e3181da779843d65479971004300b130c7ac01e07d6366bf193352242092050090008004408204c9a27a2dc4d64906ec86f5ed5560daca953555a81aed9dd2de7bef1da6029902980227412648d337b85d825e23380d09054d92405ca6bc0ca2698f7006e1d4dddd4bc0ca61fc26ff0b14119745472dd331ad37428c23222a2cc80ed946670951a85b5be36d6b611b36800f62ce8ee99f1194deacab625388e9ffe8edb54cc7b47e730efb91d2fac2e4f296f6e648c55195077c35d4eecd9bdbda2ba65b5be3a7dab43ddbb08f88f53581873575fb1147aa71133ff6e3ffbf5705f7a23a263accdcb43ddbfb1d49526221610396f50093f3c58aa32690e437436fd6a51aa048a3432cba606ea588e16b4a3f834b8896e998d63ebd5b57caf1c2e7a5ab464f34f822468ba7dbbb525689366dcff67ef866c57035e422ce61570d5c884c550c9717bd8a4aa18c802b492a0d55b801b8dc9968c1b14162c12b2ad5d4321dd35a6f176a57f041ddda1a6b1519ca159109bdd997b45090506cbc6aa836e094885062e68501f8b2d9b43ddb3bc946e1e8d6d6585682e4bca8f87060efbfb173dcf1d919826540063ca0ac08d1935145e59220abffffff39e8b6c133b0f4454908785203c4d188734706663de48ea32192fd35585aa6635a7f5896f8107fc0605626ea7ca4eca9219d7175cd63098b9b60706ba8058d11448e64a6536efbff7f0d43b7b6c6b00b8e073798535231e1eeee0e7b93ffb73902fdffffb7fec4a218ba3bcb5bb98c4c3860d82ad58c0ebf1a1f644853c9dd4b7c6547d6e7baa144c1a3653aa657ed535993279a7cc505b9f9334804e66f9ee7913799d5bcb9335f11d7c20d672070e280082a0e51c52889156eae89e4ffffbfd74156f183d1d70e0ed4fd707777e7d1c48478e83493905c8f777777771f06282d781d9eb0ac4cb838208f0ea8ce97f531b3410126c3df2aa36d6ded8a95559d93eddada12d8d6d6b76d599665597e7d29ac4e70a9b0fff8ff9bb7982bee8ac0a2b038d376857011e960aa7a4e23775e3a2db93b2d21ba65c82e276742153bec2faf5539c32fa73d8ab7a6289201c08eba9e78470cffff398c366dcff6d647be6d2c8cdb8f34c7b496e998d61beb0c13121a92dddd3d6bcdc0c374dd64686b3d8870ecf01ba57ab1254195b54cc7b46e6518f6ff0f53c64c6fffffffff5aa6635acb9ff2efd2d88cd89c98b41d25a8249be6edcdfbffffd49cdbebc038286e8aa37acc1e3a1996376dcff6feffff6fe30fafeec3c9e9286b8411f99c813af408c3300cc353e174667a33e59986982adfa677fb3651197d5e5924473658ae8c6b8f51c02ffc6cce545b5ba1d31caa4c67de3a3a9acecfa6b33281052d8c234896655996e3658f7075369fcd9706a22e7acfafa7e0530c0d99d8617777ef1841965b0c549def5e94b84a04d60b230710c90bbfe1f6cc8f0a1f3b1b241d8810e2a2a670268cdce14b919d633759d535f56eda9eedfdae10504828342374b3751b5cb908aae25487452e8c96e998d66ecdb0865873acf1a919d2eb5321d002c207103c1f539506c4cecbd2894d41a77acc1d7747200c935f834b8bdeedeba26341049148cea928c691702af8ff6fc4746b6bccf1ffefe1f69bb6677bbb4f4394931792072b1ddc850f7e21c938cc0026f3ff8bbbbbfbeeb78d7dc6b06f460c4f8a83372386928607cbf273775644459841e8878b18b5c2a7a665a964e20e9dbebaaeaea30a9994260c2016185e1bbf9f5b5be3073101a3d8b43ddbdbb961876118de716cc3300c2391c86432e9dadbd769f3d5dddd9dfdd865a063b5a575434208e2ae4c5de95a7d2a91985730882eaecad372fdf57e4e784f522a88804a2eb886ddca72176393618f7f94fe33c27f9afc07ca7faadc3d60d2fd5029436ea46e0a932ccbb22cbbbbbbffffff235f0f29182cfc07bea480d003a2a262c7a3f109b928447b4582ca29c29cd1125695d356c4dd0be5eadcdddd25d8e005feffff77513658475673b661feffc94685cac3240b964a082c3e3920ae4f7565c3caa18bb71eb781e7596c96b8da0221e303a0c4a6edd9deeeeeeec0a8966d83251d5084f644688e5a5f5e1a7a966e64e44ddbb3bddddddd5d368ade9eed517d73aba313141dea01a23921e37e504256d8312166161813121a551e17ffffaf653aa635c8bf852212fb8d6929d7e5f766484ec1ee455937770b107961eeee40373fee8d988e1d76777716d4b6b6ceba1f06ab1507b9f98a0df6ff9f33d4d6566613c690e3dcffefe12e01d2f9ffff3b6e53b5adadb98e133b9957cb33caad1e39f8c9a3ebf65aa6635abf22bfe3577a7811f021c3aec0f56b5a2a31aedab43ddbdbddddbdfdbd2888377f7270fcff536fbf6def08eeee2b6e6d8d5d37acbab9cb225dba71e1c0dbe1c0b8f0eeceed9172eeffffff326a57bbdd17158d275010cec31410a64521276a854d125390e87658a6e8f9ff8b6c1b8b82a5c087942443ed25618e25d01cd5430b954234e395c4138125aaa384c33e478f030d2e23ac92543cdd9ca3e9a6edd9de1f9bb667fb2541be506121d948b1fcb8382ec8945b5be3920fa2be6670b8497240726f703c4c50698998886c4e8287448859002115f00457846cbd6c49b946a559e9c45bb0fbffff310cffffe337de18798c218c4ae3085f972450ee8897402d4ba4d8248add6fb34943b82389a8635acb744c6bbddbb705f63bca2b2f0910e52ea20d3914275c8f8d091318cb1b6fff4cc4dbbbbbbbbb02ffeeeeeeffffffeefeecf35c1d0929cc94660b4f49d87d2de9529a7a6a8c4414995c27a08aa021402b4fa54a7204713955633a35cf73af9dde56e5b06965c6056605f5593405ba35c568f1c58ad3bd5177aa90324bd14bda0c9560625c0e4b2a194266ffffafb97df0ff03b4776fb8bbfbffff7fd0bd87d42ef12c8558522e8d806a83cef71580a3040225f0830be18dd5855f22092974110d90cebc3254116019461e913ec8212413d974daffffc321b202efeeeefeffffffffffff825d120748212a727a853eb0d3ddddfda85facc0881a78a07011ca005e352f3c170dab29009b0308084826b190fce9fdf2622e643c729ec01644bca2f2098d1d767777792982e7e69e8265729cc11d25c948de7c29a21ac510c32bc7a62b458916e4f2048b2b04acba7248469c8e9444542c5edfafbd79d7f6b33d5c9a60b2ea7ccb31ad653aa6755ce2c7c6c0d5d985d5b5f5c2564330af86b143cf87ada7201f7748eb444b855512ab502dd331bdea088a57d4e93ccf3e977a5b95535054e7719ee712e76d4d3ee99c41ef1f6eac32468d5dc66aecb0bbbbcbc914cc9bbbebee2ec24b99d2a6d4299d9242a5d3b705b54cc7f4aaf57e9d582ca676c792de9c5d698ff33ca3acabf2c5875d69a34ef863e6e639e8a6edd9de153c8245b91e105fca131f21133fb67777779fd10136747dc709d6e93ccf222f57082e25d708ae262e28ae2aaee84f70b3a085c9b22ccbeeeeee1276212bd3545b5ba1f154773051651b569e008e2c0d777eac902f3ad5925c108bec31ec3cd5eabc434bf7c2ff19217ccb74eee4761cd372f1f607482f2031847b6e35a54845a8f8b1c551a22c61b781b2e524085d0bc37d1cd0ab62b331fd9361592899b600661b67af495331cda1b4d2c2b23009e69464d5e009d1248c6131700dfdffff4fe03dd756d7ec5261038ca2ae46f8fb0a418b6605d17d58806512d07262b1c5e2248418c61080a46a2640d9fcddddffffff45feffff452cc0686113eabb1d58f3ff67f56effffee9175f70d1b6699637ac3a8653aa6f50a65babc71643e8d97a7b0c3507588b96304d2f2c3b4a44d9c292070f78d8fa8040dde9a8610d400431a08040d048128cdf4dc4a011480071944404c56480c102232240a04860221100c0600006000200002090a89016150a035e0f2b201508281236149d078c280db762b5d981678478ad3738e033cbbcf37838b5326958d628de3dcc71a45408e0ceb7be32b5eb2ef6c6b7f698a018b521b91e89c33f05f52e46876415411923bf10d135f788a8da6428901c372e5f000d668644a60a308a13f8f62d0021f35745466c9073940a1ae88f2a607ad241dade8698af6f3448e934858257b8ddc1c2733fc61b80cfe3065ea9561094b1b9909167e255493fae85bc7748734f40556b9315412f378cd07ce7575cf363231230a5a7c808aefbb9747c53cb042a76b2a6f10f3ba350ce09dcdd96fdfa816b10748fbc51ed328bc8eadd8baf52ecb35a7b86cb2b52a35408980695d917a584aae92e13f6ee58e4d91f0b18acd1e1fa71952a47d82b02cb865eda15674644a8d8af8cddc75c81b2c26a4ed470839f49fd769b11fb07004b063a5825d31c65f10e85b4db3e7d111a6bd616302539acbd8af0c9517e916500d670de0561777026a02c18c62f6b5891de2cd38c8f0d7ffa3ccb253e6b2cb4d54a58a3eeee4ecd60942ba970e685e3a513e3e4de761f6d24bffce437db92806d5594b915c3ace025aab675a39b85f80826ab1fe39b652685ab6f750596d0a46ff2778e50519e80947521cec67336ef641ceea76ad6f21bc59aa11e145b781eaf9ea12e98a27a20115da48630338139bc0cc1a0e5a0775e547adf4095ad314d3e1320cc5220e5f5b3e48d6674b3e25a605f68e518ea48ec54d9cba35371cae0f43e13d9c7538b66624f41552c71a471724b39c867fc18b134a898a42202a960487f487a2f956aa20cc413b8112333c31708235738080f5b733b0133d01a73a51eeba7602ba0c84d4ed203f81a5590493bedd48c16ac3ac110e9c75ff6133179eab7815f5d497a30246fd963ffd742ad5d913a3782d2d799a49115ae69d19f9f8c7730f6aaa1bb1aabeb90058a0b8fe7d001a4644e43e6250eeb0868250c1e266d0325bc631711232b1b39682519a4a0b9d403404cca0e2412ccaed6c09c9274b88a52d1aaa05d418a12a12a67867efe7e8966ece71637d32fe06ee4d580b8cafa698897e5c6e557a6f5e5a7f651836b8884b0825a7a500309c5c7866e7dd0141f6e2688279577a6d97f3b276879ff009c903b45590d281a812071e42708bd082277d9c89cca69143a421bbdaf0b64a2aa5bbc71da19d8a9416dbd631ec02511081f64369aa1a97bc83414d3034d27461f393d42f811bffc570b5025056bb77c7f34f6cb42e86366673d1948dfe9a1c748fc99a8146f5cb0fa9cfd147dfd606ba18587878ee35792771735f9b06e47f4afa526da35137a1371b26a5c24fc30854edd3f39bd6575c63a5c821d0153d99182697a0d453a25a0528845e4d30a935678e9d1f9ec7e0cb9e9b575815776a0df17b9af1495e055d8db979a53bc5e4c828cefc27b581ac5ddb249e1f1e72e92e257ace60612af8f125b865dff4ad4e5c7ec163dc1b9c4e146d06397082c3d4fc808d7979dd6d6dd68b48d3fc84fe8a58b1f68860a4f6c1a63b5fabaf8add3de224a43b59d026a021bc666bd98427138c8f3e488de51d940685cf71671252b2bc6647a40c34a4b82d4d72d696226f4e69be3a71562b648103ff8f1c3096e1516f35cbec08b56912a2fe97ddbd954de9cbd5745a31eeaca8f90730b03cd5869acda1e999de08a5dd0848152ee20504986cbc995a2640fc26f486db10cb3a55488e87bd0a896f6706e346efc59b54e7a7917f05c531a70ef414d6d5a45c0f4cc2c0f4bf46dc6b9c39af480004f9808f210efee4d0074d98102f2ab71a68810604221a3357ed2cbab808fdd429c748bcaba24a9662ebf8c842dd389a96cc0bd2e8a1442ba4aa0a6f11dd5c118d69729f414b90230ce01eb9927c6b0bf168cb85e5f7aa9c0d18e7a2ad5f692c482ade4752e0a4e50b43b7ace2439d4a0cd1129aeb3acc1e91554d1f020dfdf730e86eb6ffc54440625c18fc04c9563a2db5069d9884e78ad7b5c4a97447e53d4b677fb67d4f6ef80cc1ba5275e14bc555ed24c98addd94b77e912fc1ab44b535a7ca96e9dfb70ba2a6a7432f9acd19707fac9f2b23680967b7bf8d1c01a6ed484c50628852849e4e84ba41be4ef00e4b7afc1a5c406e39aa1ae5603c3578cbe537a8787e03795a4df0633a7bc52f85d6a7fa323b42d9a9c98e187e55aa96510252a9ae9c5de149f1fc0eae1b0b8d14bdcaf53e280af03be284bc09113440ac1f45303c4d8e64883802687a62f8334446819e7986070a6ab9b5bde24bdf4284e33a12e2abc3f74d3be9940b794dc4dd015e3cae35b5cc4d095b803a3a38d643443a34f66a89d69210d650a918422424b93d0f45954cab56a06e43022ec643d314b5655ba4986d42242658d77b25c2b4a1e056db9f8f43a46125e923dd732c09ba061db91353c60e34dacb533e98a48c5e299b0213858e4ee72a2a7234011332b11b92dcc33ab421837c6002eb09232d21275cbdda07c61eab8751fee4369eaec9e0f23718801a0dd794408b3992e3b92031ecf16c2123a79eb3825dc1080fa74d1f0e3ede13089ad475403db203250ab18682f1a469ba5ab9520d0722c968995a092e2a2afe151a80be600bf1613e354c62e909add993d86cbaa34e3fff9d4a7f1009ee7065965260ca54cb2a9d9924d33ccc22f401e6a8d2bdcf826b9606f5e7d485d9e2282b6a244a1044d304bad89ab78242180568799eb270aa73dd2dd3671633e4403551ed44ee4a190ab55464f1b5e7f22b9f8c20ac1973a3346e97944bc70276a64f2322a7651794e548f80d05535b5870d14f42c4cf64031832a3b33afce3ca4b2fbd41af227a4b4584ff9d19817b9b1ba384435e2312e874a0393a3d0d94814bdf6d2198ff42ed0f826eabfa6720bb9e021d6fccee791656d6d369999894264c45a947de36d96d7beedb402d321e23d8dd60d39e7762878ab89be9edb7325b632655c667b47a9e975903c52745a6e95954f1dfcd8cb294faf7dfe314ef25bf8a5bd7900f4000d292d1d372e20a0779d554ddccc65794d6da34a9581b5593689798d579d4b6c7e5ac67ddb7b38388d73fdcfd445aa9f3699600c1610a2cdc30faeb02f07decb52cedbf37d92c0cd3e1db938b43d0883ac074b07937d62a825aefeaf30830836718aaf4ba46cd5743c5210aff8568c8a209858cc4ba259474dfc0ac79d303a65bb948f57b28f29ddf24b6398e9ff31573849c4df358694ac25911ebfec6c941569ed3d1284e7e801cf79154ca81428e9a34a93840b3f180e7e0ad21547d028a42c2c8aa6dd6779e03f74d5a6fd0dd3de537c8b2d064b1b0ab4368926d0b81b919a96471ebacf0e48b2093898c4b74eb8c2d2fd733950b06e0e97890262c09fbbc223a35ecc87ebbe0c820deb39d906df5b4c450412134d5784cd7a14236797e99be926f6cdb45e6585d9976449b7496a884eb1c8c7e3d2e65771efd2d370299b9f53d358a61a82db01ddf562712709ce5bcf90b7b2c02a71e08832c3290482a1d1a629103cd881226d10941be9214cb43495b1155f1f2d97004c669c449d36e47b0128d7d5b6ead128913dedf439b32665d2223640215389eb7803b802d64347b96a994dc837eed1d4327fe05fdb84382811dbc24514a6e8a0c3697e5d50627a70e5c75078cd53d5f4ca41f3c524a3ef5559c81245402438ff6b94eb2a48196bdd05a6e176dd5291972d451948fb11ac8f88b1463e4e7efa24a01fa89c8712d9172fd46548b776291b25f794b3018376eb74fda6d1c198e7a5d10495965c71cbf62f9bf4b50557cdc6da38561266681b1556d59a9b9cd338d4a34db2d38c5eca4181c34999298336f3c4e3a1f3a0601e13094ebe40c51fc523259b2f63a1785180c21b1fe83b378a5a5cb528e8f0a94a3185aebb77a206683cc66c6ad7b608aa9ba4f5b0f41e63e91d45a46d258ff0c15c44c4815c18a1d9cc946eee3bfd681019d77b2aa274d0826e1afce19e36880f4f53a7db3d18a459e364b7aec96c7ee3360cf37057c38d6fd2ba6c590ded56dd66f2bd61b871797586d62a317b1bdbc3ea624dd6354e00b28f1cc6f4bc11a39918037ca5cc49580b2593a158b345d82075f21d24c3d10c7193f5260c8dafb304ff81a647fa64d916c86c6df7f25aa31172498707a7d6fb94fae825853702fcc2e49d2b90a791296568f14147ef8ff53bdf370506a8983281e94df1913648b63450f2f9fd7dc0ea755d4140895053f7a882700fe3deda2a080dcd803efb79793138081f1c0fe32ec7ee5b550a9feda0dd80a788562a2a70b58a1b81e2430a787a0b938d54b8e5a9d9b4ea380649f306c75455bb1d786059417fd2680491da0257649c8ba712ab4868788224d4e2a704c9142d14db58559471569b7d12a9a0ad21bbf8099c990d4d8dfd4b415f3763a337a93301c05e90603e243252508234bcebad1e2d4c5aa14787647cfbf3fa2193ce514790caa46183f7667e07042644669a647c73a10e6accb1fe7add1e288ae96f4e91ab61269806bb6557a458db0576771ca53baa9a9c9d6ea67f0a498d7c82ef24786dbd2e8a15c391ead48eb783a03a53237cbaa2e4c4cd88a8181971523ed3f2d79132b8a08c7298707598b610e9ccee2ac5bfb2dca298f094bc5575b414372f18e1a044c2d1e5516f9d2d9d2134c7c96ce5c131ba5f0675bfcabd50d98054578c2040a18e806a39e9f1da9246dff53f786d8c5501a37ff08b0ddf8faac565acfa11465ae013d247f11b08875520ecad8f11c011cd283e4079658f946015285d0b967578520f577ab9d3ee4f972e627577abb05ad293520b8509c641282c72373086da8c53003c00bbcd6dbb4ca8a6324aa9c9302e0268017c308aa9aabc1f6bb47a477335da015ad51a7b0dc3364d9aad6eee7cb382b7f931059ca55ee5f19bc66ba4187dd52444a16223744cda88dfcee5a2dfb97a6a075b6aa3a759a244451a598101cc06015f26fe4bc62d72b1dacc80c241d99bf50c47204231edd7c26576c9769f140dfa59a9b0d8c48416f2a611404902b34191da78e2a1d900c20c96580312a2f8965e8a1ad0e08df370486fb0ca1a33a2cd05f6f586c9923c80a4822e7ec636fb3697ceb984fe2114f8a9f567de87966e58127a964ad65d75c7979e8ed605ec94aa1bf148a1f922e7e8c381454815df13ffa30381dc714cda6dd9cffe6df81223e1edb79b79fcc2d5b2e11a7e550f024216e61f9852eec0e60553d2788f1626fe436f3a2f648634235cb52be6c8ada26a39f1cb892abb864bffce6b3ca3a25e5247eaa97309292370f93cec92c2567e10803d0a34e6a132f5612f07e462bec912c3bb68135138f8d50103ee2ad37c09b5219ae2494ccc65210d7922a368eac482d92136741d0fbfef24e36526dc977a033512a24492515ae9edadc0ae77706f51e770a65017242d927bf1f6684f826a4977bfe0d6bdfd6ece17f5cb968ef1de09727a923647cca9a0400bcdb72f72bd9dfa95846f1d761263e2eb1bb69d3d791fb026ab690647b5e1f70179c1060921d8c51351a062c4ca1fafa0184b1230bc9324bb2e3ca8f80df4ef32f2baaabec510a8453cbbd7704c98650ab92035a3148e896724312c145b636c38f0b0a345e845c787aa1cb538d5c7b528ab75bb4253d6323f7af9719d234c331a3fddc4055e12bb1b71d91fcf4c3d343e052091233138d4af9fdc8baf41489f48e80d33bc4e0cdfa7ae1ca11a89fe92a0320ba1b6e9a726705ef5b232b568e629f3c14085e27490778d6229a8df8f9a2899d0e290b463573a92a539484ab12c0dafbffabe712d282ff18b08884e301c1079aff6b5cf6b473cae4beaefde0815709d250caba865768145d721d4a7477462b60f28b240515f7c3bb37d50d7fde2ff7364e594afbc72ce548fa824b5e74b5732f7ab6ec5f2c4555f6e68390ffa476c1774c0881430c53324dda0e6c1f2d59a093f1a83479707164262b01b42f9139b26a3ec219a626365eddd6968066e524cc4887f406f2bdfee95d22a2c299bb7a7a021212931492741cb6e570bb11bb1bbce8fd619287b40997534a73df685e36666383ce78c759fc8b4f3d613c6916bee7ab0100ae5e6d400f9290ed92012a2520a794819668267346265faf7a15c020f5271ccf888fd5f2a233d7868b6f951acb1286796d41e774055965e26d87c1f1941f190ac5d6b9e2e8d98cdce76d49808ca1de0213dff5936e1260aba721845bec9f6c791520c2901184aeaa9b8c8fa6b80aa3872dd2a9f4e2aec064a1f62ec9cb468a6f5b88399261b661506055ba24b4388ec79a78e6c5a68211a7420a9586f24bd0401b98682e70bf1bce54ecc89cc504023b3af8091688ba6892c23ede3610bb501f8ece43f7117dd42472375144c056cf1bf465e8a9a69d10115e295ecd37c9d99ba99a9f52ed44eeb151779ab6ce70a5747a674bbb47663aece030c8f628d99fa2f96e5fbae94a6027fc507246220d4b93af3b9bde88ee8a466de7b2cd678ba2b586f7c4bcba494cbe7a7f44583494e7e47895e463f16487e2471851cc86530796e5d5565d81872165a48ec5d47f213f6333643fd449cfe8411299557612aa6452c173d8f3e6263dde5ada4a32b97a523f92e13680605fea985de98364229c31d2194c46a4cc18a4bcc4cb6be96bf029f14b3d2c0aa3e9d0bcdd71853680c811744cc0f953c08ae04cccd211c1a7a2287f63f46b327edea26ce56ca00780253d512c4d6a4accde7e4a0bbcc1c3e1c85f2a402ced14d2891b54087e8f17fd074a882acff2bb39e3610325fe545d7883e7527f524dbe132a2f34a460595a1896987ea12d50d9ba15a61c54beb38ef389594481ac41680d42923494679df2efd42c9917784cafa9eaa5a55a443c048288240e44cb71282cbbaa58c668a3548909dce793b5fc991fcf19d5a0f050fb246aa0b3cfce2e9e1c1c91ce98fcba762bbb0fda6c607e892c7adf81b9a16adae9b80b698f8fd629db3e01dbc4e2c9a01a6453c5ba8e287619d4527461bb5f9099d865edaa7d2d1469b6cc9de4ff752f1c44912008dfb3e9ea8d258d1b4fdf2080ec3134d3c2967372eadd6352ad44ab2b3000a4e8903c0dd008f91fcd27c8121b86455ffaeebab55e25aa8f5665782d3c0da199d5ca3230c47480411c19b2c45b48b5451a1f8f65b6dbe8ff46e9a4ae90cf9213dc875c089f9c092ece194462ba6b9cef6f038b8e23f79d175a7c2f496c8bc582980431bf51f8831565ec4266de04e5b1c7697fdeed1695c792b92c8f6962f151d892ec9adde1e64669c399585c03c39e64885037c290d1d6ab85eb62d6e1e29cb846567d2586785120f4da7b5e1736bae8769811760eb6ca7a20c5141d13d0dc53e123b04a0c3059038092600cc4aee584c389473d46b6a1500f548f62b145e407e51a5c54cd6ac4d1bd492bddff543dc4c95f87d09c5fae2031d2858b9256e3a35912c5d476b5d8c72041a321d1462e377bdf488e62b02592c12118c7be6aecd82996139afad2c49efb2b5392538014a14163891afcc502633e3661c76197d24ec71bdfb6d4f656b508343fa59284b62421f5103592bbed564ea444376f9981caa9a31c8b4a3a8ffae5e2a426f9ed9823fe92b46bd884eed8422cdc2f84466aaca0611e36d0d485af641da36c539102b6f7f85f5334351039837fa84ae386295a0b851cbf4c3c44231edafaa0ff565de2e108d0bb6a4ad80621c07537fb9791ec807ddcc323137be453e1782508b8cf3621c0a3e7d8b86e58eda5a7516660944b897b875a7c1d1e0bc0dad8554d4836e07fceec9dc24b77b74c4719c6a7365131ad7697b7641a22fa8528544358125b75a6a881780cd52de0cb3d9e908e8690545b21fde15d272c889da33377c03c8d438259923a870bb9973491b41c09ff943a1e1fb8db09ccd389ff1d5771f40726c33ae37d8076ccdd833db8f203f0bdaf6c85ba504747f032a65d28cf2c2d5b4ac420d5e29f2297fb244fa912ad9253c841aa1302f222c5c24152656b60b200ed3a855f63430b63c24524490c46a3d765bae951a345187220cb68edb311dfa48a84c47b790b666969d66b81849cd7c2dcbe95b97d3f7671a8e057270d539b955d4174f9efb1e2993977be708b5e2d9419bad97e926816a893bc40d3f8c9e0cf4e6789943981c6cc46db36c0dbe97416b889d6cda5da86eebf9f534eea8e9b462ec4e85dcc400c2a5a89cfc57529df556cc5c2a62a3e3e69ccbd73d017393e88c056dfb56e22268f3d612073bc9e805ddf1c4ce8c204b2e5e8b1b441e18f547f8cf3025eb68b77e6051917c5a4ba187e52fbbda6a83e56052236a55aa514ace51b3c3daf3a6320bba91e85e5d9352864661226a986b4fc46dcd73e38801dbd1804a4ed41a83b1b62d92bc3774230b02a7d31193c894944d8b25948ddad054f992c8e2e027950ff884cf3d7a7e255aae15639cab8f75a5aa639921aa0a90b4122c3e3e1469e42ca5e71ed884aa0c4f53f63801f42755b21b28ee1797ce21b3a6431f0dca3b712d8e80a4dd31119df4b2a6cc5632ae89828adee4d704a50633e18c291de5a179ad09248c4be6a6794817bde986a9f18e6db4bc1cf53add7c111e5439755626cfb83844a5c48d5450a2a350217f0347b5da58670bd7445deee24c0878b2944969cad9cf3e12a811c323aee4d9a3384144a9f89a2b5f00a9abba53e09035b3c53b690f77c8314957d9b4dd8bf1a11d9c4fe5c4e15ee14622ea15f736a1943a80917f0eb6a16b6b1a2e5faeb1a9a4396718904857480bf2093c1a4de64f33fbd389558e84930cbf1383878de04c5c36860fbe5a9bd21a373568ba73d735d57b859d4f5dfd0d6b8d13bba6f05b653d09aaa918592d6b0419d7f5f68444651340d609a7afcd1a25d9a1ca6e9ee7dd3b28ead547179668f4804e713868026cf102fa108a685d501616a503cdae54e89ba380fc0ae0224ae3a8da3fb0d6d0b6645c95eb13087250eff3fda8b4cb4630633be60032df1c68f41e410c638c0080468f4334cf8a6d8d5a0d20180b453430805c6a7ff7e220bb9b2464efbdb79452ca94920c58060b06af061f621930b6d7d1716e5588195f9ced763cf77aa482d50100ffe1d79c73d6b03a3847933887acbe3905ae6b9587346ce867d8ae5e8882ed5454ac0fab12c3762a30acc87675b39ad5a1126dd716a65e20ea30ad6347b3c4dfd1b510637c1963dc71a5f5f223bc3ba6d5c139fc61da6798de92411df1324cdc71ad9f91bd947106d8422afbcc763011e33af93a74401fa28363aca9d243c63d558a546c344b8ac581aecdfaca6d8f71a09f9c7fe67d5d57732f10bbae97b2e537bd5efa61f55476736290c278d592c6d9d34e474d474d474dbfe1ce6b3ea79c5e1553d1c1b4c5eacf1967f5f33b67993bab6ab6cf495fda8e816034e0f37b36e7cf49e79c3d97b39ff6657e9569dfc18d831ab5a090eda0642a7a088453fe8495338a73cc974e679536e0c522e8f9ea60bca316033da5827bcc944f618be78b7cfa6cd18bcb60007155fdf5f3df5b48be123f3efd09fad005faec31ae723044b19f917ec654d0c7feba5e663fae9e6bc55bd15b51cb54708e1962d113443a904ed3a927e7770be85bb2979c0502f567af558f7f5dd59cb3e25ee8df705d5eb2925ff1c4ae679982a5d8ae6ff53e9a69f5523d7d7fafeddfb2bb0d5cffb60de576d9737f5fee77e7ba7e72bb8ca77d91fd59f56e61fa4a77ebfdeed01d7ae5df7996c99b71c600ca2fbd3fb3d57695013048ef1eeee1cfb6df87b7e5f6c5fffa10d69a4db1fe19d6923fe5fdb14cfe0bbbfc175cb34054a0b41dd67db194cec57749b3ef1ecee12f3317f8adcf58c561b374a808d0ab780ba9922a7a5534bb685b11b21d8cb7cacdec8bccbeb95659d732b7a234ab5e3e731db53428c95b5e78a4ca2f677f7dd73277aaa8cc0779d732d7ab17b2cc84b515dc83abbf6c5b61559594b2e2645bc1399cae788c9145cfc52ef631e71ab904b86fe70a2877e70a26f7bafc980ca435449342e54417fdca89dee2f8a77f97304ff9ab2dcbb2b897ec852ceb638cdffdd30ac510c284708feba7ac31846cd737fb6abb9ed9d5715ef6a53fbb5cf0dbc919c4861b22771bb8f2d96234b7f387e9cb375cc9757e99bfc3666ee717f0dbf1b56c3f7bdf97f817bffc876906c4bfbe3b4ce6ba7c794d98e972da97f8d74bbfa6cb0963386340363f5ad97f591ad9f37b97bc05ce688fd9d265000c2fb112f7903f2d77fe1d2673f92bae662e602fed4bd4ec8c7c8fda7730625134e56fb6e31284d176180872e56339f76aeeb58c21de985d56becc5c985fbd73f17df8943f70e6c50f39cf780b643bc39fc27148548eb973d29f3c27b59910eed1f19d4854ebd9bec4cf24cb8e4b3383c1334bc31fd6c09a0b1f13c23de64b9879f93b9879b30759d8e5ecb1a7990bfc2f99ed78663160f0b30f711066def920db71e9caa7d9c3cc4ef998c464e28c31de7923038a2b92dcd17d3b5700718d307351b86f2705e55e8dc51a0884d3f410be6c39ce8717a6afb4307de7b3ed58e6c6df49f5dc00dcb793cab90c41dfd9bfa6d462dceb51f558663b0c83160876e1f5980b2ff2e185f6e5b2d0fa0e0876e75bb683f1c66721dca3b22ff3a1bfc88fd747fbe8ce6288575a16c239a23fb4300afae32b8f06a1534c20c517478af0a124438409df01141d1ed4f722c42d966cc1640b275bf46cf1640b285b78c1050e55555555257ff0240178c2085c3069c1134ac042074c8e5453ce39e79c73ce5955aaa8d667aa3f336de4491d6f40517464163e7ee0a20a1e8a948ca003144008c2b1f09135580f380481031b25a860094b92f0dc034a544770039aab63e0320e30821beb872c26960502a43082125ecc008a123278428a2670a9676262627698734eab745f922346ee9ca56bb1a07eef009750436b7e828809a214c44c103494477ef6829a5e79362fb8a92fc051f9145019a594524a224cbdf2784ed50f22505595438924757ce5d11c2409e49c73ce3913450ef38a27b55c81fb5675682a4a90841f38604d3941486c7ae5dde0440320d1791b2fe71448bc9a184ff4a0b204071946ae1f82a480053840e5cc80890fe0c0892478810229a59492ce39675b3b4550bdf252f100457c542691468110ece4644929e5cc954168184c239e1801c5082f8ec0e10899595555555520904265ce18dc1021084f82f030c410311e00e28a20b668a2a7881884fc81e436de091e7ef436fe5700050455ce39e79c27aec1935e79507ed4c00b15f780fc31f5f00511a71d96b8a00911394c30b188f8810a961011821080c00204aea489277c000292ff90b2f121253f7a1bff39fc203fc4eda7d00720dcf6e1f1a0834ddc864a2461c46d7e48d35db7833e745a12d8a976d0c6b2caf5b7313265a893da411b78036f6ca08d9b6ce08d8f03f47f4ceda04df5161f5c0baa0d34527d5bd376d5ad8d84269e0e32b98d8296ed85dfc127b00668af8a67173232424a4700793d360082e5c068677060aa1b313d8a48cc7423d305e2a7959f1920d8fb3961df705b76d7e44672a374a3742307ce211f72f146e9dec0b981c38d981b3954b142cc0a312bc4ac3c618598bbc2cd8a172b3f2b4fa842a675e8542ad55674ea3a4df7b415323d980c2683c9604230998be560a5eeee9eb9dded437c880e1f723d0949c7148c8383c34718e7728a91e023d94c3693cd643a643337d3c964321da84051c13ddcd3c33db787708985340b845575ea119c9584d549fa1162ae00eedba9a2877bc15035e11cf1bf39d85f9dae55ba3efae22a269c03bef4e1fdb218aa269c035ab794bb67ba4f57007cfa2ec0a736c88dfe32c87598bed1ea0812999ba0d63b750a025dce5d20ec5fd600081f64410fb2ddf5fd1104b234ac7f01bd7c0bf4f24196f6e8835c1fcd19022e2bc8adb8b622c8c53dc5f59aa5dfec4729a541ee9cff7106b99183f10bfb7db8e9927109347992d6e14b2db58cd3d8cfa7f43bc689dcd5d7be7b6f51107d66db912e4d79ba55db530bb2305a076d47b21dc6d6e28757b32fd56afc20d2959785e9ae2d4cdf1aeb6bdadc6c17a4da17665b511ab14bfee4e4e4c8cc6c21f5d1299c14ce119c23326a4f71b6edc8114a91a047709a85f2114a7198227104875397321f81f1886469f908e7887fc9da2c34f4fea1971ce82f19faca55f52547a594b5d64aeba39cb9401f4443dcfcca55f57dc54774beec266759ddd7f92954fa14e708ce112b6a3b5c8c3f108afbf4931b25a76eb4dcd3a3c83df325959135ebdff5295f656b9a66fdb50771efad6852d3b4c7b487ff380ea75a16b39fc27138f5b2307eadd0c3f929967d09d98eaff6d6bf7f29dfa5d88e655eaab77e4eab7d457bae948c5d328e6ea494d21e511a4537da17fa16f7ee8c3d3d3d2941e694736acfdac7d7ecc59c7c6629f97db8c6a5d82ec865213d93a5942ce78c99ed80602039b9aafe7a6fa9ef7fd91057790681faa0efec47652b57bd7a50c6319594bb1ca39cf5f47fd41e31e528c6d5efe9e9e98915c9753d6cdb608d6da3db96f224ee01e3531ec6c7d7c13d60d88e3b8be14ae1e8a770342585d214eac36170356c4aca73f62365b31ddf947ff4495487a7701bd7f1ddbe33182e4abb162efdf75a66d871a9a52fd2eaeb885b941143c5a563d1060ee1350d84a5b992647d488fa48ce78f313e7e677db49d0f4100dff9efb5a4f091c60c146c97f2db7735058b827d95c72a5fe9672fdb556fe1c6ebe3d387c1bd1e75303efebbd655ecb517d94ea5c29efec6713835c5c2c4bbedb8cce1d46a61fa6edfc9a0f6853ebc9b7d49b15b95f2550c0bd39d6561faa6c42b5f07f7c0ec4bca6f1bc3b0307d2fdb0549b12ff4e3f52c8678a9d5c139b0a88373c438e7f3abac99c9961974349b62bb7ae7cfe0f267908f5154f632c43d48b1dad5fb36d8eb8a9c8e973e7c4a0963f84673693ed45b67bce0336701ec46fb02af88d910619008b31f0c2947f21527c57ff3a3cc8fe8c32537afd72c3fffc5171f32f72ee8d7c45edf386d07042359ff01a3fd4a07d5bfbbdb4ac8b110ce011f7ef4e1416e8c30baf54388394726859652c687a12f656cd91fadc3177eec21f698f4c8557fbdd05f17b495c2a74c293fd3bc607fc385afe399db359d8fd586b0629f022dc4e663df01c1580198656e4b83befc581f0cfc30066e09a3cc3217420fed0b7cec319615d6ab6dc716100c8672ee352f65865cbc0f19638e4b5472f12f21dc2305f91ca1bfaf08c1207c814f7f429a3dfcccd2982f3f3ae6f4a3c4acf593b177ccd2c842ac9752cadc0a4e08218413c2a77379c5826d9058b0efc7b87fc9d19881c25f8ea5d07f5dd69cd38ad18a6fa9f03c670d1ddc037b9e00a80100db354b89d5f859c3becc1a1cc40627b9d7dcaebdc6df70a53b897bb837d7787f1ddc83bf9d7e57d9cc4a7f492d4cd778f95d6561baf321b7a54329775c69bbae51e33db330ddeda031e3afaa8373b00ab646f6fede1283c43de4b3f50e0043ae738d3fa830eedbf971420b1b2cf17343a4cab86fe7c7043efc84200955eb226589baf5a438a99549fda974492d52331c3cd1c50b423915deb7d3059150935addb7d3c58f2eb820a20410a7f849cad9bdc79fb43fb9eda81eb57b8f9e8aa3a865a19a5aef37756a43880de1f28c93bc2dd9e74d8af98a69ebc7fa7188f57d2766a77f5535c0d0db0f077ccb378003425ad186540b47f5c3119f8b8ef5f380ca455a47f1ebfeabdd413a9e04adb4d61017343b6042d88076b810a2c3e582ec0b4ba442c486c84ddde22735029c2098a0d0c1002e2899746e680c6033a3021e0c40844d094a43f88840040c8bc0a10899bab3458c08ea8c0186a081f2e32b3b5072803b592cd981c2011825d09668395a8e96a321d190684f6848749e0dca61bdb289e0c2adf4469072cfc51fc71535f0dd4a8f050d152ae2c2bf6ebcc57d1ce7c27f2da776efeee33fbfcd5cb8c9f4080ed968b652df504dbca19a1ec1eed229d552a8e42d9367f2cc9834e66c9678e16f32502efc0d674bd22dfc019f6d48b3bc9d25f4dc2e541a629bb1b970bbb970cbd9682efc1965088866e9264f8966a659ba101034cdd24d5448c604b70b0dd172aaff15310d49f56e296150e7cb16a1aadf8e7aa60078cdd30ef8cac963270f0c13cc13931ec16e23c1859a0deadbf129ddeed2b9d07d264ff7eee32d30c6e7c2981e5551b752a866a27c053eca217394a2765be9c22fcdd0c17e8083c3031bdd8c9a1e9b3a63e33134b006e4a9fb9e27919657fffeeaee087a585555e533ae52ccaa951ff4e55f8f53aea56ecff79eff74e7d8b27ec61573fbad1fcbe7f6532319763a9d34942986932640ffe462a07aa421a955655d9635ff65cc3897732effc5af3dd150bec23f39b6a112c6814ebe1293ca2c88c78a71e21ae3d4a03927a8a25535c3aa6825259ce1159596ac2aedc96dcd07f3e1e720aca747b08bcaffb29bdb0f8a81c4edbf7062e87812cb89759220492b29315a59a72a9336c6298693aa42a28a818a71d288c024c649230205518d088f85c7611a924a6540ff717e619805f1c4d050cd327ba605f239f373c49b45849843341c8849a874bb8252209fdbdf3f6ea3a128b5209e1e7d07ac93e5c44269286f0969a89005f15827956ace4b39ad86d386e0b41b0ee7f6bb8dceedd7786eb7ffdc2cb935c0db817892807842a1ec4711d6bf1bf7b12eabd9f8ca13aa75d27a7aa55f4381b49e1eb50d3377bacfcde480b88f96ea91868a717a387c503b9086bafd2054b374314eb77998804ecde22475698c5345b9094bfcd37f651905cda881377490962b8ce07a2e198f8e165264334f7490400304e6d9f1314d8e60854f0ef7a156e0393572d087cb67e70941a076a2f8603644298cba111288dcf77c4ce098a9fa777305e2a22143b4217e109778539dddfb07f22841854f8d0e334a14c1c64422294185921d142b42ede87d2cd276eaffb0038fca03f268a10230dd126376b230c2e4e92cb9dd435d3c3b590ce176ef8937e9c67dff0670dfbf1f80e8460a3678743cee73120dee75632411591570a6a6092e301d274aa7fa5e27bbd939020e929a1d24e8e0097c18aafaa0ca8fdf7f3df606518be9dc779736b6bfe7377ae4cc3c22d91052a993fa2fbcf0c2c89fce0bef7d749999b999b99963646f159cd4e7ee7bc46f63e4a41ad99a6c4db6265b93adc9d6646bb235d99a6c4db6265b1328aeeb11614ba22dd19ed07234249bcea6a3e56c493c8aba455175746e6e6a6ab6286ae73397b728baa66b52a99f1fbe2ffbb1457185582ae9e8ab10060c1950860c6f9621a38241413ca43073e15f9d8a4ed673e15ba91abfefc53d9a0317be08e52decf285a6f3f3e32bf0e7cffce1816939d5c985baf07272af13fc864e3217f85622148d22aa6f0d07da0da22825f211fd5cf85c44a7f99d680a51c5896c3818a99a0b3b2c5582f1444da1bc855d2a4f04fc252c495119fefb9146d4ee32fd5cf897e9e2792cf0e0b170f2967999aaab5c3e174251b92f7cd1c3c041c50bd14974ea15f81d76fbb1270d9f62b5c3521d968aa1438551821173e1c7dbef2b8fb7585674a25485e7d42ceea459a693be502e4c899ec8efaaafa4bc05422c858019972f7ce8a4d6006f374fa7667917ce13a6a2233a6936a897cec301df4db0f2f80a7c0050513bd189e7c27e2a800b7fae70e1c7950b7f9ebc85d25ae7c91dc218312da76a486a3fe416746416a3ff1c115b781ca5f08e1e0ef8b821c8e57af1bbbb3b7677ec9effb80e086c3845a74e05278adb61a9292e7cd1e9b1605d11eac20ed3e2c2d792a88f6d11f2470f075451a12d72d272a68a5056744252f93bd1e9ced4f8d97cb0f960f381cbb3d15da8d47b8fff2647c771604323cdd239b7756034a176d086c9c30e5e58013b70d190c1dac02ba862065a1b6e78413ffc202e51ea23b10d4a493346803a90310185fb96183273dd6d579b835824418a18171db4b89d5d80734e4013e3a2128fe084860ca0870f2d8846cce507394183b76c4dbc157e205cfeb84d719fcb4f693345db71cc4b5297748bcb67296dc745f84b295f15f7dd0bc4d9f0ba384115312e70c67c2da7a664f33524358531ec37c67e6e26ed37d3cff934784bb699b88d27de6ac6ad2a97aa7a3464c8deca2c8dea9f4bf6415c6ac6a984a0fe0f1fb85d2de9d1c66337931335850bfd501c5fe19ff3b3cfecf3156a43cd05e2a897f87c31ae0678bbcdf4b8a8a16fb7993aace6b2488ada6d26fa17a5815e998286e9110d3bf55134603528ccc8e5175d80af680233ccd023c65c8690a66d212e7bbf26865d2f559a901717c52c09dc54a1949cea988d0c16161567336d3cdb6973c23fbec21ffac168423f18cd74f2483ca405bcd5446511b6828d07977fe3349661336da6c7c2051e0e7e88a4f65cbeb88c4fe0c5111f0da30955864de956d563c1bafc1bcf638149b3f405dd6f41c54a97319a8bc7b4242d6a479a1c860492b7640ffabe1085d1f48849a41d1467fe9c4ff216d04f8c0607e30c0234e6671fc4454a19e0671967c3b5858f8e0b7c4015554055f931f4135f852154f911e52b0c4dbec2034f3d42c5cdd46d271937a807b40b0d39d56702cd825dcfef5a4dd476e10cfb8b52ae301aac061be2f277d57b6045cd64d4f84a0feaf3e9117f7deee8cb6a0894f17d72a17ac4109080f5d0d290017ef699b5a10714475c561635fec568301a572108b56ff77c36938c9a1ef173d94cbe62830a33887a94b784ec06a234ab30f473f92d1dd477bbcd04f97136622c9787837f33c188e14ee43399697c85f937d3c6b39dbacdb4f96c3fa21851493423a2d94ca21b118e484764ba229ecb9be92bcd6517e79e8beca1feed3653dbae6e261a31b0a70e21ae2ba421d190a0a0033d96d7835b83bcdd43518073f4376188fb94dcb7c38421dc197ea839cd324310f5ed30a1c9f5c742090e3fb77b3e4a70f06989e1e19ffafe628ed41f3afce831468f71a466005e68630f545cefeef6e93e9bf317ffd9551ae03b4c8f18065e692d0d1ca83414d00f69783377df123efc701d1445ed9e0f4cb368a059faf96d68960ee3986621715551f91f8d48241e1af8b98971df122430c2377c73617a851f6b5a655486b00e3cf070bbea293024c161468b5e8207212ef35c4ef8a49ef8a45229544f0a85429d9ca04ea79d28a79d283cda1076a230d98972da89c2b31385e735f62da8dd64e9c4c2a27653e7dea9334ddec223e7cd85f3a6599080fdd25ffa682d0938934cd3d45952f9fb7653e7aad981ffc52352865dda0deacb2c63a61936f10c09fe05df641ad30c5b9012d506fe2721a8fca0a1c84035a87db1bff958e26f9c823bd4ee9d326c44cab05a2f1595ea7f349a24924575bce5aaac4b7333f7d03bbc1e5dbcfc32223c4457204c2ddaa1420c3e5bf1795e4553aa4a9430c52323e4c14387070f1e05e0c183070f1e0f47a41756d15959ebc35b9e8b378f9cc7c27b2c641736d14ac8691b2732641c6f6123749a89245a876606060eea0c4336358ea971b8ed131abc859b309970b8f28190eb007cf03dfafd1e2af578e8981ea594cef7deab5a48698427ef3d1e128944f2271042e871c9f56c40ca9342f90a8f8a89c7a3af3e1512774f850e98afa2e23edcdd9bddfd67f888c3402e51d75275202254ca01ed103625bd152e6abbfb4b2e3e2462a2ce5b03ec7e64a3c7a5a3f0e1bff7ba6d0d0db31ff0be9617bcbaee291d0ad799a8f4d6007df45880e1e1782d09e095675291e276a3d783d10b0f877f8c5297189273fdb9330475419ca3cd55c305f88bfb1e86def95cc5599c23c219637c17704a9b76f7eca773de2051ad497dffbea3fe05895455a0fdcf61a70749963c21892758a8c079b033829d1e20841086905826a82a9630070821929d18eccca05e500642272e14e2425ba2a414a224b9f056913a2d610918e4400be7d989e204a471df4e142257deb7134508258ca0a4480fb77b254538103a42dd905099a828fc008a50165594c410234756504b2ee0610944be5842440911da781b4a88604124650543087b86a4245162a45467a0a4c84fca144a8a4c519da0a40813254a8a2881525264064a8a18b1e385154a8a08a1a4880ade7b0f950377f71b5067d421746c0aa9fcd6057db475b79cc57536dc2bfa0376eed01d464b56591494cef7a44555e8b41542081d428ffcdc6564288fa8fc924e77083dd29649a79f7c8547bac79034813018a1c369734fee51e6547e870fc25741ffc3930f2965689f4bc3ce29a2a270df4e1421295d5411174e20424a9bbba814ce157641e910910480002315002030100e888482d1581604311cf23e14800c80884a7a529888a3518ea2300862184388310410401020c61044202a2a0200dbd2eb6164735a350c6f611975c58d79989229e6da4c6f3132bfc5af53f30caa02db59d00e32bc49b25404417e84d1844a690748506c697ad861cb51a474241f90784e926255ed38b6641ee6555c3889021549e8cccc28c5a14b7a76db575921a83d02a7a37591cc0af33d2a8a4bede527a47102407067f37da0bd4b3ea7f9bd5828993b701b153be06a53b48196272569d7a80e57f3fb54af6253cffff5121b8f9366c917f7552ed9a0326592e0374ac2b427090914b3b8e2f1c250e545d6c402f5d66b6cad3db762538d70cf3b4ed035729a1e74090130b681889f9425c96b725b48ded3a5cdcabc39bf1a23e8d1ec93fd97b52b378c03ec7759135dc9b04947c34078210bedc1c877320d0facf26db6dfc061cf2858a21c9fb852951c84ebb9373156da8a06c77266ff75523899acf0ecaa0a0473b77685689482230b454c360226aa18f2c1c775637e0be41b67f4a6fbf9eaddd8808635ab7b0ae6021d151b4fae01e87c42c3b9cb2a8fd2ac4a5805dbdc19b330a51170d914d3aa3cce98d955f4726c9e5650efd6d610c4585ffa54e9cf41a00417b79957ad67a0e364924ea2a53030623d2819cd048d0a18ad4a75b4fdd877b42edb50c040cfe098922d1be7886c5f6ea8a0799a6471f84a458bf1f1e605102b20711b508ac93cf22366ced1a648678f404ff85a49939f060f3cfaf3a020cbcf9ac10aacc32ef11967231b4bb30f4b4f8d0559f9b5efc49179a84b99c81ba87b3758675af719769314860baf4edee85cf0c4db6274022216b8c9e3b2e94d4946b051fa5a43387a2e9e9d5b860ba048ea73845b1b5d3c0fa80cc0950e5957a0b5bac247839ee2e3bc03d0b04ab2c0594502f508721a4a1ce87cba39d9113417fca585dfba81f00dbfba50fde63bf10e1baf646ff547f15a1ff88b6e9e6a860d75e6e262312642b417149149d10ac4decf0e9037c1510b37c267bbfe26333e29a40e49fc82a53ec3b73d6e673bf3bcdad164fbd361a4f533451cf3244a0b18c64666801ea701ea2fa0f1ea9f1d8523234794b16ec395a0e222eeac313a9dcd2b627e4b21945e6259cb05ec8d5c60428fec086fc2653fb46417aa1e99b8e664540d636df8f6366e0868b9c3e0096b54b94a3078d78a204a0db91c43a361ece31232d01b3e0ccb7be100656e34a121fc1525457ae9bcb60eb9447442a78c2e301c3407f374d78699366c2f320117fecd5101b991b4d4a9091e11a04c7c21507d4b7d91bd2e4d39e045785b8c87efd0759d8db5e7d17f5dcf23c99772cd74391d55b06ec4d2276731ec14ac4ce016e4439bf89b88fd3f4a86174156cc6c2a964488381511926d1e24c0f10b8410165eca012a1cfa1433fb6e89777375d12e3b3df4aa375aa2541e41732a7648c48579bf64502376957a3db9362b2fcf8099a67a202b4e6e9151f0a1ac459a19443995591b0e3ce5b6098034711dfb84e2caba409c414171097a2c97a9e21d0e7d1d4a4dde9311277b47dc0307d7c74315cb145c0c278c82175ccdd18f6b3970825e86977647cda54176b1d975615e247af0ab595a1957e5f959b46ffb1a88c39b7fd59eaf7e32f93d4f9c198afcf0dfdef3c14e665b6c36f6d2405f966116162d3d14cc81aa44bdd0b47752bfe8b71c5b48e7dab5c941c699f99e2ab5f091e089d9b70f1157d2e317855cbc8dd2413a09ad89a83290947da5889613ce8a53a8815752a73bbdaf9af47f4ac798da2c17ae8e7b03bacb5414da4a50fbed16aba4cd0ca1a605b1e85f1110ebe64d826e9748affe7c1fa0e46206f3af70e36fef83823ea995787892ac411656096e6548de11618f2281ece3e22d347847da78018e2e484e326747faf8e2ee41b2442002df4fffc3acf711a58de94e8301202b3968792f8ecd92a009e5de36cf8cc689e1255a2e426af5466458c9dbf0bb0661b2895c91c836739ce615a6475eb1baeced52541c580beddcde965545e827d31dab41c27cb54f0e26ba881a115a40f5dc925ede3cc3cfff99df4e2a61ad5e8d51b72e5afa2287c61a4d74616efb4dbe757a9444213e9a5b04c4c4c8f8bac8e425349cf035f1b196f87e68df6adbefb37140fc589d2af5148091f1cb8b8c873e63e58ea54bb46d422d198ce56b911116af30e55d58640cb6638cd9fd56499f406839c0d4ae924202bc67d39cdf8f916282f3279392490345c87de480c138ec719acc2e9e9f8e37cd2221d203e547ab5ceb38383a67984269a8d2ee49883044944f5fb2f81d7b2d72d3ff4ecdd3343052f20a4087d7d08106745235ec526a960f44ba44c10f56762cba484a5db15265b12c420871da9e237196a861f2cf7a8c7b3de49640090c1591e91242f3be69f93086d91f8d612b97d1137817405f323f78d405090983e3cdcecc52f548d62fc13e88dce372f9926765224582895b694a695d229a214b56ccb7b2c4a6462dc13f9d35d81bf056159931e74b54af65a2f9d58e30d3cee1412791fe35161b25b5f65d9dc1ca5ba0ff30370807397f8d8aa742bb25794d08bc059de953817d414ce77c971859348fcb53db718dde24825d79826d9523ff8c7c4bfda37c7d39417e3502768fe020a9b5a75e9e5674ef86563a2bf5cca021eb3a22d621c311100fdc69c2bad6c2883ab8c6143dd8248f760d655c454a563fa31f2b8bc26c1961603d19427a26f964502886f3064c4ae413fe0727f04844eda0916253a5bd81f4e9f0c457dfa96be877d2189bdec01ab276fa9707ca1b30dc726d15f14fdf95ffa3496128ada2c896166a5e0c9fed6bcae02c783f871fb28ebf44be1b46e493fdb2225de65c765ca945b6ad7ca9ab1944229d6ea530f4441062f3704a81b93c76b949bd14d42abda73c3f4610322898d69f0c6f5220d0c86d0ba2d6fe1419c91415cf45b37622191446e775f514a2cb1673c7b309912bf1d5941b4c1a28f2b364c38cf3804d9849fe8e9c1a019a99c9ef0a7101442ca2239133cdbaa99f8718278872af768a69ad88b2cc46268787785456bb0506337e32a907b0e6c9778a8f8527a6c53dad2672e20490b750b4434f7f86534273e4f49af7761be02e90d73cddc774bd21717179dc5109f97230637164e43593d49b39803908977a8a5ed904c81d23b3dc102cb7e09727631e4f6e4c387acf33a2083fea8b52e492473f4c15cd65e1165585e6f987f75c48f214ac384d569c462b276fc4c4f720066e6c5d65647a2d1ebd7f5f4537a4512ad21c517ea5c4c22d36ef949933249d1d0c066dcb83880eb909e670c361dc2a24bbf2a6d186ae7d12145ed2c42363bb4dc2014b2873a34ed9f2ce2d6f2d5bcc78d0b01e7458b32bc67af396a014ab31a7928a49985c3bb9042219ee990e51b7415b327b85ac6d0b3ee32ef953858f0a5cf2e476e146e324e4ea72dff4e0b169ade5bf8c56288af791b5f965f3fa626e57990b9d6bfa99a9d291b65423f1f2226e2b7e1365e74c6de2da025d5f09b1dc9f8194bb0e4991f1a4bb78c08ff2c1b29a1f2769191a166f9d7943a76c0f9894ca3bcf0d9d5ee7a06c2bc649233ce8a436406b88036e813d6c97c47a7ba33208f592206f0e8e05617ae1eae706159b01ba5bf50734c5cea46c521227d6f9aa2da242869bce4081b79da4cd91a4e68994a09d99bf74cf559b732ce47f5e19c3c01e264389aa51808d0ec3a078e48e445feeb62f2506659617be6aff5c46a102578f7e6da60aadcba68ef511b7a22aac352d59088a3ca61f4bac8efeb02633f9957e617bfeac2235d04e27c8968a61ab1832ec9fa470ec1149d5383bca8768cf855fd3ef551192440d4969d5bec5618f1ebc85d432a31181316fe0a46d1f88106c319432c2466573655133af8de6606585629b0db2392667d3117a7087b6997f5bc8f988a2c80d29baed512370da6d066faeefd091de5c4637f1c5783efec76a962d6bdaefd3f9f464ae2a620e09dc5c86a631c23b69d5b83591801e0e19b2d6566157fbcd53366ce8d31453daf516ae4a7948c893648471cda18a92c78f7ae16a1298e720983e5d44d6a60c501818ed60ee393e64da08439f73dcbc9a829e0fe089a924094aa44402080531810c3f255459e92cd3d59b88eaeb31bff3104f37c4fcae1e1102e67600351ac7acbb24f1e2b8efe22e2442dece35cbd1df9eabc7eaf8080ac8cf39f83ec956fcdda8b3f044cfdb88b069c3002039225a9c6130fa4e8158011dbf4ab2f0adbe229fc8ea229949ed659cfc601ecc11ee6f5bfe151e16dd8785e4a21160f09b239695379f1eec64acd0cd1222dc3532416e8f5187933b557b20959a8f123f41bc993e970c200b9eca2996e05edfe32d8d86374b48d22efeef3f4d0924ab2c7eb47efb4199ac485efa30b4eaf90d72846cc6f17444ea10431604969a3ad741057340517ecf0345843d72d887194a1ea80e070dc8ba4383b74413d7eb0fe83cdd92db42083773f4459335db1744e18fd8a19d58b5e39568a375b37ab8f407a275c8bd5d6f4044a3714effc3e9b8f4a5d1854a77e1c11974ce3d7d791fad4c69db2e097e224c5ba1cdd63bc695030b0b4e883c535a610a225cee936f54aacd6eae1293fa7b7d39538a523278354b570c5595045930e9493bf4570af02943371675f2166eb07c08459af0a88919b06afca6001a2fd64db44edfde37fa4e802656e44ead7830bb54ac32953046e14e8cda47e5ccd894acde29b90941c896408783eada796280bfde2114334794eb98448177d8b08ec1cdf486e20c91619a700aad02c563ed851f28f44e5912f2f8a6cf689b0cd8cae318a0a6504be523f14c535e279778a7194b1b856a649d42f3ca5c2f658049fdb56e09921a91a1cebea42c6cbb702c55443fe5981f58c83cd07613053e41f810141fae375d881b72d4200d48da2d1b085915f9e56d4d31ae44bc074a6e19f11b9c9d5ef810581acf6eb24b72a7a8545c053d8eb5efa986b027be6aa7e81c847a65edbae48f9b66c927a61134b395d8278492903712e2eb4fe603a8ae58ef1e09337d93a195af4939cd2bcf35c87ba0bc26096aea63b3bc98d24d0b5e59e82ae323cf5e67440297640e91e8a1b05c1194757ef68e24e35328b13bcc2f2f3981de61ae8de0ae44a8f96ac98cc9ccc895a43b7f416373fe821588bc3fae545492c8468107dad574d216b121d312447e8e00648e18619684ee5100ab9b30f8e330c1645292eb7dc630756d4c5910c231475dae061d71ea34477ea5a82b0d28f03f5667239ea83bf7294ae60f3e518a586b8cd4944584abb19bb1673d5ad74c6b8473252011774b2fdfd1a041640650d8453386382728d9260a10ddcf3219f9dbce78158e1486885934ad80a271be7c9931cd4ca48ed6d05b81f14d889d0d43bcff8632c87d14cce25c21df967b61471c3133c65e20f62ceb74f2762273b6c84ae1ae5de5b9c8fb8eef6009cdd04cfb154a67a5c8b4269902da56902494ef554970124998adeb37e9680226a32e4619b4332970cd43ae7ed7ae89b5eca3aac9fe5b748721214a6489d6c5796ffaefe281ca307a90e0857c6df4fd088010db601bbfb2d95116113372c1a160321463f2dfed435eb9d3980952c1c87249e40c9bbfc2302f3490c2e4277a6a1e1f80204ebe936c46c43e3ae6014cb3ab3483d70909620e14b8905dc15addfd6734a3d341adb9ba51ef6c14c85200d7a2373813ee353d248e86d8a9bebd15e6ae3f1df05dbbd69b6b9b3fb3b057ea92771ef7fad081130ca3af67bfae8b13fc491581498c22566ac7fa339817a8f20b26bc57da3418b4b92732a0b530cd3cce15e24a86c85682273862024e93c79a66f37ff2c0c70932763bd5ffa49c3c3c4152cc62e368f7c42aa0ec732a40b96c5cda23186f267930942057e1adb79152447e7494d8c14bff49a0d5a618f6dbb782ef5c9358c1a6bda7ba85fa999c927de2412112ec058089b0e4543808253667aa0677230fbc1d326db821f364e6ce2a19874d039c4d8701bd391c0254a60c59c6b2c5c30951228b98db5d84e29ae22a480e13be3173a7fb9850a7a1de60e596ebe3d0f944d853ee1fda90e453953017c873af7917b5829073bca430e0eb082eec0a0ffae0f242f575b9e3e691a7c1889152948e9d07827c0d5b4482fc6a32c2db4ea2fb7487b209830106b60c1ff14cd963c4f0b1d04382f8190c292d361db024520a8de7aaea9b4ab1cb7336a0e521ec40bd9099cf5cdb0af382090d4cc1194b2b1d3acbd07f10c142efdd0ce173ab587be6b85fddcd64aa705c26b3bd397fcbf69cc9e9f0446ab194a6f476b89053f2b8d0ea96c06268022eddf31208d9608375a6725ab84cc15f42c88f0495e412d21a892ab15f59891d9464836c1c5b34d131a4594fecc23d207f509ea3c92c4e730b161d1270e3b30b0b144363159a30db39c10e9e2714bba8842dc1371d4169c05aab0991bf312c1f376925bd896f677dadc26a88107673b6539195e224294216290e28f10700215fc1f05842ec627ae5f41330b9809af01b48156eb112988f0a1272a3cf3a9c0952ca09f239f59aec048be137f692252e255d53241b28f8e4d7202baff3f3c34dc29bad17031e5a243970b321b4cd34e15e2b94d7d7be71598cd1a9495d8ccaf761f8f5a25450b643b31904e25a4e0716e4e17dc383f9fd119c63cad78460c704ecdd4becb17d468110f3004ae1eac0d0928cf75a63b9239662bfcac5bcb20af1548ed0a720bf3cf219af4e507f29865531e7b97780c95ea71b966de77a3820605c767f7ced22acb4e5d016e8db5a17ae9520cc894f7bc2101bd92173bfe4ddf17867f1ca052391c9adaa0c4b560f4865fe40762acaa46d3e21dbc791bc25301b570161ba57ad95edc46794d1618cff1a67e601e1f2acb18233f91bcf59922b5157ae0ec9bce18681312aa270d49e739cfb9370e7101b589022e20dd7a4e85d71b6ef274d0c03b411b41d1382c3203ac24d220e75eccacda67cf30dde7c8b860eca7208fc1311a68472fb76d1204733e485c1202a0134ae8b2dd78f709ea278c3a13884ad7a88c22dadd1561a509fc6a6e2b4e0a93eb22945a38b92d0acb0a72021f0da91a24f264cb2b9ccddf629d81e4f7c91e2d01c3b18a38acfa673d6ce4e92edeef0029981a7f3b7d442192706a200ba7740a7b3232d371390c93b8f5703e0e3aba5a7a454f940a1c02525c44ec2ef9c65875ad4efba1d718b1993f2f041b6d73b93b49e27d3feed031f6cec933a14665a3f2c597fe750f72a167f00361b6fff563cd47b262f3e566b9687182dff920474da9c03e6302b2a2bc0fbe64cce45a7e11e3aa42b08cb9960e3bdac3a6eac0b1ea0a7603a08b5d74a923f24ab4bf0b26268978cc034ad669c2678bcabeece5a49498fd64320fd3ed182e680a9621fc1121910a827e08b7f4980b2574ce7e01d506c6622876b8756c132d1450a27e0ba0377f14df6efd421cf77983d28dbf11b94d4b3b9e3bf657d56fd53dc333cd2db9a82e244e3b34d5a9d98fa4433e16b301cd1d4ca787b0e86e56d6acc446e91f4dae4cee339ebadaeb7ddcfc7205e8ec6c325a7afffdf20ff90d5b76a74e5042f5345565c4f290d3ec84b10aa543505000f74e6c1d3512e5af580217b2a6f0fcf6fa6ef9fbc3f2cdcd0baad12f9c35d9d4966e2e4d1052ae07eb338b031b90b733de4d4c9c685173c494e74556be338940cffb8ad7b21698bc32a73d0f974add3eb5553edffa6923f31c7792bc73e173d62944c77ed648e7cb7665a354304330cda6ff69e253256e850af88cb8f6e3e0fafb5651a62cf26b524852a6addb1ee45cba11fafd461b3d5ed2bcfd876da6e4debc0d85038db2b982dc889cec58630c32e99cf65622c9216cd78cd1ffe3b8ca85102c220587595f0551d756fd5916912ea2f8a46d0944713d088247483841418edf0c6dc76e580f89abc6cb9a5a66a44fc6e4d02e63fc2812f8eda0721ef672f24f573aebbfecc12ab64fa66c7cc0511fcc5c47b21ca9791726adc1cb19349a036c984020ef9c963e82d4f291141c2296570c99b263beb5acbd416dab44e73fe02d944f91f242f79a9693d8a51cfbc906e2eb9a33ce6afc9ce832b30b1ffc097cbb0a96459722e599d8852843f837390d3f1043cbfba31b09e39713d7954328d52a6c039f0292aab8cde6cd77474f265ea1432344253c6b2346d8181ac1e591a1a8fd8e8a8e5848b811eaded82878e247a02f923fd1d351450a47ba940ba92c93371b07d2cf4442775e51fe592064cdf11c702206be125c0c6e48b8d1bab667f532e82b1e18b4aaf85057ebabb60ce944719410c8b424d692efce98a423d9603fe0c5807f5f2571dffca792d01bebb62d503543c380eab6330832261b4e18d0ba8160cca1ccd426c4a160019927cc5d321813f5d14c0424150180646763a7f8a155a7a9124f6f838ac563a332990756610f0215fa51f72108a21474680d04566c62e890152f163ffb703c196a0ec8e8e8340d449c5bcddff900532a811b62d7a32bc26be893798d4bf58a2da6447e76091a8f4b7d5d51f8036613c9d24314955540e6369de7f60758bbd8c63134870b19b401e887d77bfd4c24b7474ad6bb251082d39d39339f8edc88e0ca9998b41a3fb42c1e88325fe79c30779c010f85c9d36023fc7cf20c6807a714a8f83653e85a491e13b2ca5490f0db3814e8122e1798ffcce8832aec00741e32bb050e23ec09a4485b54760c73dfa91e2478554f95a58a5cfe3c710b47659e8d83d37c6cc7de91d39743032c2fea19186b94cd2695300887fe88af0ae8050f39058b5aa48eb320b050cde9e6489594afbcfa9b606ad14657927b55265255fea8dba2a36c9187715d80af4a262a041156dec0dc6143ab18215ff9f970f66243afe46f81bc9a86f9b0691f97edede2baf93cfb3ec7f9177da2903a5e14414115e9e1ade858873a03c822905d4209cb10e05b4a5032351a8e0460796dab711925507b1e5b3b08b65271026bea8b03e57ccd74ee4d7dc8504554323b5c095c95578d363f84ab26cc30ba911b96cb3ed1db2c8447b2ffc697cfa4255eb703b5891a3e733e62d9d64c8dc0da2a8e9b4ff4317da52dd016405683ead22122dddd18c770c1a5313876ddd5daec0d2f40d5b38b738216031eb580a46b815d8a3edeb2865b2108c2dbd49d1bee5f41c777d27af6701667302abaa949a094b1c65283f343da26066a442b77f37495098e6ee1226307558c0a5194279b8f74b0be611f58de8628b10bc84340f0668e65cc83db2b16df9cd7e488d352ac8d0aaf0b28697bd6a8fa8eb6c4a7a49b30dd9e373c6fd4429a9b97c3466eacbc390be1fa27492d9650055b52affdab1d462a5b7c124d801bcb60b763f4c17a22a8e3687959fa47fea449fa493d825a3a24390665e66f7bea9f05d8a7fa98fb7a860a4e0816ca7cdef4f7ba0bff67bfe9210024e2e2748f3d4a7ff5291b7c0bd5eb1015abb04cc76912f232e3d4728288d6d413bae0bbdc214c828a13016b0d4dffc3156d48084046d447d734099b27fb547ed419954a57695fe978542c044d5ea86bf9a3e461de3da3374b0bda68e54c1fd76d2601a592bd9cc9848c63dac55ffc5a14d1c20ae383d3f45e5d6290026518875f83a43582c4a918791942665332d2bf22c83e79f274999a42eab4333001e225203be850da276026aa69651f41aa39609608fe960e02f11a06d084e788c74c30d23450bc77119905e2e2126f3dff6d2fb609b47b4f1154d90ef3c02c6ab687b2a0e02805e9ba25fc123749dd9603a943ee381faa7a0ef9ba0c7a9ffddd5522657c30cad62d75675a034a4bebc15c88cd421435458a815bb9057b98b995f6e31da277d0451ccdd1f58a9125802cb3a2ae872f71354415314c97e113c5e285d7e613e0d603fb666daf2285b15607169a0c96506aa2a1cef1ab048b6e3989340e72cdcf5fb7b48342b7b889de4f37a7b29293a385e7a18d0fad0d8c5e71e11db89e91c9700fae744e262f02812becdea4422fbb24ab8d6b281947f2045c38d40a1c414faf4f2156fe011d02b2a44b2f19aa5edeb48f017483ce62370df640496d9eaf2acbd9d1282ad909184022240bb134862a818fbcda80147ccd463672a77172b60f1578e0146c8e094c543c5d80aea7b54238e7ad99da1927e929ee7e18a4fb6d40b843f5206bce31ec37d63ac51e69215028251d964f885e0eb0229ca23638685d365c5914f7fc665b71969115489a57716c2552d85a43e3960981328f9c5f1e4cf98cb3ab12e4d1ee818e5cf18b87c09a50977080034ae0303ec772f0b972ed607a930ec67cc24fca299d70f01eb7d07be3ed8d65c33c906651c15a87d3434e960d021ec80d5ce4f9394c5c9f66d142eb1a55c75cff82d0454d3e053b1609e76aa0a2b67f2696b55f7b4763e810139dbff5a6f60f4f682c50fae7d02d45d409165d007332a392ef87492f7477563162b86a074f4f5e338440efb6accdb8e05bd83b4cbd590d50f26dbf13fa6d51ca834f5f40a8975470a35911b30122e9afeb812acce0b0936a8c82a2a27537800ac9f7591da4055147bed6f557e7db7f3e6df663d6a1252e40d5c58f58b6ab55773aefd6346eb9f0d47149ef01f43288cb4a02578e93ece02a01c35b34e6cb3436cc30e21d2b25872447fed0b9940ca93129ba445f1c618ba5a4918694870171ec1bd98d4a5edacd58df56b08f02c3bd4572509369b3666d36cd0fa000a5f84f5d70ffabe8c37fc81ae0df5288d84a8c430ca5454e07036ad08f8235c6fcd23d614b5052d9fc50f80dde1f7c1c50f74f666e75b8bf421e9e8a5424d20409580b6e624aa0c746d75bcd66910c1c7af79dadd284ea8431138d71ca00e34a8af7cd6cffef1e45000b8105828684215fc3ed9a1db465790a3974564a54c085a1201d19f4cea3d47bcb33a8a468d1a52d0db5121a3c31c5259320ed46509e1bd0bbb79cb0e2ee97743df36e2ce472b07ff5f44633b8cb15c97c952ed005c2051c050b8fc7b2ee14e473015f0704e344693107f15e3ba1665d9ab9d4645fe5c71e97a5d4983cacbae8f266f2cf60ee90b271a37af52f5c0c4ff529b68b82a511f401c6faffcea9d641234926e6fba19c0a111a8b32d373f55f87338e08046cafec95be1c7863aa5910982c22d2b3654b427138d3b3f61e9e7b45bc1730cbf18ab39b98847683bea8250fc11366a5332ba35dd148d9c3a2f83fd844e5cd1e1a2192c12462e6747483a02968d4b151206d417982964ea9ed88bf70766020c85dd908ad3ce74e585eb35874e5004ab1730d64a384e3b1b84c34ce8c2d2e22a805365af027ce7ff1846421ed073303c22030288a097736e8831d00e7961b8dda64b801f42e8bd5b3543dac7b32f928e3bfb6abe48fdd2c93448cb81e90678a3df2dd62adf3ef531bd9985f3b4bbc55f1b1ddb87249c2a07edc296ab6436f56e32caf2b2fde14b842a6949ee1cf8326f759965b46025fa0f0e995a66cab8ea328b96e775e934e24d5ece7f6733da30d040014b5dd224a49cfd7f3c995378f41ef44a493aa66366d6b2a38f0548274ac6f3b8ccb8c739d905358648ea3aafd0c04a72ab965c82402b1c93893626157bf53e67b9f8ba4a88e802bc116a40312312d1bb4a10ca391df535d80823cec5e57ed0285fc84dc0a6d530b0221cac383e7dcf1d8185c3549c814e4a02f57d810f48223fe403bf1f87e6cd4f28077bfd531d99a5a70c25b04a7478c40ee80d2bd7861cf8ada6c62c840c5a6c1af5239dca463f9bf882b9da83ebadc55961ab0e010cb08e79ef3163714eab4dad3036243f2d4477e86bd37b186b189a348fd68a75a118620db2d6eff68498f1d6e99504070419b4f6839028ab5d4e01b1558d948fa8df94bfe1730f0ebbb85ab107db44e00adb115253d881f3466bbe13bdbbd84812ec6091dce31018116c052a2c69f15b65bc455a6a0f730bf25e0210847f487761afd66eb068e2deb5a2b2da4d4a116ea2b48248e58b4bdab485f46160fe93f9ab92e3a84619368a9a41a73d2097b57db96c4e08d58e83f6be1623185d3e3d81853eb5d1e5e8e434da66982b6d18af3909204a5735b94864216cd35d2f14e5a698b0f50ac1d0eaa69159dba56e5acba54b7cae99309f81f19e7464f1241a73c088a1d6ef4a6725f2b25aa810865737044f480290800d3258bd73713bd52897b6ea0a8700b8b5e63948980fd3eb8665af79823b70f01800129d4fb6e590c088109d2b4908811522c2549362985b80032de16926c5b47527265c45e995f7b4e43b1124a51ad3611f93366250a4ea2bc5603796784392e4b9e39f131448b48ea4bf2927c3b60e4fc1147c820c477c6dc3f06734152d1c5b2abb5fe3846d9d11718dd10d9530260f7bde01dc1d9220b0b30c0c7e344a815c35cebe289ddb840ec40124aef501b1262ca41128db2b5d9852392ee67d13d975ef5100272fefb1de319b8a2c532252895c8227935fede6affdb7653814b893d11176e37cb6c606e9d7a6180fa2bd22f5f51a3d75a2c02253a8df29c0f64bacfc43d5cf8e2209f453249148559d5955f111afdfdb181911939ddfe28093695ce61e35bf55d91c7870c80fbd3ff35db2edba1bc999b6e18e9f58d30b02d9117714829bd2a859858a01991c55f1e54394db2dffd0f5091da1ec3bf283849407845216ce614785df56fdf718d54a14582e3d0b80c1ab3cc739e9be32aee91b62872f90ab8de085ef9cc10517038f0c097c781bfc0895fa881de735399627a6878c259990dd8c1e9a005ab2680e09ac1c79210b4e5230426e10076f09a560096009d5805ddf388a4f418d48efb4e0f4546cc59fd91034d1f003cf8932f49b033dc52a0b7ab96ad15f141d8fc4c5869dd7c8c4f30e73ad33917e82b4b7173409e277013e345d8e301b13946dfcc3cdbb5d0826af9738c80ab4643f451868734ed723694382b96aa130e997506ed0d6906c3a74564c5b07d54382898b4378a27534936d1c15bac74081282d3e3f67b4e405682ce194ad3d690ac374a27f7d963a98b6c7d9e8999c5a69decf20921c3314e8254d045a918520a349e10c1aef202bba1d53a41030f268f9e205fd6067d05b8d258e3205420ceeabddc5f96c8e5fbe6e85a419d050fa7390f704ba9d014a8d43e1110f6b21f017451072b26ea2269e69d63f0bf4ee46c9ece08c43c7088e6e134b7d193d0164aa0a488d025b5d0aeb0821371919d24219a75373c82742bccd4e3308dfdf987d7494467631fdd5a494b023ba3cdc85c629993999cf68db81c8d418f0360210f94a5ec5666f03e605bc40e99705da53076c8c01bda2d3e698fc820ae53b17f926b73d10951a3340472ee87c0481a60868fb2d5a8c3369a606934fe4535d6cbaf37f798e52c5d23af2d2a5adacc853acf17a641c1aef6ec16f4ada6e7c39de979bb946433abcd729e262d6c3b01625647f4f7f4651f6077c489210a42c97653c29399b8b7ca1c93dc988cf434092b89f445cc7df878eb1e77877208d85f8d747496aa3b8dff7d3a6037c44f8e338367cbe99b23b763dbe36dde493fd57d8ec72d2dc0e58952ffa3ce24ea81a067c1cd0b7730bdfa5a5e03f81a224c35e7e8eb4e956ce81c5bf0707fa88ed4f71d8f09966e67e1770e4a9ea54ac474c81042007bed2da14ab79a1cf4794bf2335fc463619f2518e3d03708386efc3bf5f07f2883a61d5309071a0dfca7df8be664ae511cddfe2c0e133cece2d7a97ef7df9a68c9a29b58f287f294caa2aa74f0f5e8f7aabcd947bc0f7a75944dc3d565a0e0801eec51897eeca63329338087621ee918814a7a68b162a3b928eec02d2802ec4c7dba2525097e5e3e6e4abeea4500e09cc3145a6522f590b4af4cc02d155058519ccb730f4368d4303fdb1ed25ba4bc873cc1dd721603c26f2b188cfee03c7b98989666855f8e7932ec3310a6578eade358523f8b8c042d222e83f56e1c6865592f1c10d3056c451bc1566c4d3750918c6d7ec86abec451029dae480620a5ad25c89ad2809dd5559e5a99e1227995310714ec3a545cfdbde2858e8ac0df5bcfd5b82457ab9f67d807b435af383cf1bb4a6732f98d96e9c2ab18f51df1541141a8331b057b3a60209852050d20833b9c037eb66a02547c184801a1ee93c66e03d9969d5d2862b4ab94cfc1befac506d445e9be39b5726f2b5da1e38a4f58d389c9524aab8051185bba43044ccf963bd0ce6aa65fdecb866f2950df37cd24cc87b1d19fec1c2596dd9c9981d096afb65c67bc003b88a0fbdb9ba19c2330ad07cd8fc87a18327093adfa3ae1aa09349a2d7c01095c96ba93e07820dddfce89137f47600bafa9f3294a5ad5cd34689bbae7298939971ca538db64685514289450202460b2d69bf9b3c9e06aea3fe0633adf95026e67dd532241f4f77554ce2e6ab71be9cdd2dae42a9402430a9d04012f3cdcc58a3ec5d16b0796e42de87d795f2d84c0e80537d95192a37bb6c5158ad226b26a79a37e6dfd5d339b441d250737b306d3060fc782a31d2859a46e9845c44237dc519e272810c13729e715c382214348bc375e4b37f92c572e81de674946de52e1fa0c0be93bb2214216431345003de4b69941d954af8eb2b5fe2378b2bf69943d91f39ec0e37b0bc919ed61ba7ef0702474743d3333c498fd8a14272cad01119da19b92de6741efb4a44dc8fc28a16f1fc32c740273725ffafe2d4343cfa406211d36f79e58de003f2242d6772444103bdf043c990e0d767438ead847848c023704fd24143c93ab13005b425c741bff598545a27498efac9369d76c547e2bff29c786c66344e084541868bd35e593864b7c220001b69ba3dbe2f0c99800d948065c57951dfe42e0e6fd5f9b826c610bd5f9db32a1feda7a71b66830651a644c11523792679b4b89352b36e6a0013a040cdaa74ba372fbd4566ca36671d4e5925b3177a7866526ff17045f3c675bf24b83af8ae10a49cceb3a0de50e6bdf6c895549d579eb62426927c651c639d857c98b4a5cd5d7867c67059909e932ccbad4e63ec812a3350bc366e3a7b3fb68d396396887306f076a12f9ab3d1a32d862357ca39cda9f9f06135820a01a7c5b1d6d8c8e933b4543fa8b102f5fef40569f286d19dba48addcb4e83ac8ed729069fee64ab96bc144fcc6353e892dc6822bd2309c825e2b55afdb315cefd3178680f515e4fc44a5483251c7e84466b5415cacc9e2d9d718d026b9332865620ca2ac64fb3ba0113e3d0b8ea8ef3e4eb5c33451ae9b381e57ca93721cac9b2bac6bd9d3f315de8a08fc79a56b78eda7505150a2197ba4acf1efeeb2aa95a207045d0e3f432c6578a744377663139211c3b3f66e36e754c90d788ba40150cca3c923209cf96757410b5170da0f58843cfdb26e9952293bc079d4cdc4b43b1100c0b9494812fcd7f88d09ef831df3abd7c92f3da1c0df7cea03f9e438b0cf26070fd63cb4daf73a841266ce09274d8bb9f8930f1720383dc546700378ee8c639b402a934cbea0b4d53d420ef7199f906e9086a1bc2f1afd0968903cb2983b49d70d7d28d3274374187975d6fa8dcaf2fa2261110ff1597d17d9578117a5a331b34706701aad212bccba739dfac8977cb670a43bf4ed790dddc4458bc0cdf5d698fd87c50b85bd6c5b499edaf6c4dbe00aa89e90583864f61c10da9c37890ec0b4b434018e89c67e0cf006ef101b9a2ac1ae95bb40e335dff73ce20cb5ba966a4b96bf6927b8caf1c36306a255158b0cdb844efb6876d633174e55b29434bfb023d75b18f8bc207943a6795b927a3ae481c9719c16893f046690a248fdc7ebbdab86472043c5abb89e145ccda61270d14115cff19d4311cd4c450613d4b0ce4100aec20d96ab6798e9cb2087aaca78d77d57a5bdea8a91f9514e33ca9cd78792d22fd16666cddf335d24f11c8dfc9391ba68e6f98a2e02c807d8277b05f2441f72c86baa6b6a11651f286c05322212b80197d05fb2f7e8bbbfa0802093e6bacd7f92e7492968358260a6d2febc1c8b953a33094946bad528bbaacd2b040e87ea6aff2438608dd9e4e090854ab117fe3fab9a718e0b313b70301b7097aa6b906c2e9e4bc2d6b900d5708c4467af0eefdbe50f5906b6e94a819a3d0c4be75b18c67aa1693af5d5232eede77926afd402106f031224ad209a2777c7b45a69f91a55256fb34e5a7542509c9c8603591aedf5a0988a5906d9b319ebd375460322d2de2cc4a1b4a1e56b7c38790cbf6c90f8306f8f952ea0f16f8e4de3200c97c820b0a4eddf79f2861b6a1daf14be3639ff5b61af469b681fb68f59a122bdded75c1aa1f8c2b94c30ab5329608a8bf53260a5205a8e07159c73364ef06ed004ddf4fc1759ed975bc1b619a8f8939d9a38c9a74ae94caba41e59a0bf3c15f1b9036f93e8a8ac66807518c0e6a08f85bb83a19af23e9e27bb4fb43517b0a82c2d3f2df9aa9d2c70516b49873a78add213355ed02a3a5849981a4962ac16aa1344061ec20791990a8685668553d0dfcfc918871c60c75aa1547cfa9fcb31a915fcbd3d60fa9d562852ac924bd02bc51d74d181b3555264a17b6b36d831499ff83e9da49ed1658a7830b5721c9db9b5ea3bac66dbd3a3c5ab3269afcfec7c4ccfc382b911c77a002fc30a7a2481ec056e0a16c99ce9c7175b86663d2bfe57de22e230295eae934a2842209c5b401fa362fe84b6434e81b42eef8f179baf72040ee48c55b98fd4ba81f4f317553a92e61c0ab743d9d84b4584f92e49d18d85ef00ec1b94052b55a3530ca01a8a032172075ae8045bbe6f909d2e739d08ac01c77a570adcb210321c895e1b34eefbf2f00ff46eac66f585c4524f5d57ca6b3aedb84410fc2abd01b0e2fcc9a6d8c5518956cfbb75b2ff53e50e9c9511c8c21d739c2facee2349ae748d1fb57118439c0b42c48848ae4c75f105ef69485161b10191a3a93c6c22c014fba57e8423612bea702c60c10de316b4f08d7358bc6fc31a34397e8f1a5034d8ff91075351014334ece1a0248797e037d434e82178d998a7177f8447ba2c10010251328eba10c71d5bd9f0ba0e22008f18fb791bd1aaa4ed9005b0a1fe4705e564a1f99a27828a89a56fae6cca7b9af42feac3dbea5d3d41e11556a4d9533469f42939e073f1ee48abd9beacc6e7f40cfc60f98f224ff4e3bf911c13109c166774e60e203ce81e0ebee37a1d922ff2e8335121c140002f68891e302e12d5b69dcea317a6d1baf916fcf711a64baf41ca21ee3d31601cb22741ddda80915065e00007f1efffd178d95d38e72fbe8b83781600c033b454c622c199a0fa94ebb70af71b6b47288424bc57ff769557d04687c88a3f517cc5f57c2899a905c7742ff07149050bf83d534353967d4511b5d7109884b6f2c38b39aa9a9115ebe44a290620e02629a28d565b1244263b59c9e905b22fdd385e6abf251d843580f2f067f5b091c6a92575d7d4b5e25d40a5072edcab3ee22053b911824d2cc7a7a3d50d24f7e1178defa6a0e0e0a57c8a820ffef4569b9aa97a7a4031112350f3f26a38c29f424d3a6578adf87296af6b582229d595b43f0205ffdf9f426a7ead95d760e9d00a8187436d751fc7c56170c1493d3a9a5e1ea1dea3f310426501754e8dc30573171f5ffd3412c347efa64726e279947e1817aca3fd4550cad52c4d50e9c389ad75a0490f06bf25525bbadf91e46734441242c5c9434a9a38265e906a2af4de956811aef7ef860709755b1784d0c6466391ffa390c6cc229923625bdbf68e86b4d274908255d72cc1b722f58856f4985a19c87d7c3a2e12a6d8f1e796823bc4842111cc266d11cc22be877e8279d4d589a7abc561b6f9f4424361e07242c0c92bf7a729a57111c3313b53b82c44fa4af85b6be019e4f7079f60c1e63ef5049d16496a88cccc36ad99d5ef1481aebaa9cc861dfb3c5bbfb63727fe3b649422c5af23bde612eebfdc4bdbce0b725a796a2e58f9914ec70f851e148e644cb0e7348102755fab41fb06822028d3821cd475ad8b2b42cef91b71b9af1878ac6f04cd792808904cb906360a7e0d83272ad343e9494d7e6d31e38d049a6d0cd35cb1c0fd9597ac67df4c8b19fa17d88bd579a804f89da07d3b7a7ae5e6c06daa18b30f903ac51f40280595b0c00a48fe6956df58ebe05b638a39c625ff32019e14a38b48b35512c7ae313440ce92e00049e285801ae361f42c7a0f48d7d13a3654e060d867c776f539175969b4826828cbe5f38650eb2ea2ca8a42f7ca79dddf615bc6ee5caed49cc91abe005b90c75eaa9740f46d416344841195f69b75d92bce37d6fe618df9484a3aa70f6354ea871cccad5de02587f4196e6ccc22aa2814411bebda513730f95c2fd8d67b6b05d5370e0b29b574ecae46da3dd4e9c91c1fe4c3bb4d53992a0e6a0400191aef4026b64b53a609ae59331df026ce28a45bddbe4521a353a5e980d66d7126bfdd6ccd6d37dd3b64be1228d0a980ac871f3bc8999cc19721bc9fdd2b1941f3c8f9a4ab4e67205b4590d9b3bf5db6b471697b2c15f920b0d4fb2f8811e982604d705e9c50643e9238c96f0dc1a8a516d9dae6a455c9edb62e47d657f06c81dc5973d76f595240659303840b24a6afb86e66be6bf0819b6114f065511e81b04362e884bc17d03644c77f602877a38272efa4d3110ab3f2ab33386128636495ce457d5da71abd8a2973623718ad48450c0497fe18115283a390e829eb866330d5a2b205a205506ea7b2a531c43759e9703a108c137ab7a95bd021cfc3c06138449ccf21cb3110aa3802e04c3dcfec255b2e29eeeff1799e478e487173b1667004d36e0c82d35da167f3f7d00723ac1128a42573eaeeca8a9bd13668109b685fb023ef6e3a09b298c500079ca20a426433f086b15183186b4ee969828b754f1648677c98bd6ab6e631d1ff964cbd2e34baadef17ba8d1092951eccfe3d7f0a38cb659819d0486ab391b312e3bc495e350227f3f3670e7c15992225b0276ca29a1dc6767ece322d2962ba38d446c96a1e615672f0b5dc4151ab2dad97e4132d9d0be6280c7e91e4e693761ad549f0fea9fb4e3276969d1dac4d22b4d42d2c5eeb4333dfdb22084660b0b8a6005578b7ca43595e50d22831dfecc4d115b818daec1c9dfc1f0616dd6a0e9c66f6c905db76d46e0e0c46b37480830ca6ede8606d035d530e6ddba9ad093c28204c991020597e494b89a86479250bad6adb6bc89345d687cd8021dcc452894e1d40a0e16c67133c804dfc54e03a3665804d799af5abe8e7fad7e78f3167d00a55e45ccf5b40d20dbb0de85ddabb8cd4ba878bb343d2077e3331ba7c587a8600772ceb5d1fb3af5b976f0872175579bb8ad3d47d90dff53961bbdc0508641707cc922018d3c41b8c388bffbce21dfbbe1a33708509a28bf84795e7258e6b1899d2a951c28e15b5f86826e5658a636028b4de39d858d179be1d92c1978210bcde895d341cbe1b1b53797706110f504085fd2ee429463ad9bc6152ca05d8b52337524676634f2dcaab0a55f31c42688d74527c6bb768b8cd97ca53099662eac6c13e18970d9818c5255808d4c45f997d47c03dd4b14d508c4c7b2b85f4fca979f4f1801cafa766d141089b1835dc214ffa6045cda6dcd7332edb5c16b0d8bf2737db9396ce17a06a9c6c34c1cade5a46787ad820d8c6b543c6060f2f6a6e86e8c0d2d1551b3129288a7754262e4a309f4e431592d8bb919fbea8dc7de05252849ec215e929770e2ad9f46f534a5873bf251f5dd521496ca2146eda218068b0b90d71fe5b3ed6673baf40ca02cc6550ea90b344fc11702f9826dd496240892b856d7e5e4b3f9249f9234b009af78804d53ee826960001ed4dc172af4d78537c6930310548f8a65afc5917bdfe158f1f739479ac608dfe36aee05213fdb62100e3c201d44cfc9b2bebcb0af1d56282b9ecfd937c507475e8b7d76292b570be1f7b9cf9f6cdd9dd099ab7424f5b997a92b74d6f08642bac25caa9d7c29455b682e955bf836afb73ab67118df82b211982f5a2dca0072d01936de533c106dcd29ad88d400b7c9022ff5d88b7d3ff5a7b0971efc85b0bbf0749294f9ed3daf2dc7f81bbc5625cd0c076118b999e33e9de0c4acdbcf261bf74c8600c9b714bb4ff7fc8b39525ebebb21ff6e78ec75d7e3499e5e852efe98732e7eb539b5df54c6dfc8913b305930a1b34216dcb9e6f63c8dc1b01e1e2696d678c20c50e171be916b9e9355756cd3ff81e7a972522ec361384e464e59f9ca5b021d0355ea9907b0e1f49868a67953fc83cf8f3d7803e1e940afdfe730cd103d1768e9ea5e110b51afaf6f6d682a95c98d53ccda7fc53412c983867fb17962527d35ffe95042205e6b85cec831501206cee1f412517eb1df9f24b9e1356d60091ce2c7ceb18615f0ce3109b7d17511ccc2608202d881d550b0f0e95c12710e7322df2bfd38a4c4d2d4e410ad20ecb9803540c78b911263ed882512659b755a34ec528b8dd2dd0db520d181e338676db35a073060a7358d77194c9762c165b742e28d68df131b3d6456c38f424a79d1c7f07536a5c1dc715df4ca7d663d4327dc277bd9671975ce80820392bc8344c334b62e9975490797735e872d9320dc1f28f4799b99f747e6b9300c0010c195a7a31f5a5cfcc0f8d23943750b778cea4aace1339d8539e02142763320a2a8c2631fb91a44a0d5ca7b1064d2fd39aafbdc05c9f8cd8bfbaf763bd27eb7c89d139cd827f5dbfc879cb893361ebb6aa8abf467599bcd69ceaa725f21b4eb7789f041d0ee9d8d930235e1876f7bde7488d382b649656bb688093d0bb10d83200c6b40f467e67646c3ebae756007f37cd097f56d6f347fbed41c05bf9de116226b482e87cda4a3f7bcb622f59124a0aaec03c72ed96416156e4fbd26ee10b9c4fe78582a0a1052468a391620ee9f6fdc9ea25acb3e6bee0efc0465adc21ddb73f4292856349a19925a15874cf4c2f5b221c2af9b19c46f2a9be03752b2a62fac4f42030fd80fc3d7fc9ed87ae6cb32845b8f8a085b2960d50a206603b2bc6d7183f245464fab23fc2e8fb02f72bdbffb6c42a5699afcd1a477c625adde83a750f3e279b49bb5a11b122c1c2a092e799a2c27f8fba4aa9ecee21291abfc75401fb8af0c2e169a52e6863096529a521d955cfaccdca1001812a513729b77b60f3fbd33cadd9b41eb19606c1de06814704ff98d70d6e6fbc6085f0c73ad6177915838021102cc6545a2d32b2d668d90396e741e503811a7a5e8ce5f36d4b5236f3407e2a85e2030ea97d702d69147a99a9c2974679b77444586dd0dcb250cf8aa2b134b6257a1d04d66ad6dec88bb588a415cbc55ddb0cc7781604613c447e7e205d605404db0f42d1423b29ef79ac0dc26f01b9d05a782634cea3969c435ccf8b0c639a16eaa302c6cf62816658313c6f462630c3b6ebc28366cc698120cec4672c200524fceed8cabc5c9c6b2a51c9346fa73bdc027a1033aeabc18b9ed6e0c93cdeb8c776baae49a87d2d393b4bcaf8499a25ef2843decddbf96c25286438e1bcb49c6ab2f53442eacf6b25920059b478c7b9a4c708a543730e57a6772173ba9f8c75f4703d45629efd34684b6eaf6da03ac32835b65d5f47e6112c45e7a0a75156abfe76db1ae364f547043f76d655bfc0fd759acdf3e7df922185edd9a4030e0e55b72785769f430c6bd2bb93f9a0b41257ddd5dedeeb0d4b6a2cf8ea80f30dcddcc823eee78a601b3e2694fbc4691c4a52db84aa74f0b028e9f686dbe1d45b8adf1e9cf6de5563902ac614fad0c04ef5939c9d3e16f4328597456b5c100848b77e49c8b8205aac263d85b29e56818ffd19602126ecf7d877fc9a90c821bae7e0f3cf52debcf6ea1ad702826f560e78dc614e5d1f9b2a0b40b91d1d618a644901d8a0657056bc7d5a92cb490f634f4e54391a46ff0fd3d6afb02b2d74e4d9b0ff5d731d871ac0d0f7e0d5835c2a822e45c301bd3f8218e0b0b6a3ae6755e0fe9d5e8acd2eeed40e099d20d965ea108b323780cede2f59d4b3449c0b98d74d93c3765cbe49faef5e74089ea86a6221f73a57ab1c7c952ad7eeb6bd6624e2612bba80293aff60a4d1befebf902d52fc13e3a1f60c1113a808166677f2b7afb5e63499539b3268bad8e01d4430a680901b4759f64724a7732a59ae3c07b7751d9443af7ef065eb35b0ca96dbd7959c34f0d655935121ab0ca95bbb7305b44815424b4d072a004f5199e9ecae7819726121510f491840add03d698b17188d5bafd0c035eff58771dada3a37977838b96e68d1be887aca14225cfc26ac71d1692df1c88179cc0a7905618848735bd7ed24488320c907a580fae9a74d19b21fa4218057a8aef30d0ec1dd7109c53147f79f44fa2458f3c3b07db961cbbbf01233eb4e569a103c0f4d51fb7a029de3dec877a77d7426dda921bcda9b2630be9c7c1c6f48a656279b9ddb59a31d5f734ae0b7d3f121de1bef3b5501965ef03b7a3a82b6f39602990954aabf9e018389fad81ca1aabec678262c6ab0a8cfa3c5cb9a6540bdd59334f58622ef15f682b40f843f5c32753d0b2e43be6f3f2c38f6f7a2b21c48d6e86c84892bf36d5d5ce496553f6bff888e93de671f2c89624c5e35f7e2638b7f8c21a08c469408fd1fd1393e2c05a0dc1ce850253b47507c4a01d5295652e67893ecace5a7980e3e3c80476c18518ff04f9ccee262256d9e634b0c88521e058bffbfc1e62ada462eb4f977d229aaa3d7af8fccf0459b3b8a24628957e6b842a40a588389b9c777bc386b8ca503f1e0e17e1cad245f14fb64a1a459095a8308ad127a26e727478b9e7d3d22ec6584b1229bc933a326c1634bb13dcb1fcdb7a416a240de254552316976588e178de2f8e24d277f52b3923fc20e36a592896ef269c450993d3a56b8784b38be05007f2bab628bc23d8c6d4d8464ecb135ca86b13eae2c52eab70cacb8a310a09259c0a246374ec06e8a3f8135880850a3fc32e43a9da96bc79d04b1b48455dcc482ac043e7f4b8ec274824ca33ad0d7fbe51781075072864b53c335a6da58640ea0ffade2d7c4a032030bac54d106b14fa7219456c21a38553c3cbf7771a6c5be2edcee9ed8279315248500ad7f129fbb28d2ce70a3c4df1245f94ffd5fc0f270d825f58adad0b7ee84647daf19d4925be9b209d7c68196a2764dbdcd97f7b445efc63c6e7b4dc7a0f0b313cb9c659b9ef4657a6278e1b25d9d1045490d94717f6eddb44fc4ed914d32d4d2b12c265f8d2b32b1a57571eb42d5e8087ae39c16157b03ee361dc2ea281d405a1cd6c620cd9267e6104a9838cfaff30d1a54f15cfaa05f056b04a800e2b7155f473cd101451b16cc9cb7ac141e8a59b134159151d262563f44c0dbe0272725b359dfdbe9566a618817fb5ecaa9a0a69e76657a8a4a42ad6c39ad04012be625f1ea0a83cb69e16ada5e4ae457c486bdac97688cd7e4a98c0f9b93d972dc10185a0326c87ed7cda990bcc162a4a4ccb613c05009c1784639be17cb34d16017f086e4e985210a3f2329fd179654aa32eb0df6c2c7948673a6a3d21b80219ba1014c520dfbaeb1da15f180363bf5710f5816c2cb21faf588e74d5256d6764b70b4d5b16ada0d3f0a39de329816c5d9f75a54d03934de38de961762b14ccdc4dea1a455beb6b36f24c2b46eadbb4ce003f72811621d34862959a94b1f94d2b64bd3c038b4bf5ad5cb467e0a18aebb7b6fc8df8f5573eea4484031dc6e162e88cbf14dece6e51909a0d59e6416e2d8fca972877af6072ccecc19ceeaca2ff29bc3b20d35521f77cdd0560a69956a01c8d102354a4df1d9456e2e46d74fb591493f3fc4f8ff187ce8db6b34d0ca0bd21205e45f5512ec7e896af4c1a1746a271e1f5a1e1a54040a46a4b620e05049bcd97b051ce5aacee9653cc2a98389ed63744df6e93c98334d5b528e6ed519214da38ff0d209f17e8f212121f8d1db7b234eb28a7d8246bc212de16ee817412f41d121438cf74071df3d5d6c740ed2f96e96817eb78d293774c9bebfdb4ad6a7896dd4bb3e837874429f15569bab9a8612a9eed6c8291dfaebee50f12c3664118e0db01ed4c0d6445b60a972274c89ac67728d43cd8a5aa443e36e8d4ea76638d21b3cb72123643bf7515a8288f77a1410de8e3e5c77e4075a91406539d075a83137b5004fe05536883d5b3d09b66c6c9d7e14b746673b9486940ce923fbe51289aba53bd93548961ae7c8c1aa1ac30d16ef5d6b32f1d1b133a5c8d2e1934b2826f756e8c74a09a1659f86373f7d3e5ba63d1f24f57b3bdb1f2bf650c314c6c2557d41317320ca8c44e3e2d5b82bf80a3a0024caafde2790e78182ec11e6c2a622b42babd856c2a28a5010e6f4798e7efd9567a17f8179d35cf4c941e3e729b79f2c774562f690f9ce3b8c45326f6d53498fc5d6538f442dd00b871b02d5000682c6cdf673145c52cd022c59176f503a2d467f88b5c10c23c4a70c8243bfe018345549b4530004dd86f53d08c504375146e6e47ff8b12e151528c9036ca703ba7a9e7d5c401616a70321e4cf149bc1583ca7c8d8d6fa33a36cae6f9262bfbbdc5fedbae666e7f7474ea14d87f91382ef05ad3902c3c7fd09db473f9135766c177ccc02e31323283e2841157ebeda4bb09ab5a876139264efddd6e49652a62465a007e307cc07adcf4c5adcd669b20383bd7e20e28067973c2f86b9ac106c11c42b249ec81241cdb3cb5ef54ad358bb02c1ed174e35a7ba614e3a6c99937932a75cb17e20e2800fedd36e9eeebeb327b38761228f3c88bc034176883c6b0f739117822c6e11f87810797bd817da48abb7c80b8542f2e9c7262d6e28572d1e200659de708a3abf1864fe61b0858362ac2ecb9c979e150cd74a29a5d8aa6344d173f2c0a2263d6c6a5ace5c85720543f39074fad4dd625202e3863d139dc60ca7c22e528453a16c7d0cafc855a774bc11d25de70e822a53b66e6aada76bbbedacb1626545cec7d5ebe74339f3ea79f9698d5374d21b6432488930a8718a678c704a7b784fd8e35b3fd1dc63f5f9b57adc1142e1949f601e7788667a65f4454ed9b8ef647e616735bb45418411719a9cc4e39a21933a61667e3352b8a19c09faea34ea9c570417d3eef43a313a819ad04aa59c934ade8183d499c120e28441c323fe749e3ce7e4d9a312dc66972da874b68eaeddb57cb3f948165124dd914514977144821b5eead3efa7d292b23fd28f3ab8f2a30eee8c38f89ba67d4af94e1b894b670c36eccd780bc16d90311eda021a9a1924dcc83ae27af650e3c17a6e641d41f2ec7fc4c8b34f8efcd2135f9804753400816a443da250ac7ee18987d67937b7fac6c3d2afd60881306c04fac842a2090b490b581f707d642111c44242832093d43d636343ec7cca47d60b906835a907e860f0012e51d29cbcc69c2bccf985d6032f10a02bace0c17c0cbdc9b151327518443968b51f27edd49e698beb279ccbf091776809f77483d0dcd929b9f685395ef39e1153346fef3527691ed2e20ded6549a14b0a5dcd4ddeb94963cb599661d8dcb19fc9ebbc59134ad77ee4f818ae836b782210dc93c860db4e69ef5c05af3f5c1a1f9704d1e4439947ea9ce4ace290e410dccb60e696c1cc6738e7f247dec9f591979cbd92532f9c3b38c8cca557afb812e5b14f3c36a53181501e4f6878264b46dc1a06db9330d82f9cca6607718a5acc8bdf894bf5e93cea17e4d90be70d2fd9e471e3f1e343e922d7c1415e7a3f5ee401a16ffa10200d60e74e26c3d3677e3d1d5a388f61e4a5af334f05e7bcf8286f8617ea54f0d964d6f44aff04d5cc24bc1277bc4a20840fcf54dc70024d15be9973c40d275017a135422276841b5934361fce9a9d9f359c8a2e047c641d91e4fb75841105f81869c23262f3fd6aa01714f9c8e4238b26e733898374fea80c835d9d3d5a7fe470cd6338f562b8fcba8c99a58d0c3283e88b751d2c8920c39add5a6e1257e4e1953b6496b9f4ac675426140ad9ad2534bd132c73ccdacccab061b031af91decdabe5f7ea284d7ccd88af57a7b40b4e1ebdb927d5b78939d829edf587db438a78fac98fc2c8ec8b0fd097eae94eafc418e74e8c3296e817fd5aa5a2310c7697bd30a883b3145cff70eeecec7cfb1d750e02b1fce6e1e9349770b99a4e69bf5fe8f545bf90855b899cca28c21d7dce7d35351e766e0444a2f261d724f976d277c455695f4861ecfdc2d38713e87e2125d27d2eb85c0eeefc82e6ca144f5ec113c1f670c64fa05ed93e496369c209949257449087c1deaee8117c7bb72a824d83d81d069baa803cf992e775d32f238c7cbf584610f9c84242e759f8c852f5fc0c8231828a695e55f27471c3d86adad2136f482ce2cf12df528b6f973cde4d4d04e28d9640e720a16b441fc616134f43bcd1f3a55f4c43241c5dbf2fbcb7db76486dc78e8c92d843c933794271fbc529f903c4a9e931c43c90e491621aa13132736473fa1252986f974e3fb28ef4f0d9e6f50fa7f48b3ae1ca8f9fbebc10ad0fa94a93717e116ff494476e287980687e9bd2c80dfb44f3d8f33f47b8d4452d95704abbe6a9b8c060b70d90fc58a2b8344a3f3b5862e4334fc230d846a44c6d9734bd62edbd5de7cea1d44c5cdc700249672329e934e6a91059a4f99ba59452522f87d8f2e4734309f3dd46c07c38813815592d08faf619c45445637cd2905f38b59a8f00a82d45689a48e4f2650a216b3d7bd6f26546bec89799cf2962c5a950bee4bce8702a4a51c3a9a883d54abedc141171c88fb6536270097d2721972ff1e3cb0ed5b5660fb22c768ccdb1fb8b61b7f36cee66961c3bc6665993c83290c16eeee689a9aef4668eccb1294beee6190306373237371492259db24e1f2695756b91b39bc0966029a777d8e753da18241121deb1c7d8da89e6998548211307b7ddd20dd897282d25a59b44999f94fc629d686288275cd1479c299040894b3fe24c41a5d204a04f31e8729e6ea74a39a5942522a46761e15474fe99c50da7fced891b5a53ce6589bdb554a08f2c2ccc028f46a937b5222a443ec88e3813701ecccce20142f0636680e8a26c6bb1910747ccdbb490c5aa57ab47ab3739ad7af26f0c558f6e2d36a461b57afdd3c3bc50e8a9976326e1ea309bb28cd4eac834ccc3620ee6559690156255f6c55acca36f3d1d72d8e1e5311824a2379b3f7a47425e31cf0011a607df11e30142140584fef1b4b55497b1f588b1466dc67c36aade11cce3d93a4c44211b7f4c2c60c9316f30961c326270439612e99a6a66b782112a4eea2db44e4a27a5b57637adb3297d5afbb13a2756e7a45b0b86d539638909578aa6984858c28c3fe79cd37bc6790e528da0c9cbeda6f062eda943a960934e0e8542383c39b8d8471c30a8a8028c9b0faf1b018cd58360d860180a68637ec4096c8210308b024e4118215982f0c1b74f1bda5f42e42d2633dfd945ec012b88d5f6ed118aef4811882d509d368512b886f0c40a42aca0e2993544896747b937868e4e916e2f0fedc668f16c041609749e5fcf0242c933139edd5158253812a178beb6052fac88077ba2151a81cf90fa848c1d01183114072eec87154c5575410aba25073974d50343f16a8102e8b288a0f4b0aae9946859314430818ce57ee0502834459257c2257dc491824e4975bb8f3852b0220a297431808f385360410cea23ab872d7ca8f9c842c2c7f491e54311960f4d583e3059bd987c5cbd7456e48eb8da696275582a221f662e962a26039a42c8fb56f31c43e79c94528c6214a354c610a1489ea90c2df26ce4572cb090b3c20a32356ad0a0502f27272a1a34706c66ccb801eaba1a15549891210347488c182fa7138dc9b42a956e644824d7bd4b8046a39b1a8e5bf2da3695a609c9329b8823bec8e3bbdccc441cf1dfc4c5cdb13b5957257665756cabf66c5d7718e426dfdd6d6fdd8995e77d6e58759e658a888044412297c847f42372897ca670c3cc15c3fa0a331e9e9e9d269201229f8c26e2e86c6c2c4daf744d1086e4d9ebcbda7b3b075592d830c88ed2d2f41325c9418a9460f1f3c2e2e5d282d29e9e41da4ba84988270973560fed30c818166a8598fcf4f8b3ac7f68423e8643203f3b14f39cb9803885855e7e7af60a7aedc502d92099e722cfaea918acb50502783cb4d042f5165a68a1056fafb630276dc12300010840271106351583acc53018c60debabbe381566adfac3a9b02279f696097aae3a2d4e85a29c67b27a76510ea7389c61e612318911475cf54adcb1635d9c4ac2a929b259b578eccbd53c21262224a21a1b14ca09e97c95e1148a739579761593bff191a532f294aa3614cfc3cc85a264656f381500b7ce02f0b01b808717acafce422a24dc14a781c1e99fd7ad25e5f3c1e09c555c0078665f9de2eed8d692f2e538bd18fc423b802fbc02f85ecf1e000fc5f36c503cc3b616145b514ebe01e08571f5796108e6d93d4f87f9ee85d6e75947f583552e384a38d5597c7c163c171c252bb9bae154bb3efe0a9e0bce4d0ee7e010e1542be1e3d7f05c7088c8b48c114e75123e3eca73c1314233696e8238d5587cfc13cfe526e885bee0c070aa7b3e3e0dcf050706475571544938d5577cfc199e0b4e121bcce6e687538d848fdf792e373f3740f6060809a7fa081f5f05cf0507494da806a708a79ae7e3cbf05c708ae0cc887066706238d546f8f8313c179c181c21198e9025419cea227cfc93e7b224e8457b31c2a9b6e2e39b3c971b23341bcd8d124e75938f5ff25c6e94dcacb89bd50d114e75151f9fe4b9dc10b99119ddc82ce9e15413e1e35fcf6549cf12d75de2fae15453f1f1479ecb921f201210124ef5cec7e73c971b2435a59a253e9cea217cfccd7359e2b3e4655af282e1544ff1f135cfe506467552c570aaa5f89b1821318424e15433f9f822cfe526898d0c9b7823becb4d114e75141f3fe4b9dcb8dcccbc0a5b0ef25d6e66e28df82c10d87c48819e9dee54ae4c5f6cbbbb9b4edaed614efb85835676c9ad5f286d867043a99aaa5e61974b48ab7a2573fd786c86edd92bacb5bdae6c26d6dd2c8318646fedf0e4d09ab97ceac734150ad68653a1047a4deccb5eae0ea87986559dc2d98b53b119a857b41e9eae5ed1765aebe19550124ed9e995908481f93073017d98b95caad24eb49fb5b14a185cc165cf5c3e9c62df6a409e018ca97243c7d6ec2d06e6c952cc39318e4c7ce4c0f4abc50a418b850f632bf66033c89f9cc201c4e80c21f639e6139b73bab7879a287727a70899ffc8f1d4b1ea8d43fb9c1b0cd2ad74dbd3a31ddbc83733c668638c31c618638c31c628638cf10659e4946497956766736431c9f010fa8e6cbc21576ccb2932cba96badc59c9999993d64afdb414e0c8acf588b31c6cd8adb1eca6f8f9365ec9e8219c0b24a033003284b69001a8a37e6379bbb00f2d26402eda536450beea4f4c7e9a512cc2ce3b598e594a51673664631186dbc1d84ec5a4b7b07c9520959e4148dd462d23529cd6aa556d25a5d82fc94db744d0a1290407a1669f8e8d363e619a383e711bbb904e065d3f0ecd1c382c41814133a9941d414aef70d64c02ff083b709c41dd5df6a3ee5e6222383f386b6a18627dc50aa3c2d86573a55eb2647090b92ce92b8d776d73bd055c0ee3ba9623026e84eabcd39a74ad5b3b5c164347e59f4108ca6115c1f9c8a3480365ca01ea99b60c0965ec1174033dfd22e559d42ddda7bc32e628d757f32098354aaa83321048aa7740772060a5edc50d200d9dbc99d5e91aa9de9592494532acc46cc334c02619e048a37a8531fc55c5b99905567ce1ad38070d9c6eca654e5bbc013aec80b3d4f20ae4a755a4f50b0c16055e194ac520564b07a8c236e908fa00a68c3659843c49635b0536ac6498efb2137d6bc1f0c56072b0b8b8a0a68bfd0bdca0b30583decbe762847e1d4169974819aa93eb2608abcc6a9e8f6622c2a22f2e4396560906e3da270a7a51e84a71ea24708c1af8709e6724e7cb15b1b27ca73377f3246bba157e40f3165fa10170a7e9e70adbdb7736ecd296b6e8829d25d36e64e7ea9466411656ee046160f403fdd4a95de78f8cf6f7381c1eee282ce603b6a09975bdcdd33a594973bb61266be9309aeeedc7a44daefa47a0f7207122798fb68b983ab7b603af6d5cf476cf70012f4f331bfe881fe64a8d5a3573c4ee1035824b7a3e286eebd129d1ddc8183c866d949dcf07ebf44d3c768e25af9fa0146a7eb1579c33da7263ffc7c28572b9faf8f3b272a12719c0e166d14045d70c146f55ca81eda78aae20283d483800c525f816e58758a7d3ce6d7efc61b22e7319f7e5dbcc179263797e96190a731dec024f5cdab375d639073cd9b0c8a4eec6b2ff2f9590639bf7f7a8153a2efc45acedbadadb1b954c7b46d86ea270669c5beeef9ee3a1414140aca51827431001b0f99692c2c2fbc90e3851cab1718e454101616be7e357c7043d40b60e3c19ad6a3870f1f3230e843c7470fbaf56090ba6f2e98cf1c2c83f5a303d878f44750eb9087da60187928fc017e75fb455a6d3cfda1f29b8fc73cdb3c14867accad3d9d4e515c7b629006e9aaaf38eabd576a788acd134dfb81fa13cde3531f5f6d78ccb3ead49b5fa8f2f6844a51b7b773508545470fa64e03afc41d94dec0232f4443edb6d213189752f0ad6798c75f9940f209f8c8b201fa6c6a600ba7e81014a7581406ad4a8557cd77c7963ba8d7c0a9f9bd82aa8950a8e0e5bb95021928522053a31babb4666dc35683901b7ac837e7bc86685f6390d21a6a04ddb0fa0f54764221507de419f5e2e48962d0fa894114832de3e4ba78c33ab779214f63d0bae665de0e75fb9d4cfafd00ff647a7c3a9d7ad5b35fa8f236be520f7dfc0f959733d28505999451b26f300479f95dd6180cc29283324c9a742e6679d8340631afd1838b824121abf1c4953e8af15a6b316fd48c3b2e2c7abd63cab991c16a6a49ee9989688e28cb4c2dbeb733b56e7877aee5b8d068a40451ef847ad8d1ee9d324ab8e18c22eca52961045b8c16b96197835358c41199c87875cd53ac25034a29f6e1301d73cc8a6bc5c500d62272d9b31871d8106b61987c4c7e582bde904e99b83058b6584b4a19af120e5a765b91754ea807f7e30e8e30f9b883233ddf31285519902bfdb290cca8740ee63ceff02dbe7eb6538467daf33cff722ae6b8b278963ec8011639573ac19239c7e58bafacd4ea7d623dc2a8ec0eea219f9eca62d4435e0f2c3b26e6272e7206eb2fdce1c47e34eca0d64f5c446fbf1c468f7d477434f5625fe9f2e7123140d231d63a6b7539d329b67bca744a9c18663b562f6eb53cb699ce6e6cf59376b7c79eb5bba3c7a63467be70adb149749baffd927416b9d26bad35768c7d47466608284da119f0308a492264e616af4c2351193ae9dc42664e21b4909941324d90322d4f30aaa8e486f7636c66e61ebd9e310c93184f49c995cd7d93e5b8d4150d994da7700f83ec7aceaab57366850ea32157e6a79a2fbd92b9280842a2abf594416ab6b5508fb19eaad16aa6a4a495028c27a3c1b8b8758b4c2351d7f461be4c1ee20a26b9d52b5db774d4d947351147d3afeb4c49dc102b79138653f8a5cb7c3257afa096945c52c9e7c3ccd57ae932d70ac6c30383f1743ca6185686c4785a9cb97af264aecc6547afd30d6a870516587c21ea509c33521be78c1ce78c3de74c514a69fd704e3a27a5584c4ae9a4954e4a27ad9e6513d3e21663f43829a516e39095226dbaed098986a09452d1bc770a4868db14f94c918fc8871bf98ce6e633379fcde792a68c1c34a1094d30ad62773669c56c4894695b77673f3f6b83446e4468db14f94c918fc8871bf98ce6e633379f1b786e46aad6a6524a4597643a4dda348608dad30b9f52a9db34691341db8bccc7949de213d626a6b07522aecc965df2ecd144936d47ea16a7538c1831ba654cda60f8a03a1932b616da3dbdbb5598b4c1f0a13dbdf02949418bdc9356cc8644b3255d2f37e97a1de487d6a6957d7fd6c614032019a0302f2fd98f0bb87cd0d0b2a1861d0bdcc093d91c6b639b902bb3d5b236b38928f485b696e9192755d9282365259b49a5caa6d56ab5666b3299b325c36cf5b89734a7b511bda06385795609a7589b97dbde2c9da2522a9918c5dd06089a4c277942759366f353d4dad8740a5b1b7e591b2536ecba9a28cbb29912185fd4919db87cfca267a3c980157a7b857ece5e788bca0eaccfb77e62a36b9ac7cce373ea84dae0e8a32ffcf1232f79e1e94b2ec376cec32b3d95d28f537f5ac93bcd8e2b953c46ce2fd7e155e948cede5dd277ef1d71dd6d1a7582c89b338484ec10144e218286d1df0e926219119933af6016eb143ab9529e73ceca94794e9e93795ae6c93c9b2373ac6cafe839db6f8735d3d9964e4a679b7eaef4367265ec26ae94f1c495de9fac3a333e524a29a59cf139c1ccac411651429653cbb15aad354617573c56f1610cb923737286b8d2e334c25a19e704428b1bc6ed3eb25c20c5904bbaf95cf00215700f1fc89a6952152e1022621d0124e3aa1405b4a152a598554ea98542e18ca861564ea98576e5067bea806cac44ccadc49c8541ecbb37f017763c3454edbdd7769dabb0d86ef4ccdc31333333332bf1ed2d685fa10300292a098a38e2b358a0fa6eaf61670c290235c50c0dbefde49ed008a249c441430e6106a6004520f1ed33ae27c410ddd632a920828b1c44c87cbb0a3786901de8c8b0cc8d02e6989908089e999997cc15b0e05b88b1b534e7842240cfcecc2dbc45c104166975879a4144080901df5d440806a8e08aee82d08088219e901962049c1f7413ae14c207d316f7b45a892a18f2eca3ad85392d6e68517045035230f3eca72e055f3c3b8af3dac4cd0f0cbce88215456b410a2288b8f10005287876ed0847c400a6082e78a022091f19254092a1c08767f67bea5051b42023836717c5d508089e183ac009a4a862889a28647868e1042a5afc3841092a8878428814cd84eeba85b0e9ee6e2c5af16c02243cef1069e28445448a2642245105eb0431df7ddb0cedd3ba4c26f820072f1f2318b28c81031fe039f10e2235e74aa7adce9140a339e9c496ccb93571257524ac9594d020bdd93f1f4ec98ddddc0d07577adca67003165094d24a69a5b452566ae90eeacd385f2eed4204ec83950f72ae8eab45e735821ef40088efa943614e04e104cfe32c610a9ca024448ee3388ee3388e3b496de4c570279148248e2b711cc7711cc7711cc7711cc7711cc7711cc7711cc7999ce3dc6432711a6f2ddcd4627821ffc8a7121b1b398fe19dbe50fec84ba692c954ba1cc7711cc7994c9c478ee338ceb1ad85e324c7619b0be724cf385246f2a65f8f72ce5fe4bc458b228b281550758d35d6dab56b10b9dc5e9d5d461c94a9cfe9f163d480ac31e44a1783514666da4564b1022a276a9c88f926823497afcc75f04888ab79b5d8886a1f10f9d5370fc91071709bd7e8034dabae55d76aa8ca26da48c868080e40e46b0cc67883d600e28696e310ed3b50be6d77bb8e8f382a0ed435afbe39f5384f7edd20a079d5bc7234f3421e8a06e49fb0f3cbc7dacea0e5c4eaab374b20c81c295d58d397267d5ae48bddbeba650fe28a768ac2ca1c1d4ed1c927171f799e73ba17577826a6b04f8f53bae4e9a7fc61709ba1bdbaccf94299732dcf6db2117145feb00c8ac1f38b04b145cec89c74fa03fc76e913c3e8fb93aefbf3a78cdd5cb803d75820512cb9d45a505d805d532a792685706498e726dfdcfa2e7de12cf23d9bebeb3a98c9f5d2c84bac267cbee4a4eba591973cc3342cc6baf31d2bcf778c21d2a4732a2b793ee4963cecbcc90dc1d0bc619086535d5ba5d0974a2e27921948dfa4f966921a26b838b00ee7901c88fc92933cd6e19c1a41dc10fce6a61caf18746e3158fa4220f64bde3158fa9cc19cefde7a3d13ddecded1c8ef6854c52df5cbd7441c31bec86d4dc421bf7d04c49d4ac2d9f2d962c2a992b7cf9d8863247f525172d20c25277955657329f9e81b9dbce4728340c94f19c953f15c60f0f4810c5627791a904ffaee3783d03ab8156fb49b8870435eb19af04ca449b9b5949cf3427ecea7cd54c2a9a9b18f9cf362f8f4461eb792ebe069f3a6ace5616cc22b4e5d6f9f3897e4616db55860a1eb2e56e3b5c59509a748dea6da0ae5739e91e69b5c6e27d3f7037c926724ef7e362acd207dc9bd8883e4a5d28e92672d257753ee3ac993dff39a87b1c924f9f5b06eb5f5ed722b913c8622dee855bcd14efa702839c9ef1796fc969c54f260901fe38d12e9b3f7b7d9b213498d0ef343fed0ce960ef44310b41171c46f1799a4a948b79452c696e6dc9c6957bf3a20e4db2bb6c25623176d2da3d077e47ae87e3bf46b0712d43ee74d19e99a275b594bf4ed843c55bbfae7a54bd2f9812f9efd07e6a2b3e8cf820b972be29040ae7e79407207b6ea5a3bb4b55451f79c527ad86afb994c6094eb09b4e2011ab54b0be7eba2a0bc3bdd95c83c77be00916ca0808e6af5ab5f2f99603a584ebbe20de999cedf706a62395bcb2cd58afa121337c4729efd6b6cb57ad94168a51144e60cb28a8a4441e9fade8f07bf7773d9b9eb784820ee905248390413131e3af0e0c123ca0c08410826219884601242d69ae907b7ba49e786dacf90c7d06783411e6e7b7ced99f06142c9839c928eb90d06d90519e50786a49432ae1a88ec94850cad18b965f0c1a08c31c70b269d0b846db8e04cb8f10b512fbf7dc63981b0768a4e8f5840162966fac1b5de02be7af265624a9cb134b7a6b3f1554c8949e4c414189268c51bf17b018f790bb8401733f0f979c1861ed79b7e70c3d3b70dcd123e36ae2fc047968dcdb3dc506d6e2d1545350b7cc831cf5aaee1baf659583a0775164e05b181a56e5e97685237ccfb81faba55afb5560a841fab96b584ce33e0236b89214f6bbc12463ec747960d5c1fd4f331270a46be6829d1a34492efb2b0814c0d7a947c8f9e222f808fac1afc3ccb4d12261f808fac2448becbc206aa243d0f66f123a47331c94e5ae4940d76a55ba1f6f187184bc05c1894f889a5ad85d6e83618321fd55a2b866118e675220cf39117a27eb47d61077ee3117afbc15ceb9873a8cd45d3a8f554d03e701b5120b202445f0790c01c09fb75a41383d5676c2e16c52d280c52efb05169d3b9231becbc013eb26c40f3a3d08e646c2df6cb541e73153618a6db2fb4f198ebe8e9e3bf8e7a0d356451661d839949e7567e3b67ad3a97f3acbb06f9199b25e5aa73aace6f06e15a0f3956359f351b6d2d93fb1ab4ad86efd183860c0c62ae6d3358f7c120e63df859584e72642fb088361606314c3e0ac520e6a26d06eb280c621edaba06c11a9bcbf490b5c120e6a16d06eb2e3088598b7d1d83d1b3cd793acc8d9e2cf6596b7df4e8d135d4d0b9a1fd0e0332b1243730d81758586a80e4234b0631bf808f2c1abcde6b5cd1daac5f85a13f6b43d76d2b80e0328879fda13de6518cb18a42bd11141af07c9ce2238b06aa24801ee5232b89206c304c5b310cc324b889bcfa09e5ad46abd3d85ca8735ffc3acafc8d361e98e720c308238c30469e677381704ebdf919dd5ab8d10764f2a89e43ac9efdb8d12f0c79dc2040636369df7a275c8679fc1c7ae4f43be19cc3b0c72a77b26d1bad13c36a456d3c461e72fb79c8235293a406e62d8c90ce7593c4d31670c3b8136f42960bb0441c98b7a370aa9ff0ed35c880c9b7dbf042c441dd091fdaf8ce5902938f39ae990f634e8e12763e0b80463d1b06306bad1545830c0b6041ddc029ea35d55c7c27f1b2d23b3aa27da8648e3645b5848a240102482315000020100a874442a148248f5321997d14000e79964076581ccac35110c4300a19638c2180180306c008c8cccc480400aa7bcedae5ae46253ac6b2a81f194a42c476f1c981622c7729ee592fbc4a8cc90bf561b13d45d60b790a27c1cbc56257ef1a6ede4287b229c44a79e8d1e2feb704d501bd22a14c55571eb3cc07108c65d629f4a9780a83d416a54e1a4c1a545ada7932694ccb7610fc1dc5770c6208f781253909253c172dd815023b2feb0f62ac4d1fd0973b211db97a2eee5d9d8186f2b5927c5775482e91eb01797b39d4d4abf34eaa47c16ad443871586111e9ba9cec097908b95fda90ad3b4395930e698fa094c6e6d96a0d1e58fcc55a2b9736b3209dc990447784a59c836f7353b35bdc3720b0f8a46998e9b68e3784ddfff3ccaf9c323a16ad2a202b8b80332e2b5d08ca14da05102c0ab8cc1177cdd2ed22af2acff708631322b90a4ecd6f9c5dd731d7f5e6b8b04a0e4b26d22095f844d0cc3dde400a9149b0c98cc1c10ef8e727004d2cee1b190e4f8623cf4b217698e727c97f7306852b636a99fe94348911ce50e2d208b49188288f81fa4f2605c3f050146744345ea2b155980e1eb7d462ec536d28bec0273d1585ddfc23f2a5e096aa752506843443c7a76223fb1212685b48ba29103eb0401757e4459063c656e43c8cd0ad0ca84dd310773bfb4e56b235cc96227f3572068bc7f24029f8f1a8f812de9cfba496d28db8a7f5810ed520b811b8d437c5e26fd23532866092a9716966e96b984df506154278bbe843aa28ce9c764741b038d172bfa5f8a117ea4b05014b729bf5275e8cd13f4e39aa0453211e54ba91c501d871a1686ec5a5cc2672bb8a47942584a057cd65451ad058acf8e9b135f977614bb4610b336e2966897b5b20675bdbc3ceeab90eb1dee30b792552345aee7f5e99934e7122ae48f2c2de93a9be1d9ebd41935f970e07451249efa729c758d0b16b94d934cae105321a0be21997a4828b0d3e037e85645a4c033eccd24a78a59df2d300692149685baaf4db2b8bdc4ae9a3e827ec4bad5cceecbbee260e2bf4f90dd811cd44728668574a58ba0d1f6f1cc9fdd336e030712660920bc600456261733199cea2f3cfea5a6212daa74b283b3894b4f3c8af7dd07ca299250b27ccb8567b234a2cfcab7948151392200a567de2b58491acc77d29dab9834e365fcd7b74349677c546487ed7bd1162d04b310b7c3017320784620390f0dbfb951631db22b1744834ed03363a4feec7e4b82f15a5958f60eb6653e1555fcc80df846a9b22fa7240ace1f3b49b4ba28ad7b9da5cfbe991b784651e64ac6bb1d143e2dc9af51bb1a9e4d83fd60dd05b559be36a86ca089d83607c45e5e994b03379439f512bc91fc86152e441e5791e8218446b5f7de90a8232bb73840a8b574f27ab9a803392404aa3d5a827f697b4c1b9c2a179ed0454e75c84c36db0165223f4dc16e59385d8546a4e059e9fab4ba565fa8af125481b660eca7d013de1a51627d0d533471bbff332d6a6cc7106a6ed128d33ec1a7ed58efb1e25b3179ad340aa04384398428ca3a28cccde6afe44d0c1d3517f4edd8051d4129804d4ac22686a6d5dc836a14fa858f490449216c7fd1f991535577f4d1ba2dba3c47e806f53f8da6b1fb41f3b300af5a0b2000a34209d18102dd96c31c11d9f7b9556f1731db490436d13301f9ed9a8b2a2b7a7045b6cd9a7801ba7b02acff292ab5f874e79e940019578ef4fdfa8dfbd7b4fc2e92c717fa482247cf7e34b6944cdd0228de9d7e7e0ecf7711718607c7e935a82b4c0171c6f8ed7c7f04e6893e4f61817b11ed48a5e3c9df84819e86a1a8cde2ea7e4737cafa98a2fa0a5a97eb0945e55874b1d0afc515fa9871b525acc460b161bfc564376386bd17f32f41157ca5acb8d0879998822537008b9015c61fd5fd47ee29619d8cddccd7b82dbf4abb71ee84579b523535a7e88e4a97158f750110c827099cecd9e3a77b2757d81772e5a38c5675180c855bea6f69e52785dd5ca5286868311586e90b46c22d6c9245961411b05963afd30f6f2520fbd722756d10dd002eb1d9ea70b36ccdf85d564b8d6e8d86b5fd1fc1636c22ba4ca23e90cfc3f4f0f1809bc1b675d3c19b7cdf5a3583856d6f0d0d511cba22bdc336d1f067db913d4fe04c4709a7da8a1220b3f7cb52774bc12c3b8758d61d0709dc29da4319a6418b0d43efc8ffe36be1d67f8587dd54a2fdbd4e7b9f9793fb23c29ff4ecb1958a39253da993a8861fc63e843a176e6654d4f905d7433abd2e8070434b46afe951d6b2fb59042506475de89f641d4901c751af575cc4891188301c5bb64d10fe7693ddd65f4cc5830f41756b0bb819aefbbdafa4eafcb82c42b0f0195938fa9479461814b482c3001ea4d163c6d762295b2f895862c62ea561af4488b593a34de1b86ec50cad0906652d41fe0a3d41a0307044be996907aaff4c1cf5ae09717a2a2907e6f6c3ec75627ea214a705a2b8c0cbf87ee8d6784eb6bb5617b2b4a3bccd28afc3bfebde245ab1d5173d427cd7ec168f43803d04ddfc5589345243c86eb73977edd773b341496788424ed0bbc30bdc78a3f8073a8944f6b13cbff389bd4615e8616429de98004bc8050b6530022d12eca86e09b93d8832ec425ace19e3ef49b089c6344270fe6e93fc31c743976e424793f462c9a784655a9c9f70657b74ac9fa6979acaa3814a6438236e25bb55bde6778afe0fdbfcd6d91d6019337ab3c4973fca1a1576d55d573a9c2c2472f7dceed6ca8b34b6b23db08b2081bbaa41a2a5722b4206816d6e0016da30092e0b50aee91840539614a4d30358ca7ecb906ff42f692e9b280df8d4511dea44c57c2dae270a2a5bdb354f78889ed30d336119ed3644f41dbdca204dbfa51926b2bbcb7415e3787565e0f774d5b840baf65edf6ca44001c456e4edbb3318bf78a239f9cccbac49161cc2da4b47fd7dad9f4e60890026b23b6017f3f6286a114fc89e10590d3c6fbe676ef65b8bd962563603fa6fbd2d8bfd0d626f351aab1ab0523b6cfa4b07dba38d768a75d1b6a30c4ba811c1f43bfe8fd3fe49f3dbdbda8c812b15f3fd5098d964256e185cf2a3289f387c00233aada6443a3d1a2b81b1945be2d1c0d148661b04d8ef75846623540faccc7d5e85f27428a8431a614e127743309873e343b90af9a0e1cd2a86e1c57c932ff3e74a04c432d304581c52bfce493e97347ba5da4f2288ca2dc48ff663af3fcd81b08842f5dde653b1d8fbee87fbfc850d1c900b1eabf4cd3c2b6be1168162dd07a8940cac922237eeaece73d41be84da9bacffab00a10273077735ca2a00fda842732bff3e26c8c9dc8942ba55bbbf756c784d41d4d8df42852f089af071faf65ebfb9de6c53622a53adfd5d54df15b36ca109c44591da04bf86d23b792a63d6f18ad910b5bfe9c6e5507c224675c0a6a68726418550214077b1cfdbdd95900dcd8df50c6d66eb0383286db675f98b286336276aaaa84673f635cdd9a5dff72faa4ac7e8e8b12edad99ef6acb0caedba7a9f7557cfa8a253191a46d039b559c0db2f124ad83e18c6d947b47d63d74f9077d92f2d1ad64529bb3da8373837b7fe4fefeb8b7dc15db9e63deca884bd7c1015ccef4683eea5dd34ab439d34b7df61777380c361bbda3392a7ba64726b245ee5355e7f4376975e6e85e390323eac5797d2eff19ac5fff1623e326403fcb6fd1b08319ee89d0c5950747606bf49e603903f400c6c6966ac545943344f899271cecc6405bae7e869a5355a5de619b188ba04943611c90a131bedb0351dd1ad1fb528ad75744f04f49b0d522a5732ce72e8fd8b1085212dc3817b90c408f9688233f8790594769269d206dc9e67f20c6cd035702be22cdf8c94be5e128301cfd2d8c06838fc16b89bd26fc30d868b4707245163e50dad0aa09853a014eb5906c8d2184fa4dbeac587081cb80a33120671a88fe41f384c067793443d24fe6fd41aae70bfcbbc503e1fed24270629ef6fe9076f35aa92825d5e4ba9b4a8df1dc4ca5f1ca4a023b0f9abedaa824e25f78a032e7d7280aa99851824d82ceea7ddd24b9dd19837f83da29af8bf710b2dc32e36e861272b571de3674b8972c5408e81829785815a59140765b7a5565621a5d896ad3926a1f3cdd222f8c1984bfe6b8b4e22c04c6c7ddc9297233341100c6499c1740a8a3916a83bad875fe47b52108d0aa705ae74d5f91395dd599eca06325c3a7f40fdeeb45fff5c541cf8671c830d500ea08b15fef9f232289cec6c54603608fb8f7997ebbfa29e3787fbe60030ae5c069a0ff937963019cf9e9c26986102ff5d7fd884eb243c1a19c071295e07d4943373fed51fc09e7a42721cfdb0a4fb626dd948cd45bfb903bc97e744c2a84635261f3a41eaa9fe8e74049452a4c52634eeaa3d7af5c81717c52d4a12591fb435129b0d938b20e4fc5f2de7856c130e5a60bbe94aedaa2c7d35e3f2322e7943ae26824d92959702fd6c831621f1c5ed296c512fab9492cd6ea80b992872ac00880f2fdb8a49d07459fe6f283bfd4ae5889d053729d2dc4b8968e0da7b9081df44cd40a3dfa9f4c40af634673bc959b377c31f39c3b8956aeb7d20130f0cc1bb900852b5f701e3a43184e61dd4dc2bd77d3f7b5c2bfc4019d34c9e249bc7579b4121d55349174f251a3eed03e1c237a1ce27319b35202789a3d32a0477cec9c73b1584d4a5c08df93506e50120ba598353997eec815a3d147ed13173c15f01bf6d328a546f7715c70ee544da94de8fa938dd7054c917f2d9d61f6b2efa1428df26ec1774c6f2907ea76b41403a41aa6d96ee8ab521bb840c7a76999b68f928744f5b0c901bc9f30d5f67fe948a4d0329a80e24ba10d39e9274d4536463a0c9ddfe51ac7fdec24c994786de12b6b9b032f8e7849dd5a7320436b11496e779493e510164cc8d7f82673dc77d4009f01686611bc0f93ce99ce884f9745d2c94a78847fe2d5cea0b632af20ed2cc0b67c31c82a69e0fb59237c569d765046781ff1b23a85eb42f9c48b964f87ca467813f5388853feef029a4cab279fc03953fc9094a2911a3a33fbf906735dd3f59dd4ea8fde094fc2509f7ed7815446e783d05601c3696a2f0a2d45f6391a0bc5cebeb76648e80841a364497bdb0c4ed64731c98daa173deb078a05ec054e13aeb9534127e0d8899cf06600e0844443b4023360b0af3dd7a0ee4d1c4c36bd25d78927938df984cc4e44f6c05367a3393ad860872b485bbe1577d8a9eaabfde99ee6f17a69e175a76d7438122a0771a82ffcb4ef7751465c9bd657cceba697d1731072e6b1dacddc931c2f4a90c0065f5289d7c09cdd6340a431bfda9e7213c24cc0f66f79aa64e5a4b64f83e3202f83727cb766fb9a46e0790f46b185fb099ca2297182b4269bb7ec4128b024a8e051f78a710473be2321f10835a11930529ef601cad15fa7c2396774679f229fa93eb93c5b3144897d678528d184d53fe85174217f07cc4f4973ae3aecfe905da0246c388ce82101d735358882544605431b93dd687b0aa4f3303f535c989c0311eb61b671446792ed7ee01899efdcf844460ca59f10a07c189b7e66578f1f32d3fd64c2b55fd1669f554ae3c1d3e189e791381402c717d3f6adaacfadea0b151ffa7190762f301f9c52c2484a819dc33857470d5f05668bac8737c61d9005e6fb2dc4f24cd8e468abd3b505132c23b5b5714b92d2824e0181bd76bcacd702689ec7b5e591c47a9159d418d35cc21be0aa8b1afcef53584fb194153472b0b1c5a5c3280b85d75d14b0c9ab3e507c7804fc4e6da74bed522a3aa189dc9e6c36d7d347ca5a3a830c52e8561a5b7bd7638f3c8e6b3f73024519c3c82985420e27de85e231241fa4b8c992470f5d7fac9fa615f00b32a8c63c38e5ffb0002ca4ec025f78d0119c21c4036f87f2ebb2970e999e90e122045f9364f9b7fe72eb6d31eabbfb9bef8750c91c062a95ef944b8339e66ea2494551a0038f517abec8b42a2c34201c932a336bec998c795f77b79a830000e6a5b2a06d6235d3c88fbb5862c8edebb939773bba5cd3f15f03736aaa07942f16ee1417eae4f4ace0c73868b5f416ce8e8179410ae499310d335b33a71978e527edb58e5843f9467c52ecdd6f73eb524a916a0f87224feba0b8137f91428f9204bd699b82d8d5e773b64f1a40aab57cdd36a6515cc9da660b2324d5256be10df7921a6cab9e904f5b42851d185466d724380314d0ea26dd8fec108deaea32f798cdea7ad32d97d70b6dc0fcab52df93a3767646bc59969246ef2679e7875a91e4b178f12a84138eff3296661897f4cff81c6f322da360f31ee4785077b8950d19fd8363653efdb3c95c28d1c821ad1bb002cbf7f16532aab3e9edad19451615545c708301107c4d7b639f7293a80153499d058884a2447aefcfa49c3b9cef5b5a8d450b8aa533695789c6b9c0ea694b3c6c3bcb04fec4407bb95c2846d4c3778a483aafd99dc2cbb45fce586da2103faee81c8b3b8c3edfb62655771532ad3661c03e5cd82fb49c688509b96e42640bfed021f0dca8ffa427b233e09f15378ff42b4d0e805833dc4fbf7c6641e55910cb09a9ac59aa68689fa07e809c48119541b7b06ef28b6a8eee7acd1bf1da8b6fe43b1c63c72eae9812cf1a49da5845d690121ac605e9d76022efa644df0e069ed018691791f0ecbc986e019e9dabfe82413652a23b291937815459ad1867956b1b0580a8d3b55e8373d0ac40a4ec9e84cc04bb09eb799911dd18a19f857c3e33bd0581645dfbab0e792f36c7d9965e3abd96f8264b27c99fc96684b3f81abdd1dd7f8568768ec3e859334251e704e25ccc454ab054e0722c53701279a80a5251e14f3fccc55db704ddca04348c8f48b917c920d5a40da16559f72e72289eda6e5130d831560efb9893369471267cdfa76aa0ce8a159791d84f13a3b184b0196491aaca086af1cd4fa87d40ad98ab4caf8f5da042e64a729c9c7b603e79e3c4c2146cb16eeb7ad0017ad9109860579d536a3761fd698e804da5eabdfed8cc9efdc1e245d20c035fd4818a91998781e08530cd6f4dcc86a97d302b9977e32137d52682e94e7ccd5be45da9d30426df43c5c8ad4dca7121ebef5a7c2bf2ec70dd56df42667c144a06ef1e3aebba62aa5e745a1a068994809bd0a08c5e5be090b50c255c3e69cf2cb634fe42d187843cabaa8d88dab9614068a743d9018ceae786c598ed80acb82ddeed3e6d4239e887d3c361bbc5af40c583eb5479a615b95b6bf0725b8793a5739db386ed846103bca4720cd810beefe04b9a38067542012b1a02740a647aceaf8c34009825ad02a8aba753956668c4ffcb640561a65ef5a9cd090b54acaade7c3a119af0448c2cf75b8dd7cad49a91e2b8a46e003af8f77cb612f5b4cf6ff717fec1db0eace758c9e2b1d4bc920ebffe2755969d9115ffb84db086983982abbbf1917d558162c3f3683842fd24843d3c0849065646e9df19e31912144895943352aed0acff3fa0f7b0bc220a80f7cec08850a52158270040d240ed2e356f39801f458a7d41038b3fb540b81f1fa10607a9a6ed6cc824e97d19703bdbed70788a4c34e9cb07df6e0738571a27779d1392a510e0f03051a4002c5a89f082542f9ba195b77e0cafbfe59c0c37c8c1540e8c54afaa9ba6c7c898b9473c0533819e484d46913c9b743ee87d4cb5823d9baf3d30ce6cd2ab766ddd1eeb2342ac541ab8d8aa72a7acb96f522ae5a4346975ff3b05d7d12f94a8050344d84367f8e9417c0da4fdca6302ce5ef71afdfe7c291cb4220eece8872014c93c2ae68a8b3b5ace01d4e687e788660eca2a09407006cf4520ac81f54ae177b6c8fea0a5c16ae66e49952b4e1dac8465e0820dced25e74301537b28e00bb0e8dad54e96b9d560f23f7794c8235ad13b00af903f024070ef7ed82e86a52ea19a1b7132e40fa26beed25294909035e138e8f5dcf575db5a347bb21ea5f1ff146673d27ee85495a049ba287407563b9498baebb0a29d2bb621b453a3394106e1175ff94281a7ab469d8710ea03fd81d8c75a0b0c9d077e4050c5b4dd4d16a38bdd1f89570f567c68bb6fc24f7833d3096e29e8cc923f009b83de88091fe10806dd6f5375c7ce105500fbc8f2049eda77c6561f53d6babdf54422fb2f16ea1e57ea34b4ff57bf56f3f544b583ae3c3813b50a91657b809d640cfd9dfe29a8c05d21e98998a4f394a80912d2164c0b043a03443db8eb272a01319762a7014b33841a94f5893bdef2c91bf7313ce007c453ec09cc7f0de28f122827a864976e4ab0d4493a1516eb8541db11a95874758c1ccf15544cdcfab4fbedc5e2efd976975840bb567d42c8ac0e696a34f9f1318db4556eb97fe9501ab990a909819f89ea82ed05c70b6d352ceb7212af7bce6474bce54e4fc98ef5971cb6e86b824dd49530ec7328a947ccb9a3e4305a498c537f71d8fc4182556a0e143ae5c67c86720465ddaab0f66048418a2cf08ed11e7c536d03c3b49805e4faf0a741391c7e9c8feccf1e18a012a898aa503ce9d3c33da7a7cb0025704607dc28d005545e75d846dddfc245335ef9e87d7ad00ba7a3faa2fd09a815da5d4cfbf2901781f7ca1eb4849cf370d8ec1ce907a8b62a348cebea40805c885618bca7b0a7f1f81c2471e2e777c53795a5f3f63f2b073b58fbfff25539b9519ee3102b8e10736aa2590f94e4207b16a83024205525cb6c4c62e50f28975b81c9d53cb402f6d84ae56c5e262801303bac78db31b799e1cc241e566ab208e124bd482dc8f5ebd22193e332cf2e37cdbd304b0c3950c29a4771648d0b1ce236766f78019b1c764a0e7a6c842c8defdb4c2a184e8790120cc566a92f053275a5aa988d4fc7287318da41ad7d361beedfd78ec5602776f66a744cd7bd417e21290043fe4e361d75836b987955ef145bcb102d9bb62bcb8bbbf4cf375061c20219e2acc3b4c01ffa8d42b90884af09a8ec073ce05d5b69d28fc34a981ca00f44815ae8aa31ac3b6fa2b142e2eee5c8bc46cc3907a731b96476f3c979073762ae5d3fccc04ea6f903fefee82ec823c46c01be7506cb99b50c69e25aa37e51c2f3b0029bbf0f37b45adfbf7117dd7667f026d38b280533826f3b17e23fef7f827b38b8150dfd81cee8dddb5bc7540e73827230e568f35d41367fbe16a7ded85b792d054f3f22ac6adae5f440e830c2ee662ef25a7ffce0cd6d4af4655f751a5b0d8f509b195f500fed77043c834796850a47c0d340d53cbf5f7a41255efe642eea2c64eed60e432b03734f3cc8aacbfb94cf78955672bca83d3234fd97a75eccc0923ed2016e6a929758482a97ff148c278d49396b45497348ecbe47c82dcd1dec9485bf5bdbbd3a54e5ef252f2ce8ca60cceec3b6fa50bc5d167162a0f123714a090d151761634cb49875a1d325a74b70a8a950e8cda86a50fae88d5a296593ba2b1c762eae2fd1fcd9afaac58a47e7fb1c4ac260eb44e18fbfb868c23219ebbd08602f523cf190a327c7da2b40fe2a840e5ad4f2ba75aebe33503fa9c296ea301bc2e4fe2516982fa448bf3f2461354cf76e55da714322be13f137456b518cc04d162fbc585242a30988a9d55ef0b9c82324174ff25a8769e0a12c9d147655dcfb3b04c1062daf959af7288910f6c2a0014d8ca115cafcc28892196d3567ca728abd99c0fb8199e3a070e7890ab0a140bcc8f351ff020105131c1822db7e9a880c7ee2e1892b137f6d9b87bf884cc948c1cdf92df2862538e1c6fbd219443d1447ce3e939cc21903d1fce9174c1dc3250ffabcdc87f0441dc40290acfa796ead95408b747b445903d3b0b984bf15eee5c7896da1aae9ea36285f684809152039e3d945207bcb1803e29934fec426565eff69733248d58b5bb2520fd639ac7ee6aed6e91085d967b56ee4a4e97acfef90e7570be399474a7feca17215a63ca828780cd7572b802e2e06f0efe765c70902221c570014f1875a24bd2d286b08b864589fbd85cfcc024b3eda772eb96554475dc31a4289dae1ae60d3c5f44ef6c3d99428bbdab80e00bbc3d01656381762028b6919a6a52b9fdde04c69a8d9d0862e52853c4755f543ccb5388c84fa9742de9fe40c4582f56a6dcb0453dfb5640a677e1b56eb0fa5ac68dc22a1eda26875c305d74979b5995bca7a8112606176f22b951d80a3048cd211701d4895494e017c06235c84f9cd457a37ea224b14e18606d8c115e28ac72fe0cea55e22a937a655fe69b060cc48f02378c49c5f258cde0882a86d497db14cd7e20b6e3a6544d7c2018eee5b1bc156695ecc1cc8a1bba89b212793ac4765282c80a42c338eb349759ec87155af6ac3551e0e99a175b447ede6f2d3c13b224b652a4a50345785a435485795518c41094084001d1853829c840fa828343e14955cba0d6891a5f4f18df96fb5ae5cbf865879799df3362fed7b8efc4070d8d3cef1d3fc323e78acf02713578ba6ba2f7634a2db6c045fcd32a37571aeade916284d8672a7dd44e9f08e67f6e05f6fa0703249f2526f90ca74444924e107e786e314920c55c1a3c827697003955a64404674582affb604050457d04f7c4008e47957ccc09396fb27a955424fbee20fb8e660f2a0d1da06a2c3197862602713a87d7390a3b7f17e493f91c30e6773b03470fe5c00be727aed0d04226befad368bc075e660fa0079592774885f21a9b7cf9968bc08d3724dfad8cf6e1aa4f954ad81897ae1abcb104151937817d862e484e3eca69191ffc9e09dcd2a88c828a94aa43d969491a01f59b69da28b59e6d929c51534b0dbae253a363bbca998951b828ac644f5af9b8397e885de3b59a5a6f6204c6fa98d80a516bcfc8dd88940a03e147d22edfb7d8b85caf069a70e2c7ffc2a0e4401361f912859a822ea8630121ed5e0e7ad1007376803e7820e97e10c41290791b5aafeaf468698778e67535988e6f18f70276b39ef830b261019bb79840e3c595bb4fd29d2f71f8e7583579d61be8ec5bb58abbc6cceedd916762860dfb69d222f8106f2da95c3cb09867012478c5fb407d4419e35fcf41fc5f7d7978ac8fe61970ef4197df288cc2ac32130f853165a3ce900639b85c104b0996676805c782e2bf604a26ce43ae336b74e9a29e27cb4b44e3ef72b743fce6529204aacf44746ba420e0657568ea2c85b9e98b90cb2c91543f9be5379c21a4513fab56748c66e92be65679ce86cfd625c2d5a2705d23aabaa9b2d75f2d5ab4d296498701a2c457f60fe99bda6e4412dd7e581fb2e48e2ffd04f922013742ce17eb0d76f6a26110d35acdf1865ad0807787ca6432c79978a09d613caf537909bb03f286c241cd31e3e65aaa98fe1482ed305b0ab771759ac3b4ddb3a0baedd6e9ac7d07bbf26c564bbb16ab698ed03811529fe5ffae8b0b18f6548c5475b5bee7c6c16da0614bf8baa8884a984908cb8968c8daa3398e98891c07a076ced558dba3fafa0844a680f30d9a06745294bb850ce1df6dc5f39369c00f5d97be42568457146821cea9a057de23cd5925ee999c68085329bf9fa78ce5a82ca0b3c176d6c39badc39985926ae6fba76942c7ce18c241b0e2aee3357ffa0c10e78162570ee140644ae9d3930f7340aff4fb86f12030658bc826e8cd321f050515ac634e0311045a7a517a0e4be5219c92d7062f4e3fdf46ba60de0edffbd2cad09d5fdc11864b9522e646cfc16e14281ec4da5b6827581224a47f8af36a47dfda4e62b4345d009a98d51502079d4a6e310bb116e55fd34d1393990d146d9661f2e9dfd6db13b84eb86a29c93be53f60e296182200b226a9b7d4964e2151124d3d215a815e4d178236c500551d4dcf6ae68096d4c732d9e1f0d88025deb17c8287f483e5a9982751c7ae77de97dbd77bcf47b8fa5004d494528125ee1f9fc84b5428dac5609a1be1707653541caa733a085bcec492a5f7ccac1606c3d6835c3781230710d8bd7acd3c844f37ad7fae0cd122e9e60ba59f1283554fc26c3e4dbd13d6787f58ba0637fa5c9870c43e835e7aec4fb46c20d5b7c44b67d1bf97f3fdd10dfd83d0c847dff7ad31b6dccb8b5b3e261908c7919c352e96d5155616e5c4f665cd5a03e86e60bbebc562339f73987e70fadeafb425cec22e8ad39ba11baa6c72db0ec8e5b6594a8090faeb0fa367b27e87436f7f611cb1acab0818881699042fa434936979ff086b6f85d7768c021b1cbebeb0be5c0303ea84779b21e18d518721a46080adb193cac5fb2155290883b373b81a5ee005826cf701ac941ff278154ea0c3c98d231184d3fd8ef54649259b8ea9010b8de2c9c0114f75779e7679c20593690176806ade87339d9c535ccc5970358471e107abc7a95eed4cda7623ff0c1559b5b0c293f167f2127825538335835d0475a72c58ab3bb7445ff5e4735ad8a4c775b2d7258df2f538f45d62f1ecc27295d39cc8fb984534a1b2b3306afd8b1d7ab1ab502fb6a3dc12067ebd4e984b6bd253ff9597aece18ba8b71bd200158a1847920eedf982dca55f9a254a6bba152586f18064f72a9356a47db1c4e1d8c0a8731032240fd54adaa68a69af762f29fa48c0233423a3aa5b5820e9ef759911b6026230b10a143f23308181bfd1c5100986bbc5a75ea1c3107e14401606f035ef3766d3a909e7ee0c2df4f59640d8e7a6c5bdaea5a40b52ebc3ec2d9cb66a17cc5f4142c257921fb14376c698f45e597346d280186751de2dc283f1c65c38a603a04366111f3fe652117d976dd8ae1ce8abb16b4868973225617ff03aa8f511112ac3552ab72c35ef7910b6a35767ac842de481ea8fb64551d540baa3d0263c18f0078c1c457600c98f7e21ed92c18f84d786aa054f5d732908e532839b4f0cc71b61bda22f19c688c8d15172fc94fc7cb7c62ba0b21261827cce3238f6af7244718e22df81d3ad4d05d12b73b854b3209c16a9d64e448116300998af0950fa38b8ddbe35955d2ec03d6f0d797e9105c93ca8ce1c61876636b741c592d242be118702ac45c5c5779cd8b848af27cefee9ad50c03decf6434752e68a55e99ab29045100274881ecf6714b368512a93e5d6229f48ed763ff7b71c7be19a59a1497415dc39b7d236c02cb019a8c58d60a9ca4a84d1b4611166cd3548ba5e368fc1aa407d962df5733d901d16a9170c15230b94d51378e78613116a9c1e1acc3c84652b292cd3819a39638dd1701afce0d6948dda285bc7f1ae69d36123989209394e5d6d13ad746315cf76234768b293341f90f456fb4b2a1797e97456060eb99144886165a1c952db5ff4e37d9ed93487852e4392724a8c2468593ca280d459c4606bdc70e6a919dcaca084694ffffd42af25349c338b48ee1eb5497b1832d591136bdf2e61b56357f350820b60ba7c12e2ac95591b478e4bac5cb46a491db83a4cb39620921e7ae7935d168c13a6e374b8a0d4c9bbca55a4e42e070e449b12e9e30303a8ebf408403486e6602e15e6cadd24d97f57f32ab6151f8265cc2683123c00743d85e9597146b239611cc2cca9abdf59fe8814034d38b58f7aec9ca3a002b875e23b156fd252da27a4ec6d53c54ad80235dfa4af69fd395874fd3563e6f4c842c1f91d6201c499c8b66e90a933896a52131fd3d4922df98baf62a6cbe669f2d248ed271ce0ef1c776007fd346c6d4fb37acf7cf46277ffc965f3ff4c73d36a7582746fa95b70606e249d8e123dd51de8268082a1e3198c4d52941b7aadda98f87a72c870cc8135a96d81af7bdd30c30c0c145f9643533fb089f3c631d07be90c2198f6daea7cfdfadb841b607a55bb96a76477666eb4b3bb20ff1b6e7b77a58b7716b0da0fdd430720ce7a5a7d6787bb270323e3d062bab3addc0f319fe874019d4a025a0dd48d676407dfdfa98cad3951ef96f42702faef0144f0726282575e367e3bb5d8e30ed85fad969053eaa6747452c6481f0d777cdae451cb0bb7de83544de26ff05f567e793e6ba4a57c57e0936fbc8c0c7960f45bd05a3d13ddec5d2fb9c353f62f6a93b44902f067936271c7edfb2feda9a53884a8a46426eeb0c8d7ee6eb06fe00860025a9a0cf6d401b01ca51e17721141cc67ea8d08f644bf1e408f4fa491f75466e9f2b7c3a6865daabf759f7ea391e654dd2c7275807dc4c59d023741942a98edaae6c1a1239f0751f5b767687305ab50e2c36ad934e679ff733eec7d6d09db8cb50b3b800c95fb3012334af5b91e5cbf214ceee7e1fece18f65a21faec707bb59126034c104c39e4c6384a233f7ce75e8424df2ba3931c58996f9c6aa86981b3a47cc2ab79e918b62a1eb69a931b9a4c4e70b0d04d813190a73bac3c500740c56a3ecb4021332cd02fd2d526d87855c5e015b39b515a09e496ddb53206176a1f9552cc64323c5d7a61a4eafee778d757659b260725bb51397a3007ec4f28978e5b30ff3a9ed190889ba3ff7440232b6a55519b7dfcb1d50561041d7b6b20538338a95cde8410d96a01c8d1b4eaefab217bf9fb82aaf4fc562f6f9ce366665b78a714118bc5b4a5083de40a35ebda6ad36cdd5c65f6257a25d10bfbf026daf9aff8cb91b3be2e1ea6678f9f9e96604cb63b2b5adab946599349475eb9e34f136f9a4ae9a7fd425ffee8950e825a8e8ea8b72767b120da94fbc9b56d1454e9d0c48284460e12e2b0196b6939479aad7d61148d3097c25e085b583a5c521d3ab5eee803ba4f0e5a8a1cd04d74d423e490018ba2be2df9d145bb63738b0c257d0fb097be04b3d833aa5238ff90d459b5591dbc5bd2ed3233dd7a563f8c398c7944d835fd0c006eafe73905f275926ad3a9937cb51b36c812eb3de4ae6e65663c5c1635b78e0cb83c6289e0b0938079eb4e7f3bc104d6881de0a5df438efda5e0a0b489ed3a059b427d73c93bca1c99131a274c4c96f7ed80e4d033c3b428cf21b7c87a83a0f05bc013730aa91283108c84a5a26771a9584e9d6bce48bfe5a04c2e54713e399ad552cd0170c127c85e53e254d48e1a52baa239889601e950a85ef1d26a205c12fa72e8a538bda1e7dec724a85bd220025b2a20bb147280933b1c19a52828bc86f9e9b0e7c6c022bfab1ca1301e0f8092f7440798939fd24420b7732ee44d9615e7e477595de8eead1cda42a37f798b115e81b964131b3469be1d6043c0410d0c02d610a6a5dd0a170e46f1dfa7d06ee3292c56e64c734630dc129bf17ad6e7a4a4363a8ee48be3fc22c14393b6d5692317b1ac203d97171b2153ad4a492bda515dba32f84f9087c2f67f3c9b3c8e7c3a16f4006e9163d8554f994311488acab4d2f85435b4d32e9c20f1f9ade0c7c30f3d8433e5187b8c6ef26e9705828fd123ec4a2c0471d92b64526275dc464fe72b8b35590bd36c6b9ad8011c7b9319d3efdad496cfdeafdaa364c0077d038d3a310b3baf654b7fd1a1603b33d19de9652233375b7b23d09765b62de603826d3bba590e0200758bb0634908cd822f136038c9a8ad93b0baaa951a43f2d64fa25cab4c89070e36542ee7f36998358fa5aab3d14acc83a5a8f01bd0a0dac904a589859d1c1599bf2d7968b0c1cf39889396f01656f4e18c6415054735ea1b55e0227ef2204b82f939d3b28535f8eda62b980d05d377bc73acc235862c303e43a5ef7c4e169930fc681549ce0420ac447aade08ba940aa2e4d17296e9e0f767a52960439737c671db2385c25067da978aa7d8f262012cae1f199f84e8a3b856889209e4b94a7270bf520b2115c4b720ca12898e8ffc78c6053505280cbad3d3f01f0808b511819e369f07ba0796269f5444590779692596bf722997bba1eece5a8b0eaf3c724ea9f24f8ba7b7d820aab30af7a839676476d09bdbdc3eaf01c56f16efe390fe2b9745a5a29ef66a15a565284402512e994596226bd25d836d5a1411646f6420adc6daa219d59e623e703c8ec824d038b022f54e601431ebd501ebc33736f400022482475632b1a502cb512c882dc547bb5e1431f3c37978d6cca9e814bd420c19f3f45d89f1f09dc7a1b8722738fb710aeeccfa2d3ac3ca6b8dc9b7b6d7416ba81f845407ba6ab46ea518a5ad8ea4a6ab1f092ea28ac5e51ce3bb66745db32007dce4693a3ce4d7fc7edfdac58495931a8944c28a5f1f8baa65dee2c8043ccdf0ca0172691af0f416d645ac25be2b7493014d8653dcd4b7600eec6f55b2507175b52571bb24eeedd2a6e2c981c703828db44690e7ffef0dda79cd81364525b6071b8815f758270e2c835577f32c72010ec55bc0040c4cbbf06e1921e117d30441c0174634a86035462ee050a60cc8981a569c411d24844763139e80ad86178cf0978dec8e1b5cbaf1352fb0c1e17284852d3958239401850e291c100cd811052894bf03724060cec39526d846ed9e591458652bf6794b9785075aa4393a6c6966de5b9849eaad2fabf01af759f7833bc47c7062fae6221262235e579772db39087b33e7000155d0334940bba943bcd82893b0bbdd48b181396f15336a594017ef1dbbdad93c9378e161c93aa9184a2bfa0a1eb9c6a7ebfc8cd7ea0b6842c23a4595af96ee5be4fed52ac8ec42dc7fd86922781dd2cba59658bb9f594ed6c578836d049ace9a68235a017386fd3c8ff4ae18ad27823ed1bc716818e01a261550e4a44bebf38285d1fef1d0ece9b3ad8dedf8b3f27ffe8c15398534599ecc5e9d6518bb33e72c004adf4271638645fecaa11fe368c4fb5c93111279306c9933b0b1506fe1662ccb848081444ee0be3a92894c1711f751ba64a02f1c3e399639f9f36e84f4d2e5700323daa17e0811620f83ecfca14724d23ee6d88ce524dc439afe75403044e35b8d4a82566c60077be3dda8320ce7fb285a1cd1156d029f8b36d1b33584575fbaf18aaa3ced7c2d3c48611b97f544208cec8636bf566d31467ab4cba56e576e0cd3f20302d539cb9fde6265d5feb3e3ffa3490d60b21904b8aa53345ecab144cb7cf1ffd7a9d328e8c9096926b3882132cd558748a247e00d8cc22851b49e9cad24bd42c4a4b257c4266ae481227239ba7a8cfb0c16f7fa03c41fedc5693045ba8ea3b5f0094b3b38201bc65528d18348f33bd633122f7d436acb19a0e4b5a819d49fb13c49c89c09f1115a0fcc3f41d3bff4ceb4d5663cfa0d90b15175025f973ce1b367883da44b4890dd88a0fb73dcb264d31e4e281342e89872d63eacb053938a0ed34078fa0f5f8057114858cd9ff04ef3e669bc6d3576c053d20688c2548bff239fca53de052cc5e88801150afe883b5c202633488c858719ca543ccd19501da00e3b7913436692010968b58089d31a51b50043cf4caa05423881cede24a42b250a6ec23c901cb96d70cd905a71ba52d10e2770506d13ab12310a6b8bdad3acb83b5eecce6c45a596e5a7cba01efdc40b1311c1f0047d48ff27366269cb4c0b521efa50cb9fb3cac4e74a353af8aa75e0b92ab60adf2d4cf8a0ae8cec1cdb98e041411bf839b4138141ddacc40641eb26f05333b2736ee74283b25d880e727b133ea82b237bce750b9c8b762566102a2c8ce7b4eab104bfa61b7568953b828bbf638ac20a0ee66eff1163299e6fb7e12da62abc48a7edfd21e2c507d8f03bc75aacef21a3f4da0e384b16b6c74b317c1828b35401fbb15f21139217351ff55499d271f1356cd657aae0b376d4c2ab5036ab75a8f12f744a260105c6b5355bf0fe6eca5362cfdfb21752616e073a54097392570b9dd2fbb8e84929d18de0010b152887e8c441960c682eafd1b3a02f5842744866cf5d38722884551cc3e2a6eb64090e1b25d1d1f94aef5706de1b5a4d7610cbbedbc7e7e9cbf46adb53109bdb9337d1eddd50b26b19c0bb521b41988ee83eac87b4200bd87496e3a41958ec063c7ded3a84f6b216b72ab62395f2bef96677f68ec4b4f5899c30309500ff065225344c78089ab10787b4587feeb256b78df2edac23e00cb739acb4c8190979f522bfc52b7e56202f60a55a56dfdd4211bd2f091035581b322ad74a1b5bd3e443e66a37345dce2fffed3c1fe8bd3aea2721f6d2d532825b5a00a6073f2b396d4ead1c86ded7fc446a8f583802af4119ef2fc135443684fd39c84f5fe2945f7957b2ed5b73c6227838f0102f270f4b1ed7d5189758585c3574b7698f83f25690082d3c99d7710e872db9cd82506fe159e7f0f622907378bebed8a3a93308ac1912037ebcc3abb9f943c98ce3b3c2dad541cd723a4de527d131388ad25192aec5d8643eefb930f77d30be1e27590eb303dedca90e33ab0798d653af0e84db101069535dccdc152111b0bfd71b19667652edca0d6d8a126cab4962eeca318b7e21c4583112c2393c1d336dc5f347c38039f7e41897e4a33f2e61b6da7032600a48f787537ad487de6a7e63513cefc1956b2bee0f4c052d053edcf2876db2c9786815b49d17db438d3dd5b34b1385a4394fed3f552415ebdb0630827c3a8c88495e14ed983f33ae81b7b10153f865287e1ffb4b3b32f2858658cce9f4760a0c8dcbcabc46528f5ed9524f935436623c910c6bd22f2505941545ea1ccbf941436ef7af999a5bb7058aa230550186c3e0153695b9859422d00845e0e873b619e5c1b0576f5f89902580e6322f95b9be0d710940c18f07adb5ca1719bc13805c4489042ac8ecbd99bfd115d87d69d99e7855e4a16ea903268085018f28566659fe1044ac5af6908153b60552843d39cd0477c2422ce7d53f4c9a8a6494e3ccbd0bbbe98547702be0b5950b680ed51c97649840dfd6015c0547ac2f1c87c2b2617da6a444f6ae8b81d41080611cbbc0ce1420d61d08e2cfe961d66c270305c3b9e6b315a32b04f14f3d227d2e689a64fdfc9024cd8d268f316a9d24b5529c5a5c4cd295b4dc2f9ae3a456d96f78952cef52efbc33402770ee9249ec721fa2cbca401a0032dc2c4d9630e9682f812abfe1c912939a2908ce3998fd5bed63f9de090a305878b3b9ec3d9c9e42367deaae531199146c6fddbefb8684cbdd2819b1bc14c1f48a13ae7ff8ca8e46bced6a3e4ffc3ec8f56b8436965eecba6102c3e2619e666e9e72afa5e087176e69a8068b8d749a783a5cdb3d33e5a55b42c754295b1c8aea6e6ab048238b922064a526b975a8a169df0811d0a5d64928a2e16a5ee59314dfb37d52739d71c88f32af581cc458349b3aa9c25e59b06eb23fcf689cf8092decc0e1d7cc722a2e29a6e75e268fb7cee1ddd49546e1f37267e8f50a1c5993be0c68f826fabbb43a9c62ed4670338d4d423d43a4b7f024936dc678e122ad91f5a9b231ed39e583664bcdd2256ae762dc0a00b21a47344247d9519410688b64a7d077343e8b1621be1d08e5cc66eac8b2669cd3691f4023dbc8690bc4d8bc8846263bf147ade4ec25bff4612f162b2325e4c5344a1869100ef1e4c24743d7e72453830e18bb8073c6ceca52b1c0e7c2bd4df5b541331a6f6715617c0b4c1f5d690142bace9f940a496ec12bab6da5d1b30bd9d14127a0e7c42fe82e0885445ef15cc5da4d6da6dc69790c10495fcbd6de2c8423c594db73f8a6be8a6a52d8616b3854cbd999d449338dfbb4c53b41dc3aa08ef412cd0116e6ac2bfcb80d1f6d4925a4e95e81e57000ceffee1973ac212837eb708e09b1b727c6ad7ccc449918cbb1340db81471d00bd64385300067837222b5aa033ee612608c20ba59f793007c1800db00921ae6fcd7d85642771105617da6855d9e8321e84fc2666553f7a43224ae9e67d3d22a8256b28249e5293141be567b432dff1cf1eb1beb229d324e46519e1e15869b33d186404121d1fac62cbe21af1437f18494b63dde314d5c777758508da34b2f19534ab1589d4b5563009b4addcf1842d4eb94aec98d0ae9c126c89d4520a5c179e3a0469ab213e4e5756a0f0507932e202b246d56835541b26f9f4adb0fb68486b366db3e286e0abc37272cdde2a0e69566dc40ad2ecf6a667bb20d76b61f904db0aa1b204f72fa64c98fb7808700ff1dad556ab015d007ccb6e1634d9090ac0cc231950cbe42b904c06862202c4cc2e0b55534423f4f4c67924f2f5730fd0d8ba3d112a41b539e878b4368bc4ca7afbc37c706c5b30e1df43c6a72eb8b9e066740fb308702f68ca13f030497dd12fd29280faf1ac58b7106c8372426b46781bb4cfb38c72a222185062c2e8c4acc22283b3891552209f515da9471ec9fb3e7ea9ffcc5d9e938fc3f39c38c450be297be8b26f63e774464733bd3d4eff73ee06e7bf69ca981e039ab6586b674dd66e811a64a746f41fde0c9b1e33be94d98d5089757a67c2cf0e28d0470fa9e07ed09ce70f82f875f63bb248da39992def2bbbbaba03bc7e3cb3b3b84892e8cc51a3566b851174ee87e64b1b9e2d6ed9d4f9e818be27f34bc5ce1436edef6a0bf31f8961747a50b4b7b4188afa06945dd441e585080a895385411c9c25f0129e8e2a1ea8101bf719a1941aaee05d96f147c0586f8a86930d664fe73f9c92939c45827cab1db7872b90e823e1cb95111ee1182289a2b923f9520836d3493ad6fc051bb2859675b3c8385558c7ca5b70089b760fe40f358003366d32fb300d8e42440018de13a46c1bcdacbfe9c02f6dec3c166bc81a90810e063f60353864666508fd359a48255a70207dffcfda9457b2ce258215985971391ae918779234aa216a9d74d4b7a97a66973cf3c25f514f0b0b0c9c32b7828aceba7e4c7b2fb64681c8b2d771a6499ecca7ae6790f50d44a02bb3404f96e9b3d3cfd6628bd48c96f0ce1476414ce8329dde932d3938eb55c2c72a96e8ea0c7bc6aa104e4a53cab1d0da663444204d752f4dd8c0901517fb559bd45b9249ef4fbc8661c12a575d0e05876538bb44964a036258319dff27a27a52597a394bf488635d764a549037569914608b5c9c16a51f4efdb1bfd454ba1b80a550b3ff58cf033c608b80bdfcf1971e07dfd475fa527fa3603f1af806af11d21757383937d4532ef5a93a437859628de5fdf6200c50da8850c989d04d66a7c6c37c94c6de43caa212a7729c75767976c37ff40a2a35f187e87eeeb2c59155755cdee5a0a69a33b695fe00e80ca78522095efcbc115602a9190a3c4cf9dc45e9741b2cacb40b3c95bb4bb298facacf23e3c2a50475779d451af3b72cc8730287f82356dd5815e0926a59c300098031488b6ed99fe29f69fe8724619769e4b99cb32faebbe6739b2556a219e168e714000e69f8dea1949ae94f3118d2ef776121af11ed300c8dbdb7af8a6a7be2e0a4586d75edd8e1ddb0b31ba8d794769f3a32f4d651c0c3768811ed1c78e4bb667f4b88600c3a12459336d7ba7a7347c85ae5432621cb54b9be8bb0e7e92096ceb0f6c32fc124a9be61c369e5bca0e5fa5cd96d013624431821e115c9a697878b881b300448f2f7d0325e0cd763005c563e84581da07fda485b6f86d1bca520dcfc7af81ef633069facc2f091a3352fddb1fb53d549508ac962c9a3fbdf6c655661a1b360d321394f9f6963e124df6a529b376e3649446dfc645ebae1f0f2a8217b32ee3953c072a7a4084a3e84b5535c79b2a40ba95aa708df10fde379f8feabee45d50dbed0331779ce0ee460974fb21070cca7772bf08bd68606e672a7d509ef3193890a83741a8d6a7f21ed8391602b98ecb2b45a4f44b6e6d31403505d8a7b4a8b718295f3c8e83933a0c4b1ec0d4b80973a843a031c8aeeebac9dab41783aa688901151ccc1c2895e88fc01d183a065d980abfa9a7886bf0f495902766bccad63f668294e2edb8b2ca082357253ab693e556377d97520b4bfb2939ac54fc56b40f558e1d64bd5f5b78a969273f5b0ca4eea046fd37dc9cdbde5c71503ff58f7470ed443b311e38fa5ad7615f47d47842e7b9485e79255edf64aa30b8c726e80b48425028e52d2e2253746cee3a4ccb64f685d964cf48cf0d011277a143adc70f8601dfd2050975f54c2efe7e0cf472a85a6c529465e22b0ea831a8c0eb1aeb89bec3b0f93a44a9f33b6a1e1da388c77b16922175664e4abca0268d9d7fe33c4cb2233af39306d9333336040540251dea0c54f908fd884465e489fea587879064428a806707bd4a4c25ada45263492f634a5c487bc8425ca1919ab8a503d18e2ae75115f910f6fb442a337452e67f29b9b35b7de3f24baf50cc61eff8cba2df115375ccc26086ffdc10fc8ff7601c8abcfbb33fef330015b92398d2034dc5071ce3bed911049a5a3c4cda4e3a1f8a2866dcdb1ae69cae2a4d3b253f1617191838bab9ae9ba1ff758f272e02411ccb427281c58d4375a36f8ea7487914ccb285b800b801086c4e4dc4f1385492f1d47643c42d27860433a511fd0e09496f8168f5b77e61a4c07c415941910b1fe4a115c90ec354af9e26a66cd69685eb6f02059d4aec2c898a46451cb6056a99c6949a25e25ba1bacd09cd9e57dc042f69e2ec2668f5efc51f7b849011b4486926b1b72ab739f391ee995f7e0cf5871dc755f7b8b94926413ac52a2bfac9beecf6582c4bb745bf1c2d389e35c2c910c105171fe3bd3eddd26659bca25e761e9b4c2ae5e80b450f7de89f62a4715ad3a0564592cfe857aa96b84b04c3b3528613f6302945a867514d0bd2da884fcb310a409f8b318aa94b4b4ebfff9989848b0f005f01f2e052e446021d291ed5d4f3af77a26cd511fdee32a3dafcb7448ab52daa717a805c66dfe029f08fef75e30f0660bf81868486091b1ec9048e606c003b0d62df05b22a3aac509f389bdb4d8791f57c3332782854eaa2e5bcbd666b72a3a4e5b453cd8e17543acf59cadb42f401ff58fa9827e2ac80516bd03bd168a8623841adeccd6099b089d936e4cf8bef500ce59c2b432e2fca897aec8c30e76a9c7b2358c61a5beb8ed888785f6b33d40ee4df23b7ce06f31ebabf38219295c435e6c34cc1199ccf56c4df4c26d6cb3c7ac16491532bcb047d3294194028d0f9cffd61dc8180dda4e9514573055588e2f3b1acf7670e626d90c34d28467a92d430d6088918d246b659dd7661b41023f0c6aa86ff392811a94cfd4844f690f39d21bb43bafd801553469d03520e0b3352616c9f87959b7f9a8fccd4178cff5dac54f6edad5aef815b81e5166e23152238afdf9e7524741bd07a5a4701279e6a01afdf46b5b84601ec918e353852de8cf4121746a99abd23a8ab5375f790d6236400720aeb897ef4ae1077b4e0b562dfdacce33a8754543d8a269857687bba363c86f67286761a137e9c8d7b6b0ae05526dcebb9804923b81063aebbdd4fda9e755b6d0877446105dc21a16974158d242e4d01c8e199dc7efcac3550115aeffd582ddb3a316b52b887484b738cabf9838ad89baef1c6acaa0561084f25bae0fef017da2ac211489db159d3d065e3bae6f48c892ab7e53e6dd22e7048b86d33d54e0ce52e83eb6c285b021b17ff83ba3eba03228b602db3dfc7e48da7b620bbe71d023b10d63bdc9819f1ff49ba0b68933983712a277db32802391d9f4bb12f35ffe3995d6a513422dc69b7a11c65528f3d3309ed19e0e9ae36cd7a64aa46d3f1c9dcf1e99b76dd555163cb4ff7e9805b2363e31440c4aebddd80603f89f2b309dffb1a0b88d47b505fcb091428af9898a6206456e03e083ac8b6fe85b9ce6fc8d0c817bf188a27505b7fbd41e280a2d233f418e898ecb07c976f5cbd8506268b68a0f6326394a79eaea170316edf29cb7f4e1793c0b0332e60f3088dceeb4c83ac2780e4260b1b5f6d21fbcc652b7b29c980e474668b67f12853efba423722c2fbbe7795352487e4a97689a9b3df41f67c11b23fc7c8c0a88dc81c3eba3952b7a76d4dc716115e9bc4cddad243c41b2a4347f9bda89f703e6109c4ca7e772ecb180a383dabcae9d42c876c69b7cf27a0bbe627867c5a73b1b8c36cea660265a6b40b3fcefdb89ad92f4d2e9f7055042cbd42a30370fb2a01dd0eb391d7e8ed665886c71441d94764f6c9c643d86941e1a1d3e8a189742b6462ab30a3647abface7cb80c20b89deeeb475d455aa8b0a4693a4d975d9d12acb36b51b9704b8db1fcf173d891ed1d5b49f4229e1caf9b4807cd49cd8ee22951bb27c35916391fe9968d0bb0d01471992f0dfa35d5600ee530e84103bb00c189d5882a0809c5f3443c0208337be7a6041975f411924f9ae756a80e60d649e80aab6859e9c9762db6a5d167d8cc5895533506204d70a6b999b0bb8c5785e5d7df8d0d1e4a13c94f75cae413a86333d76bde10500f0cda8d1d0c6519ebf59bf4583c3ef5c48a0b914b03ae31b8b98fef683bc8311e793f9bfd020cb429c2168f5c174c715143c9d6c1b9cf73e2b18390182c477125e6533b4f8721a67f9b8a8246dc743e6ab6de2113fec5fcc66477cdf90eabed9387e1dd9199f895c25258c1125461c599db4b0a8e1662c5c494a1e76915af3dd5f672dea0dca46bbf2c8be477d384a13918009b17f7ba8346ef37f698548e7ed654464a665a765ba158279ccfb9461975c20a458c182d497de0df70e90a02248e514d3977217cfa2f1f3548e80ac8d345703f7c82a4c31f85d349b3809eec6ef2c9748273cdde07bb61511690c15f6d581da428154bcc312d4a73c229d3b12db1fae2e98a24bf9a140aa370ece2432df886b9896fe65e5ee7d6b67ef2edfb427d277588c940a460348e415dab9c5286a9514155903053f82424f8cb42b79f2a28b5605c52c65ad47968ab8357c70034101a3d4ec6b2f0e86c98d9032e42579161a112e898f64bf552c916dd0e5f4ae11d424938bb86f6fd7ad2c97958b86373fdeb5eec3bcbf91d93766966bf2018a5202968b4f5d3f5902f3c857db32b0db5fb886c3ebabc2e49f16d6453e428cf593b95f56c86e20d94b55445379374e6a4402d374aaa8343177410b1e463e8e3c20584e45e9764afc250bedc0b49658e9ac5601b90114897bb2d909963abe4e2a250f3049331614ec2d195a9e3abf0944198a85123b6a3655f459b5d2fd41b19c2f001a08d22aa7fb8230b11a7a5bcc86776ff0bc8ec87a0444301c552ba5413c58111a36b2993187d6590dee6e802ec00f3334bc33d6a50c965b58331cc139121b669742edc5892416a4dde492672752c45118279bccc4b71aa4a03ef4206b1544478212227c9030a645bad8dc9afd709091dcc62921283b15ca721c794a18d5cb1ff473d93256b535552af08d6be30e676c3e611f5c351e9a14a959101d9c2e50a28fae1909cbb75aedb6f4b6855062480241f098122e7043462cd2193aab01bc464bcf2a490fe332185e944adb51da6378f20f48c7e8c9cff9c871d38d5ccaee1cb5a2a98662b70ea6dd4924a2a4c3e9f83a265090318826d9ddc6ad8a4952881ee71a06b9ff9ff962ff2d17ccbe9e642457c3f0238f20727cc9368cc179ed25862ac5904b8a81cfd60d7cd4d43f63808f052f84acbdc3481ccf5a74b0fef10b3bad4d0199f968e4f160288b24f940499d1317f624447c772bc9fda76a67d4306ce6bb10364eddeab4fbfcc51767537b72f03e748bda8606f8c2b206833db2ddfea17aecf5b2ba19f5061df995d07625f047136e0d81a76bd9f8379034c52cdc7689c54c28f70ab697a88faaea2ed801f39964e8f88a0109f78a3a1f5451695186de8dd2daf3636e1a37cbeae1f0808b84c566e30f1a7330445532b9fcd4788f011bd91943568743a6f319b5482858e631186bbad458dc484fed2a8cba5afaa312e9a96b6387a73312c15b67a7f5e229296fd92fa72469c2dd2d0d3c25530d8c5cf327fad3a6db23e34baa66b3e1f551c42d7b47f423be40495267411f23297d9b67522a285992952b4eea57a780df90b69c2654282b5a6bdaf35623f1355a293b124ceb69c2312711505f4db3eafa0b8c64a5824a5d6e8d93a657179dfc1bab6cde86f4db75839aa7a51f0c6595d641bd604549e139003b0d7a6b4efe1ff34ea3c97d99b9685bfe058a80ea0790caaadae92cf95fa0fd623f759c7f285e7a18499f4f8f1b79570459689928512cdccb7e38bc4fdc3164c3c19ef4e4771c28081c456b93ed4d4d1ee7de13de2f2bc7de8775910184b84d09e74688ce6c261cde22e0a5aaf5cf5a80fd61aaad63b9f170c5d303aa01b7b380e7dec11ba53380eb78d226393ad53579724dfc4e1c98322701cbd64ce2058a2455ac414738e628c77205f0c2c822d52ea3e668ed6c5add6ecc388b0a4f5a8c3196d68f8972d3695b1c8b9eeca73d24e54bf8edf66d2ebc45d72859aa21d691d1c3b3c527ac037c94448bb97c7247aa46c0347baa09f3a01732c5e473441d334b152fb95d46bc5753d588c09b1dfe157869431d69619ce805c8b88ac9fe69c56f034d823ca709ad1b169102806d35faed110d97a63bee28e5d1f38dabcc8622fb72b684a4245f56fb123a3eadcb5bfbe4656a1397234c8dccc84e4f1235f4326c5e87389d0179cab5eeac3b9ca2aeb763393ffc14d740e1596a930be4c7747185304618c268b86f5a8413334c936a90a0db729c008691eb6d217609ad309f79fee0210c301e9ba64b13e006fd0dc7490a982210c099fdc5f534e253dcac9b86fd95180749fe844c3a9740659e53370946851649141d1f42e1731846c7b744eb56ff595746e7d5e6160b31f47528fa68ed9693da30e9cd70da6e202a114881cd499f9519560d7595f9463582e9d39856bf598566264a8c63378b1640ea0641ab01dd422f743b9fbf1e1db425c9a4c39675a4f1da90b6d92913bd20c4d2d658c6f1bebbb790470852ae4ef0b965fd984c1f33bb7d8666148f0a5db56bf979bec893d0970753601ecb758a9c1d4f21415eb16617122dc346a0186e56f73a771b02a9d6d70d8a93cdb25c19aea69a12ec9ae26671b116ac81b1a1ec63fd58ae34a94b4370b79b96fed5b8cfc9971a9e9f9170568865f30843fc8dfc8604eb14815e6b74123e1457a256b9e781bf50d603dd0bfac17896cec9cb0bf40c6a9aa5d63169059daac14d8010f3a5f49b8c19b67941ce5e08689d8c8368ffd84cb34a133153f25ddda082797a0990f36070fd2b45c173bfc2690de1f878e3687141c25e224148b0fdb75adf2ea724e5169af5d840fb42209c334901a7df883736749cededb016ace944e0e7c8fa2fea4394db386dd6f7565c5db78978c48346f53d190bba72d96f4e41c24c8e9019453737d85f3159f54ced60aa025365a2140e6ee9edcffcc9eb57a0b34a581279dfb61ba9e5cf1165c5650306ad3f8b54e8b3d5a62b44907f2236fc4a4605f5c0ddb9c29e50c8a0b7eac43163655a96a31d317029245d1c8e6b238df4a5d23b0fb5efee928ba3eb8d0397a2880efe07ec3eb68a84278361b4686c61746dc3f743d68663c1f6debe29d7d6d4581646f9b252e662d04b57233481e5ad9795a78b7da258ebc492a023634e1c1180377c87029438df938c41514209d85c50b944968ad258ca99a2281d2b12fb8626130a3d07433bde12c416f893970f90e2b98fc7e2ecb9d47ecedf361f6be5d889289eef4ec91ca6a0a362deee70abe735dd36afc4b26be78fddc54f1138ce823f125147c4530db95aace31d3a8b8301a974ffc0285d44ccbf7f5ca5813a4220794c12350d54c02442cfebdd6f47c364c55e72396ed195a02519cc7376d9bcf438c81addc8c7897e4684c86d4488a27bf7c95579308c1126217256d490afdb9636f6f9cbb47752fab8d99c29699a543b43b67de2c18b01bb479a090a3293893c650a8adb609a42e9a237f28e4bc99a6eea8eeef774e37b87c463159b74799edb3fce54042ea686e5a07f3afe0797054748d947afc4a2b251b18cef741badca3142350009f48de5371d06a7eaf7f2ac724a6f6969da48e42699703c24b104347899fad175408dd3937152f2bd1eb2156d59dd741672665de53afc625d5a0fc3b4eac77b9371bfdee7857c69334422211a60f9179fb3310063e5772c5521edc037fb8221b2f88cdd4754ac78e95381ec4b9ffe69c699de6a382d981398f3c9b7c5f14cb51d8356e71497ead68ebaf7d104e732f95ec82576625d7004cfa97e06971013b88dc16d7c1f0669afb6ae168d95959db7995d470fef7a40050a5d64b2f4444c4bc2917b7e664c87bea01809a96f7c84e2d370c99a48bf9e8dcefdbb972241cbdebb7da3feabc208b44cc17157b66c40cb79995b11a41811476f6e50ada8d0a0e57e810290a6021a30ebb79274c4a6a85c9a37aaf34a6bdbfcf5b1ccdeff3835504c61e763c9aa9aa001d9c4f691127f6813027abfa0a91e4b4b7b7644563974644fbacd85d5a903a7c57db9088f8b42a3520bc87308a52bb630af7cb43f68f4ab52125f7179a5e25d5510234010f934802c99e73d5f6d06724fb2189e2df114c4ea9d342be10421e1a80651d0914a04697b3c585911bccd06aeb31c42b720f731ba7be87fbf82231f129d74ffc7c5e021dc744a219a7e4dbad65942a13b8313886071352fb0496fa70b1f0392eb1aa8d72db5b6c4549fbcc491ea2c83f0e256270cecf0ebc7e670341bbcc87b41fb77061ee222a638470b5e8c01377b01168c9c7ca8fbb7fea25a47dd8de2b8360eda93c91f14bc1d35b7c5f9d4d4cae716226d8f0793e05a2c130765dac9460d54653876a45d3c642962ba0bf5ed16f081c19dbdd4d90bd88a565d1108d3f951deb7b945e2607bf9cda8a7080496082d4034cebde95ee18252e9176f5248d6d6e6cd416814d0d02f575d20c91dbde01fa8e6602c091818df9669d6e58e1a23cc7f0f860e104050047407e84d08585e993daa27b61ca6fb08645ae244e1d360c378c167aea8011d524c859d4ee78f6ee5e23dc35e20b0b74ed85f6f01562ede6e1e9e99d2fce13a59316d3b6457b8db5696a67ce0555ed0f5dcb2add275bbf96b08dde1d0dcd0a99e5e5ca1f39699c9f6d20756f70b8cea5b098cfe6711a7c0c3b42d61370ebc4b290a45233a6e0d8449ad85a40062911d919a9f92ae405b94b31c7103b885768665b6c81caf4bfe188bb0222cfbf8e4a91c09053fc58830b5fd39b7c5ec76a4029408503c3d09b3c84880e89f60a6a1b8fee0c9f9f235c97b23371bfce3303bdd361998edb858fe306ffd7fe567dcde0ce270274855f810754fd913856ab7c0afa38949275e913e4a2648384f27f3df8a7d66f7543b3066cfb4bf8c15102352cdbb4608585cbba9dcb77ad9eed00c5ad34c7c2a181e0e186e4601502ad795584807619fac0b8f929069e4056d323c267d4670bfd8025d38f18fe05b5da8ac9cd5a07708cf656462870e103bb94e47c4fabe624e630f316a5f32d56a0b72b59264c2396f1d00c784964ffd994dae3bb68dd850702a7a5db45e6c334753e1b4e9e1687b63246222a08a43448678410df473f284c306fdc67f105c2e8d1b8e44d8a22873697c20ef18755891693a53c6a57bca5a1ecfce99761098f04ab64dab2b5de72f74c750fda20904b2bea54bc2198ac3286349bcedcd372cfceefe49521d9bb0a840570a6738a3c8e9a0c698c119715ed8aed905fdf24711e3ce87029ab25a7fd028af8ea9cf2eff444e3acaf080b72b361b03901a63dfed811660a711a2b119d65889894934c6372a47864a30e0f95e681ba653c78fca9369955800483c05b17552bf4f3384f00ae59e25af23dd79fc5e159be08aa8149f562cfebda6087997a4f099ee29bc08d2a472a8cd7e4ff3b9462dc414a2187f36e4b5f34b14a15ab940e33e1d7891d58f3a4834cf2e5a47c600becea5865148593019f34335100f6cf4604b8e03ee34430799bdf89d113c7518efe138fcf71c99a23fa227c60da21d49f7fc4bc15c94a20c57fa16a26ab7c85813f5982ce1255f40be1ad694e62a07c129e55d8e9d8df2d185e2a17007fd516e09ae77797cd22e0cf2c2fda36d514d768b56c498be3505764742bf644003b772c4641ccb0de14c184d9d319d5a24c56796b6152d9c9b98bbbed60ae3356cc298afeb0e77ca830f734510a9f9f68470b03edfdc89fae15b60b69ada5b17cf366102a6906f62f77bbded0845884061140b15f086fe5b3f5a1e1482290e9883c444aaffe46791eca923dd254848913280347beeffa46c9c175ddeb076f6332d86659bed5b5c5c17dd90a444ed7351c0948a3331f618959a590339cc621279b04c81ca9ccb8304986bc3dd8c3bc48b37e04da4228ea815efec2ec4a30e46a9ea498c5968616fae1a73b74c8223c5810527526055c3bf0f7af15ac9f5d2bd5acf9cc28b8876708a1f3a1b193b0ac225f78f9b1052d2f9a79049ee228d1b4a8a4dbbb6b0074e6a9a53614bfee149e3bc086abfcf7911457984dba7d9150b5403f440ff7b51481f9d38885faf374434676e3f54d031bec15fab90c9c2595e9f366bfa56c1213a574c6309afc7d3337a2ac9223aef6a525f880eb928c7c5b0ec891fcde1e9f8cb527d42f059579b44e2981e1ba98d0aed09216b3df4d6226038a537927fbfa7d1136f16bbc1958c7b26ac0ceb2daaa123f365f067d6c3bf58ab93277b43281f20fdae5e69cd33bd70abdcbd511cc53faeb131379f81d6f7f370d957e89a60939dffd0c627b7530e8beab236858274d95c61f7f634c6b9f5cf4d7579532cf920ef7853188d59d07472422956623347fec50c1b624b6bb44eb2edd7ac8f0ef5ea3b34150133aa34496afe2b742cccc027d444625d52cf0bee72b96c91da0d5098aed14b2b0aed222040a967d4361ad7dfcf060fa53a866b031b90971b0844e227d1e3019d27c14fef236ad701379cba3f4cfaf5ca86dc1f553c7221e36395070d4e2c673aeb4d16b1791a087e288b259f3c3e4f6086cf0e68ebcb39de2317675cee06bacb4f75cb651dd0722e22576a5e64ffbefb6b666c387e79d0c69de5ac49135022e9b7ed1f7f5032a5d24a4a9c710a359a16c2c517bb198228689987ad315fb77cdc7d793a89bc4455d703ec60033a9b167f5740d811351de5e672dd1593464f7684a418d2113be5a0ed80a0fb62fac54016f6727a7a3a72a008c74ac83cecff104dec05b6ebb4bb4f19f6476fc065f9865c710da3b08f7e6fc63306fb68d48496b4bddb4d4488dc7befc30761089d07b7b70b226bdabd3eafbdba0c4fd63bebb35e7aec7641b8507cbd8cbdea52dbea0b73852b292ba0812e88e6315596080af11e9503dbf1c0030f5166931b12f86e7c32e6e8a118dac107b6dfa958182399440c4521a278ad0cc9c3d08347c859624a890998b2d7bbdd0e48de388f06ef0b7cccf6d3b1dba5640cc3f4759aa6ee1877323519fb76fac3fe8718bab2ebbaae6bd23c13673190ecc2bbdd2e2525cb67269c369d9b6e525596394ddc64a2797c7097cbf6c966bf7ed4d35f18c42006318855fcf0f5e9bade9780870218be35363bbc34fdbadbf6acfe9830c87e3a05d9d767d8e793b13f6316bb50dc01c9d3b1ebd40f307bb26f182605c32f9e53fca21d8349c9d8a7db651826257ba4a8ba6893c9e134713e381f26b88399fbf4c94d5936d129e3a6435b59e6a729a3b883d374384db34ed334d5bcfaec4e7b3b20d95ebed8d5c890d37e78fe628883dbb58b9dbb10da639eff104359fd8ea8fdf3c9b2ec9fec27d94d70f7f9e1c1302915bfccd369b3ecb4ce8cd267d8ed80a43c633532c6e1eeb3dd174390cbd083bdc8617b31fbe852d8edb453bfb68a5fb2539a9d7a8e5dee9eebc2c960b7f57640327c6dd7761a8649a19f9166b7a3ffc0ed3020397bbd2ed9b14378fb1d72c2a4647aeb145fb82b22d3f753328479ceef903249e47e753b991a202934c8f92021bdaf14a5fb847484f2921edf9bb0f2f4750495c4500b31e577d83088291a0e6c7d4ca9975ebb1d4cd6a6cd11ca62ae9f1383155f9f184c074486f0662ff410c3b2db2dcb32480f2f0c97a94cd6ee6138f923461e4f877d365f08c9f09e2519de668883c83132bfd8c38a3b148fc93f87b83bf9a7fab07fa1c726bdd78790c7743276ee58c0c9f0f6584892e13def911d3bbd18442b885ebb26ee603288e24dbb24385fe91038e40fc8e459ef754d7af87a3dbbdd9c80c9b347f507984d8edd8efec2b7664eb05200e6eb667f9502309b1c7b866f8dc5300c97afc31f26bff08bc933fcc21d3b0c97310cc36513ae873c861f0a8e91d9f30fee1882b83bc13132dbd7c3eac37ab0bd5d1113bb58869f11c53690e78fced047779d1ec31d435d8ccc167725c8f0b5b258f0145f78e2ae3e4666acbafcd621c45d8c0c1dd608414db6323d76ad67b78381d9f270d5e4f6d3e462f16a2617fb76bb900f98866b8d9a52ebcd8edd98432ed2e4c21c9239a2637f3287bd0773d65aebfdeac3fab47027936576affb76441f15f657b121a40d168ce479ec7ab558fb766dbea20d6b366a673f3dbb43c0ac3d569798297ec13ee75f75c13e9fb76f7d7ab37bc1ca8261fa7aaf6b37cb3a8ba9790bbb2fb452e065ecf57630b91ebbf51dd7d17add97f99861b84c7157449eef775d7127432f9cd7b2ae3cec2290fbd4ed80e86072fff3071fc7038a2160962e9e2cdf979281ed42a1c8150165a4f4f4004ad92d5bb6bc9fb8f23911c376a113f9934c491d0120004f07fc7b79aaa449ea174953a651be2e073feff4faeba6441bf5a6441b37aae7f070c4dfa743fcac4350b9babd43d8213eb97ae8f5a608e0e188b777000f473c7609f07084e695d982173f1c0f471858ae635b70c8159647b0607c535f163e7d95695c99ef517dbeab8bf58961f5c1c2944a89a19b42b37545949992ba62be1498233a057344b8466cfcc911e5e17834280f47fcab1f186c614e6f3ab16f7b390ec221c74f4065071c24ec56d9412547272e513e8a681064491494fd58ce527fb66bf4c77236521891cbc89d7d64c494dd802d666e4017906f0b223c64c3d7178f865204794b6e4e0344cdc30162847e21b8d23f5dc8863e6cb0327e208dccf1fa0d5b0c69ca20465c83a410c27ecd3510d9654497844d1452107ba07355216699580cabe2288e5e5d1159fb06b9e8dcab3da27338e639692fb1d8fbe9a09123b40dfb4adca9e47e1f420b3beac2a8744072c54e98988c210a4e98e1110f8dc81c26d8c67e3822bd33cf8846d7ca53a2138d2e952745a33be559d1e84a795a34ba519e93521a5d17add7652fcd09934b20640e930c5b1edc59bbe110ce636805c615201a78e846cc71726bf218a38e2572256489a7437cf52901b9261726da888f3a1057b6c7f820683cdbb598a265b02f4bf865bbf42bc4304296bec12038311483d0787047611406a9b1acb01d0c72d3054e5c7930488d142ddf8ec8dde3b9956e2d90b89259b14a6ba9747bdba8742313132a5d494241a1d29d6ad4a0d2a5b6f9d3a82cddafb29c4ad7ca21072a5d3a009a1257821809725d0338b9308811698389188a416e3e6dd0131c6b00035403d0ee0250e9ce1c6b8b746b251a26a4ec2e4334419c268a124332429a93d23558d78c65ed966595653b767be95a7b318b71363a76b1ea83740c933636601ce7f194b1d5366c9f0f0acac91927356a0000002037807e26e24a6424ae484fc4157b24aec0dfca22e1507dc0be6d1864e2c227de80434a8a000460861c4e90432874721d0899e3045b9f366e5860902ec6b0315f2740f521baf4f982581124490cdd581ce486e642c206a9214085345a1914401550596090131c0b334d40f5b1e16e7bf44cc2d73ea50b8320d12e0c527318440acf61a7527b70f75c87ea62efc15d748b412e10cecce408bf6ccffe6231859fdc11b7fbb276614e00c5321a190449012aa489a1f8ec422674b0009af27468395e004f470eaaa3b20089a11406d4d01c095213440a1a268c105782d03c1d904eeba4a226e9b23ad41ed2ed0f505da25b4c61e981be82d0401a1a0f44195fa2fd74c01c47b0f19da6836f0148041b2f71749ea6a38541d381f19346e6a8b016060a6f416a34351cd1ca90da0e16596a3a97139a4e96581121e01b32bc93141e0e196951d4d7b46d6322e68866b41b2d26924ddbb64d096d49968f7a22892bdd248569c5d4420a4f47bc0912eb049cf46861e5df93777a38e41b5eeac49528cb4b31c4c8f25dc443f36ca00006ce1172a785e4189191644193e5922c61a472e24a374930a491dc49253ea6a723f611a904148c283152439f50b3440911095a9b245b5c91a48a24524c587e3649a0c8353f9b2434498874a1a60b3896eca192e87451369b73ce8965b7b264598651d40ed1063c8561529ec22a4555162cc3e6d4dd90a168037ec214eee4a7e9154fd354b3394dd3ccaa699aaaac9a5476985242d227ae501445453dd8e95d59261a43b0a7ca6e81050d853647c24072c60d11ef089844864ac025e8c70c2bc65392d2407a780d88e1123828228c1c610d5e68892ee47819d4000c39c217bc50cb600c1124f2023272fcccb3d1a72e0b9122767c603333f2e5c8d044a8811c23965119b429aa879ef2b6c4b8b45045140913543454555555d314a22b54555555921129b8b2205823babbbb6f8084ea529412ba91822b370f26cdcfe60a1a4860985ad035a0815dbda25e208f9c604688ed1474775b71465f31535d9182cb939f8d1563b022470756dc8451248c274ca8b5020edc100523ba100331c4c00ded841224ba1b0c279080194a6c82648107619041f7800b2740a23b8651c3048d03579083099680e2060a478a74d14d709f1add859fa061d538ca18e593f2cd502a105213454d19116ce767530512302b6c949f4d154b6829ea94d08d4f0e48c8fd1b2a293655d0a08a213ab363354dc9c55b9192bc50fc93b2e86287b2331f2127122a6224d2a8e884728ef3b9b14990c09c9a5844da98a18458229f22a7091929028fa82c09ed5ce7936371423c5ce513b2d43b4aaa57c291d68d70a22ee28a246901cf12754424cab1678a3ce1e580cf4674934517b21671452a89a127bc06482e3c1de013de0a7ca148ba9139924838529287236dc04ae65c24ce038a3e8d4876d3295394b59fcf1f0a21a1286b3f9fcb253c344559fbf9fca1501f699dd631d23a465a27a28970a48df8888606e6d0c01c1a9813e1c422114e84138b443892a4a2120afd9fcf8d44e486a2ac4d22244a49a42442b260a34b483a592407ca2553cc8946327cec235234b2936194ad13edd4d0e4d8345d03239c1cbb08472292e3bb7b59b09d9424c77775359e66a4064016f3a550d4a50df804213091bb1b2a91ea7c03fe6171062df2c3e20c33c8f282a0751df24ab66908e3240d65c853c227adef8829f8824e8636601092218e895988297fa0b3f52975706911b236459e128d1734fd61b1840bd0742e579617f2a468bcd365f5ac0bfed61cefc3620919994e1a7f83eda835227348ef254b7676a44e8ee289882ee1d0cd0528e954c45d28498e3eb0f446469cdc34522287dec410c53fc376d4921b1c6a49ebe4e40e123957031b8147a4bac2c2eedde42084d8d989137881055e0e080368a3dfb843c91d24f2813bc820eeacfc6e209187a37ff5c0fe1043529b1c89400cb5044949e4d970d145ee432471458b98c373c4860a66e40e3e916191d7c19adc47a68044ee9ecc21fb32427a63054e929cb8d2a75dc4156803307217c91d559223f0c304e28ab4908ac109677041278c992f9c30c3851a2edc3441a9441cb80142f80743b3f581d6259a1f7eb15e258a5657043f7fa9393b9a2a4b1475555d95d5d5878ae9acaaaa827fa9a4655992ea019ec2543eb2203cf58efabcef519455559f188a2a2a114a118ef80d8d04138c906de46723c5123be2aca8aaa29244710de9332b69be9324a96f8d9d938a220bdb68c3469474ea5d14c19e523edbbd71479f1a11b52d2b0b4c89a81882195a4d20c9814f873c3cf7c93624494a9724eee2e5a3885fa2241f614f13b62f1bbfc44bea5d4208a111539851935383050bc6183204259271168cc1823186a09860057166c8570067866c4184054ffe299176481cf2f9e476a21299424a0c237172f424312d84482e29c04c2b010b5413500910887050489632089108127a267731557e4722d9f7c6cc0d2146a81881353fb040a043842024baecce8d31f51a71254adc4c58e93259ca08468fa49cb113419651d4b0dff648f4e07bf0c1f7baa194a42425c9f561bf25b711ceb8c0c24a513933f0082ce68b2b5d5391bbf8a8c8335291e343925f6214630421920a6610e5dd4608012a0ce0010904f24b777774445690ca52c69e22297514f54a7da1f7ae3beadc544ef1bd58c58ab21a524830a282c4f382fbd488e2558c91fb376caa8042b6f2b3a90249eeeca723628c0fca36c42a467cb8c50f8cd834e10547f060628a15e44f64c1901863b499c204198914fda00946f2b3c1d122bf2cf2b369424dceb6eecb22b96db66024378e8919049fdc8960666626c77c3a5a5fa8a5f3f40947dc49fc92a7bfbe8423fc222ff34bc73e8e31ca1e14a95e599204432ad9c25d75792d6bbeb7430a31653c4dafde4455a7deb73a155596aa9a3e555535a17c29a0fa8c226598a1668718638c517a3c4c466aa224353976071adbed30bb7788e2f60c226b1b0f97add7addbc960a77fb1a32cdc05a101ecfa63c84e6badfd76c1acddcec674969f8f8a2cf7fa64cbb6930a6e346e4f0ef127e38ef2b9c59f7aecf5f3dae1f5037bfd6131e8c22ef5d6b5dbd1f725c0595cbd856f8dad9f8f0e5fafa61dfb0131c81ed263145bb80b22c3577ac9e234f883bb855fb85bfc921d7b4c571cd399c39d65344e3e51707f708ccc9b8fedf0b1fa38c1f07383b542cb7add6655ad39b1fd7c2afb81d6abd73c97ca5e663c4ceeceed2f86aef98b9adb1f431a7761e641e6f044cd733bdad0b46758ab62baba5559df212df682ddaa2acbb2b893a9b70b2257ed2fe6f0fcbac9b431bbecd2ad6559dcebddce5d974da606d74ea99d18e4c3b67dbe65bba69d93da3965c5be4356d5a9cfd930997e5e76bb94cecb0dbbc43aeed3ed1dc2c22fd4ab8a7ab5c1e449a9bc7dd20bf2213b3d6dc9f0db5cac7b4eaf6bbbf65e964531c887ebf42097ebf42d17b60f47863b188e6e94be0583c91bf5777a992c53356ce3300c372d0b35ed05f970dd7edee6ebf62d17b6b3a9ac2ed9b5bfbae14e266f14d4237b31e483fd3cc8c57ebec5628bedc3412f935f7ed562500b7655dc1531613899bc234e4c7d877c773040b413525a144c034c5e338a6c1455343a12cc503baf430ac3ddcb2cc65d74dd4ee6657a49148dee89ce5dd76b742ebac78a6ea30c779f539e47d86a3f79843b131b618f7ed0cf5f200cbbd0cfc85edf2eedd2a447bf3a12ccfc8830e87a945dd005bab04bf4ec18ee48304382991cfdd234ed14bfd45fd1ed320df7f5e893fdc2dd096e932c7aac3e3c38fae422fbebf3baf68aae68defee2a2675865b11e45f6facca22bc35414c12cbbd6b7edf206ef8c9c15896ac8d9dfd3a1bdeb2539c3b7c6f6126b712783bbeb87f62599fb75b763b74645a21aa21bbc9533f27579fdd0f0852d8bb7ec6f5ad49a58d47decbd6e67b2d53e1de33298c9601c3d77b7db1b3316cdcc7f60d25bfbebd22b047c43be9e5d587dc88ebd6c4533d8ed8ac817ee60a2995cff5edd0e044bba2166483093df291b49efd522a2191e5044349c1d63ceeeeeeeeed9dddd3d1fd327db7642d168da3d29a5b3e9fceb6ae9ecd9b3e9834dbb69774f6ca358b52846279c27ef68a6ef9883d2ed33e3b4675a29b5c7b82dbb305fd26ddbb69f70dba36fbe0929a5944e381f9d744e3a27a594ce3f68ddea54ab6832e3418cd9de34e69fee1e45e596c9d61e86c6185162fcc438040e141543513131301486c250944f8c31c6186372ec73fa8fc9ed18a228188a6d55c650301486c6503094a260280c05d28198186fb22d31df8a3d77bb2032f7d9dd5c671b7718a5afa7f831445f75694affa8750bc3dd5c17e312fbb39fc15bfb937ed69f5683fe7cccf7c99bc61b77d91b532ff698f5a642d83c04287f4026d3dbd7dbd98eca15f403f717edf41ca6d768bfedb5b76e47ff2e01936bdf11adc5b7c6627d8b350671ef5b10777a4c0371f8879741d75fac73bfac73b73087dbde5e3bbd5d1019d37ed81e59fc62720dbf9cdcf6ed301cd3d904d793bf4bb507bc7d545d4ef003e11899e769e0f6e01899b3d777f591f998b88333c38ed9b65ad363b719ee4a909b66ed03c3ade1aeb695dd1d29686f555dc7b05331c7e758287bdf77291bb619f78c7b3d87b95fffe4feb954b4c19d036dfdad5fdf17f76e59cdf680b76eed5fb5d06218caafcfc51d85c3b07f30cfa56b2616da1f4eaad72e0813edf5da2b77fa93fba2e18e21ee165f37b9d9b1bb6db7f358ed14c4fd3a777ab7d78b5dd3b8bb61faebbe60b86acf349b81b0bfd4db63f5f6155bdc31548fffe07b0fc774eebf2160869e0cef915b91294d1a9217ec678a51a2d390294250fd0bbdfca3cb64783b9aa10569f5572d184a4d310a2fda88b88b90fb74a4217dc176bc9defdf685a5deeee707b5089a1beb6032b3575a334c5eb4c4352327da27aec769eb1ba5e458861d85b5ec630c8fe055f2b2cc805bb74ecd2ed29dac5e49a1f46ff6afd8e2893eb85a1b97abcb37a315451288774f507a3a4b3925252b8a594523e254faae009813abc4bf9a6f7e93da8444a29a5ec2723265869bd5755d57b928aa128860ff5d0c75e2ce2a9494e6d01e9f909f951911f03a494543ed4431f2b1b0a3582d864a1c8491716fed1ee8f8ca4d83d4d21d9b1fbb163ec785f9ea89e5a4699225b7614551628a309091c223a45746aa2a422897cf3b341b2237d8a262992dd5d5920954c7851e4c60c8f1568c060040c5204a00a47a830420df95161c40ea8a75ce57bfbe811150f24ce030a08458c53bc36c3930ca74f8631c64b338c57cb10d4a08ed7ca10de7e8c004bcdb0af7c33188ed482cec4952885649984165912c9722686e4cccfb034647e5c0dec2786ae2bd88ece64793a236516f9be1c3cae00852cdfd9d8f170c85f3db0353e487644e0e5d8904cc00859ce809124e7e93c337a26ae741f21f4083a04cee497438cac9d89f2de4f03d2a5aa1b1e30c08097230365dc88e13d810a207a60778821f94b1b1276371040b40d0c91435e842add0e3dc867c50eba06f63dfe75b4201462cad577446b8a60ab401dbab24451ffbe0c6114411841082549822f7a5177d4b295bcf7e0ad604423261557205c22c6183f31c618b918638c50898703dec6882d26e11170084c82082562980124c61e52a81b3b7c6a402991217a11e9594f7a734aaf1ea9401da2e8d5a5feea0f2a8aaa2892aae95129b92b18e5e08d25896bd951d36e19495224a31552b877164424b890e20b47bea005d78414947c81c81768a226b6304349122f3cc1058c1156fa8ed661a5335ab0aa2a69a2a257b3c874a391f16cc8cb8e071aa8b820b4a1e06fc872bad1d2c0c396832c1140e12e34693a9a4ea5ed34c5018ca69a29092f077c53cdd3015150b22c4e3559da4ea2933b4e4458eae4e4d81c2c2747091125628e931c31a270c65423cfd0991192c4ce5413573adb6193149315584e47315f0a0fae0816421e2c4be44e0ce9c0ab11b929620513241dbba116359f1b2d8cd06c3da34516375a8ca161a4311257ba8989273c59583891683a32c7a3269228b02201efb0d489de59ddd5260f90ef680400c33008610862b8be8e21468536643822c3900d06e488801c0feb7578bb6b205fb84e381413659526d8e801d1e3afa7833e1e7b3ae6e34d9e0eab7a7c0070e8b807b403ba1a0f908f57adb5d65331540f65cec3513d1cd4850f877449a88005745a8691658249060b82b083045606377061db0c960b2b77ec186c8b8103ab45f60419412802194a6041c60ab22eac959f0d19418c50831583a5b6a00db1941764b0d5169606b6aaf1c24ec14ef9d9906107d81956cacf860c4ab41435052f062f72e767b3134574858c514a29a58c52c696b009928403a5fdf95c6167279a8966a494514a29637b9192224352c6d01542a1be9452c6865fc428a58c5e7c3e11464946975104a594524ac94919b9f81ef1d163bcbcc2c379389284838e0e454d5688222bb490162273644e2fe92551481402bb871e629470081c022318c118a3ec9d9d9414aa5bbe6e8e93b28b74918e2208bc9db7d3fd3e1f29e11b222fa69be94645e559f1acf8424219a5dc7d7d80900a356ac82545c8253ca088e017124a98413da80c4f356e42281423ae0cfbe1e2038aa03ca0808fd589e9f2c6c4cc324918d4234b0cea211f5d1e627885280af180a247309120ef39f05823dc12429c8e8959b6c0b7844560949450521176200e893108d108d23b62aa9da844aa18f2041c32c40b44f27b52621ea0d09182d4213cdc03a8040d37662418320727a63ac2858d253114b1109aa844b04c30f1788821f8834884cb54b482f952b632e2a5f2c5a802834c3bb683421a03810e691ee8d4a85015a6a86734b755ad862f0b53b58795a7a9b64ca79f513c2534df5fd82e2249be2e9442a5260a8a1a218a1a1a868535338aa98f3b2a0ad880e816ec2facec8e228a1a0b25207c410a2d2cc17007bbec3d5daaa7a8f735e10e56b58795a92949546591e8e7c550db2955955e2a86e41b42392f172c1c424115d0ea7d0a47aff5c7ac76481a458d41a90a5a18a283a3a3040bd12529a2f67da2288a6e341543af55a2281ebe34bc0d63c48fdd0fc6c0831e183a59b25f6253c54e96b2f48515597a4b526d49c2524fb1f174cc4bc7f1745497a87737842822c7773c64e9b38299aaa8e390270cc00300813c63b72383acbffc52812cea1e9099c915759929f27c20d08473231912a5e8bd197884f5ce5663d82e08eb90485c99b762e24abd452dcb8af43be2f4de332386e0244118853c6903579f0ea3a882b0badd565b6df5ab31c09d2044104354eac4ec746042cb8a11bef7dec37042182e366cd8b0bb61b426a9772a3396403c5d0ddc0edc0dc4d0768692b8f2e02328d46358f6687ba4bd0efa7061fb298224397a17a39333ed55db88a0b1f54617bbdd5493bb7798fada44e33413ed63c29d3c8aea6764f10ffa0cbb50fc691ffd9a9402f6d7a547b7179b146427c86297faac124163abb5f8653b8d6e57318cccb9b0e5eaed8947d34c346d5aedb2f6bad5a26b52dbb55e4be2c495edd5f38ab99b7c72b76aafdcbd8e69b8cb5e8b6413932bc188a15a2bb62caef5a5d6fa576bb5b7bbec756bad4fcf6afdbc88a0a998da9b6137e6ec7616869139ddac35fb75e9ad7d765de8f55a6b95393922a81101122268648edce16c18220fb74511763dc21d0c9761eed1ad51a4d9b760b75cd65e3ff4990beedeb759b3b76059ad6f99d5733b99ec797477480ebffed013fa89a228a2f179b41d853eba8efde21e4597f6ac6635cbb4b7582c93330c72d19ebd457b56b9db65dbb5edaa731eb3553b77711707b2dc5b3c1c96c916835cb8dbb7705a863b981c65dbbcf0cb76c170dbc9098dcf2b0a7da51f4a312cd3b263bf30ad51165d511451167d546bd6e754cc512be7794b760fe632f74b26ef90f56eb7f497977d9f9cfc833beae4d7412ed9ed5b326c2f932f0c72c17ebde5047730dc55b3ec25fbb4d6d6dab77d31934fbf36fa13eb1fcfe53e16f7fa137a5db4cb6ed7e3b93173b733c1305c8b4c066907d97397c91a0679aeabbd5eecd2db72bdde735d2e5ccfdd16edd7ed75d1f0dbb0dbc1701b08d3de7269582663b8e5aaeffd516de2f181f61929acda3fefb6dccf5e031ed4a14ddedcdbf3b6a8c6d6bd6cdb37ee6028eddeb66df676fa960dbf08c3aa37c6cdf97ecbf458fab657cc16855f34ab018df5cd9e0e7d934ff65971d773edc3d173ded9b7b89ffc556a51ee273fe1a8e77d908be7fd160feedebba5628cd26e5f182e6bdf213fb78b396a11c5d395856acfbbc61f4a3c01bd7147e30f53dbebc55e2fe6727de2f9dac2650cc32cf641e698a6699a66bd7a8bf52acbe8cdaa578dedc3317b02dc6d638fba3d289f11adb7aabe1dd61f1383faf316a8af7deb6cbe30a8b10f3256bebafbddfd96acfb825a3e37b94c7eb5566abd6eff747fbe89782017fa7e0bc5ad5d26d71f60eed75b75f415be359662182e7af7c9fbd7e46038597b4097931a38466694cf37ee40b863a83d3e3c47c11dcc9ef73d4d3fe9b5946ed8eda967ceca42bd7bc3dda493b2baab53b8a22e51de6d793e7b0da09fefb8c27d9e8a2b343e4fe3cae7f3f6e938f9f43cb3ea3db7ce39679c74d2199970d837939be017431f4a3fdf424f30fb99c5ec71f15c98296cc09c377b3a6434ee8ba1b9e5ec2834c7ecf3734f2eac2df34d0cc32eee14cf7b3e47b9a79adc7e8e7294facfc9c9e75b4e3eabf6f996ac9adcae7346e14e66879c3daa6cfd59f7857ad522333fed9c6fb9664b169fa0a874cc982a7b14aa1a91000000a315000020140a064442a160240ba34de93e14800e8296406c5099c7634994a330886118658c21c610020820041884d0d8d804001d5f882fe6e2b074dd4ffd4a84279eadd795a57b3b7dab1d9023e0ea3ed050f9d786e76ff2fbba3c457d423bfaa28527eaed96064ae20b2d34cadb418485688dd2dcd16d72acba47bea690e994e01157dcccf3d62aa69195ad1bd16d2de9f0742bf1a60b95eda37aed3d02e96f605201b795a7aba1852e90ae783007ef638d28ab8115fee18ab762520d55e401ba57c313a4f7c5b2620b17a69d3c11837c56dadf3a0588a77cb0fcbcced5a34b181bb5fa74864143185f0066ad908b2e37a2442bc07309d2eddc109f431e84351d27e30c7f75b7a4833471410c9bacac486130372a0446105fad682f44c6d30551b4321bea2a02255fdc6223c1220c31c0f59cebd8a2578df27d1e1768425b552d1cac1b00714951ef08ed2c10680c16aab0afc0ff8205c23703c8e3cf368ff213c86d0ac924d2933eaabea7c02d8a914d5c1c21273338d917817ddb11863789ec51a2279781a6d3da6c6308a322b495976a8609d66ac3591563bd0a0c55e8830a87967e1477aeea052c47b80ea40e7b03a531f06e8c2894d39840a85417f6588646a6d4c90fc2c83a0ca361144804cc5464008a0461c3f33bfc8194ffcda5da831cc1da562834e64b4bf5aa7ce0b15887e5e265ddf9bdff378aa9147b83cd74b14b6000f6ad2876525f28694d0c49e437ea07938096cc5e094e5e4b96917f0b47ed6d0ed4740feb9d7ea2b8624b7d62723f485eefaeba9248d835acdfbdb12b9104204af32c5b789cf6e323095d4f2c63bbc7c2f3600c67aeb71a8e6c28a32d66ad5383137e3612237a8f60a39c4190f7bf028f964ff78ca82f96d447b34f621493490f16746d21018c4560f756072649a9b2dabeef4df21094e0c60bd88f7867f2e525ddb13343a949b65ef1960eb238848445d8e76a9ecad42ae9a1a34205bce09c20d2c51708b870316e98e91f40fa3d8a3df541db1350f494fb88533803cecdba7d3317596f8e9a4e17d08b56d83e50ea26c93e00f35d882d931f2a91262aeca3d143b822f06d2b20f488e18a2a1f31c14494de8c0a165be4b6db92b97b02b6a32dc345da59c4f4992356765a46959cf12cfe93bc0bded915ddfe5a108b579c3e0259137ab1be7eba3531232ad971c5a3c34ecb0ec4d295e107d14b7e34529322fd6b4048826ba29bd67d9185b4203c5682af1baee5133116257e68fb0442c79c14d46d6e48a07abfff2ffb8909d64afc938dfd59dfd5b8b0333ddba399038a91b00edcc99713d0e30f0048e0e6969006ae84d0eabd07e59b9362a14c7285cfb8eff762b568f5b48642acff0f7c340b3012d111e596b358e579c29f9a27bc18f10d133f47f7d87ddd05fb45b92ed82f32a79113d4d9ce0730753c295200dbb9a0051e6a648a3c898f58ac1f83cacbd7c12316c8fd05d5d31d23d7fadb1641d9cdbe58a92fbc52fed2fe2ca61bf1cda44d1384a0abfeb0f42ad5a65c05d83feaf3629e5ac0745c6ac5c4b45f4ced1dedecd5cd3227557d44dc5732515ba59fc53ce5977b9a68c3070297850f1e25ad89e699e1263bdb6c2b62cf38b3d3117d4ff381b7ace75cf26043814ef6afb69b533111c343aceba996ff9655dcf209bc4e9b771229354810c1169854a08f6e58dd66e34e930087be6d1854fe28f1ae7f3e52b5029d6db084a1e32f58403c79a5d67677b32cc8e6fafcb269604973d85102aab73408e90573c0a24affe802e807d51a6559f00c7569a2781dd8df1e45e538ee68e406929bcc2c84e15e7f58ca2e83f32211cb14301410bfde1e7ed624bf8758c008dbdcb428e792cce5c8d152636638cb9c909c64bac26ddf29157a854f96e81fb528686d04fbc62bf35d009f1b424d6904b8423cdda413d032a07390beb1b921fc7141be773ceafc291d0e4c6a7f9334a6500d3d76b2ea69533fa2a7627b71af12ada06dc434604a884a5a5d2a608ae6495e0ef84943c838d6c3bbc163c8b33ed10a08db475b5e8edff7c528349e880987adefe29bafc358a101b797bfd63f428510ed64d1261a1b890a9a064bf71b26ddf3be857d0bbaab9af616de4f0504540ad1894a5e2ff1f140e30243a1d306cbdd85899ae5291d4b66e5afc4d288cd9633214d57560948cd0e4b01b3e0f9c044cea6ddb19f3671b42bab023d088a76be5b0573ed4001b226b91ec4b2a5e0ab0e7a0abb6ce301d89ff6718f41720c071b7570917663a487e124573685f477119df4e03b33808cab201e5ef42da75809a2d64b2399d631d477da5c178b13741d80eddca1aa51893edc10382c233d14f4183d931bb433345000b2906795d25a99b2214e59a5beefd161d52c67d01162a67efbe837952d49444b2fc12e59d16fd2f784e04e3721025f7e039e747394d58d1e69e9d4dc308a563411f364a3c82c01833099de1801fb23b2debfd6f8492d50380fea15095a0e7c7e868fb812da4122b51582c5c57c317a4d45fb5c61261013c4fab3271020de7f2fcfa04844a61246b70a1bbe0a33bb8e670e96187af1c81c89662a8c4f838a065188c3b6bf5ce69514d5ed05623a3ce946c09b7c199c418b1fa14eadb3e55ab67f33c4f441a3d7a415b31b9ea12a0d34fa008deeae9727c16298c1841ddf30ece53cfa6a122c3be5c119253f96f5bb3b8576ab1f571dbc100e423b16b0f57993e2471704a107c230544d9d46955bc306b691522b404904c0d0a80380451ebc35668b0c483aa0e65f5528f01a3d60e61978aff9ef0abbc406d90936fd40409344884b1e5b37840181d4a20a8152c1897dac114659ffb98b7bba4726c0ea5cd03e1d2ff0024042bdc4e1eb10bb7514ac42e164055846719b3e7f39c3fb01859686423a887054c57d34f5828a35b1f82f4b223e07aa46c1d453b0fbc6490f94285340747e9c3419a64636b1743f2bb56b06d91cf9b44796680806042eb8424b02fda14d7a4cea17180171cf49ded300152af86f194b115bcf6a2c24c5269908a097b35b971d181051a4b234e56a3adfef55e0cf21068d6f6777882105a6e13124b5733459ed416516138d2a70faf103bb6d820c3f6ed188219358aafcd3eed40ff759a1fb479b7e427533f7922970736428b19b72d982c3b5dbf40d61b36c1d0cc32416cfb61e24b4914ea615519da0c010a3b4dfd58684f630960ff5c5c6e62d42a058930d645ec771b5d8ce3498e4358f8ce61c8176ad168e8ab261579cda4b6a2a52fb5c0e964d5e52af7650ea5292840e0aa58c3de954d7f7b16241e3e3f61c0aa71c2288da719c06811cc51698c60b854d9a38aeb12ddd9f087dad2d4a651d847176d9284037425325efc3641107eefde940acadf6fe1cf0089fe1fea5847919742f18e87db9c240b9e0e117ea1e004c5479173661fac791b1d178b42fc006d38ec52abc86e7fd322098447de99d71a5b615858659d8dc76fa73ce7e3010179bd9dcabb682e2c4266b9c51303d2ebf30ed442788b2ec481e9041cb3a86ba89019b1c62dc52de95b5518411f89b45be4949d4ac6d22184ca9a4de857e04cda2159efb4160225b0c223775dd7a351fb85ca92b5ccf7383023502aa728cab8abfc113ac0eb3c0e31ed6ce81331406137533e0dfccf5e3d40fcbb003bacd4a2ff6a80de81427880d7a4cec12bb5e860d826a5ce55d4e1a3092aaceee1b2ebf09d741b9c02bb86b4bf0a3082a12cbab2fbc5201845f1c27c52eecec5a009d48d594767ab0ae55122c88c1aea13fcd7eaa625f5ca35d7cae8baac3b9a351eb762edffc4b10ed7b02e132b318485d47ef752280a6c25c7f3edb075641a333a55b028dd86b540a3ccc1875149e87bce11d61e61c2d2002bde09a638de7b1921858bb98e4c2575b685f91de36d0ff920d0ff6c6942a18dd2a987d8fa21508c72c190507a1d70bff04fa4180ea2dfdec0d0993301c748b18995984fa4a6a30cfdfc98b254adcf22844bc584ebac65a1987f11e76596799d1bb190612b61636dd8deca510f7ffb402eda10b90eb50c688d8318011e342c1de358d5b75c237046d8ea7f584ec95dc68d870de2c4fef5322b976e58f4ef9149981e298bff2c39949acb09c0233fbf83859da5542856058003f91159c2d96f27290e342b1a55603cd27303f40ec42b69bf66ed42207ac815257f0d6bbdadf3a81ebdf48e042d1e4774deae1a719647a9417f880e8f4f40016061ae00318e3df693cadf1f4543ef6b98e5b7730e067c4a0c06c6247b4bc57147a2ac0b22b315dee5b08b676989b67fd408066352b2c7da572a1db237b8efc45328e495fc122308daf4c62070e6cb0e359710ef15e053e2145cf23436c75f52969ae79a0240e4cb02d102a8f538717ff0843eb2b44702d9b79fc1d8a4eaf7d6547a77863316aa1dd9490b6bae49de60f099827aed7ede67daeac04e39c51e5a8a715e2302ed86748a9f1e7a6b32f2e31865427f3307d1800c20b59b05dfee518c86331d9e40d3b5a5fb4bc4890cb2fe42eade9a6b223b263b90589abff3d01964430e82b5cd96d5eaf62c8b5a59f5391fa15e182d2641bae1f1ef0c10d46f04062a2493a842474648e66f27223005522533882fa5e90a6629bbd26e2705fc8262c5f0c757eea5355c7a393d98bf4e22c7b21ff0409aeca0b4e660ec2f50b8962bf8a18950df2752aa4f9ee59ee7869af7ebae617b22f0e7829130cbf7025de3b60a744bcac9da6acca9022f30f07a1635cc6be1231c9230aa62c129e3a668502e850a508cc4fe681aff7a38da51d4056e24392cfe65772e04292e7e32f2684033b7c0b7a6f9324324750a2e3b7a8f924553bdb096417b768d4fc86b6952951cf87559911eca246f87c57b43239a4c46d37a1a21b23a2c12d3d342626878c1b490493c4e46f153144a06eb21325f41309a5b25fdc95d4a8a2aed835244862576ae3355392debf14dace708f83ba34c97cc3b56d4844dd10bb3f741c6343845a56d218ab719f61c5c4fe2a958ba26f7ab6e207616d45fd9da041c2a7b90fc1382c8d2dab5e0077c8813f5800db1e16d8d3ed1cb48eb058a70c201ae1a65553fd4b1aa95a73690e737d945e487710b298168e2800899ddb8a76a4834077d62f5932bd7bb7ac75a82ed6887516a3b38fea2f49a1d75b0b3e697c3534c004599cf12a33023c9cabe819f18437b427d464ee555133f5641001b6cb51878d96bf62edfa3105228d3e7272a32d7b53adb9c82ebff4cbff278f4cf806ea4ba5b00a7175c378965c2af885dc9d25a0a126e6ec6857549986fa9f52438c26ec44fc8a4d517f3d9ceec42ee815febfa6e81393fffd91c404b930c0509a1987062bbc4346da2d8bbd8b000da07447a28399daa765a188ad2a811e5aec6f756e286ad4085b2e9d735ae26a1e7d56c45d7345cd80422138c4b71c037cb4b7312d7f472c9cae86aea869301655bebd521a324908f64084b57d2237cbb8a9c03f9dec559fd4e14ec4d6d3541aeef13163eee6ea850779392f6772d23f6e56883037c45a79c759d840175a69650dd247364a3ccf6fd552c0f3e324471fe2404b433c45ddc00b112e6b33b779671ba04eb96cac003c7275c00e84471570c511881f5cc7ed39d9f2129bb352f4117ed2360582f0e2eea2240dec178c205ba5e1254934cf74d734aac6d042d52e9ab546d401c38172aaabd43145389602bb8f995c78c7b098421bc582c0ca764d1306b913ad1ca2574dac673346fe47e6f4f89dd36ae38841df6995e90d3c957c5768dd3b4317df25bb97d84635ce1be2e39af6ff35d98bcd805cffafa836bfe28347aab439e90817e535d2bd621493547e5a2327c19a33cce9fa5b16ef19e10c632726fb478ee0756975da75ba9899987e68d1d808d1fb2d56035ed1bb61244b5ad388424842f8468f4466727e8097c61d384aa137f6d5f758ad3e0ef7f8a847e23c354996fed7d0022b1a1b9cd3979621e824a977634cf8e153c3f841610b4602841042b84f92538a0aa131c5552384f3010189d3f54d347720d58706bf1882e27d00be04b263786bb2be024e3826a3edb7a854fe86f49dd5832201aea3b115ac8f512009bc7bc2e67cfc5547b4fa482bac36e0db67d6f135a587127df3877384003292b1db8ac19009deb1b76680c65ed953d71ad897e4840fc3446f320708523d3fa5332776f237a4c264e4fc53b5d1935191c8c9f1fa8c2486930d2b4abcbdf688c3addf4a687da6d4162d978f00c085079fdadac9b86e1c84fee63b3a556dce21f68336342b221460a9448a3e97e5c328a54b56daf911f9848877e456fd7d034a81a4c865b5ed1c1500c6125a974957cade931c1fe4cbc5b74bc077e0148e82050487015a5e99d06dbffde50f6698e2d1b7faf8dff5ba0ea601a74f8a97207b9a03cc18d8384dc31c44216990d1bb8e692c813c561734c51605fe7baa07c88c3ab3f39ff372ca68efd5330bf7140d21e5f55e73cd4dab20c702ce582592af3b068091c433eed7f8b6e98eb96b0a6beec714dafc79a769751c5abb14ad44b9eb05f45e4a2a8a6370880356b29e6c43c0aea5bb6c87ee1853fa8f7874f332548a9cb7602aca5093360f0eadf1add21ff3132f05217ef65c170d4320d3e56dd2f962d7b38222a309d3b4d8c94b49a519fd235a21ba26f4f35e892d182303362e9f4f35bad6292271939455a2f11a0cd9e5a2c75db6f09bff721711c4d37dd81d53f936ea750f7eaa6351d0bd917ded232aaaa000d53046ef3bb409bd25898a7ecabc54946d3edaa1fce3ce93e8ac5d8433c08db3746349b48d63241412e3f6177965850046182441315fcea64b4badb178bb544fd6c5b78c8df6e3438003a01e46d6f8064aaad685e6d203922086cb872e9a859e4e537469ead754b88502bb001f71805c731308d3fca510fb28c328bd9ca3688a9fa7a722e51ba04f10da57744c21f4a72b7ea3f21fa62b9a1fa3bdaafc1df34bdf36e92d2426d6937fc087e443f5278f1452d9bce0062996af4c2b74ef0f90268631c6d44d3544e1c456c92e650e86e6f0adc57002d08c9249cbbd9152dfb5f119246c973e8ecb8fa8539e9f28a3d485616a15251635edc28510ce6f8c92506f389d92ac9ec39cc89c8741b0a9ec37e36dee1a2fd40d2f0994206ae4e591c7b666a6c0321dbc020375a54bffc3594bd0573da7836aa5a8e53e6738eb3ec1e6111d21bc599ef9cd3528ad4a7677d5f02110eae9a1a814a0d3dca26830031a5fdc0272cbb92ef2716e54e7ce020cb72c9cc78891a1a454afcbe7dc6bd4fc4802354fd188b01dfa58eba522743b05c59381f78603abbe09b95876b38a2b7ab83254ff73f7d0a34706a1f9d68a9e3ab7a51954b0ab7d3f849c46ef01637a67a36ed7636cee3f9d1154988277374322b2268594e522ac5993d1565b1fced1f3a5b57c164c5b7005d23fd00c782d7b474e3741dad7e7941d297d82328dd1164e07e36b349cd9821d7484679493631f77cf06a8d8009ed948681ecec411857478e41c50cf1a7cb9cfdd0bac351e61b61d4b8bd518f63560814e946c5db245dbd32a9fef7ba2bd54f6105b10d8337fe0c628bc54633118ffb1312174d31936cb165863952ebf37547989556331ef76e2c462ac326043d4a045f4b07a130bf49b689877be0f8890988dbc9c315c884982bb64dce31f618935218058ffc2ecb48b16086d685614ae7dc841132cec8f3bef51770cdd4f1d6351dc72b3f591ea87d33123403cc52c56fbf9941299ab3cd9dbd63913a8a4b59d651a9b2de3ec87ee000a954e2066decf31d49f5a6db8b5f6604dc7e9324ff4f89304927f06666a83538cff31c90d41011f4fb091d6827f72c0f42f98b0d42090bfff0ed11879eee7cb79e7edc5d1202f6bbe119c65e046df17c96ff53538f5dfe20f9729e8de768934292e09c8f4fcc10b4e620040d81edf5932881b73dee87eb91818bf23a562adca296598684a2133ffbcae304d1a2111480bc314b63bc3e73ef43abd2ecaf8cc0990d55bb9f58124ee86f9f727ed5d9f350b01e36fc72d66850740a3265ef544e885c1ced20f2b86e8e0cc38aeb5a624ce8cef02a03a77330312be189f685ddc11232c6e1996a078975e5e035a8a501150deff010efa3124d1c7ffa1635f0e1d93168b0ef81f03169dc39bbc586fa7a30afd596d0a249b6905306809726f59e4137c2af4604e47c2b7782aa2b0c920f42633a4164de35882daeca0259bff8de78e4df33f273dad9c0a6a8d7af8bf71a313e9185c5982945b71fadf400d7adfc09ad0d915963cb3be14c64fd095b19f947fc381f30c26b70e17bd84bac71b8e6b15bf203f67494248603923f28a3cbae1d8b057be9df5d80d072b3cad251752ed1b0ebcbca3c28bd1f75e80df44dc9c86d04c9ca35b3471dbfcdd1e12916d4a07359f7efd0d65f733ee6e3824c1b02d6484e3363d3ee2e30ea02cb2da262d94c2b7421c999f51eee9261bfebb027edb34b4845fae9409311a1001c06157ca83d7a4fb05195865123b9cc080805c7107e664f8dcc224825f8883ed3f9057c04082012fdb0f5cddbc0971001c8bd369ac48cd9c34641aa85e8e4ff84b6411d4bde963800199b2a734220e7e823473e2c48dd41582c28a1088f2d81fed6f60399c813479463f84918e87e00c0ccc335454c8d16f6601fff9315611211a23aadd0ca8e7a77cd9259a7a67e6ed5b491e666ad085d3335a68bd95e74c3a69f6fe7aadb0aeca3c6a35b52cb89d487983aca357e4fb19772fe3453bea64c65c5001c254e17597e122d6fe1a9079a4341a3483fb035d41ebcc65c34f53fb468efcd595f9578cfda1bcd399a9ef223eccb9904f66de6766e3a2f674c69c746642fb3844090f01681ff3f659f67411b70dc469d8cd3c33cd980210b27f74d03ba426135bae821e525df521f3eeb1fd19ba9ae80e36b4d569692ee942ee5e32f306487eabced199e439f14996eba1e64eef39aa31f6135a05113178fe6118ad2b1c7371bc41dc6d34ad1ec2832ea33acfe543acaed46460edb004960f7cde6e0ac331a3c5f2580f305189d60e8a2043bbf2232e90f9c12c488dce972c149d259b81c9df4f5ba9d608dae58b5da8266460b9b9b96702257f6e3d626d6dac89fdcb3c69d1e375faf8dcaea17007e10133f501b1fb9690733b616dde84c1dc841ebcd5cc7c951490a48f38324a8ae60052c748983e92ccd1f052625f79a038a410e84b9a07345f4e0c8051e286e52ccd38402368284f3a4278a32581428ac20691f2c3e34e5949dcd04fe8e1883e8e9149124adee42e01f7cd6279147efecdf75b6dae04434c1b5cf54f411e1f31d0a2112f5d4256b2c129cc11b8843cb209b9e965a3bb0841924ddf501b88adb7763041b79220f91c0f409d9e90a7db217fc3e277cb1aee12486d0c3485777623a96f9e9c3816f501a202cf226a64645c42e620e16be9d9171c048e39488c1d247a9837b13677359e0566dc596d93abc4b014e045c265d074f71f6bec2dcb4162c9d3ce06c446ea57de1de8402160271b19465a66d94c70302288197b924f786fab7a412c40e63c3cefaa0953cc653b10de0a023d570e7a7604a20adfe58f09b59909ee5ffc131afa9a2d08582f24452843b8b6e92528309f4a982e4990f1a7878070df826b530a9970c7e32e21028478a7103459de25602b303e24213e355aae6793020c7aa0f24d296ac117db38305ae384095b945730e4d17fd692c4c368e5fb007411225f83d28ef26943b3916c5adc5e09d77c140666240435821b80b0927cc4031d212428b6767cc3e95392859370ef7e4844d28f62a2fe81ea8db0361b880224582c384cd51a91c0585c32bdaf21e19dc3727c2a85c816b129d4bb38ceb9df8141f8bcf885ebefd9e01f9741b053960d4540f4bcb13f5428f39114f60c55c536e396ba04b8fcd886a208f21f485c642919287b743aec37932d2c4e76148e1ad2a5b28d64d68551063f35d88708998cd0445ba72b40596632e2e96650deb32b2eff6f9278b2863c72b83a44be606d5531913aabdcaaedfe7c6bda05406d0850bc2fed04822c2e576e923467b332d4c2030c49e6bee45996404a3b067f1981bb30bede4ced7a51c4ba82bf61d44c76dc179b8928a38bbd47b29d36ebd48d0f716ca8ea820b8aae182848bb98bf132c27e8c4be2f224a5a42d89a9aac55216627d2078f5675e784e006a805ec6054a7b1a6dd0be5a7389a1ddbdc3ff503e2f2e33cdfaeba65c108a46c36b05ad9b31aeaa155e3da6ec33a46f24cae5e46eaaaa3bb65034d4cbe7d4c926072e803164acbeef5a661c61b403fe4328ac08f849f6a4140f985196a0f5856807dfa8691117ae3d72f6f453a30b2db8e18365b220805030d0dc37a8b1306843a466a326b2e2baf023a8884aa2606861e70eb5e8f92abefe70c7b05ea932850f8f0d2de7122d73a1907769c9ab9df420abcb9f9de2d621f013a0dfa03b2ad6193c55cef0165fe057cb2c0633e94a3d241271b2c3f7bfee88c2f757b06658a5cecd610d33c6eeba12bf343f2cb5da5ae3fa5c6137a9915ba4a8dcda37ba991584d81bd37e0394d87b548fbe4529fe28c17a575d9ddf901d8184a250bcf164c9f99b354d47b27f869e9db01ed0415242d4e2e0df593612e35899521864a7db75fa967d55de4d8c33be56059b15842740753ede1422b6fa1bce7eebcfdbcf54821e3f26b9883022814b21842cc83765d7ef13808a3b48789ecd10f81c8171e165cd166889b0c2bf67ab18c679f50a4f89808b1154b65601c5d631e0a6a26a2cefb7a23a391463763f6c5a3bb2f01a4a75089c09440b54411cd54d75a1d66b22784f8e1a03f90da0cb0ceb9cc1c9fd89030436a39bdb3dc8ddbccb07b3bdec6dd9e74541a87ef7344859b0a8a32cc0d6fe22f77b8927898920b84f09baa1f3ef9a2867b03a634f9bd792238633e6b9b95a23ba1969728aceeb22947c5c4d73f47eb3ae6542ae3f035ade5815ea3687efabf29e7742e65a6c4a10c9b43a59c889ed5dbecb5029e337caf6055bec5578d762708a18c768fcc45e000ff53f3b80d02e63a998786ceed3226bc41037d3694b0790a105799f30a21864e69a9c735aa187c235c1a994964a61725360a8b2d0ee5a05b22e54ebf5d1471e24ad1080061612ad5ee7efdc73265ccb175bc3408cc197abe85bcab16bb93b12e26e6582dd99ddc41de222f303076a37cb0bb2d7af3c6d759cec09bc781c36d220aa1954d5253d62f20866d11ce40b9fd19992e10c6b09399f712344c3aeaa781accedf31dcc54adbfb96eddc44e643abad169f9ee4966f2aedd2e98558ae563dbd9b78daf2cf9194d7ac4da56b9676d3d6006bcbf4bb34aa1c50e9fd2616ac80243a047fe7a8abbb5e7e02bcedc9e2ba7647e8df9c55abc4c6e2a92487e5adca45c5213996a4e6bd8456b8d7c9306cc27529338f0dea95f9928cea59e30b9fae78846cb2d208a51caaeb7eb132fbce8c8a83d7eaf0776cab3bc035fa5a5393abab45e41de31f950b9c83ab67074d49a7b77ac41f3b518bb3e1387d32daea62c0b44a165aa8ad77502a8e0a3db4d4601a5c6a230ad593953985e69023e90b54fc8dc68b811564575381c5992c06ad17a38c18eaa23f2c329d5ef40bcca66e08e128b27f8517032b356291621d44c1769d0c276378687b61437c79d3f61161230468308be1697f6d2201d2d41a0fcb6a55b313819092f1e5681643f10950b04d3c91c520fefedebd561d548fa70f4506e63a8be1c19c3cf296fc91c558bcb983cc4fc2a1a568d80dd73a4265dc61da0673c492f110212b21c22247e2e362b42fcd7b1d48f8a4feadb541c20f3c466df0b08d4a4fdbdd3ec1b739dea9a903b82b95d99ca7a24c123a856fc8a81416a6108ec2daf8396fd1ff7aa2be6718943c8af5f6cd9410abf712e36363164ab1d442c22f407f425fc26f4138b623c688d968ec70ae9843d68960405c17b67ea060c6acec7aa8a948a9a016e36a5177085349884a7fd0b0279d2d24bbf4c1cec83425ae1dd7b501fbda86ced962e19d11a347a3676abff727a5f6af2a36c8f65da7112101a2b7f9d4a761a524fc3ad2153e81781eea151054b8fca2229c5ecf5934fffd795e8e5a2ca3e250342a4d0fa7f420156050d90a024274a3682acbdf1152b1db4712251543e19445f811d726157f7cff2aaa5ed6976e49ce4ed51b500ae63ec493bd6b940a1ca5a34acfc5440fa9560551d1b8ff8ce4632d55b8a8141f1abeb5d47d9248475ab74caa4a4ed6dd3aef86d367ae388073962b0659e0103ac24b9c67bb1ffd5a22f5082bb1844d5c91f5c4f7ac5ca018a01203980866a1735ff1e65191de5fc3532206a64acf08009da0884b7040ce1bcbb732a225956518f202610cd6a8c99b3bd0191501edfcbb49e789b1114df5d38cafc4194efc1e9644faf25dc5183d820330ccdbda738cd12c32484ae20dd678a28c4fe86a93568b524a42c208aeaad43c38d704afcfab423b13a0dbc112fd471eac90fdd2e1d523902446ce8b86136ce83ea6c22118cbc826d23479f3eaaf0bad8b875400a87e48ff4f8f5f720d52ec15105a6e926cd5dd0155ff7c46b79e9620c363bc230e6c45c012891c9e25f0512365a660882f314a6412dd9a9d68b406f7b23369e1c0d24e3b43122c6f68a9eaa22c807ed9569157c8e7131d3edd5a742a7b9b437707c0004dc74eb81ff612ddd0fbe5378ac6150dcc460a42f6478da26a551bdecbdbb472f4994363403cd4f7c72700e44c029cce849ddc783c77d40afe291d02434c1d4b43a15faa8931f2024e8dfad8f012abe057d47f733b9edcf43386407360b8f3ab893ebaf976ec1283dc8319c4d8de1cd2479e089896c4a13cf9f949f4bff9332e546cec8ebd465244a093647c0f5cb6c740686da3d39a4107355fdf4ace4cd2729ae3ecf53949397ad731f6c73a522357845058fefa392875d761cd1941b788086626709531ab504891923f51746aafc22c006f1f4159d62c4af0274a6d1b5deb79688d89fc2c04b3bdba5dee8411387935822b9ab70244f5f9c2353180de0c97064913d952ebe5c8400bc9c051e1ec9a2802c3161945de7285c81730b05e63edb79065fba585dd7a727b1d8db562ab42fd3b0330b286fed4f782b1e482c44c64a9dda0357d5d7aa2ebe7f6991e342a4a37eefab467ea5d179508727f7f85b0ddda07298d708ce87a1f38ef30351ddc7fbdcd8849f8f042bc806021db758cf631829ce319d5866ac18ef0e33f92e7061a356a436289c5bcfbc36cb6cd51851b6641492c3227f0bed90a8a888b802714609cfc436ce954e9f9f578417275ef79ee60cbc2343185c934b3bf412178064f0ccaabda37c980a0302bb200d52d6155f902c13de28c1a94a9aae9582b0e9ed96b84e01f34beaa15b3890288a426f0e52caa7181c03a5c5568f385347a971700916057fbca40801e90f44f710e158a6dfbbc9704927dd21a34762bcb04733dc65f6cf770c7a4a51d6bea867a4acf8ed0928b81cf6a70b8d976f23b243765fb5042f0b8e8369f42d043734fef1afe0dd01d3840496d420e2bc54caa4fde51b87d5666542f40eac4aecfc1edd7641fd58c4fb3bd46a13be744dfb27e4fd50b0fd8922f888ab9e0a6e01b1ba04e04c716abd0533c72784144699de6c1bcb3fb34425d4d450dcddda9a85dafd894cba6397c96e98dcfc87ab708bf622d3507b69a59c90e938915ed8189c54c15af9ef6fc6cb10d7652a58007343073ca2543145f498764f0989ea5860696fd7083af69c7e369f7668ad20c1e02f13213d735f4af3fce95666b9a4892a6812cd2aae8304855b0233f8b723c0037e9ab1c9ff974ed2dec4cc36790aeccd0dba4dc50bd330e4a6f02e29645b8f069fce7f21bc1995c0a58a94bea0320f3595df7a8b46b8e54b00d26f41348b55e36992937b2131acbb8d396f63e38c2e295aa9e9b560938cca367b9a32531a66b4951a40669880e175daade73cc66d8593b74463f28924408127f9c08f5c54583863c89ec4ea9ceee10de9e4fef7c41adc254cf8dd2188805278050dc200df64c700e311a5dfb7da5a069e4529a7d9540c3ad2eb93dc03bc22c76207db3a8fafa21a9f7a3f89eb84172521660910a2466a1cfe1f2ff0c81082fabe7e5dfd487caa06720b183f7c849c928bcc27ce34e9f971ead90b293ed6e56eb82d191696a5570d055bc6fb88f5f9dd805646fd6b7d327c6f43c0724c9f6c4a54f4a3954affb30997187449d83f2efa5f5de91401e07b1466c06cd136c37e8d37a29550cbaf2a69f15aef5ae68b5fd7eebed70c7cd7a07234a734c8cd82377fc9396d8984c50b9a3b8985dff07b0e30c051ac4ce7faf190c058327f2eaa03c120b1a84d60da8cec196bbcafbc23631192b8ffe969a7dd59c94d1415eeb81431e38a027ff9081aac509f85ab404d00c328d7081cfbc89b840e09ee3594817746ddde1eabc53448f8dd644ccfb2ae211866319c074bf84cb73f861795e9af9dd97c4da2c2bab8dce914d06b8571ce8fd4fa9d6405f77a0cb8f74e909740540a7976a7ba58684a02527ed91676b51a4bab55bf720cea7629fac395a6a864631eb18601e816bfc748bd3bac6a67c841676b9256046a39e456fd11fd1d263eacfcb6dd165467550c79b2fb4958c19bacef11ecace8c4f8da62fb64c09c8f53bea02935eeacb6118b121c5509f7aa8582f1bec17ecaf6aa23224341ad969fda4f95881bbd19aaa293412e6aa8339bca27b1b4a7de8f18868e548d490837285c7220b80683aa53c97f33f437e76f74152c6f8ecde150c838e12fc38a8af63a130c044f0512d2da548116e433b4c441f92c782a9625de3ea5038f6dbe14d075684aaec1cf25289ca061008014e614811cd214286d3c4ad65896aca0f74308993781167d3fd3c0f63404d8a0d1f383def4b748c11a2834b246cfe272a8855307aa23da2253eae75fae0ba8828269bb8b70346715ce50052dd3a3b768ff5770edd39a31bf631c78ce62d4cb8e1e5a4079077d8e0982c0da3e8fc0b5e37d3ed19d6bca910c9d02613e1dd251615a425957ba60fccac235f3625d20b5e83ea338c4daa46f733bc83b47445227e123afec4c20fc68752817422c526855aa886bdf0419759f5556f6d98698e3c02396a48d8e34a82f4d4e26a3ae3d7c65f0f9e813c54ea718d07aedd7f577c49d9969b5e7073b48f849b9a0360c02a08e9ab4f19cf60dd6571af7ff2a4bbe776d3d3cc741d711c8d3b5313586f65bf3f20ab098002bebb2954dec6e201f8345dc2fa504c32610162c50c7d373babfb3721f84afd373e678959b5f763843cd6691142b71e24bc48de06d18cd6c8d277113f1ec9eab19e36d16701ec0e42b99eeb879875cf05894ff2fdc4deb42425436ea5011cd977ff2346cc3559edebf422647ccc41392a3950d52b78f59e374b4287bf3b0d8838a36b26ff2779f778f44109baf5b383204a381057f4caa55297d19a0457d41713355da1c62b0575f0ec262a8456c1a7d5eb2f2a89791441cdd78ba69eae8ae1b409867ea63f4f5fb8c85cf48076071225b48f4685bf84a0a773130a812f2c3df5b827b1c24f13309a4dfc836d7693fe3a4b738d51cc46a06954f78c088142cf16db9516a4e57ca0e7860fba719c3dfc5dc780c7a01019437756b84c8d5a25d3b6549970151fdcd26b511bbd6f74e3426d7cc2751d568a4faa94db81e0bc8c7967a70ced0c235d03c6e61edfe91c7537f7e03339c7c462443892300ab51134463aa130df6c9ae0c190096736050b4f6cfc09d723fad20e0da82474c4464c1ce328edf77cca5d6e3ae6a20a97097cb869894a5a1aef62e527e54ac0ee58e87653550adbea752ddb40d1dacbedd9aab94e969ffa325b689d58f891122458e7c409623685a6e392a3ceddc4025b31de45faa04e1b759dcbe698380db1f16f209979804af68812f1e7b609c48d64bfb7bbb405acc3f8f2b9e8984a85089d5baa8fd6208393c495624341a8133fd148794d63d3a66cb783d1d286a120f413345ebb43d163688d78d21094f8a7162e872a3daa02a632e048f3a051482100cc07609d34c0c28551c3cb2e22cf0e6208572a7e22b0766dc45839e83c581561089b77b33342855f310fb5119e4d12d7da973f89a4415b525a6c977ce8abd0f89cd397a55c7fba6043ee9a3b0821a4c57a2a12c6fbb89dbabcb7477b0edac9e569693c34044a2bae91880b3f6f3302412cafc91615df8261f1e3828494e623c033b11bcca02518425d91a512b1c0280db838b706a01f55131fef27fe5a4f571b38f6d8f53087f6a871e0a006f82218320672c030a9307a0f2b1db89d1303b1f5c18a5b4f88cb51155b63015c38a49413e6eac25fb6344a373bf59a2de60b731d12dce2e488904f3b434574768943d7ece5daeb5173eda64ee762a50259e6fcaf8230bc2ba406521bd591c42d0a4e83c211341d69ef6328002be0402815a01d40150b5f753ba433eec76d11f8813fff59abd4a2aff5a0381db79234a332554b34267285abe5cdf5812d8586483f42bf0774d9ef3967952117c91de88bc3d4519af2da6285bb15ee6665c2026a55ef419ae7a50d9e71ef3aa7f8a66b83e08d774ed1010a85940f8028c58577ce4bfc7848485cf6cc1b8f3ee28c02492cde39f6a2a393333b299e1a55e63512ff66eab670f69637a598a6e15064ea8b182d8908c2c2dfcbae1b10d07f9d9510b3624acecf2425e40e9815d3f341f0e4bc47dbe6970e050ea6e7697aa0e0595b1b72cc4f728e2957054e7d51b5a412c81cea8e4e43786dfc50557a5b60c927657855e04336221a99c2c912f0978238d38e6247c8e610837fe28f226e9f2fd704aff2a547df45f68ce3cb8295ea6b6d77d6a1a9f18ce747ca1f4075954ec8dfef455ffde2173664ff6c4ff1cdb0be4f28d6de77d536e6fed086b4c585e33ef9aac1404e215aabb278f08809b2db73252351441c0e70d27ca65a781313815f6ae4bf49e35c041ef0a536c85c2af7a79f60f20a8469c2c2e70dff1282dbe20a81d9c5049617b440c0145c21bf9972d78379310440ff82caf3ff4e8dc750652c3f66f90d90ae3fd49f6704d32d06d518973f908069003de13e5df6e3f512e76fa317831205d84e7c411f2874505a6109461974d027b3a18bd140a7be5da9ccaa32d38d92e7513a714fb0dd8db236659f082223d03cfbcae0875e4a4b5feb551f6897284475016c63ecf2500b08f626a84fbc9242c8daede7850d21b8ea17f316f4c59b021067b40a09004c9ea886fa12b688548db7eaadf5af1d5402252ca0bde1f54538305b4e139734ab54f93c9798878109658b9b4442069c8a471a90ba1a040119b5373951f91ef0c10a10566c62eeccb8448c310f8a8c118df4af3a00e37d59ade620843e1e094ebb8d98b97b3372f5164097dc277fe9e7d05b0b40bba8cb23b27a6897854042ac2c27c26f4372ecf5985037f81f84f5cc9bd51a3af4b70ced31cf4904a073b7f755f72aabe962d46cfd00022133b3091e31b8f51270648419451b16ba249d5361a80121828b5894c3b1ca9782006d2c1a19a2b83c1a27e62701cc1d08d67847054a61cfc7efc97f136df36b33d22675e810d2c90ea841a3800dba1b79e7a58a4aac6d2eaaeb35c6d192563fdc33fa7771007feddf0148fd3ecda4a577593d92bf9979fac97d249d6f963a33ccbe7520174c426193e5b1b17f7cc091cc178a6e6ea47ad580f56076f7b78165fcbdf850642da87e238b27caa793785253b7e889843ab99514b353b0ccc83c6c62ac178e79fa39ad5e9402dbb5ee8c824a8335021f1011079cd12ca23ec8045e82eda64209959526fcc3cfd935cf41f3d9134da34832508e773111db4a6bd08a756bb364c824f29ce008d425419670d677f0a006720d8d25b1cd2ae84454a8c96a68c120ca792dabe243dbf7d703a6eb5edc5127c0d228675a4d083387108b6b08ea2afe59c8db8aca047e148a0ab1bd5556ba7162e247c5cb54bfd08b7009d6a23d45a54be00d5aa5e1c62fdbad95ec2fa277699cdc10ec9b1c2621f5b102a647bc377101b51b4722c8a73f1d69c44a6bb14617ca082d4daca144167ba3ba30b792a69c124e4555e98e3b3efeefa0d6cd9ec0d6af8180b63ecfd8a6068f2eb140ea3a9877aa68edaa488453281c369d9d3a293736712d209a58e603678be1b8c9b20571813273b23d0e33be2d56657f800f73400fd16042fa5057b1cebe580e83d44598940032dc6675dd8e5aea0b12bb49f47519d81211e30e1bcda162690fe12c85b956a339f38613f3dab87ed7c16cf2666fa3fb80bad15630222f9c307490946b09559ed44fc5beefd1ca363d9f9436f1ac4e702d2412b8b3c0532db0d0194430d44a9a762680fa65f810af26c2bd7873087147e7f405734114f122f021173928f6d97b44f5068d4ff067e5c8e71aa7dea60ed00ff6c6ba6612c7e9baf91a0d08e428d6519979bcd7a7797e289b7dc42eb0dcd1ba2a3c399a659d43519c7b693af0162a2c50a9953e61563ec2597080ae1eea89dc743346b5068b9c4d6c595e50eb4da470c7c4769fb652d09f5b053ac67fd4dad8c3a5561d01e06a3d67f9a3ca4f41419f252ae30eeb1005875e894d6614361bfd3b99f03247db48da75ad946b135ac18b106f72281a703be19aa2e02079982dddae8ed2e6260824bd8e4313a1de7fe3c617b93867bd3f74a30ecb2550435fbfe7a335a2682d721e95ae68456fd6426ca488ef3e1aa921ee0f85d088f0031ab101c10fb204376044ce370abdb0207881d7844c5544e35e263fb2c562168a263f3df930cd4dd71e24a0e0ab7e6343c1c64dba02d783d3265bd4a8c75febc83168953b30502eccc2bbd6cdcbe7b6383f580e7a0c2e7878e155448225e60e1a62431ffd0060c40d7144c7499f0d76985c297a2b223de05669344b7b7f0c04c2c8cc5cfefd0ca12dbce3e986db972f130ddec4391b45580b06fee198684cecf4a0eb28d19f4594d70c9c2522bdb013ced67b6000806874662dc3c785c1007dd66867407dc6e0c6bf2ede44e4da9d22698007b7913122bddbbefc2962ef06088dc0754097843ce06e4a24dc702c18ae210739c16370c3df572fa2122c486a1a6013114107eda3b1a7b72253cf08baee63e9c65f57df2a0226c57934f88974a3a171ed6740493476f4bcb099d2cf044d5610ac07de02d4937305cd84cf888f2ec7e0c2ebafdea2e45e03d4c40704d0898a273d1a7c356260608566d14859a0be31b8e283172f11d936def41a8089ed9801ed168d6ba0f1e1d34c69a5178dabd4f232e59cfba80a76c0a8e914d531096e5b4ae413200c6a5d13501cd606c0c23f20ae45055087c4b83231bd355787ef89f073b3363d037a641e0cc16e2449be4589d2775b4ccc3d5f0d5d0fe4d96627031f162f7f789e7e8865e664fd26e74d0bc77abb64e2a25d810b558e5eeb68a5768cde6ee5b71b0a5e4b95982878907d38c0ac41761d9a18f5ca322d853f93b1e307da5e872cf15aa2b54aa6361688ba490042138b600a21feb02246146ce6906cef9a8ec6a8227cd4cd4f63681de5abe34ccdab7718c2bd91b78699b90f312795c45733204002ae2ffdc1b21fda662a33344c66803051014aa62e2665dd10281da6f579a7b8cb3c089ee607670a602493f06fa61b11b9959101d72a76d775599f0e8ec47213e42b7aa56d473632cf19830809c8a625c6a063c0ce39624542cafb172768c71ebac6a0fb0d65dcc50390a6f8aee0ea1b60be6d403088c23e32137faf4e325e48ada49468a0163fcc0cfded2e9d79055d42180d086108e5c0628e5010b6981ce9ce6c90c35b3aa1035e379e4f08c6695d8ff2c0ce8e5703f74a8ec0719140e7fcf33ba81df2c4360d8e3d9e57ccfba5837cf03ce914835d429c8992543373e8128173d568cd1a567075af3394b2825cddb749b0544b89975fc463e5a0801e8dfa2b564eea59ea53949b738c342c37903b590c30dd7d36d92870322049f834002caf46166ae22e50a3f11d38613417b1d4864696d70fcf2be4fb9a486d4d1d6fb940b225b058cc552e301f940b4f7c5fcbaf9128c6a17d34a943c7c026fdd02a91fa501c0357f5c27abd25d6b8edf32bbf70cbe256bb036d3520feea5d96b0192e32f6bd3cda5dd72f15a7f11391191ee0d986675f1d06589993f1911c81c5c7328042370cfe9b11fa2e7a93576bc6c7328677c14b85f0f10b7d5002242020249c943225ba81242d83e3b9add588158a52c47392abf846817958df86c7e597f49743484e577e3b2910dfb9630c3d17f65332d8b875582fe6706a02943cb42896e3541fa9db39395e687c9719f33c6524c4eab82c1bb2aa9addaabdf101e2355e6827b6f711990cb6074dfba85ebb2e9ef275a49415b8b0e7368f6d80b28299de86d77a2af6bad48b1e3c06a0fa430804ca2434279a90a85c85fe6c222c192a2cca88ff56d3567014e5827885173050a741393ce572f7ce67c099b38f1963938ef4c649b98d67020423734033c2e8f99b0015b6e84feee807f56038401740f119833947adaa9d5de72ae5d1a34844861a731daecba9ffee59c162ebe860f779c28940a18df18582cfad948e022048092b08fed5f5ea4d8df9c9bdbaf890313567a41ec454f02a7b7d71a62e21d40ca886f9aff0c3f82168ed22937f95b807dd0ffc8bc20e4987843adaf1b36cf7f52c602319aa86b739a8993189bfb2142a6953f49cc0bf6a621a43d3a225e0dfd9d0ad70809348ec0e6671f4d5c0eb56f29138243ea636a92d5a13f5eeef0ae239a303daaec63b309dd33dd760481e726756e05634b4adc7f3f49dbf15815237b80d24c226df727449685eb4c7f09ca761505fb3dbe1262679774c8d8e6d053625f6dbd883f83aaac139aba78af3faac8e54b6ddd4488394fc5f85a50fc7d8e45f1c1827bca5e3b4300eabc31d9b24e1f4a76a5c14822cb415e969da437a8da3037b2c83760ab250224631b4b37f4412d6bc72acfd6586d56f2d34725a135eb734c86bd831c5a1bce98c8f17f20adccb4899e7fe5e4863ca23b40759c1bc37e90d37732a28d423b1bf3005480687bd5ea2ace4378136fecf6b34db282c23dab1877392a8aef492693b68e7369a5c70acf40d7991020c8b3af5c456d9e794d17526b75a251b09da3a5747aa8fcffc15f4ccbe7997391899dfe7f6b2aac8559a6a3e181627df881e8b42d3e6c139c1f7c398c870ae3c35488c3887c0cf2fd6511709e970318daba2240808284c02d12cfb7fc5396c134fbcb522d604f576f96907068d4d337da152731a2e0cfad01202e2cf2d993c12f48719d5f323dcd009076de39a2140d0217b2adb837d340b0d0a45aba37af2d2e11c6028c8db1b71a52acbb45bdd74a12997b5496aeb55bb2cd40686287fa102d3ec55034b8bf455437e2e131904859423510c7432a9482834ea2e469e2a4ca5c01533e4a445a60cab1980d6b8541f8bca746358dfe9a8143c6024a4c35a0f935a88384e50814992d82a3015eaa9034a67c58facb85c9a4eb6a60a25d4760af40b8ed37ab5c86c050b38b5a91a78ed4bad41c4afe0560cd2f85dcba9ad5b2b907f5c34218d75d7911c6f15b101e3a1d11e5dab1352bd2ca92c0d36ea45ea0c3a37f6e8f522e9a62036d490a5a698e543437e7dd7d3ed4e3fbe85f38a585238adc8bffc2efb1288d830aa58eae58279e89ae52e466b956e31bebe4740e385cf2a1020c166dbe4de12ef70ad2b9b83ca8c332c04ef255e3b48e2ac2b4538fbb068cb2c3e9a402448c751d803cebca969e7a72a0b8bc4ad4af4af0d2ea6393f5cf6c13f695cde07ecbeda946045c15f1b3d02a386fe9d8c9f78006cf09037b34ff3899a0daebd6f1648b1366199f80ed31016af5032db16b567d209d83aba1c71699a611b261fdf4b74da1801e19edfe1a54e21708d95b16dbff89c4b83dd9230e6c5aabdc7d032a7c4e7dc9125e4f6519fdec6bea5cbee925565a84935b0f24b7da51e60a65d70f9844e722b8d48d5215aec4bb02637dbb4711fdf6aacc68aa76825f0fe7ce50aded6dc26e2ea813ea619193a8a58ac7d221ffe33f79e9be14120de2dc8256707bfed944da0932464a9bd0b4f5ff232ef829ad8dd56db3aa4fee66057e693af2c5b285e5ee7b826b2c852fee78ab4224f6b2c197fa3fc1f0871568283ba812463b49324ca4c440e8d40bc54cb544082a0a74dde6237270a29e30f8e046cc9a67f1c6f2fbc5ccbfc38c739f93d103be843f21a87f9f8e6a18e6cd61403c4cad9d394be778571b2ad10bf2374696b66a1d652c29e961ccc9386947d4ae7e9646f513d2bac86e93ad19538018b0005e04464b9680679699f82369de2b87f9e2961a2a3ec0b757a017a43d7d45e1ac48db43d8537243f28eae452e2463cca73004422d71cc0b4b1f0122b487a51a027ef1df5832bc723cda3bd5f8d369b307255e897170a2b66a436b984e7d31a9cb480d8a200f5135a12d9b1947b520bf89d7a8862a7c5824b4d1e722152da27d869b7dfaee5382099fba7af6c167bee826d458c1ee5635a6eb2a9ae2104ded9a5ebfcc96f4db63710330e5c709920b375e24c4863ca68f4f01ccd213cd9bb3c8ca0dbbfe8752baf5bd7d26859d7e618bf6df327561682c5ff15e21568c4e3159590bacd4b683d0cb81bfab229e0b77ae78b7db241859f2fb94f1df57ad47f06ee1183b85268118bf90c89efc429294e4a4d73ed46e5595b3264bd52c9fb20fca68cc12c293545d3d121313e512b5544e6ebcb8d6e017b9d94a253477ca517b3b2d9222dd40c2a6b8b36d6e6f4bf504ef70bb73d5903afa7f4cb74f7cf3a50883a4987ba2790e956715962d62a24262fa099f23845d70e94cb540485a81f4e26034d66bbf8fe121d3366248bcd128122b463b33c87daaec32c2e2d1e2cc78740a16ea11198c0f879cb35e4ef1f26944cba4c0c06fbf48c60ef2087dd1064446c5662c4173699355ac0160371406b5e5867ddb8b3f0c3d79097db1c2663f573661933edbe1dde2f25b878ae911796e47672ab9956ee91f18a0367c29714b486dfb773891c3c40ef21af19425a8c1db760d7a4e3a5a0b6c37c9fb5f86861144c7295552f44949fdce350599abecec9574442171be12f0a14038319d19b0389e5bd831681291e978fe6d3ddd3771300ac701142eda7b122b6b686e606387d4746633e2d401250da3107d6461359eb452c60b1c32e2c03e20fd78095293815df61c5652645ea3c0fee8e0bbf263b536f89de521bb97d2a78089d80410d6dd2508d152e5b6e1ae74edf6572c19ead5df07acdc0b8af7adc3f26808a18937e1c9c3f5271cffb5a5aeefb83f192f3b9ed2b1fb0eea60556950adb2d8922eb8578b9425423d9a86a1a015a85328e327ddebe25efe970acbdaf56b17106e91e135d2e5bdfebc5207ccccebd47471dd31c7b979c65f6ff8c1dd137e1c54eec5dd9137794587c46eb41319361ec0d0c93abfb7ee5dbf231bd10c68a40e4174597b5ebca3b4983525c85f9f2f3a0e543c98f78ce96a0ddac943abbfc496a67a045a2ec7995525347f340dd56f51ba127a129fc9f94b7a6d34b610f6d01e274ae1205bb03b1990f65a4753a18b9a44669efc15eb7a423bec8610c19dad6b1e2020795229cf8c58d0f476c01ae6df1d166c7714149e60eda1abd33fab39e0bf90f95d20f99712bf79fee0ee9a20d0f66c7060250c5e3d84993bab79704e5132647d37a9722aae31a14bf84bc79b327512842e22b93273f409c58710c51d638365cf1f70123ed4b8b622b4b1459d2efa1d10d854be988f746f3d5fe5259c83d9bad35a614dffaf623de0a1034f2be3aa213cc8e16d84ad5ed44a8b36ca2d34324f5613a46f8809f2685dfd885361901b0c2160af532486f6ed161967407ae0d4b81e53777166584d1ea13d5ad3ba616f29fb2c4d2cc2e0a7d8853076661b1b2b0bd2683c04ede30529b93b95cbf7805c676feb213bdf21e42676b65a1c24e80e099ddc7e41d022ccd29478b3ec2f3f3be86dd5cf45f76f2860d494407f8fea6b8a91de8a6d74744050f006d655870d9ea65b742f658b64221609067b45a25cd5c65c3cd7a881d62d41b8063424526ce83f52bb19b35718f5ed070d4523506202ce71ca1f78ec965614c5d850776a7fb1ec3bafc96faa9f61b972ed805a7329e3572d6869d5b37140e99af5306d8ca58b9f8f14631160c5fb24966211b56b05d5cab95335d8fffd6c644a1b1de7fbdb845a7ddf438c784e9663f41630f8a26abaf6f4918825f83a282dbcea3fabfda7e8ed5f00d3c14f06c1390ffa07707d8512080bdac7adfd33acd7b5242e8d14725d1c561c9f694c18c73db3015136319d5e6e0429fbb5614965ad56242691d9c282b471a46bb50dc62879429c56fedfcfcfe1b5cf86be7a65df2489ecb0fac2a52e71d72e908e26259fb01ac9016405dbefb44c1ea89839dcd5c7df7f8a1be52723ddc22a581c6139af25c8b116b14fc5c1cae334aaa1790b8f6941e2ceb1b1eb443ef6c0b05fea409a872e4442e3df8e74ecfb1e18f575c0a22617e7bdc8bf397782581e851df2607c5409ac0b044a374b72261055cf21b77783b1bc1f1b82a911c48f6e2e5131579c79dadde627e94dd312228620f243668797b4506483bf068e007f431d41370ea344fe1a2c3d907d7d5ef1e0de6eb57f9173f25a23afefa04cd46f30ab7e6fa09f9d96796901486bd56e3dfa0a0174df464755c4d724d7550ac688b2e8021d75c863e6d2193937b8a8661bb20f31fb86c0d53efc6054f9719028a536b04509a535011c19fbbadd45cb39a06ff169a286fa32d500349a0549dd086d94840ac0beb511092fa808ab9f28ab47f987f8ce288fc2a214d71548e6617b3e3c0ce0d73a5e701055282676326c17b24c4e6d78f054fc45ba4f2865224a9c999328509005aa66a54cb497bde96aff4ce79fdee5ae9378a9979d1f869b23dc760a211495dd36015f7945218bdb00a9a3e5037c73dcb01e0599af19616145717b72d2e14583ad6988cf8e820d1d45fa4a97f24374684e276ed177620912675cf70a4f08a040eb839b04fc5a73c58cd26181d56a8b4c38d30b74360a74383d2e9d4d8a8c7e917874e18cc36cb1790aced1760b4f5d1bebcf52e53a6ad04b6613949db88090813aefd70154c663dc4cc172de521bd2594a3a494045d8618a92f5e835ecdd526901dc5002645872597e383b3468dae47bc43d8f7a112bf30251956b45aabc12d459fedf286c71304d5a8699882c8ea69c2f582d3419483977f4c9ab4c42c498f85ca8e2710386624275cbafafc79c154fc4cac016580332121a240c505c5925a997e20887cd813b7140a2a4b7da6f4763233fc501f9bfc1cba7c932124f1867302c778c873793e861f4fb24494cf3d5189719b9b9f85979369d1a053986d615a27ebae6a18c8c167c9d81c72ee6131192cbb910ece1bb8c1656f74c37963194781e6056db58df22c8185e9212109e98291e64308c027b577b1b6485c012c62410cdb41ace9d517ab62c4f11e130c4d59dcf775e3be90dd55933543a1743b5db48ff322016638455a7f0eaee194f76a214798a5f03ee0ebf481ae8110c1286af017689bd6c2e6502507df12f1843120c6cdd2ed335d72cf43845fcfa139703b5d3678147c8be7cef0f663fe765437f11c58d6a66df875ab85bc151d21f92e75974b0d4bf1089c91c0717295c5e7629399b693771d680fe5ab692f34ca3ae0f6349b6766b1dfb36b3020903008e59c9f271416a277b152d742e51989e2a1f8bb3e68c5afb1c1b0c64aabad5d1a3f9a7544a13f6e380806cb8de1485664ab824d58a22afc3c848a62111b81d1db99086cfb7a91cf747fe72a9417ae21c2b0479f9c8627108d782f6621bd4a849926d6dee4229320d4fad14de7346c0184adadfccfa13080f792131fcafb7026a9c664ed0ade730bd36028bff8944056b899ee1284b8cf29e0c196834647cb62ccebf651c538e450717a2e308790fa447ec04bec86136d0808c7fa6a2ab86ac5efec6c4a0c466d0180c820c7ab10f87d2e0b1a1b0516e21e9cf7853e95d40d3373c205feeb1c3879b7b21a0de062f0fd98e4bce4a0d82e56077f832d643f20d9914ea8ba37874b0b7d390fa903424abb16ae1f627e3551e5593bc19dba7816b4a906104cfca68da8604d4777aad14f16e5aa55ec19e41da4cd56ffeb25eab9cd8d7347110c2048a4765f6b3b39bd1f2c42db08726e932a8afc806845065f9c9c65845080daba0e1639e073e4c33465ca826c0c6e6c99b2e0347afc40a67614b1f148fef7f747b92e3d1562e477cd720dc42bd347181d3b51cf2a892e70329b716e5bc0d333e4649525b7803e32df43131fee23ced740e8a6525ff2cf4a3ac0ea94b6afad48737ce1d65148ed66e486f3808e3b4f91c5429fae738287e0dc659e5419af76c57d4d7ef81cd8e569beb150eeda4af2a2ff015d3b0517a4715c054bd1bff09c1924e301bfa676aef5802b2709cd5ebd8431356e14da8e9f42ea1dac4ef4785010bc02d9c257b3c5de0170d0ae7910d50c4def6b8e82c537465ad7febcfe4b40ea52f34c93aed4083e411d87a5afb1c0273677cd82629df1470b00a586cbc293679a7d8990e504e33690f0f176f92035419c7c9b68b4104d9bd4132a31ee09b5186b02ef9872204b53f30c46f88f05c3a7ba2699d3b056b65574e7e2e465c74b70c57f44d2658497e4f9bc3a06706bce3e1c4ddd8d506dc618d93a9f08612a257bbe248a445c961eb29602556593ca0ac82ef7374c63083b85d6881385ec5c31ef4b4649f5a370e00d09075f72f8b801732486af47b1a752ac51295b2ca49032a13588e82a96ef3eb06cd583ec136255d4ac5dc8d45075264ac3eeadabc4ba78951071045067ca2a4110fedef20f1896b27fa31f9e722f51f2624f0daa4996dc88e534e3c972ab1e43474f9038d0b52441ab240b96a41fc495b121365ab391c9ec6ac06ca954162ac8129b8848607daad1a03782e35dd8291de2634716c190bc233100a48b507d42e172f5930d798620186cc1ad1aa33213298a95345246b606a12736acdb4c584d7ef4a2e4fa6e7518a7d01490da63c78f47544a9cb99f6aa48ff5fe58500a41d864ebc153873b692c5970259c10a0ebf24783bfb4342f3e7cce9841d30f12ae154d60d00474e646b4d454f6c4622731b16016ee5fb307bbc867270185cbc2850e2bf54df4242b1b46b88e5fa9c1edeb68c3c382dafd09d365d1f7123bc8ef591160bdd79eea8f527a1e2ffcac54aeb93edf6ed91782896f2e954e7c6909a2c7fa343c5a8fbc6e36828064110d44eefded43adaa416521c9542cd8bed00a0dd38347d2154918b93e2b55327cc32bf1ceca878a3927e03fdcfae1e34e4c3e6d4d9fb688aad8302f6a7f9ffa2c88400f5bb66eb18375b5f8b586d81ae0231b814475a3e604d2c23eb6128efd850c7ce2b1f4e79310ca05a16aa113dd401f89692cdf4ff7da515d7ad000b9c986951793f8fb33488376233a9127d54d8319cc4389f59312d95c28b454559cd13c7e4ff785065ca2030a0dd7a35c30ce515207ca30e23cf9647e5f9fab70603d0749b638c74b843df3e5c69f22e9468f1d9b0d83a4352f99c6c776f46125d5ecea387f2849a7f7fded40b7d2a75a2d8f2f922886a92b8d436aaf367712f164ab58eeae25726f296592323c0bdc099c0926f5069c7ad773280e8f05255374e124d4daa8151e483c937eae1af8d24f6957169c23ec5a8a60f7a528ea5f1932b66bece9f3eed4d05e7113314cf3265351136395a6851089cc6516759f886a8c8462721a21e02f47f8b36dae1a1caf20603ce4345346a7ac26892acd11979bd0853d546b8d53ddb8bbbb534abf8e2b6875770fd2948bdbb7b6d69f2884845f08fcb024c1e344c981e5cd266d4ae9ff504a2fb5d469a594524a29a594524a29a594d2369dd5f2d43609fbc5f153b5ca358406375d8a4a523981dd50c2cb4a0ecd430e579956549a1b63d4d40d968c12441b2b136ca850a09185d0085998011299818dd4b848352c137f9a0e9568d8ae9973ce39ab7296b2f32def1cd6b821882fed7b5c9b2ea1a9b2cfffc969732fc6f4625d94ccde2b255ad50d2f49c34aff15a45dad9125ae542cd085f57d5998c7aa2c2693f915c282d55e6badc5318bb1ad307f597d5db8058e212b8baad54a25665638822decbadabe1cc6b2965a4b632c4bada5ba8544b3d6b299899c739895e49c3fe7d7b79d89762ecf10c477a6654238d923b74d977cbf7dd2a074d8341f1ae46f8588b2e912d46d9fd8744988dccef65d31342736a8ac13747d13d69aa04f1aedc7da40d38ab603afc29db6a837158eddafdf134eb3b549ffa63b188af6497b27cda8d65a6b7577afb5d6ac7a92090ace2cb9c0c549d11829d37d04614311de9933384c1f520a8286511b262d6c79637a972270f08811234e9033a65f11c303c248125d9cb0319d03189230114289694b0dd3ff87da86a02431824d1249452c20613a152c338e90c22427a48ce979e7dea6a3571f764a58d94c1b0421a067cc402c8000366c8b2e96cc84bf8b39e38a2bbb28ac2082c4461aa2383f20e16408d40d6d7246e0c8c13c651b02498a4049e2e4a58616f334a114c557d4c2130e6b8a74800204062066f83893a6e633a0fc00b5ebcb7468d0cf4e06a2d0fc18d2e54913121305303e1d5630e2082522e6292b02095f1148577e13585a72230e0f2b3fb084b1c14686121e3b40bd803361a98d94221d028c9a8a780802c50a1953012554badbed66e5043c967c0061c6cd90242290c3e143099c1b5c381292597213c4469496a614514a3d2ce9c1060d3d2d39a4d6d0364b7cc082820b34a2a0ccfa402a2c6025ff6eb71b130f1c4a48362039916a62001f4d5eb2484922ced2091c5450389aca69e981bec972a349149621a66c3103c508890690199ec62020055c91971e8a3c4db1d134508024596243649764d657416ba011457c6376fd09500d2a9534bb3e0568108d621a2a920a43463784cb11432860e68a094600e90108354284dc10c5c588095f7e433cd0b0c11df161052e2aa4815212c6c9cb1033fc70c3d398dded768b72803739d48849daf163897984880d659664b8a9f0c43c6521d892c3d2d18ddf125317283a980024c9931e982a4f76c0c14b114d7c2842814991326672c815d120c3428c3366a06830420ae2041fbe34667da0306a360875b7db8d86d897167c3adc8031020e94921f3f1d39a62819d55004499722726062c0f2809f0a4736d62c3162063aa6498f326666008354c5460c2b6c6c54ea090f22336228f97466fd1f6aa3699e8049b284034a1933667da020dcbbdd6e4936f0a686115da0da10393ac3db6202171b4434a1b202147aec6e302551e62681a53740a009424a9c1a28114a524862c4052d327e50c84154a38d942d52363ae68910271e5c80c24367d6a7d11ad846ca16a95dff04d5a03e8d41c0ee76bb1131c31d52b87266480a715430656ce1a183121a61a048e0879c14152b3aa8b0822c871041f0bef048424a92251c3ecadc10048d9721a4d4d0d580cbe1e6041f4d74666a4801c9cc915b2f094886c619363d3c1c5840018822504e70e20466e182022fc79524a70e8858b3c29418d8e02605117190b8e56e888167d2a741ac6c99e183c7a51606816285ccaecfa241d4cc48e1484102c9486fca9b241ad06929a1c90f47ac59f301291f1b212d8cb99183067edcaed83044511269d41c6932812988941fa80049f2020e1f7c67149081d52d204d1ba9342ec4c0e987a9c4e404243aec9e58c951344f40c0a82084c60a43e23cf9c1774306902d3c7c520f3996ae40fd6084e607191b42f0ccfa7a96c1891cb0602912c5872036f08419238467830e2d6468efa72529480f5f8ac40c2589e3e68b92304aa6dce47821074ae30c0f32b817a0309967cf0e3b60e041cc15324e678a6000d2031051aaf4a0c6044da8e2e3c91b1b6186984ac01ca122430b0f2c66fd4c35a867d2ecfa2b1a44cd880e88da6204852b6880384202313c844ca100a606354430d0c0c58631336c34d1a61b2d78d1c13bb3828d3650be1ca152c6cceddd6eb71738f0831296224e40d0903327d003d4919036477a4d4ba02cedc02849e1471814ece081c997a30611214c8034f160b3a407272e5062fc00e5c448872e31623c8db1d1364f80207162256947c6acffb466833cedccecfa3d051080171a504c6a3cfdd861490c1e4e5e5813c707194610d5c5c695209e62504a72f3248a1047d2e4782cb1bfdbedb602c5a14c0c3263702062429339042989a423ded1131f6e861b306c89214e0cb6c068e19704951462f8a8987902e4888d8c2e42986894121560903143091536369a66c9139a1e6362cc682d5412c34a9b5ddf04d5808661b2eb078006fd08608b2ed7dd6e371e267d96db86725168e2c800e6c7a604d3860d4e702f18b111c63c65464f76d8620487e30434e66962c884a31c84404237c58430a6530e08528d20347a53cc05e4802471d2c6c71294595f530d682fc9ae1f13690cf692b5042045a43d67bd65d1f8e98b11accddffad41a6079ea5db14a8b8681d4e2be7d18306e89bf855b1f67e281868e24378684315bf0d032840ea84983f3d342c4181786a062e252e8ad4ffdb13ebe32a9c943fffe90e9240f2d7938706bff9642f6852ebd96cce677504dffd9c8819b5eceac0f7d911af157e16e7a592deec1f3d17c381a0e09576dcf93799f6fcae7a3f95a46d807fa421fce87f385381a88a3611c0db784c33ed017fa703e9c2fc4d1401c0de3683834385b2bf5b9aa7d5b90e9aad6ac027dd807e2681847c3d9c0e170381c6661f284cf87f3e168339f75d1c5d55baba214c58ab51a5a89aa9cb50e69b051ee537dce46cb469dcfe7f3611fe80b7dd987f3e17c19470b71341047c3381a4e0dce47f3e168b833b81bce7763dc703e9f0d1fced687fa7c447cf5e7f395f1dd7c3e5f94db2a0ef4611f88a3611c0d9704c7b396e70691f69c5e9d604d4d2d24b1d86ba7709a0361aff6addc4c5dccc5c56bf9c0604b6402c3a3110c73fea7d1606942d6a62b580a7c9555e2ea866a6513ab919d9a023a51d1d4293b9b696d4b10fc4abc20e9d4077f48ae60295839a5e17fc17881bb5720d9d33dffe0ddab583ec27da6dc083d63256df0938276e2ac53618a13aa3f4d68198df6f3f3db14e8ac53462a33462d1796e1ba3716cea8e7e234b8291dc517a528622ec062a7dfa6ccd42913ba4eb98f7f359adaeea01192aeb0d80ba661ae166c84b1603011b65265580803613018beb00fd462bd6b797810426a711fbf9010528bd0a714d25608e93472df839a66062b37f3de9204f06190806979f3279d686aee98d4bca56a8ba6264d6a8a92494dd60f4b5366c5c1f6bc56df3eb5b5564a29fd21af354dce939ca39ca39ca39c197266c871923383e734c97992e324e72867869ca49ca49ca39c26394afc43a880ddb726a07e056465ddf426e921c441d70fa9e8fa60eeb5ab375aae65b58230352da9f1a1810c592b1c016899d151b1c21a724411b61a57d0a732d51a962a88d59d01dec02e16e8e6667bafc5b122ce3a43e9a5f4eac8a0ebbba6d4a73d55aa7b1516d6ed93fba45323581b07d4da27370b8ac256e1f2b3eb7d5c66151c6d5968b4cd8141dba7f65a5bc32ed5465403087ca219114822899ff0cf0c6a54adb5d2d7a42de3346a6b4bbf36a5253e16bc195bf0040b320842b7db065f64b12a693708270cc3154b355e20fcb06439ed6630e7f29bad2d4ffc2065850fbebd409530a0add7db88b4476a572b45e90ba7d5a9ebd4dda9fbc52008521a43e335bbcb7b029b192ca797b8e0c38b851f92df0f3104e9c5fe3654b23e3c5d3f03d0e65bdfe2b0c4b9156ffb8bacf0b29e76b55a1866ce7319e242dcb5549781112ccc6db785381bce665a83b675cb4a5180d6abbdd652b245290afc76c5037510556fc2e87a9dcc14057d01e41db52aecd0494df4121dba7115f1f2bd68d04faf197a45451f69f1094eeb00c745e68d0b4a4c0c3af300bba1c38b863ea387e0205fc4560c3dc4ca80c92b385a320ebcdb528149cc6129c37e3e17ac8154b979981601ac8a0240bd666bddd6bab51e46c961c352f9569908ac1707beb1179c0565a9b5d4755a4fb39996f54021eb994cb74517ed3983438b1534267d07a2ef6e0f9550b4c426064a700c61c63cc3a40d44932c417e88eae1937163b0eb874e34c86b28a06d13a85e152691a73d694fceb6972aac3d016ddb50c96965981436715a7d56943ec324908bdb6c527d19105a0b810011b2fd65455e9319f9cb6ed616ea643bff5893d76c0edb3fc6f38f3df9c77ad63654a4e7c20da7365e4ce862fac77c5ebb36fca4a6bce61f3b220685d6c218618c5894ed1f43126b1253a24131216e0b71618c883fcce73567b3fd613f6fb3fd63376b1b52da7144110e481829b160fa95b2fd6339aff9c7605f680d84828285d9feb0271a44b56c7f9893dbc0df0fc665fbc394ac2d4c0a9360bb30a969fbc36efe309cd72c8eed0fcbf9c38cfc613a6bab2d3c11228621465038d31f76e4355892d7fc614dbc96dfd01a0805ca11533488f2a2dc06ee7652dbfff5646d208fd7e3f9b6ffebe895e4ff52f27fedaced02339c20b1c2430b4a5030fd5f4d5ebb356cff17cfffc5e50584d6401ba00d21dbff65e4ff2a721b98cbf598b2365007ea5e375087dbfe7ae7af9bfc35cf5f3f79cd166d7fddb336eac31a2928292d419c40c5f44bc3f6d73faff96b29af41a1350c05a5a36c7f8d4437d14afedac8daf0efa775bf9ebfcbe7effaf9bba6bc6699b6bfbe59dbd08e37667ab8a003d15316d35fe3bca6735ef3d73dbc66b7bfeb0bade11c727085d9fe2e271717d7130df2d9fe2e256bc3d8855d4dfe2e9cd7ec92edefcab98dc1f677e9ac0d04656e88614710627c14997e95b6bf2bc96bfeae265ebb6f680d1f39724494d4140da26dffd693b5e1a4a45e92ef48a989e7dfe20284d6b00d6ca32564fbb78a5a3dc8ed3f4e591bcee15ceb8673b8ed3feefcc726af591ab6ffc8f31f9ffcc79eb5d11f70e0b0c5041c4ca48030fd479fd7ee93ed3ffebce63f4a8d5068edae593346d9fe2392b1c9a844837efb8f42dc76a7a64622be9f3f6bca7fbc59db50928d2352469808416386e93fe2bc769d6cff31e73ff670dbcaf4677da1b5fbe50b2bccf66739b1b8788dd220016c7f5614b7dddec9aab273fe2c237f96ceda505c297aa18a1515a6e84c7fd691d7ee0cdb9f95e4cf6ae236d1f417dfd0da8502e58828a9291a1480ed77b7ebedb6cead94ed2f26f98b4a5eb34eb6bfb8b33607049104929d1037439a987e9bf88b5c4420b476815c2042c41eb3296bbb3a9d785bad563fff95d40a0aadd9376f5651b6ff0ac9aac94a8906ed6cff9591b5dddb6da5bbab239f6a0ae7b59cffaa87ea0badd92f5f5461b6bfca49c545f5448374b6bf4ac9da6cafa7daf59ab6bfeae6afc279cd89d8feaa9cbfcac85fa5b3b6211c34dcf0a26385dd0e28a6bfeac86b97c9767f5513af85db3fbfa1350bc542c9476cff1c95a5a668d093b5d9ddaeb7d3f9e723af39125607039a6c29c227458a103177c9f6cf3caff9672e5e7b6dff0c84d62c100b44c8f6cf45396744836453d66675ba7c0b77fe61937ff8c4c3f4a64a95306c860831fd439fd7ae92ed1ffea4bcb6dafe21145a7328a828db3f54a24148dce6bf5f93ed1f1a599bbde9ceb0e70ffabc06fefcc129afd91adb3fbc591b35028922526000a227c3c9f40f715e0b735ef30f7b78ed0bad39142861b63ff84483c46df3dd0ee4b2fd41256b731e0fdcf17046e01198e40f36f11aec0dadb90db771c4f6c75338ca6d9ef39cd476d755acf3c747fe38c91f2b79cdeeac8d5a51e104281a90d8242d997e65d8fe98e7357fcc0503a1b50a05b5ebe322dcc3e8f7c3378cb358b6ffe5f9df27afb99aed7f7bd63644648a92169a66989aa188e937c9f6bf3faff95f29af41a1b50a05cab6d55ddddd26dbff1a595be5f1ae8e77e4d6c6f6b73f7f3be535ebb45d03a922418cb2dc700291e91769fbdf9cd7fc6f0ffb85d62a0b95051b66fb5b27cbc56b74df7d8433f21a3df21a4d6a6295fc6d14af8d6f680d8435476c7f9fa241516e1bc1fa543a25b5fdbdfab6bfeb1c05a526af512e5e536d7f07426b1c502dbbbe17b92d9bfedec33f705ce5f9d727afd9194c54f171c489171f3ea24cffeaf3dafdd55cdbbf42a13507386057245e4b52a24142dca6c27dea13d9fe2e9ccaf67fe13f827fbd59db50912c3a64606197e6cb0dd3bfe2bc7663d8eea63f07684d45691fd0206ad3a0c3b0876a14b129620524824079313d85edafdd8f6e98d1c27ddaecfa827668538d2bc071c50d75d676a7ea8f387ddea95d435c58a463dfbff406194940fb7e38aeb8f876a75645e813fcedfa2b22f41956d12748a5b5439f606ed76fe5f409ea767d918a3ef16fd78741e913f376fdd509fac449bb3ef8449f38b7ebaf4ad0e7ddedfaaa23f47975bb3eb6a2cf5b469f56499f7687b1161c1b6ffc3d349c05ce66c0be9f91f67dd614de994d807d1f1c575cbaefb802672ffab4ba5d5f9546abd0d45ff1a8bfdaa14fe7edfaaa322a32f7a6cffadbf56f09fad6d067e5ed0af25a3f1d26854a3c5cffead0d7041dd3d9cf9a861ddbf67b68262c9530b98d31ee02c3b63a47ba884cb7435e8a2522ed6995906156c0550c7c6c78db861ef0167c554e386c8f4c4464a99a2a951ecba6b16c58d9d6f359d6cdbd6df449cb174b6c0363e5c0d1b6c24434a2125d31c61863d2f68ef4a9653f34b873a0f449a7720895a2f0f7bfbd23e2f59ad34b864544290249fdd570f2b5456761f29299081f11446c9bdfb6ef51b62d45b8a4dd4ede6d491e0a502a59749b52c942e492570a8994904b662298b693b02d8649a6b864354278ec532a688e6c4a050d93ed248f2defce977cb5d9b541b2c2a425e914a51f6fda086953e4342bb5ed7b986d4b1172dee2c8c2e425b35394960e6c88b02972b1307949d711519a85c94b864f6baadc9a004c5e12dc6b74dbfe8ed8b614c137855d52b52d497760c86c27ed1eba3504220ad52653417c2609210f1c90eb3872db99a27ba57e6b8da4239e99001ea8dcc426da9542d55163e9163b331403cff591440c76a65b61629264561b2ef848aa3384d1d97a40b233450b54658a9249c23d4127dbf51cda361b5498329f32918c5b10ddaa23971b1c6c7a26c512439b9d293acb4970f10261ed40b585652502eb8d02518178316eb710765cbf53e6968e7ea2dcca294f5a1e4b18e3ebf16120b5185f3f8cd8c3608cafc7f2f5e5f8f93d788d207e1e7ffdaf1fc9f161efc1abe4f1973d35f5c3c6f7e0f5b1f7607c592924e4428fa89b397eac848134feab1c4b21fce10b819f9f9a14a62f8bf131c9734132ccb89c91ee28496977bbf5f090af70c0a088792118e210e7e8c4641a068e3a24fe9cbc1a49d683a4f87a15ae411357472222ca8f9f28fcd6dba7b875cbf369e02bb7c26ffd90e9eefe0344de09540d5c2fa44b57d902631644ac17c3a14ac26ac82f4bb772226edf7153bf96fb36abf4262b9665938bef4da637d9a76d7b79d5b3d668aaf6aacffdc875ee3a7777c75053637efec5e7ee374a4b3ab258d514dc6b0b0ec37b0e1485afde3ecddac0cf46f6c51589d401358988c0175d67adeb6ee9ba5c62ac2aa9f5698162597fb527d6a69e46e2b5b3f6747ee435ff59dbcdda72ad1247b27cfcaf2c890e37ebc55fbd2a7fd8e3eeee6ead37d19c66ffa61a72ebdaa1aae2b533579e1bbdf09cadbdeafbe5f8ed4fc7e990aacf2157244c7c31559baa524d3a2b11f84dd686ad0d7c1a849fa0c6d02fdb02f1a67007d51463321087506d60599d706d82536578cd81a2a8d6b17d4c4318ffbe8f20b4c6712457e1bfb521c9c0cf4f845ff5add5d3dd0249051588c79ff54366ac5c85df020c5540f685f5d1599f1cfdfda69a9aaa187dd6dac46b27fded24afb5de7e551adfbe3882b5818f3fb455676de2e71b2e6774d4226f66555e7daabdeafb4df9ad36a96e9b0e8004dc4a21f7c842b67d214f1fb83852a17b823d3dbd9e80f4499fc09f91f877c8fc3032fc18b9fa17a97a2dc25c2a74474d2a9a3ec84639f794ab7a0277d7175b5fb40c836e561b2e3f003e59d9b22d07288a27172fcb0285a003c2f8b754410541a774b5fe22e594207430963c5eb270b5de5efdad92c7fff543a6ac7495ad6f017eebfd5ba510d2ab140a1fbf503e6920197b4cc2fe45b6728ca04178f646af811abfe25a632c861f560ab91e535393d414ebc8c3a2e52a5dad92850abf2ea8ef86cb197df0a403872a0979c8c191cceef5fe358ad74a606d3a49473b3d592fa7d7ebed90abd721c5cf21592f0b1f468e9854fd0e494d193e4a72f1eadd0b3a5892a0e73d11b8e8e1d6dfd7b756cf7a22f15d2bf1e296b8c218bf56ee650bd1f5a27e9e1748f2bcf2abc44cf2bc3efff821c9f32a7938c01fbe07b9a48fc56b3d14016f16aa77913c2d566b45f2b4546609ac8ffdd1a91b2e67a473d1db3909d541d61b91f69cd5cffc23cc1ea8ee4afca9670fa3533fb504897f4686bf43b65420c9f399647d09929a33929a3b31929a30929a5904b2b6ddde01d95a7ec0e2d5faa25fef230b18ab06555b580ab98f7d5c52d9f669adddd28a75c1082c1874fd6a6dce790c8107fcfcf75f2068a40ea8092b89885a8f9fc8f5e1db57c9f2a2ebd7afe3fd6c6db0b7ffd646cdb73f3c5eb20075994b1e2f71e8426231fe2b6b164eb33ef631c942ff4945cb625135701c1e79dc031b668813921041d6cdf95b809f5b0fbe972d6042ae87fd908961af49bc7d04210375bfbe036ae2f79105de6004eb53ab6cfb2f1234d22a8072c60aac361045615f9644fb3e819c03f0f17b00fbf04fc0e34ff278c96204eb639f9aa0917e51021d226a7d5e3c2c78fcc31f32e96e813f2c43d9e71f32357977b636fc32d9eb90390cf50bc574d9027b0903a945fef061c44a6a71c9733d081f56c2c825b53eaf92963c97b4db6586df22796ed90135c7928888f544ab27ca0f3e91f844aa270af30dc94c26296d51454d3c0268a4b5d32ccf8a430ebe62882d9ca658a43db6d66a2d00eca5d5fb9e673300e48c3888fefe4aad530a9a097d2dcb69370c43b01291c7dcca234b6c896216f1e7476c892d71248db06866a5f8c9d5fdc786abf0a99d11155e117f7a64b976edc5f7624bbecc9622f8c6d762f2a4a9582cd1a6ff4cb12d0e559795c71604706fbafead4d9729cad6ff54d288eb475ea52dd757d7cfcfa5ac51fc164977268d8c2f8a63998255fefc501ade9cc5b2aa4823f7c5fc23fbd1fa5214aa57e130d8e1d77bed064a6c5ca6701f35da049a508aab3533f13db4133f2964b017a54dfa02bf52ad5c2beb92a970cbb29ad64a51ecece8bc389b9594a2d8d9d129ab587d63576bb42c71a5ca21288b551d199aacdbd51a2d4b5ca97208ca62b0d70636747dc7e465cd3ed37e280d5d2f0dfb4e5589f9b14b3b152eaa6dc6c41853830547cb2aca2506cc0d85c020066a8ddfd0810762161c203a6c71bed982f9aac49035ae107f6c512b8ad6ef5843d208ebc5154b64e59cb34ac4a12acbf42862b739c496340282d8c46c66edcda00ea0ca5919e73f67265ea427286bd56aad2e1d5f85afc6d5afc65fbd11f1c51a8a5fc57015ae42233967591886a111fc62c5266633cf2016f144edea8b2fae565457d51a5b75f562a8baabd6c8122faf35b244cbcb39ff258dac5ecc2bd555ad44d05e55ae7fc9eb391c8dbde50575fcac5a18e8fcd9e15dd5fe34b169cfa69dd8f4b5b5b93e0bd9f359747d4ac5328bb95ed557d5bdf9efadb7dde33eba8fd2d482b51f1054e1c7d28f59513835c339dc50cc0c62629021ebd8d07a7db0008c12195a487283138e6b6549cc0fd5ad61424c14313b5c9ecdde849962f57dda8e008b0fd85761aba6a55cb6fd08d020bac3a77d765a7d1cc28d99d1d61a2dbd09931367e9cdd3d29b304b6fb82cbde1e2d219a2977406799f2e243b7c7256a833449f79dbb2558356e1e1ce6b3c14b04d61951df29436fd18fabd3c43dfaee1d3ae385d3dbb8da5aa55565d58db4b5314f6c5bcca310237cb414fb12e54bc368e1ea13ef655b43773415178a938149d82af0bdc205571c8c2380cc33fd1f3fa5083603509827d952760b1c6126cffaa4ff0e36225c3cf4e0bff4582504f30cb2588c999ed9698f6ac9a6d3fac385d2b0e552a95a641ab6d5fcc2cd90f6df76a5ca1fad5b842fcd6f843db3103641521ce6cd8e77fbdfeea4524759a76b5ec8f48b66db2edafa2e4b2e29868a00dec3b79e2023848e51177d1be5db5e5d23117755b8bd327ed591734e86efb9b2e215166bb53c05d5014f6f1177d56dcd76ae673b65b26a088d6fa6a8b96e5aabc45ccba2305ec3be914850d4b0c6e316481788b9915de2daa58d96e71c552ad460ad8678923056ca528e8533a642b5e227eced6a787aa3effb97aba5aa9c29cef79026c2fd640fcfcd497193858f40b706e9802c7067c97dec4197711539ac0dc849821c69836708ab0def8e02889337b9ab596cd4cdc7bf3ed9126eb999669ad92810390a87b2fd38f1a5ac6e423cd8e6dcae4a3877deac745604b2a5def8a0a5798b0e81da39d96a6aa00b15b9a2a02dc5ac6829c7f688b9815c287905f841c8a19af32be013a4ab4eb28195950eb639b6810e92ba8cb9031bea0b5a0b5d85a6bc3f2a4ffe09fd65a8bffef7982b720be17e3126c7a79cc9e628cf1bd20b664de94da720eb3f5c118e36b31a5945a105730638c31c518637c2d68c7125cb50190d7f2d545d9185141a27451baa8117451d696b5569b6588aeda00285b0cde7b772a5238cddfc79f8bc313341a06c19bee7930c42666f9cab4ce16d326152c71d7127b18c6bab0e8bc29138f35b09b1e3765e251e69543af3665e201868947161c3db436b7570bdab529138fdd16ad3765e291b46915e071d4433bf13d3c6efbfc1f9c835581389fdac7150e5ab7f7fea0cf7bef177dde8b43d50d57d6731e575896c5bbbfd4da8bef0bc05e7a2f251fc7e0d86bedb5d65a9052145f6ab18d3876d175ea85f5712781ac0ffdb10bad4b175d1d0b4d677974e5fbf9d729afd5b6bfdfda6c7f27729c17595b9b5425169cbee42832660c13d4dda168fbd7161fb8f02fc18b13b6bf085e6b6dff11846ae0db74cedae810348050814d1423504898fed5c86b778b0964b67f2532eba1f9e01487c80b2fc820668da9250713713bad089a2b346c39f2d5707945714ed8d632e990b2edcb6c0ec7b64edbe678d8f67b28d58012b145cf591b0bde107bb5fa705cb1da5589e244b6aee64421faf45c06a7e74a9a092c6cd5ab6aa77dcfb991e768465eb346a71be53ce7396cd8a02a69e7bff59972d8702eda739ef39a7d1bed76bbc9d8dd6e667d4b666b9be5a21c760a9d23fa9cedd9bf09a75537b23e7fbed3aae7ac0f8afa20be3320ddb63cd06a243315957befbde21330c6d4155cce21887b682778663a9b32f588b2f5a64c3d905811b3d7b4f5a1b57a65aa9497815cf5464bc710aa531619c90d98edf0a1ca988a7c6c8bc306ab737a600982d51d6e0cb1edbf5a52377e74f1b1041a65b66fff8cb409b0fd758d2ddbb994f0829612dc3860fbffa400c2256dff0d54ccd8fe13f01add61fb33d9f0b27db7bad55aeb32d170b2ed8fada81936684a9898664ca5805384845e612272b3230044a3b9d5e227d0c053e687a78ba6fb6e2cdbda561a194a4cacf00cee00526baa4b25869a155607530cddf62cdb3f1c57780e3805d8aed5600bc3b67f672c6008b2e448072b52336e1622745ed0278d32dd70bbdcf66d36d1721fc3d21bcc1e77e8339f584a4217b4dd9c3999699da3146134bdb049c74da304f270825573c34b718450e187fbe57e467a56420a6b9e7a4b48b0a04302bf2909acb9c96626aa9631ed78daa77e9107588f2278358c11a2599b2e1511d554c4d40f7a67d32537333492ce9b2eb949c106ddda74c94d0b6f34b8e9929b24376e9c5460072f0c417c9976c4589a02822917270e924d997e3439b1e9529cdb165d95e779ec996734da04949f746f568d7ea8cdde58505bddd94a74b39596f5e6b4ba0101ec8aab82c4e29c56bfb220cb0e7fc90ea98bdabb000e6152d03c9975b670d067de55dc674745ffb6b918d4a7be0ddd8e5ddf02d94649f65677f6d652d26e6ff64683ea148a22ac5257c855a72374bbda5b16cdf36929ccd0babd79edfcc179ed4c713ac0c86b67d0ae5f3538f2dab941520f4a618cd84d5e3be911bb7e35da46d7c916f530b14f7b238224c53eed2d4a151df6699d76c5e2a49ff6b4b76a6f3321afdd6a0e06bb1ff8b8da24a5d3de4e7b33dab9f0f55cfc3c4083545c340f8b9f1d0f0bfce053b33269a57a7546d5de2ccee6aa3ddad5ee76b54dbbf276f5edfadb758ad6afb90cabae55579bc8bab33ef53750616db5c9ee54d4ba037de8d740cb8276b7dbe6b1f533b0e48c34e13407d020d50e9ae77b68fb442b8a3e692d9cb63700644017b4cdb62ca22b157fd005fd81d7eafbb8023fcd38e7d0817288bd88ed17586a52298dba3fd51cadde68d6670a888ed9ae01b5cda80f7d7f1aedca767ac3f6164e739082d88dd06df7aae446e4b6bb7b354206f751a0937201ba4edbafec53d6c2693a6ee0ee165ea36504a88d52cab49d56ebc3e3416973eeaa8888a24b46cb4e2b90ed8b9ad2d90a3caed06156ad5c9452ead2f1a2eb75a3ed8bae15fd711afda1bbca62cd94e853b76aad3a4ae8eb28a194525a69a5542412a93dd23fac2afafe4973f1bacd34da890f4890e2fca16176a5bdd7cedc73bd4a1119fd8312690fa53266884a692dcfdf94a7dd6743f439b4e9e74bef0d93e87f5a5e3864b6065dd067be7a5b5c82b5d65a6badbdd6be13abc9023a2bf1074807f62209fe8ac4af225d9f5f2f23b50ad721a929b300cf02bc12586b67a3cc65f6adb56eadb5d65a6badb5d65a6badb53683af2308f733283ba0a68e2ce7777e8c3df844b0c77f653b39b258ec73dec352089730f0cb1ef642f8651f8bc1de9670598e083232a756a0ee590972f6a2b344a81a388e8783fce1b7c82554a510fe121978c9e3ef01f839ef017ed9e78c3cfe1ee43cf81ec81e8f1c80252633204b90ac19a9b18b5c7d8b543d1d774a163ae565dd703923dd51d28b9f0ab79ef29dc007906cfbf55d9f91fc5e94b01958981d6db6dada107f09f20523733e6b306c8d2a94764d2a9a5eb870951f603bdb69e1562902fefdee05e1c50fc762a06c47e7f113e5fceb5de08f4b56b21867bff319bffe050dc2b31ddac65963c83edb169065c992687b592ba80d043a016b7b416cfb55e545e37f3da528620f7bfdb23fe98f8745ab14426a91f3ad17025fa7146a7dce5fa7398bfcfaf085744a9e8b5f28a794c5f4b71e06d8fa5709a3c477841b2e67a43b4a7a91936c76c520d21e91044ebb4efbbe93d7ee8f606de35ba02aa9ee05633f32e74752e75964b822f5abc8d6c75e4f479e1d6a8e310b589b05ee0beb734be022039d9c8a816ad32945709ffb37e7523017048ae23e1d5f5014376b3d9bfdd3683f3ff796783c7b5ca2e4d989c9de79c2cf79a2fc3a3f2b79764a1631d9dfcff781ac0dfc5bf2ecbcea87cc0cca93b6ef4ec9c341cecbbe45cecb7ee765a510d24ed942e755a5507e9d170a3fe7ce74feea903c3baff343660ec9b353feceea87cc123b3c254accfe85084d1b89db7278425ea3547cbb7d9fde7dd2a9a42c9b0525c43e2b917dbfc46c875281daedfb1af01af522fb9c6f21fb9c520869e757a590ea65bf53b688bd4e29047e4c0575e3cf240cf0733e246120b5c8f9f0731e860a7c9df720cc799d077554e04bfc16b97a3ab270c5c6f05b2435f108d6e77e48decff755ababdb77bcd47c617deeedb99884d790db161135476794b98c74f96564e86ac15cada324175e7b2e12f47a2270d16bc142f0b3eb550201550d1c67ad2bc35ade6ac15aadf031e8da8002f17080bff51ee487b580e15a2e72af9ed35810c51ef63ebe5e28f6ad7f952d5c0f9642b077b91e93200ccc250cd888efd8c338cb19e98e929476ad9f91e0ef901a86431dd718035b176cdd51f6e3e7b4c07fbd8c85ebc158ab052b855ee30be9f3e7a4bb9336b9c65b739cdae389d00a53e2acb70faccf9f3537fbb3ea94ea0e7cfd3272fc57865153f6416daabcde07bd5bab1ce1c5efe6e8049f48a854ac186a7ad63104d1c80000000ad315002020100c084422915892a471ac781f14000e678e4672643a948744419204290a21630c2080000000009091319a6d40003081d41e13c6102832c6fe5b1a982443dcba1018dadd33ebca568c55a5949d626248b9b382c08ee115857d47e5d97c5675e261ab8868c414da99e687d8caf991483d4dcabed26973ce8f6a56e9f6682f5818ed8124e7a66d81fd077fdbce5ae44f756ebc985b5d626f7176f82892862a41b81cd1beb8f4e5b32c3cabf175850e68e3568d56afdcc6cebe726c11436eb94e8af01c6eb831d5b285e2857b27f9b6f52db98d5eb4209b6bf41270e5d8ce93023226f2654b997e07fba40841b81ce8052d90cddb0e8d40f4e994a462fc379d95252bfda6eddcdf2063c2802251f12e9d0472b9a79f0b9a68aca7581432d1e1842334f2387ce0b98cccafa1210722e017375e01a87593310376b184394c58c008bdf2d66f4d726f70efe525a0e71f768be92355359c563857da13de0328b6d80abb200f247092beb8c123e9f50b5a9425ba49e9d214c1f8c0088645f461ed95702a9beaee0f00ca4d4f99a7311e8bedfbfe18eb12eb3bf581b108001669ccacd46d5e58b18813c83474973cfcd1851f6055f23a5ffcc61af57d49b4c95806936af9acca6e4e5ef1f5875e235abb608e9ac4b6843fb221ae552fc9a6f387452c460e0f4ebbddafbb822097ae28c7905bf12a8965fa465bb8f3f8c1249f1f5de6c6cf7d8418ffdd3b605af9803f553b01f7d51648c94376bbae458f666b07790bc9716670b199906d10a7a0d71fdb2e492fb9488e48a294755c99c3978c221c81e1ed0a373a913cd2bba13517f1d27bb07c3eb6ba056293c6a806783653351e5d7a47ddaf5d44e0bee3092caffa935c1c679b2786ae346b34dc2fe993159ac4542bf3c5a3e717f1ce149bdc89dec26f7dac2891cc6a494c86fa4991ce53f1b5253dfc6e2dca123c5bf9d6813bbb8cd2ff564468c53e50110cac9384c7bab34e6449693da91b860a9cbb799d4f3486175fec4ab44a3bff29b4df5a0b725ebb90953e0eb6c6f9112b55292829c28ac79aa515415a02f481d5c10db6ab0c05fbbf5e803660214dcbb2179ded1df39623604a39fef9f3af18071a046c3cccd04d08b0bb054ec071ac3b5e7cd91078f0d04115ef06e6350701986a1da9232485c9c181fb6dbe928375fced1c19f338e2b27773d0b739e700f4366e2c0a8467280e4944d1002bd3b05614663731de0b47ac8696a70daedade8b5bb1a08d1ea1481acec8ea1a997cd8b8acd22cacb0f0968cb122af59ff9c8d6a37f7462f896e805ca456d81ef7706f4d95223defd41ee06e95d3aca29724578f04d8de63665f187a061a6781cfaebce7b3194817eac4ca2c05a16f76251650602f5372da11e47f5e2eaef24a905db9f405eed74486cdaf466a05fecc40ab504c0de2dc79fb4dde59148ed81947b3282840b5d6411aff65b63e7c65042780cedf06d56b8b62ffcf28b6eee636abfd576bc3d2fa66a803a5a8901ad8621d3ca5896bc9ab59a8d2d0da9811f436b8789bb14addc2d3d4dd8406e7138cda84258488bd37c418872e33d18c0e4964ea0f250c9636e2217cbb900c473223c3c6df07054fa456912263143257bfb88346d182d833c6475d818fe88d253daba70674095252b4dca7834c8e5739e2805ce1b980e2ed21227d0c7dc9b2d654d52031f34788db86b4fcce27732521683d707872e809a2c9063ad0f0a1daccee237ef7d77f96c07ed0ed17a52d8abf8a09eeced6a159e048f404145b700a11cec49694fca3ae045feaca96ba2025f1968a395a9abeecf94609c3ef6d169cfbebb52c8c850f82e157a5a6884da06a0af33789ba2c3cc4f714038c71a67466d1e6533f5c864e22aaf6cb53432498960518bfc241b287c45839279fbd2d0d148025d18699b4d2763c02f2491ed015abc383845894c667b7ecccc649c6245625ca5c066c24e45267142453575ef3fa903b8e07a882a6c57dcb6a3711d2834010ca35d52ab94563b45d2da274335f217b23189a7ac1905b9cba5ab0407abe255f7a7f8076a5054ec9dd6406544875180bbf0499061851d35101af7b41c435c97952ca12c49e7c06c2bc73d9327e1285e0c613a2e74aced60467e9e106a11870b7e5432ce0b7da0457af404ca8fc0123a7828847360990efc5172dd2ff83423451668f3a440ca754f3b68ec86b7b7f347af336b1bfd528224f952ee6c451828a5789d40a381b48d40c0b322c3f54cad7ba33de7b66d77ba7354ff08cda1f699fbba3dd70f694c4d84bd0125a548c667b6ee45e54cb8fbb6f519140e11b259ba799b152936684e587254d0a8a6374be1bab16604aa83e08c1fa729da0090f6e51011e7f872b92d100fe241c457618a9a0bc29cadf87214b8a8fe301fdf3c15d3d8a34d5e9aa5a7a904c4786be21ef44d47f42259e8b2021f2624c8fdd6ecf496644cb3070a4e8d27bd25db386cee017bbc74a054fcf64fe09eeca9de816f9e6ac58c8527f862f7ad9825a86453575fc3b1d8038a7a3296688464cb3c8842e32450a7da3dcd869db1b1e05cf1fe9c2781d650572c8876dd5fb9bc6bd56168bbb848f696a0e9adbb8bcd9f8460cebbcac5139d13edcd5905b3f201c4e2748a2591d786ec6a96c9497bbee6e72ecac014b9a1f9d435db282d613dbe93839ce110a6f0b557f83880806123ef1fee469b89a4cafa75f1583ea15a0bc43a2429048e47801aee4ec96c991892fafa038a7229dda37a7d181f86f7b3a6c2b9403ac0efa34ad658d8b8aaf1092258e972d05f0a5ee83b36b9a0742cc4a40aded39700829141af0f78bd50c834b6c4b6dd0ee3e286727bee3d04328aeafb5fabe362c0b8e2b44350954aa8b7f431c95d41a2da0451791cf0ddc0d3fcf015dc7ebc52b5210ed898f7633ab1f38aa8f3e1c62d01200602ac15e0d0fea6413f5ca83b6e74197e268b111673da39a2d3e7cedd890cd359f5e846990826760064f0730d964ca22728a83399b849a0348bcb505bad0e363e4a147a9fd68f16910ac81eeb1572d0b40d7c62aeef4b7582119f26e9e21959f22de2153a3a2798ea3492e1d9a75128a21dc471d789cb67d5dd6de481062d6558fcee37ab98069502adb1296e1921c0eed98efb3c0df8d99ac5a731647934e8147939e04ebce40692cb19368b9df4d4ca315f5018e14a8ae841c8f14a63170f4820d4b66368841116f8d95bd0791912967ba65add3ecea8331f3bce221521ebcb1ce48e8a950397f7073e742464ebf758207a8ea755d4612cb1bd169be3fbebcabcaf526dead8f3fdc96044bd19ad9e40fc5acf15b966306fb5c10e6e19c4a7f606b7be6ff789648c06ef126c1ee404646077bb2f07b545d308bf4a27187ec151543e5f84e4cd66bcd793e068931464433aec2bd653356a3fddb0e5dc0705ad58d94a9c25ca271fbdd46e52e125ac46aeb772ff8cb3d8b16920d247c72e8140693f886663611b1bdb6acf19bf43e68b840ce59f8767ec022c057d8599033769c74bc7ef2a0584aaec6e2cd7fca5d0a41df8c64829ec19ca084faad819c2cac6a82178c6688954b58f58eae0b349869523e157d4903e7c0b32ab7c1c53cf37263d065a04e7bc7cd662894acb4319ec5720c0d53fa95684670005a360a651f76a7630a822cd5c8dc746beef9daae4b76f8db1d34cee9fc62342c9f9dd2ddab7b2b62075380bcf042bc30a54549a05864c442a82e4d8e9a99d45d1624261b8c46a50c169109c25a96509795961ddc6f10fb97473022e56f1ea545450e643536e478c0f489fdfd4850f076962da6b002a1f240a199fbfd8163b4c8acc362d830ae9958d0f325edeb0302e8ff0bba9c150ebd25e2dde9f28c6bd98fbdd02be3cc956822394388880ad4f2942f75842f759bfc04ddd0710a40c99b4484ac1d198eaf8569a245a0b9ee611f50045dd1311243663bd7c4e7da51f7b6372bea169177014d093accac382cc6794ab2a3d1ba30bdaab86ff8b3c3430ec0080fa0f30105101d01adfa8da4f4951d90c3f3ce21debebd4e59cfb1844d4e17a371816be52daca4315490a1b138961e24bc869e39677ef43d670cd35b46a1584b2608bd04ee4d2c3a83a747b11b381ebb6c0e88eb5a598aa2e6bef8a51385a61d5f9fb66a23d21a02bac7da942cc5d65eb2cad9b227bb58c4366cb1da946c29ae561a9ead49da9cdeb60f947770e612063b16873ddcda88158fb27cda57b9dfdc1a987189c603fa01092764bc8b66be813ac0a243be28dc0e507c1e041e4ee8549c3a438dff0e49e6e6f59dbb136c90ad61edad187052e1809b0e197604f1a649b73391ec61eed5ced69b1a5f0c96f44c0cb8059c9ed210c30a65952560ae896ee52c11c892e2f354fd5a051f68a5afad04ece404e056d7dcaf34bf5a5923fd5e3e1770bc60476e6a7d5ddc21da2e8075e041fa7001a01e6bda9112b181b66edf4fea4814159c4e1379742558f1a00f002229c4677d190ebbb135bd7bc82d030860773b28bd7ed321477ba26a01cfde080d7c0c2e467bcf17b0aa435b0d40eb05bd283fbaa1302ff8bf1cce3cf85d70b501f5c7f871c61d2814b94662cd91b6cf61a407894739bd5ff3c9ff2641d6680f2b71bfb1a61866b7b1ee761f7c0622f67e29b14e83d57a6652b4fa35a89cdf102cb53071dba8c2cce0346d2e0c5aacfd87923d341f9200b95ed49e8eaecc7407e383c805652608977ddb76bf7ae80d734ad3ad1716f7a049365572b76126ec625cea24a75407c13c9ca8964e24b1daa47a1bf574a071df5c9c713690c551221addc68cf2cb3837e855280a33d85f84254350a87a1cba15c56984e071108e7a6f70986fec0d4257a21c823848363c3274f4c63f0f16da2577689276683a415b76b80c11bc66a3591844ccbe4c83de84870cf8a021da178eff95f5123d2acc817f12fca9d2b34523f48efed983127f6daabb7f7da81088338a60789bd9e51386cf33e399e6e0a85a1f2f6b9f77f4ee5381299c8431ecc31326a928afe94dfbaf0cf22491a78c00f178f550ebaf65e3d74b34e55d9f8936623b24da7885b67a8a2d57f212db504de3fca10d230ccb17d72e3c9689fdd35a3cb48988ab1929a7828d5f2860bc4e9c26d8cb621b80adc596e14fc8ce9418d014d481fcea00290d781ddefc89c845ca1cbd91d96bfd25a5becf3c7bffe26e97b14917f05d6d39db0e5fad6ec1129ad0395658622c779d41951421289331debbc7af0f60a40314ea6126d8db210f99778d1b23d6a2e1e9335685a47d24373ac0dbef5f78f168a721aa77c07cb05126bb61b72a6c56a759ece68573cc691738978b9bd7be2606507a6c1c4cc9c4ac7f8b4f2036770d41b6dc498b65ed9f0eb0d9351dac9259a4ef3ffe4413095bf8614624fa38fd17071a38a05add8e3781e14ca6e69c7515c80e2ef141f8f457f38e2c026b4b940a1f91daf1a14108c2c49a19c6f37190588ef565f9ce972bd7ede2e99b5a694ff09030ecc91c1d8a9fe2f6c9a1aaff22ce7bf00ea7942220d007a37c0e85cb084fb77544b883aa0fa2d5fb75450b7e4bc0bb7ef5e1ecbb00033b878cf0e2956c7d5fbb9ec8fdb50f17d0b9c5b9ddbe13beebc3ac6e864d9d55b4a74ddcca6241a6b494f2195255c8c6f677931804515c887a583888f46d780743884be04999218c6d8c35e1cb30237e74c8fcdd18c315f14af9b0260ee6a5e38fe25b0bbce7019eac8f2c2a012ef8d9e04f48e51e1217e018e38e3a2ba5104b09522e35c5d28e59ceb25da78594903674e800d823b20e085ab632b3d8dfdd153e1980f83c2cc29fbb115e9501706a718e7155ad0f6272c2e794c29454f4d8675f50a55049cfb7177e04d689f75fa1dc26b4f970fee6ba02950f2861b31a967e073525ee98d4b0021e08429fc498807b4b208dbf8e90d90c63c187d1ac855fba1cfd8819b72455c886483a89acd8891dd0cd04adbf2a7c5d7e65c1fe4a1b21f28eb7da68593d5399b16cd0608db37628496dcb03818cfb29165350326987f64bdfbb785262eed21dfd44b8e24b69bb46e7d9775f5e6cebcf1cd6f5adf101106b8198211ce0d30f452acb51dc9d8372853f5d1bd989c8f013a270aab9a1386e5af62f1014c0316e4c9d10dfbf98609c864b8aac29c191cd5419063fdec6d5d8b073df2b91453fd47630c084cc49d0754301a7217ba87c63b0130d81d5ffcc6d48d51c784eb613d7dc6e11206e2dc867abce8706074de1fe0beef93192daba221290a4ec64f42c9d0cac9683cf53733e9ebe3ef502be5fc55e27c1a300740003d00ec4f71b4f6f65419bf497759e1c66f1443b5e5b9d0af4500c5aa744f405178fc59a80b2e8a969c1d78138bf16f166d3aac9fa135295204e5f3702af40c2eb4c2a40293569c3409e314fe26d6a95308e7f697c60a0e90ff3afcb3725e946035f7d63b4e811a8c7c1baddea022812f99264189c7b4e5d29eac7bdd523d29f7211f70c5509dc9d0f683d45412f0a99f47b1f81f914268bfc25ed8ab817e0fe7dd922392c9978cb4b73d004be14346f75471b8c6796fb762af0d92b6d22a8de836725f6e622072e16a55a23819baac757806d9819060e460827bff75dac7d2fab09a7d802015d29ec5aad7122708625324820adc2341712ff202834e6816c0ea9f45618490f42c1bad2859d8fa8416938a4516ce3868af68a2eb88c91baa33111411a17431ab938904be567c3f78c5005332922fb2abf6741758afa98ad8a4b848aae607e307e3ada350112841142078c5d665a5faf01610ec0cb3dfbf6e92a0ced2cc248ef19a810f281a46d2dc2fa0d3ac22c41473ec5f25f52735bc6572f5459a10bfc71100c7de34d4cc8dc2d65c51b58dee52538e1f7e8caf87fc98177706a9a68a343068d85e3d18582fc7f219f5c818a9c5f815d042c0ad1bae8685e050ebb451cd405073e5783c69d0982b6e69e2bf0eb498033efe81a5849121d4f522d0c3d3fce7837222194e234ea199534fd51c5dfcbf752952bceaa165fda03686c6010e394a00768ed4eea813261af4a09d11a6783b216d5884efe67e9a54ac3001a80380010289c36dbd3b49284d7f9019918107a166635621c830f0451b7e8a17638d1fa02696875b89bfad1d0c218610ed62fd904e639358096ad4b202afb3a3864ac76eb9c2accc861d3043b89453ba21d9adaeac5a4149058c96bcdb2750490f429b02bd069374b9d942f3d08c7092fda3eb70e54c76debf4563d74a290e69bd5f91e8ee917331ad633d661ddcd59f0ee5fbf8c898e90a183d0f5ffa643fd81863310a3c4e6d6cc46e9e7f3e4ec90be454b8959dc8d90b9da0bf682790fc39709d85c612928e14338fdc14f43edb718f5b56879b7230f77540b9f14517b5c2a3455b4fb5fec69bd1734a664d4f32cee58042609db8bf41dd54cbe7dffd4ab29fec91fa33f0d2f2681929aa0ae4ac37912d3663b67cd00b9413bafa18e3a58182aced22f4486787a12c3dcda8874481b97c2a9dd99ba7a512b61d2af91b451ac1a69e3278248f8da1aca9cd7b5167867d5b12524dc6f73a8ad508da8360e6803bf6e09bdddf14211f0cf17590bed99a30bfb8fe0753feb7ff946066c0417a3a6c61b3a3b531d520c4391c359baadf5084653afa55b81a26ca50e8c95f5b4feeb4b31e3fd3f7905ffa54756aa0ed99dfb5a3a29b323fe61f5ec262e102bb5495f2d13a6c9d95f25088cc31595c1d1103c8ba7ee6e36dfbeb04dd67d6b2a91b7e0bff1ebf6eb0a404b2783c596fdcb279d400d40359b9b38ca421354474d201f39d68fbbc7bf8205cfd45e12d6a62ce1008d02ae4b77672b2b360136df181d67b700d21ed42f88473707fe17dadfa1fdea9a3e7ac4ff41ef0f41b84ef47b9729ced02a2600bc47feef186f18ffd61c044f007a171b7b9f042f0abf30172e4e8c79a58210b9c9ed7e9357bb364d4791070fff8e84fdcac387d64e0d23ed7d061216c086c4008b0c106810ed86b7d9f5731366ef003128c205121aa4b779aa3f88477f3142ae7bead435f6e97e8b67cd37ca0b73c08eeb30f212740b7edd162c2dc6a54a3d7c43e7203309fd4b545ba73ea004024c3e13b714546eb67064065a5f9bdc65fc3aefee9b7177fd29573c465bc42893e21d858cfa0d9bdeb14a780868a64f91e24c8898cb1c55fb501942e37d5c8033d179d3649b5c6016ea0ce7e31321f28fc379a20b248d1413a64bb3c58b2188d0854474143cb9d87a0e412959f6a2702c97ac5261fca9eebeffb0332601fa19e0c53e7347006fe28b3f03abb37db5bfee146977556240858cff799ffcc372109e55927fb2d2409c8340dd7a1e82268d2137ca6e7f6ee6f2f33f099b0f7f80d2499e90a3277ee8a95a85f475b13b880bd0f499036a7e032d5d0fcaf92e888d8d1a59829aacf2bf54760239e7ab654578243c0e486ba3990b7781a3c2e1be6009b0570bc52322d151a47ac3c81f621a7fef81e02a940b1da4265b8746dc4eee0a9d46e8a226365ee504a957f8dfd06e8f747b3240abb2c82a61143b26d5a18eb94b12709b19981e868cba9f6e300380051a6fd5ee93ad24dd6b02213756540ca9dcac02e20ada1074be5e16c8ee54fa8bf2a83cba026769ff446cb60d9f808b76fbfbb606775848b25792e48920ab877b8dfea58b49ee42a7a56d2d1859fd44c4032b1fbb5c30fe3424811f8114ba90eb18d244845799cfc35ce09b821bf8f0c746e318ba67d6f2e6d5f27a05b58abfa5355e911f1ecd22b2fdd65b938c5a003d55ebc9bbbe2870b26823134eafbb73db960fd7411173d3f9686744f465c56ec3e79b372d51ba57214b07e22c44feedc23db4c77169cfe916055a92627ed051cee1e92e379aba33d459d76f16d6ec0f5eea31f8dff61588e32801eb14b96856d9603e9ef779c66700b4e45d4bea163dddb1dd048cb67cac5212ca29a1223beefd2427bcbd078ad8310960b66e7b6327f6564d364c33007a964624ec0a3c1372a20532d225d140e84a77ab9fad157905484a6d69eed76c224ea4caaa0d861bb09505fa422d4f20828b110d935ef578ec7ca1ae481d8455139d47af3409a7c67258c7d57e2192ca0d06150423d86d90187d34e5824430f6b5948ed5aff893a943c305d99d013b0f6dfca15071f6d09aafd5464ba4b3cc3a37d5b5f6a8c1ee9a3fd2c280f576354c7240cff36693ee122a7593cab304ad1348006df0ae6c3243d5a245aa1294066f18051dca1700c4efe8d7c668cadfd2999eeae759da8fb1adc43737652f611746e10f160b3647cfadffb0c220a7a177ccee9f44b4e1fc00e84f8ca748caa8f0b0ab3901c2b8b60dd848a5ebc2ff6ef17b1521f32488154dbf7c5c90122dcf4fafd66b24cabb5fe8e2b40c2e4f57832a7126f05d30850e31847a1ac3ed5a99ad34da071fe59f172610f273e842fbaf64ea7f8abed461c2f2f172ecd908d233a99ce2936b072f3bb207c1af1f3199004fc6eff04fae84d85f603809b41fcaf939c33f986280ea076dd76d5aa3e5d688f23c31fed49f333546413696b898d617d751f1d1e4292e67a35a538599140b75365f64453ea241ea14c52f5987127601c27238e8c603947fbc27a704faab9e39b69da6c9cab21970cb87afddb776129ea79d343f8e94f5a22680cf53ab2b81cf536aa399c013f344f25e26354dc5aae811166959930b77662f90adabdf11e823ae1d2cc583cc573368edb69782958aabb088c58675a71c3e12d9fcb1aefacebe29a4a8d677b4e649ad04d6c6014720518d070417d8c0c659e421c3b146705f887ca694514f8771582f6e244c0a4b2c521c4010cdc5229d5ecac98224182909df41873fb7e7c56490d835b116bd3dd34e86f773ee850688060cca3b51a24c30d7e599c513e927d5cdd6dddcf50652d689aa4f92ceffc4e31005df2b573d1f053634cacc846b1d190913a5bfda44972f8457307fa4b601ec2b3900107f9d5941f0d0b019ace224afdfb033415343eafe40e1c4aa36c51733a3d409348e5503ed6df63c2e96896a52ca4c8768934efff532f82c06de2f3d8a0e2e80aac2280dabc4c598edc97e4b1113b4bd444f17d2ac594528a66993486088d36c1e1aa85466e34b472b7d97ecc34ced1e9c4dc313dc0a5a81c7f9aa7e4d35ee6a3bf4e6699d40bbdc3b16f904fd8904697e8223bb07e6896582f7c7ba11a4e91c81eee8ebc578033b800036a1a7833248553b89d1a769ef5f2d33a81291b7cceef1c4029b64e3a978a400e0e4f6a638c1129516a9cbae85841f40c4e61ec25b53af6a4814acc303aa8481e76f024f63dcddbaf446de417cf40fc1b51bbf7d55df9ae221a486fabbe6021de5aad9f23d631d39e6c1109fe3cc3ee9fd74e91c33cb270ef485e0efdb1b499b9f8be429030266a71cca454e087198e204672fe292387dd766f0bc0ea4e926d18173b73b37c959cd0cf7c404b13f89743ec4451ed9d819a4578e43b4093c486c827187295eff791cc292564fe16b556902ba314ea1ef1ffb8c86309c1a95838f32729d154caec3c77aa98ab7493e39f3615ea45ff8079d9b584b12a838e650d13d7d7f0f54d321a64c2798ba6bf0b1c740d8c6911e8bc1cbf78c739fb5029784ad0d36df384b54e546a2dddd96082865c6c1a50e971f586ef109a8fede4515f378b17d61e81787f0a26a3b892697d0c82e3ee4794fe391194f219c11401ec750e8ef137284dbce020e0848d01b65dab636e0020e73f8094dea5fb3747a86b5e59bb9658a6b8e86a6b2cbcb25559288faa99803dd40eb391d6df478d1a42861a047f6d4b68a0ec121763f17cc1d1d1205ff3f5bf7bd442b7ea7386ba46dde7a52bc42088e82cd5c42496159174821746a5e66c447ca3ef5ac5e08a9a9facf6db1b81dba556343e2e6b35a3b8124e506d4d1656fb73f7fa0ffe3ac40ea0a2ad17cebd63fe84d9531282224b49a52b70ea61366f9c671bbef8ecdd0020519bf3fa688255ee19425f109c13727b06d02d349f436aadfe89074ed26424e26a77a8f2d847ceb919214911f87fa7c87f8536f082a6d4e9a5d07eea0ab61d8cff04caa40fc4d20592c3097790ae10f460a455c781b1b6240432810941de00996f2aee50b27313a5d6835f2e9eeb4c2ca7d6f42e284894a438062f04c2555a5b8d5c48da1248b7fd4f4fa9ba44963054e5ba72b474e0735ebb597baade056b4b9f915537571ca807285e9037d317ce7cac50c0af1b330a7f8b4b0cea9e2888db8c5a9cd3381b7a3d737100f8deee3f6d095f051c9e70183fe1fc432a49acc4ebf053029c0f0c484dadb328f1304c158b6fb3927cd07a7d56189a612620310c3282a7702d30ae9541ad542c011646994e357212ff3926ef85dae083cddee4fc5d2fbfe9a2cfde68dcecd05be335900e977586707f8434e15054bbec70828c5e828eba2aa0c58be48b69ed4a34ea4ba7b7053c16e96226c06ac59e77b4430c567131e1d517c9c56f021e52a6a055cafd338301caa5dc6a3919bdf9469c6953571c7ef47d30326ac8c692d46a40dbcc4ce7f27dad99d95358d36207a37064f8434aebc01399d0e3aea60b97cf666c57f65d3bcb57c0fa82c3179e055371ecdee9c170582dfce0524e91b160b026b18c05e0031af03c9014c095d902206aeb5d7a0d170d0aa50c84fe5cb1d9e35d3bcefd2388ed722a5d234493611f5efc5b6871993221eddb4802e70ff45f17f56ef3fe5b1be8d45f08ad16e2dc4b9b20f539afe39cc0968ff40e0a8e56fba9d12d612fde4a3a16eff78fabaac27e44099b6df274ffc9e4c65e1648de5ac944a8be3510372a03915720d2e4925584c1b4731550f2f4770e1f3e3d7744df12e98a7109ba4b080416475ebb1616bbd58b8db70abc16a05ebbeee9b98944e938d03ac5cd6be0407ef002952184fd81e3926589e2bf391069e69214b1bd89b4bd9a289a014b8d11c9e0cf709ead31724f47f515383a1c34ccf8f3e55c6d30b2451e6f78bb2bf864e11f0949d9a0e464df2c688cf9b6ddd223107b6fba8d459a6792e5b2ab5634f4580fb22503185dc9a0ce12e7cc653f9e32ac046aae5b355d52e58179834a00a7f083603e7235d6c7c50d4ce42b45d35d7b104c2794bdf3d6628778348b7ad8e4546dc4beadf40a2c5c6c5a8b4f4967544abaa42c0f0c9c016cf5f3c10eb66c79307a4df0c185400866d31c925a70540cf67c216df9138539d42dfe37b3bb58b9d8b37a0f5e85a5dd7e2ae1c92db142c52fd021f5f27922ce08900a64774c282996b1282c72f136ffe13baff0618a81a33a4b7734cf4c9e1f073b62a135dbc694f55cb87c093e0b4decfbe9668968f96682ba1902ff7e3a6112bd5bfd92e860fe29eb2025d8be9b345d6558ed01b17b886087f1eedb948f2413a603b1c9c788ec4a96cab99baafbe682b7dc1d350ca2c5e6cc6607c28a957b80aab192439663cfe793471620b94a6e97b7950238ef75fdcd619e8aaad72c53e312b2851e123f230cae5b6cf4ef626c232ede29a5c719ad18b08e6b5cf44d9cf11d2aceffe01368fb539107cfe0f8a6485a438a1c65bfa39a99682d5a22a16a05b7b165371df9cc753a88f77047976f4357a4f3125f83edb391160a4d5e73f84ecd003ccc0425aeb1c8fc1be9ba7aacb86bac921d5f71283a6f1f80461e454e8a0f92aed524a0275522bd23a1a68b0a96ee486387482044bfb903dad3f453a91f35945e3d9e51378b05559de028fd5f7bd2549fc6b485957225529e64ab67a21ac0be8cb783f247cab710a7585dd24de78b7e62e59ff433520679910a2396d97fec52631210cfd13eee710697441d6decf28cd56338d190356ab83ed8bf81174d4c20b9f78dc8a07c6209dea2412d5c1dc00f92437cae825f87255963cc80fabf66642d43c4781d6bcbbd15baf0a2656c285c60194b97c689135e7601190d3258a54944f4b596a78fa11bf29fe99197e68b21a33056de6aad5d7e5736a6687a81ab9ccc8206d461f9ec39554aa254acca6864b957c8596ed3476e94116e6c4e69299ae68afdf62fbacf334adc75fa77d1e2e0192a2f2a2851d2b366052c691052c44d689674770568d18a6a5152b1a38c89ac6fb4cc8311900290619ee4a90c7c8e0986750650f3c9d49127a6ea9f3118076b6fb5bcd3f2d7aeab44f715486902381d6e265da02ec0cae4a8619ecdade87bb6d3c239b2128a5c85202588dad9e7acbf1e7c3d10b59d3afd2098f580bf2e5d6387842a89cf5a8d44b7cc1fb0991e451c643035eefc79774b05cad8177289483b9e93fb9f041ab2909e0a71fa5d9c12fc602d167e6ddd07b15e18adc16fe4cecbb21ea16ac469b042d89cba917ff404fa4bdc4de4c8891e3656383f28ac981c92b4b1ec90d136641983e36e9bd0603d396627225d8fb9b22f4eb58d449ec39aca5321aa17e2e5d39a8caa55a37b239c0b3d0caa094244241de648de69612a63415e0c85b77732e2a82a57928554c14eaa11668746ac2ed42c23bfbbc09a2c86c5bea13aa5206e95244c42ddec738d3486538c7387587403b804186d2065045ac039c3ae8d62fb72b40d484abadf0a50d31067ec00d3a2340d0c76cc36245974ecf1f6086ce4d419e24b259715197f655705f3c7926bf5833df96eefb356e142a541734ce4e9df2df7a599535e4bbbb0c1ae52d890fa11cb6e2502537d30cff39fda9aeb512cd1183af7fc80b113a06f6611d502f33fa888e50cc986dd9b7bd30deea1d7a78014e88f7d0caa849779f31a3a563d8b395d1ad7a87ca4091b1ef81713b40be30a493181cc5f2e91097c87b34a468c46a422c50ec9a105a45807b171b142e765f0af1a8148be19058e5439b3bed73fc942e18e9d18b6bb27cfa8a3de1c729653576ac8b11afaeadaa8f64b0687c83c4a135fcdacbe30d3c044ae7b6ff437a06d3e2b2326bd0a60293d65cd23ca3f3c0f02e3d6b09f4ef4bb7de37b7c157f65659018fe98bfe86cdb985381062f9823f173150ac6fbe22262c3c05d3a02916f279ece0dc7be54e6b0a385c974fea3f6766bf1a1c32a37c26c73dceedf0c30ba348524debc5cb85c5e369406efd402106ad34b10b775ef5f34a91a209301d907a6c7210791b7b9d048c575d930412560c4ab2236c940d101496b7b43f64b8ee76e29dbb7717b48d2a1b6d0aa93f617fd92ad1c77f0d3b057e54840de24784b6cbeb8a4d04dccc545f67c5dbc39e1338fe1736b538602feace6376ed6b5700fcfdae201af4a52bfc12f414bd56c50d7a7b375d6ee8a567480fe3ef7a21dbb26f918d593434209a55cb237be5e56af9abbcd2a5ab6981d5fceeba7a296a976b58bdfa5e24ab825b7695bd3403734c3dddb5c93c9b9eabe28cb45ea30d38b6d6369da18aaaf88869241711631e45c46e5ee0c90cf6e17616e2ea1aae40baaf6e2f3574437cf267e25e23de44205f9ba2736e1289ee910cdd661a2b616f4e23311e938d07407a0549b32c5a2170d402ecffcbeaf1fb232a50d08f325f0d2b4af8d78b6bb935fbd4a05620064c4c0efd45bd714afc1c9affb59200e0775298a1687d316aaf53c7c3cd17ef74bd3bd126bc98eaf20e1aa12b1d0b217ccca6ec32fc204760b6cb9b21cd466994d93cf431ceca51fc7fe1b259120a44b0323e1b958a79d1d13264cc0519a3871493c1b5c2ff88884129f0ad95af42dcb65d3ec5e17464f19192711b95d363d69e17a0457b140c48c67b8604f24666e6bb33b0c71a36615e716947aab4d8e75784191531c2fcf0397788af5075bfb3fd8ba465b4d178896fb488f11b013822cbe758a0e00bdc69c65ccedf24a3e1043a4600a5a1573ba2c2e5e10987ab75ae460b684045968bad45d0aa38c9078ad1511bf1332dee24e1a8193411b6a8bb5e979f57fd3dc016525449545f7e567843ff3cdcc562313e8cb3d04d84d2b042194b511a9f30e908747f2bbeece4303bb84ea544b2cde0b0d9271f39b6f164248bbfd43a03abbabf1ea00a9cdf41a5bb90a24c84372677c607c3951ffa414cfc232df2652f5e703c4393607e94faaed06f5e29025f8b53b60d9ce1ddd5596d7ad7617fa49033f228e985c41ef0a10210d44e5bd3a9c28f42f4c1815ffd6bd3333b6240f76b3e487b476e4937b35852d866ba3421c5a0584be89fa7f5c29679c06837d1b4e344d383a9772fcd6e4390e4e567467aca8a49bebcae28fdd397229f9e2349410e87e3c20a1c9a353399c91e873f69d86ca1b5d698c8e216e26362daf03619ada7ce0ce449fe283fbe78a8116af8331632febe00eac53f633689f52845a7dbaf24b7a6580a8199586f2e7a7562e8bfa026ea0968eaf13a9f1ff97033334bcfe93b9130e64ef13ad7249c42d1decf984d107a894e6122f5f2863b247ce255479342d1fd14f9665b1e1d8848e07d268e331af366c77fbc6478f093879284ac902423e2809bd1263a4004e5bf59a7aab45196202f1a46db154b57e73cb45845143c4aab015f3a67ad475a5bab23ff89a127e0cc492d6bf57a3031237556de186a8c16e97c5ab69ada9e7573dd8bb5b4a0c5dff6d2a9cdc16c6dbd9adbe4d0e74373383e328ff21c764a32822baee039bd8f5ee1c7b4a261a91173bf455f59f7f8b9c1096a4dc104b34cd4662eca24489311a9502c7f3927f902187c3f62edb647846e045072ed5e51863b37983fab2c6e59a1ca8a1321b169ab4872e4347087ecace78cc740c36362bf93893d5ff1174e041f894789d9ff41652c2d99de3b553036f5a40b98e8904d14387661dde7d0b9aa543864f80f2bba3552f12528a7a0439cf169867ed4df2bc17a28bb23699c5f866691725c676a89aa922d48cd32178bff6d00dfc0360c10e77e2e2a10c9fec2c099d10093473f514d414b16691c03afe031650d5aec12af575a4630ae91edf17e662d17e9a4df29ef653a9ac0f9694ec3c6f2c15e01a561a0ed1e13d7a299545534031e3ceb7a69a2d15437b0ce9581313ae489a342620c0b33eaeef15b7f6289ad41a22b37195912c0f84932329d6bcc9aba5de951e247187b408bf6af45a24e289eb124ad5d6be4199b360be0ae532f368795fc92d095db0907910693b8283da0103c27c4286fd0551b88182da62f0ec244f957f27313a6b54a604224cc1bbbc12d92ad41f221ae46f225b998598a4cc5302b2176322ed66f2d7a4b472f5982669b29cd7317b7687dc4c5c86f102eaa0fa389c636dc311327fac55c52a2cb8a586d494bc7af3f3a1b9a4edd9310712b7a3180ece38acfe66b70c7ce8aec6f3e870da132f7eacae07809f667ac8bc8b7b4e4f3cc6821e553a66dd888a99519ca74c7c07884d5f964886a4af6e67ddcf2d9d09626f25bdcb9553a57b1750dfed02c8cdd5342da8818214a48a70ac6e818528370eea199662ffcb40130befefa2290749f2dd8c86bee2278daf42ea0e5c81ad5b4baf11c2cd43d5e5046b61cd7509abf59bbc87d61dd955018a1913d6ab3b4ac5e2baeee165c89d94b4cb6bd6f0a9091fe10bfd1fba4a8040e325a44b4c7780ed9c2a5eed498914118e916ef469064934a1464874856a0ca620bc300f43e4d1edb0cb078ccd7662246efa4db5edfba56a1436634cbdf198b5000b1f0a53320b1432c9fb12423de283c61f8322819a87f611ae2286355bd1ab3bd3b62737d37d3239685b094c47263684c781cb30829ad156bdc65706a344c25d7dfef9295c3aeb56ef3047828d7fb4c32a007c879efbc83c432b45a06fa9ed20af6ee3e5aa14d4b23ef2dfaf086d7b6d90981c25d598093d9887b66f0bce34ff313f1bbb973befe2f3a3e24e77af788500343b8922010fbf05c340782f958c6983a2347c912b6130ac889caca24abd3f91a1206bc833c5b4fe56abc79057f33eac546506141dc458e73f510a0946a2d0fe462e5f4b7392e7898e53829e83621a4935d4d0a4da23e25630330bfe7c25114f2b3514a916a51311b208b8f3e8c2ad635212c236f6244e6b2ecacdaa6a11b34d674dc789b28b52d9808000d83dc631912e1a8c658b4485558411072271a6b834586dcf84cdc57879d4f009792111024aef28e55329caec5f78f5b91dd2c61155862385341c707a5887fa46f9b3bd144da96f4b5314f49d6b7e7f8c0bd432d01a768278663c1d44218960c1bc2fe617e524b95bbcf75e4a35a472307ad3262b6446e0f06af27b41162552b0eee58fae972fcd54b8c9d32b143cf3d8ae167de3e7334c7079859d9a7b8a6e55bb1ab805f45ea88c42f00fe8e38a9bad92cd69cd72b61c576b972537ae617a42261a75f55ac2b41cb3badf96945d87014aca91c02c6c94a4fd6ec9e37645e3a204ba7e0d03ba31553a360d44a4e0284a135887af92f4c45f72501de8cec8ca59e975d8f20a710a0c7477b4b3b5c556ae79ac0379066631f967a3b2d46d3151cea9bfddbc9cb398d7e6cefd7ebf95559e16e42523bfd16f1d3526de4413702d1a325fae7214b524f6e3f74b7a82037d543368147c3a8b3ddfc9910797f6e934ea2493311ef8fa17f1634f95221972f7d034726a07ae46606f45444add84aed13e0776ed04aa473dba57de7b610b86ca823532c0176279bf9182bef17c51c3a61f7214d3ae9de37667befb637365c31c450859b29882c21987879b832c43b0a51ee40a8bceb667246ffd5ebab5243518624525b6425167038be56e7ecd590666212f2b60d28d29cdfd4b282656f103bdc4b449c620d147478917a3ca05f889e3b95993900e489579c4d8d9b0ca3299eda29fceca925c439bae3b790dc15ceb16bde2fa264b7f04496b46b681d414fa71ead765f25f6d208014562ed097102f87d4f2d8d54c14c28ef229d0c9bea721c69505e75f1e98b3e74ce089453163825e9a19551dbf6619dcc40016acf3415595000f3debcda116d8d150ac5842d7f4f7173a2df521994a83a0bd408c1cf5617bff34fadbcffc56cfc81c2a749f15d2d27cfe125359798b153696b83a9d4ed808a4e1b162994ea4466716bfd80d256d62a9400bfd5ec0513e80a3315db8d9a28aaebbd0f3ad41c888f511cb58bcf8c896e6b2ecf37dad2cd7634d64cfc2d55b9159ec2a6554220f2d82ae69b2653a23a1ed65437e12bae53629eeccc3c2f0e81f86b6d07e0a509cc08ef0d112d485dd4f0e51c11af27d535823a3c813971ecbed6b40d0b1a9bee7f94f13b3f4b5be416c05620740a02802affaff86141a59980353e9faf5bcf593f391e0dfe3fce7960e5f82919da980722090510cdfb262319f9759d507aadd7ab7ef0b87955a58f90db2211ec10332df016b1c179e3c10c13c83f7301fad217c097b9e35eaf5e8b98a9e3a80e1cfd39b554d4b14dcce08a9f11ae1036a82617217fbc10cd495ee8adb7f28915334f77b016e5f9bf9c84487196729921211533f93852acce841f6f0c21c6ce0198f1d81b7b504dac9a879d013f9e86213896622966caa79880e2b9128b29242620330beba799f7fcb9aed5adab867966de27b656fcc3a08950086e530f2818138cfb8c965b4a16f44a1c50295e8521e94a0dfa9906e2c79a8b58f46a56a6a7bcfaf4cb75ae0cd558ff476307ebf8b1b7423714b6b0d86df4b85586bcb2e7a3ee33e8ba7a70c27d545597a2c6b4f34137c474cb9d2446db01c3221b1f6f2714d41d203f0cacb60d10e2f3af87f449beb00d045fa8b497cdb32bcfac437e4f668ae49ac00f3b64f4f0ff4125884e82e999a608e4a5bc1f8e650994a2bf19a1dda448867ee859e18abf9b0620236e911ce8a3c6e70407d66f9f8acc8bf231a0589056f9bb84c8559ec519e681034a86b429f0e9627507fdfb767f045b034f8178f0cda99d416c2ac9057d5aee0a2a4828d6d2822f9bb01e7bebdc6fc858e7febb9e92ed186fde12ee06b41021bdee1896f8a91a85b586fe777fd10927cd32afd47dd61891a19b45f821de9e5ed92f58357c57ef70e9489752d7c3b072481a5990e4fb98fc4babcebc13117b9fcb67487c2efbfa6a7b8f8579836027175c017ac626a23a80511f354e432dc85ff40445b8859e80246e4b688a523594649ca0d9ef6d2c588fb666d4122034daa4616aeafe28e1f3bde6f3724bf9bc5c661d5b093bbf9fe2fa3b63809c6ae4a8cbc13dee69042cbd1a27ebf648fdcdac346eaef69e8f73def313aa0370b2e91dbd5eba08e5c5b4c7c459475260bf1aaf6e8320e583a60124685f50e563863163a9b8fb8be75b5fc9a27b5e498c16859a556a3a781fed45d88eb2c7fbcd05083d7cf6d261348dd4c2466caec6688ab111aec88e397db8905327d618d7a7bde3e2faf4fd9e54218106278ce77539a22be41cc70ad0f01dceb570ef702efc28fd23810174563a8d07e9517a6824618f0d0f3d0a189d17705b4b35b0e1a6548312fcc89cb997d68ebca2eeff59c7370f20a20e812027e26833db2bb0f5484c5abfa3b4cb5d30cb82e74d3f3592f51465c77f3e622847935ca8395eff7dbb38183b9e4932f0b88edebd833a16c4a8105d005fdb9f5b6ddf398e0de97d38163aaa6b6f68657f30eaa703e080634f78e786b029aeb77fe7e815f25334e05bfc4eb8f90669a455cee7bd9f723e7be6c1e75a62619b2d6c60e65fdcdd2878a3ea8cd5d8214d75ab81c2eb2ca4572ce3a8162f2a6e5e1aa2d464fd9542ff04eee5f2ff37377355fc26e2db00a930239c43a0ba4d0aef5b40d1904dadd66d07fb07b773b9dc762eeb967f30f12a8fcad0ec96d02b26cec8e00d3d7baca1114a95d79007fb980b2abe1355ee48b114ea46d10cae93c860f877057f8f4d10161f04a5f2630a11d7d62c06387208cc56f7271cccdb458384618cff478433879be08d8c9e1ce938446136dc7178b1e050a893a7c67b3a2188ee2a3c71bf4058f91a06cfb88053bf60e0a45d7d98b3abcf0dc58f82f6813cd8c82fc332c23f96212b95a42e570600fd62b9e41b167be55d7ea9208aac9ec2f8b4e40f6eeebe14c4f5c4183ac0cb77e0ae87c8f3724d45ff56a49047903154c51a72dfd13964fb86bc12e291b9c1df5a620de3593c2ac429af34b3d64cd0b27932af3d1a9f30face6164ece7d8a5cf172da49527d7a0e551f5938009b2ddd2a960beb6ee30054b1c302858dbd5712e059d5639ad9e7bf5b7b21b7c8769c7cd7c2736d6dce08cf213014a157106011b3482813b74ffa7b8108c2353eb53f895d669b6256c16be55f36cc4116389103caa0159b9bdd07b94a0f6178c65bdff2adfd219df5044b2869c0e02fa04fd1c9a49a7d8d5805ac102b22f2c51dd0acfb5c2234c3eef4fe8811e7c01be11219a6a5b25573093c3386981e393d583359fb2bb11a9152f5d6f7be5871079634c2422937b39ba185755fcb419a317efc5d61d5af24008f88a0bff763b43fe1b4ed0043022a3caf228cb064ff1d45fa722440dcd1d28d2e560d8474a7a61498ab0f57f42e91b7ff4e098ec81cf44c5fa66c5414aa3e6ecae66f3a974bcfcd9128adf4126733d84a883fdba7cd0f1a573573f0155c1c9707af186cdc5baec1305be4d9479da77a3cfd2fa6c9389451cfc4a6308c87726cafb1f075edc403ceaa40686bf663c27a27d725ef5fe67cf9a65b6242e4faac631e4e7795469b601fabe1ba7e1bddfe29b3b2c4d02bc6b3e071bec974ee914100d960bffda964088aa2455dc6125f32c0b7a498a8501d6f349d4e7cdfe1d35f56117cfb4d8e48c364d69f6dee3d97fa6ecc07bd9e0564684ace029ca2d00cd8c7a4a2f77775c4d96bc011f4cd60d0589ad4123d32d92c068abd11c816b70f0dc13c18561e5aee728bc2d7ce00c35ac96506f478e8a8c98020346fbfb8fabd01d79340d163a653514900edeb1cd3982f47a5ed1cb2b5e6c3f96aeb301b9ef405898118b099738fba286b109479b117be93e3d9780f1e15a6c166f9932699cf1b4099b1501942d8550ad454b00c5ba0db6824420a6cc5b5b2133d5dab45254e6eabeb06dca5ed0a967d7cdd2864bff9ecf71e261181331079e2c050acaf15ab5cd340182b3043a2202e76cae4195dc1a298d96ce64d9d90775d5148b9d2f28eb26eae13166835b52fd63548d37db984d19d4800fd95f4188ffc3a9664830e8c0c5b5100a55786df73872857e337436718dc77cad0cfa28850d271bdaaf8e1ca9e2dee2bad69d531128c0366309c4146121fe77878459d18316c4f10410a74c50421417da8203bf74c62517e72d676c617198525f5cb3f2c7cad6ec4e27aa0842e0480f280a1f5567b1d93a142631c3a45dfb83aa203c36ddc3aea2b2e8c6ccfcd5bfd5210599a6577f876f6816fb075eb10ab6c7d32ba41694cddd0c60ec8d148c66c8fd35a71457d781900be71a42f3e35b990e7357d62fea18a09595401c9898718d3404fce314ccea4866fb06577e81f3368dfc39d76990b46283d92bb9379fb1cf1a9264fbb317a16db2d57c805008cf07e580e1ca4c726c80bb2fb19d296ac41d96d2bd445ce8f5ea07ac52ca3485e22e4b65d4ad2c2181fd0c72f8253b9aadc5a69c91c25c929c78e2050c9e38308f8db01ceda20f038effae3b400ed05a185b9af887490ebd2f5982ebfe623ace5a8755d8014fb80f90768774d3f8991a4830640e25df72cf466eb501039af3a3114e9c49b8b3776a59c0187c47622311161bcb16f9cfa27cddeff943878a3b6950d97f85366150a6fc0c2813662d1a7299336b10b398b5c9cce083741b6a4154e5728cff3a9b6776a7d3de8de82f29e2b46eca1110ee33fda1a5c595b7b14ccb0878c3b80ede193ac67ea11d990fa2af4943758f07b3d2ec11027ee572988830ce1b0474f2587447950f766e05c01871f1c787a98213767979423840baa8994fb9e88985a19e2f762035655443f7fa25fa2efb58246d0c8148eac22bd12c2c66d92ff6cadcf200677a785d96213d7a309379ba76a59e63b86de5f87b6be07278ad522a05073b414f45b535dddf9b429bc315b035fd027137a6aaa9b695bfd1feef11a9c106ce09664dc5bdf86ebf0bbd2c111243a5989b4486e9d5dfb1b127688c2d8330c6cf3bc6c071ffd4071fda797d70e98fdd1b1b3fefd58ac10461e31ff0b9a6dcea5a3b7c73ac68adf20c5ac24b59bdd14f09cf50a738f0ccbe0932c830ebda29eb7778ecd48434668ced005ddcd79f690d523e9310a1495c422b1e0acc2114c46db376c8445767a4665848f2d92eb37b07819961737ebea6d01bb4e2d3e3c733faa265b10cbfcbc402723bf2e18a27489ec88b7345d3651e2a4295f4c74856a1a8730a46cf6bb1249c4099b627b1c6eea3c22e31126f3d45bc40f02b338bf5c0c738d7fdf0517ff8981baceb7223b3cb4a0d94937309b267e85337778bd965e900e4b22e19f62c15b85cee4862cfa40391d3691068d9f17c84af83b9b9a17af118f0bff3c24dd40d4be7f7491637fbaa9636efd4c092b0f6883efcf1941791a3ef93a8b5e2c30a6aaaaf5b6d4a9645c1631b780c19607f67f331eb187fe54b1c3e18915bda146f7237828c9ca9b649ad2bfb0198c398a9b1c68e607fbf3599f7e3efff46a5ce230b360384f7ee16bea7928aa30e940eea95fa182acae7a4e6668279c947416f42875cd6b41e66ba7547f4db4e1ff8902a9d0764dede528c066c985549bd0ee592fe52f4af185426106244203b41f6af7b6ca98a37506cb4dd9e0b0d8fd0684ec787a4c5ed6fd716294889ad42843f4eeec81a9356323e55e66067b4692bda9255ac420d13aeea36ae29ad2f23472d82e3d5c7e82e83684ee12a70dfc9cfea21990d386f840aa02fa66df5af51fc03fd2bfd655234a296710c82aff5c5e58669677289ca73dcba669eb350ab104db161f54c96e6befa2550851423237d22eec66eae386d4e7c804e85b0bd305a90eab22952ce7a895eb1864341dfd1de9f8d139a4691da06f245cedb41efc28a42f70c3b73944e568c11ca7b980e4d8ea5d31a6340f51e534293a374b6664c50dee35468e0289dd619139af7989aa18f728eb52c8758d3c2106515566ad501aa7187e460b47e018a108e394e9f865f65b08f4350ddf1cb43abf0cf73d3f1c438fd0462601739b12b38f1bf1582c1153e837c0e7b4c3c55d95b02a62b9f8312661b8b5b82846e1a36b9079570b6397a01a56a1cb9969cd76b48e14cf7717d661e490c5bf889ec672c34ac828a7dd5e734509f9adaa01e064515bab4377b10852fc7400c9e273a0490b298bb32a5c60a835b9756712f95b96fb96ebb0a3fc8441189af63ef96d2ae0f09d1a73eeaef42646b65d0474e8d23a129ac54a654c28d704a4befbe8d3800894c566b93d01411ebf3d1b1741fdfbd505bba3ca778db9e0001e1c609463d2a88b74f1148aec98e90e01e8be9d13b38d82c71c08bbbe8457586f75a010786ad9add1a4f89cc489571ee79f01b58bffaa75279ee590649d1228d90cdd6bef72e9eb3b34c5a78f939509283100d31650c11935ddef54f53345e46080193ef1d30cb023b342bf34485ae8ed3ceeb098993d15824f6ac9bdc4c7a406f667e2ca0110264aeba648f990c5a11106a481e3785fef8296993680bf29e2eb906859016c9eeaccf2c882e4b6ae72207c7da511d67ea984b66fbdb28e8317f19bda5e1b430eae64e83b8403d0256f704137665158b5a0a0c95f04e08bb7d06cd6ac55ee937b57e4e51fe6c3f4523c2377483a3e7760c0da1b22f91ae3456bc6d23ce5ede0af450eed48951b94873868407cdc747468010254466f2db17249a59c2d942acf0f07021be681228f1abbee55361316429e1010d07d3ca758b4cbcbded7785d4fb8061c18a7deae642505277ae2c8f437e3c3bb30a74ade4c6bfb763ab23bae59963ad954ad7aaede6362159bd71337e5f84586045f9069cd170736ee5b35b4a55e3e8efad52ae4d1ca9a2291a107b4f13de59b501c07d13e3f64f4aced48c0fd2ef7a3402e6700429a8991bda8bdec86fd829ef0e8f8ccbd52f31bb21b3686ee3764e0fbbe8c0cdf2431d735ab4c377e65918942983bbd902ca46119b4019f1ab2d0f6e335da6550ad11d9f61b836ae04674e61046aa27acf568c98cc62b744ba462422e1d0ef7d276f8dc378c74ddad8ccaf4f0884155f78a0eca66594dcd98aa85c81c91eba1861e944af964b1cd787a16b3562cefc6f25bf1294d9beec14a0bd596e4765663e1e1eabeebd137d5b701dcf433b0dd380b85b19c70f8f70dd298b6515f43c8354241a7d595fb9cbb2c7369d9b8c78e82409c5d0f3ce5ebc3a7bc1152cf589bddb310bceeae008bcff316ca82ca880b90906ad7fc862502e206036082e31daa790f29411507ba819af929bb1c03176297c10abdc94ac9c552911a02c60a306de2409ccea3655e81138bf19393bf17b6e1de347f30b44552a0f4bd587b3af9847535b1872664204dd956194509281f82c2ad328d1bdf973863b6f365b07ddaa21df4bb6a3865c7d74abe94967a15591363660df74bad4cca05bd01fe12c34534b310644655c95072be7f018c4c43759a6c35f319c3114dbc80f1c236358e0bdc6409afe9be5c3fb299ad9be1812f2be051b31cadd2cc20bf5df16aec7ced391199376e650ff85eab1f91eb9545e9b9af11ce335cd93f7ea9d6075e89c914b6482da3a7745194fd7f0f2e3db096f45e0c7f0e8799bc736a94120f5a021376c8ff120d2db8fce9ff84527832f786f3bd38894b624ae6173f7e0924b16bdb01e2b918bb9de242d090b29ce04b7a6038080bd7b6756737ba7d3ede4b981106a00e4821ed331a320079f95394b0160c3c5f63e7b338ad7e1373def9f7f2da82b6c8e71f3c526d9964d6e6badaf17f3263837a69ddfc447511b47a62bfee83d82b8e15defeb1d4dfd0639ef672a051524b3d9227b48daeb2570453ce8dd4f5598abcd6d25a371ab3c9a1281da471fcb59aea19ab4f6a9b8d2917acfb1615dfb81fe421369620de877056602b1c061fa3b1bad8fb886a4ec77ae3573536d8c75fc8b8ee2f55610b880c2da8c6ccac77c45f87fe8b5b9868577a14d65bb40dabfb96e8f0d4a983c9a316afe5e0c31a36045211e752087c01a42c48041e5cfbe18bedee3a714426e6d8d574cccaa3bf633a69bc9b40deae95e9d1044fbb55ff70d56f92ac9d5943ed9d1ed24b90dce15beffef7a436bda5627b292c5519d0269b598ace3ae5bbd187fe46123674436be0ce7256a9084b02084541f2316f90faea662c12fb8ca8c3e2d236e3e253d289adff920189354b4c2ead52919e2c2c9cbf83381840c03815af4747ca63a0aacde2c2fdb2f9e2bd9690d853237c8751478a10a13a7325ff7268322fd532ed6b36c18326b2ce405f22d1615f9d6633416ce8988a17f9d582997371c74fa55e6df6527fb8842e3bdda9220c192f1630fd72b54044d9d0da9725dfa88bb671dda8b32df038beab56fc7ef95c40a405dbdb33e39938cb42c12adb5840a64b6d5d5de645ba2553d1620610877ea9e7a0c235dafd527193b865d773f5a7a7e0f10a241f0b53a50d57576a8f55e67d9af8393be85e6c999a700801109e206c943cf8c0776cb84071464b431ac6192ce6e9955b6887029963eea6e987f622a8c0ee623926f232d9895b1e845bd4f7f91c473085181526f68fe64841cb720c3fde132713244afc9985a1dc8f94447f1659a4eb3c4f9d2cd93a158ed65fa86b0b612610f5a3532d65a232bae4aa1c1792a7cf3bfe7c7113ab1bae223fc68bc4c8b97bffe574bd5ab0dc1e9d10b4786bdddd90fe893a7de319d17e68d76385afce8b5e83ee979e0501124d476ee7d6f8ae9a8701fe5e313e1f17b155bc055e1925c42a55562a9ab773569101fe27d1f7b6c0e92b192bc47126e8afea1887dbc8ab483fd16b40d81ecb1f8ac4d8f8021a827b822b9a266f28f92b339b694aea7be7b7b9b4b938e77bb7018d90af6fac7253097e5605d0505d0db10f871c3b437328ef46ba365964cf50153bf5538d8e7b7103544b4c1025bd60b3e2ead6a2605d531c2ea5c4a39d5fa143f42ee16569564a47ee7f8d98d82d3469f5478c02900c0801f68e605056203e2fe26c0d87c935ffd7a93b31d57a8e202c4acda33227d1b99a4cb6d5469fe30e1ea769d108d7e58e85b0903e1d94fba84677e111f4f9e8b9298b044330a91db534dd34ef63ea88d46847ddf787013f6ec7388f3cccc93283ba12f9c90f566d0da54efd21c2bf4efb503cd1eec41c07e38cdae76060abe6297fb2f9efbca77be791985ba09423d64fd16ef6a715f1995e5140e2e425a9cc4495c5665132e266c76e803d43dadc4b35b00cdec383bf92cdbbd3156b273a81f79636607c5cc3ccedec5623623179efd8a4faf4b493aeae9cfba572e17fd5c6cc746c5ebd1ce33a454c419f3743e3b37f09c22a333706f8ff42005bd0b071a74db42aa4a1a070a95245ceb67b760633073e46bf6d57fd1cee12b62ceff8a41af61537daa075056d4e519c028e93754f37b5bd5d4f2df33ef87ffa0677e5f77046c8f1a9c2cc252944ed941877388a5d0974059d0067f0966eaeb688f404b3694f50e7ecc11826f1b368e2fe0aeb0bac7dbbb4ccbc3f56bdb434faee403d0995572b5e3ac00fae0e7785de998b1f40c54a4e56b5fb58d733b7d8a41b1514cad00cc9953341654fc5c348895fe4ccf4c9572c858c06c4c992c8ffbcb70f864c8caf7e9a4cbe04768a614bc31821ed157930f47e66c1d51a6e1a744b6a23a32280efa2dd4a97eb89b93bc0c36745410b65486fa76c53e1cf50acb218cac63cb4c5ad8f2afdfef787677803f30fbd7c43e9b7c467b9e377d622c71a55bbcb39f411ccc1dc2fcce68777eb16c6397a172bd93462b23b8ddfa638bb413cc28099328ddbb4a5cc2a11a3369a11dacd65da5556c0e71d50c9e82ce737a5da1ce312f2a8b935261d7a8c057083734a6c91a94650578019cb3423f34a0a3e1b23e731b2923b0cfe794bf2ce8933a8d4c89b358d0e02aadb01214d6c3ebf6c066d8c919bb16504e17aea22eae74ccce5ae959fa359dfcc5d939478ae69d9f4072980a1cc799a879c5f2035d39d346453f6bd253f4f2078d23f99725729a4ccf5b04bad5a50431e9651689cfdd5aad2e55810e5c6221a70e7c54eef7979afb32bd93586dcf124a0b09496837b7787c0e158267fca94ce3352ff81520a06878aa6b4f3375904ec0b485074c0010705c07e96fca577be0cef525ea90fab47a5f0430110b1ca9b5a9504b638048d17a7f9b9d324d079f0041e39db152b92f0df930caf08679d5f4916113cd1a121aa58692f06a61f5ef0d419f75604e44046cbf02da02ca635b501819a70d74fd02d132627d018f23a5b6bebe965a9a61ce634092aadcda5aa8b5cb0dc983e4244ad4c0b8c0bc97287746499d02e0b77004004ad9e56482940e847eadb08a6203296408f13738b736da9349239b1089eceededc323706080625069f77f6453aba5a9fa5637ddb7e3ec97bb59623ec5b65835bde7849e64824a2cdb7c4f1527cfbbe85b6b5d9db8f39f28897426fb10c7ae825d2959236fb648bfdd1486ba9ba57ebd1e82f954dc24efeca6621ece4937c85fcec93a64fd6c44dd1a2d050caf7eedd561bdc26e4abfc85f30b95ab12fa9597b4b74ff2417bfab3cf1e7f2492ff42816d1e635048af1105cd447f62c7b66f42d26cfb256c474285688b44bcb3ef9b4ce1bc5148dbf487f3b04c2539efedc7158cd9e0b6ec937c68f98e391bd3da98dbcbbe6df369dbf7ae946f975b0605e8623fe862dfcbbeab5737c41c2812039e720abd63000b321041441fb0851e61d9b0ad0d06dc21c7fc72374940e40396aca7281705e5215c00ca6f2025e5533e25e610a13db8721a6a78c0f52daea7170c06702dbca35f837774261e21019939ef5e7d711f8e5aa1cd4644d96cd0cd46a4fb05865d43f6692fe6dcabb5dc3ee7fc084dda62d6087afe357349e58af94586915a5b9c77837630ded14fc141cbf75e60c0e01d7dc9c1789743f52783f1dbe2f2165335937ecc9126ef5ea3eb2577bd73f1070d9222b12f2efef08e3ecc3224b6e4229027e849b37397049ac486457cc8d973ceeb3d157be6497fced843dfd18f3a8cf3fee5e2bc6e05e390fe063840645305c4b0a10b4cd990b4610a4df3c787f662cec71c0aa38b8dc874137eba00cab229c5dcbdfada11453284f66ebe61e68892c40eae8f2c2c2a5440171872c2901946df2cde9d734eecaa3d71d4019a1ceee03ef67416ece9371ceeb1e7e79b896f47cb2a84d6d9f14e7ed0451a912df237ddb1a50b5b44ddf11db9793371e2eda93e8f5c1f0b30e99c7772925e4a299da54abfd259821d2e98a373da5ee48720db6f8cb67f8e186d14e9b1da3d846cf82a10c9863f1d70c90761dea96cb802810df6c8563aa5b3b8ea827e5d394104210a42b404d112444c102d01060615ddabc0203a169591c626140971b14c96085c30aac0547c64526c9739303972422410c9861f3fcf20f794364218028f21d8a7d7df88a221e84863cc5896ddcf9b679fdaa7598662f48a31da1864fec5533f4e60471114ec6cf9a222680f863d31068160cbc438c001efe0b3786763ca3b2ae30e1853e386f1e57baec38e1eadf12bbc5faf47b7bc1ccc3338e2ae1c568377f12642939f60cbfc1d18d463cfc882033dc3ff77dc9c8b35de41070264cf3f45eee383169233dffaf964ce5514e225fb8ea4ba0e8cb9f4dff329507a7dc7bbe93cfee4667b933de79fae6f57b9102fc55b554ca7f8e4c66fe007a5bd78b35354d0fb46fa49fa498e64b743e241bb48081af31d2fde7889c74bf777ececec5c520f7a3e9c4f228116027fbe1bf152f4926f347b7aae03741d6ec29c9f82f8c97f380f3f491cef26a536e6f61374997f02ed42768438112f79f15730c6073046bebc5986bfdca48d222ae8f972c311731c89976a1c624fe7228e9f5c47f513cbcb794ff284e3f1a653e1c59b114fd4f18b0171934e5d99bbd38c62d166866cd6d0654e9a48b3ef4c7d2fcaad6eb803face989921b92a396844a2a81c15719178d05edcf14542d055caef3456b78a3d8987c61ef39297fd7df917c6e4978f61cce765f637f32c23c6cf06770671c44d39b8e10d7a3806cb8e7672324789831a44b895480913ae3839ba37464ec59241d910baa8fcbc2e795dd7e5116247d09ec6418216e58898200a42b404d18de846148448091a4a48430802691ae61145665e8e8dad0bcb2050f6b9b6d209921eb54ca50a233be79c538820f4ec191aa9c011ca86457c48edbc61111f785012da36523c188c890fdd24a38c23782abc8480464cce3983306badb5725ead9105be852d900ad3626da9d43863c85d3dbd29779fd64b2b37aaf045f2009b42091c0060821e41a0e0b0c315745c3b72c4400757f800101dd0c1052216908310264085344ba76288d884f8834d62c3223dc820374147edb20330c6ca08b3103a6a4a63ea1a5b3eece8a637b6a4ef77033498b2051a4ebf21a59c10be6c8146e80dcc812db0beac9472988319bddc9792080865a00b7ceed2005de08b42a047f053cea9a7bc93f668c10b34a5944e0a632824a57c1dfed2ddfd8a98e4ba0f752d802d706b588a307af8013e8b97427b4a69829739e79cd71036788260ce399be4e00e11a40711d414e981872dc2e3c9be1b16e1d104088d5b0c64e9629434c03c13773c816d193b3d6eb6cc30f293f84be64f963fb7f0940d6e705fda5fdc8cfc24b868a36da02daa32173f117e94cd8b61fbebcd93c1caece6c178306cef7152756064e3f7afb901f8fda9bfaca957bdea55afea756e4550d0d7661828ef6f330cdf42a18bb1f5d9e29ff96ccca53c96656497f3fc3f7f6519a0c71c8eb82de7f96bdf42a6702762688dbb20cdcdf870f1cb1bc694ec1a7564b844f49111ced78f9f7ff5aa3f15f5af18b06b9335de05812ef57db371436f4903e8525fce00aea88fb799b8310f6f7939e10eea838c80ec5a558c4695e483f6fcadf7e45b36e6e4212339e7ee16b7a806da9ba85deb4fd40f39692ae41a68c2cbfc5109082385f00a1e540285cfe7907d32eb5ed875e9fc396019c35e07fd39e4d79fcfd97fb219d8cfe7f77ec323382ee10751e0647b2abc17181936fccf966d97be6ca1204d370841987d8cb949ad7dfa963ea49e5f5409fa79ab5f1a5c97f5d7fa4b29a54e9ddea71696d725afbfe425afeb92125bdb0c6c5dd87d0bbb9fb1cbfa7bef5bd8baf8d61ec8777c3df6e9ef42e404ed395a3b6a3b9a881f614cdcd025b6c096f97326e0af6e5397d203dd2ce38fb38cbfe430ece586514a310ee2885b722a6af0ce7f86f537e2beba0ec6603fbf05c6e49fafe225fb8c3fbf6f5ec671708bdb6619d7e38de18732f8afb77ee288dbe29c72b646cac19b5a849c8ffc7b5374902f2a82f6e2f64ec80d800de5c306e4988163c20e9322962c59b264c992254b962c59b264676767478912254a942851a2448912254a7676767676909c8067ebed70cadf30aa6c8f45474f7f99d31f7e5118c0aeb5b2e8e28a5a63b4138bd625ecee5f69b2b0e57efd2eb28070c5fdfa24be8a78b4175536510563e0ae31d6f7fab3be480a3aa2aadff9fb274be566f88ace40afb685f03d1877bfb921ada24265e5af1456e2637e51e2c4b7f0e872d26a2fb62e2c67a24d6ed295ba57ebd108e3a0bd74e24d26bec47bd87b3a14f7896fe12d5cd334eda7a6699af6af699aa6adbca6699a86bda6699a467a4dd3340de5354dd334fa9aa6699a7e4dd3344dd3344d43f19aa6699aa6699af651d3344dd3348d86f634689aa6699ac6a2f29af650fb2cbfd0b4948f755d90957da2247fdd0f28c5d2b0242b29d68a7625c152ac15cd4a42b256349c04c55ad16e12baa2519b44af68b426d1284d8242a333894665924ca39e24d3680e79a6d159634aca743aab14bdcc2f545ec209a7cc4abcef6e34ba97b4653a2a2b19cfd65aaef63569b5175b1796b38f0639f9e125b023db7e892c936287f28beb141a8d301551ca119c6d4f60a26d6e141f9a6d7f4565cb3ea9e2d929f9d1317a92357177776dcb271cb4779dae93974abcfd4b8797466fbd2b7a0f53f9f742263e18237789cf27cf3ab29be4ad21fdfce125ec492f9fb8695e1d9a667b93c726a5c871d34ca5bed44eaa6793509ef4d2c64d73ca21531299f2c826bd5479e99ff412e5a6797b905ed278a93e899e648bfddb84047ad2bb1137d19b437a27bd037113bd2b9b219bf49ef252ca93de4f6ea2778746913e923e2271533d9d744e3c2712e9a31037d5bb227de4e1a67a7fec55904dfa483af1a31da4afe1a63ad2b1106793be0637d9130d2fd958c14f7a1abc6423877e948249bd8c480fdd9248dfb9c9a658bc64633e89f4d04b36ae273d89fc82b4daf3649f3ba5a4e93aa552a9953459dfb7fa569fb556b2c5febdd6daa7a74b4ff6692a953aa5b6c598628a29fda409638a29a6f5244d18575c71ad2969c257a756d274bf6ff5ad3efbf593a6bb5ad56f55bf55fd4ed27453a953ea943a6dfb3665ff5ead6f2ad3594993fd64cbf7a391d6df6abffcfeed8f3e29f28905001cb77db87cc2489c77b72843b93ed8857291ae94fcd607b3502c9215c2aa85a15824ab5a2817c8c2502c9255ed6b96b44eef8d3ccb3e08a77c28a4af7edfb6af6f5c91ea4aaee26adbff580ba74815a7244ea5b6fdacfa96e99ca4c5a7884ff8b4ed677a62cbeef7398df4fdb67d6c0a7a6e4fdedcd56ab55ac158d4719e6d755636b8f1e6fba6aabc294fe5d08571ce3dddd369dbbf26b5b434d98fef19da7c57e9d78d21e9a16fe2a5136ff1169228f9459b7d95cd3e8a9a6dff32719daebeec5fa12d1ed9666e386dc9653aded9bf4e7634d2a72c1745930260175f2646587cf15dc9321723e062ccc4a239d3691dc05a6b2d026c0cf60016459661df8a61adc5165bd3c5b709c618638c2dbe56c5627c618001867b4d5c26d85e139c2de17b99dc8b312763ef9bc8322ebef85e2617df3bba24f0155d5b3225a024ca32eefba7e418f75e7b5130c64deebd18df7b2f898b6d76f1bd1f9b5d8c2fbe16bb1bdc34c7b8ef5ff1bdd7de8bb994cf16bbf8ded2bdd73451a7d3090717f537d0810bb27c72a8767cb8b919d7779a7d6f031a37038fd830c0de8b9ba6699aa67133f7adf501a22f381337673dcc35e4d81717b919fb1eb6b819fbd75b5e7cbcdffa16fe5108401710802eaae8f567a2bfb41661da3663df0371da3bcaa3c8bf6a9e011261bf38f279110cd196b27929764ce13eced8f7b4bffe439bfc16726e1e90cf811c2e24e7010f70e086237af0042b6cc10b5f38c285fc1c72b8905c0ef951b897da86f5e6a5f8e81ba20b0fc0235c60dc8e122ea46a5b1cde662e0703c9e9203f879fbf4d8e88ed6f01d9e292b341b638120f7e36c01c24cc41cb164ecb16f84e6ff01cf606cf11ed070835f6ddbedb77fb2eb11f7c4016567edc11e3963d846c7fd94342287ba45095080bda933d240aecbb7df7296c9f969565dc9f8f738cfb73b6f0f9f207e8b705db6590126b0f15bed7bbf9227a9652aa7ca706bfbd6ff9fb8e7d71dedcd6aeb08f316bf15b7f597c2f689d87a3b4a0bd59d363aa82d8355eb21cce32ec7b8d0ac6c018969b16a7a4caa22e195cb512b94732987f1975570b1c1a087b4316fe735f70dfffa852a9542aadb5d6fe33e79c73ce725b6d78f3ed866e213b77777729a594524a0977ad778bfbda7c4504ba141102ae709d6e34e25961cf53a312cc379497ac7bb51e8d9e3ea5d49d83d085d6c73ade55d0db8bada7f7adfbd67dcbfa6be1b7b297f28fe077fc9ebd676f811ee720670320001305571ae85373924e648d07e312e7d68a4d14c77116c7b9e520975f38ca4b98db5804506284b7fa5d48a3c89a09937d7ed0ca7fde5ae17e5c1520fa0457dfb2ee7d5c82f3668f37bf114762a2449c1e652e85e3429c06fafcf9b72c03e270c4ad715edcd667ff5946f696f33eef0f5968a081b2c9894f52447c874685239dcc1ff851e41738450dd4cd6adc90524a1900d9c91432ee0c45969163b464db13ed44ebf0cc23c015f53d09f3e6b6a8a83c51bef295f4af23ccc560e3bf6e9a18d7e07c611bdc22233bf29339f2660ec19b42f864960cf2e15064992b8443c99aa8516a200b0d3450363930c6534ec477685412473af941ca2f5c25cbc8fe1ac0e44100ac00769b8947ec0cc42d33909b2039fe9f39ad95ec2b1eeacf1d44d8ab244a5f970b86375983e39a64106fa9ff79affbccfa4a15f344f5c01e5953433e914daa2402b2807005ca57947c82ef2a917412e733e7c92319e7492296f3e4905d31e7499b5dfd3fefe1ffb85b1c29cbe4f7cf1ee619aef73f00866d6c1c7500ec6e72c8aedfc26616cd999465e8b40c10bfef3b65d37af9459d7befbd07b8305c03dc6ca6c686d06525cbb86f452ccb31eebdded55abfdb787675d4b52e0abad42f61d05fb0a7dd62692d6badb55cece5ece31316eaea0b01f0c9ae8f802c9362dfb0315dc7aed0892000b3b6f8452944287c5107ae3ea4e317bff87d31b5c15d22d64420f1def418b1b2cf386ffe2891652cee726f6d720fe932cb8a5dcfef8c3e79536b5c8f640d7efbde944132676d963391652e8723be7dfc25b20c9c719ebf9d285f41979513f196fa133551abce572abff2158df6ff191673d312f1bcecf858ced964d73a75769d38bbd687f76a3d1afdd340036593139fa488f80e8d0a473a993f208b146519d9cb8ffcfca81ebb7e8af7f99bfd150326c28296a6ab57557553df9b48762562d7b72ad09eff7594f38031b0421b5eca2f2410d0a5da88fb8289d0b318f20c724b4ed64097fa1768a6c6fd942c03bf7f28c7c0efd11f456badb5be0e04e8e203b8a27eb6a95436511555fe59cb32cee188d67a7f9b0118725b9cafa04b7d18723b173f8ac9d0edfca7df83391ae52df53dec86b4ca88e5559044a0bd98da556622defde5ab2be89ab9033445385130067ffd9f2817e73c1a2cdb72f62f6f839a0cca0cd8fbc32ca33cf6180a37e31381a4628d973e5c8d2b7b900b37e2a7b9d535a26f4639f0abd153a4c7933d800d8b045dd8428cd17fd2f7a8b4181dc5202ec8e2d5541198a0f3448c94a089f022840c0aa02f23f7e53d26566453970d536c7853327cb9288602217bc586457cec5c18c398070706157ba292a8e31d9d2955d4719ac813bff824a69ce8b8bd788a272a6fb42314654351db540131815c222c68aaea598d8cdcec6cdfaa605318c01fa069a2b0d28582b40540dc244bbc378f8c3e3587d0092b1cf949c4a32b8f4d6b8f4de193ab63c74ad36453ea04c9d5714d7936a53937b2855214fd88a0a6cda61e459d28e5819260ef0059509ab88296b0b74fadacab0aae367d6dcb409b36f15fdb7c6cbb2fb7baddc84ff6dcf4783308fd9b1b69925fcf3cd1d0ff6e7a685ef83c49d3fc50d2347b7e4416f326aea0ff9d367d1ba489d21b698aa74fca1eb92a7133e242f4b5f9499354dd44fadfcda6bea3e2fa84dad9f1134a88ca6602c1db45d93e3fb7eb294a9a343d49946ca12fa50a4551277a42c91cfa6b4ed005816e05e58046629e299116e80e8cc9afdf8b4a367d6a02d7d92780940758aa9185eb18a1c1a62b186cba82ad0376f3475bdc01bb6901d8cdff6c1480dd7c6da30176f3f1c600d8d1802db30618d832ff89861307ae6817e2bcc902bbf9a0ad831776f3eb2651d2a462045be41018504e43aa3aa401f5679da0f7e29e1be8623c351037af05bdb59d005d202143402ab84130e60630aa7a802384085325c4acd9c1a6a0cf8340afc1405154fca24e9c82eb885f8859a0da4318a341af3dcd0da035cb80fef3208da22c07a243bca3efd9ff3cfd18a1006366d807bd17b5ffbcddb40cd06ba0d7b40d6ecd559f0db4790e2ed20efa5b388987467d37eed0215ef22c236a9c4651363d988110176c9a824ddf9b35da431863c3fe4c8daddffb7cfe2b7f34ed23c8c8863bc74641cd66d9b0880f9aadbd9d0ffa8b65ed410f7a2d62ecf3f44d587f5d58cc3034199b6380583e1fee848c6fed7154c0cb017a0dfbe4cd0665d9a0bf2c2c7f38fa03c451940a34e8afde207401711786e52dee1b36426a8e01fa19a7abb4bf11bd1cdba33f27e736384ff9e2c5b09dbe9892d0510e1c42833ee85e3a8a721857b98abedb7c5283b8c97902c822271a6ecf55aea242f0f04d754a100152c2a644d874c8a64e82380542896c0aa14bfce2863158db4fa5523385f196e12de30dc3db85376b07e3ede2cde2ade28d624c03c77d85be1f62740408a185b1efcd70a5602929175c05d954e7918c70f4111960369457ebd1e83fb8e33c973653939b40bca33345fa417bbee3cd6f7e3066e73a0d4b7c423f7e1f75261698b0983d71057d0f63d2e42a951e8dfe8bf8c8d9dd86457ca8f6051dc238333fd1bf9d7e19c1ac668ace6053d0cfd404b2036ca1ef63534a81d8f46d7678bacaa3d2541d4f9a7c9d918779b97e946552ecfc3be2c93bfa510774d936cac3c8a61f55475c759b743caf3342a27136a5abaefb1fa1280abad0bf445cd06ee31d7d957734f5cdd404326b600c7e0ac4a61fa3500434d910a500e31759d0535c417f0b9b5a6153eda197348db3efd1dc00fb9ad5b4fffca57d504221eda3a17cbe859f985f4fcc07bdf6d735351a1b549b30076822f1dad38f3a60cc7cca4212bd97124f940774a1af6d2438da036ca12f4ae9d93453d2f6282a3ad9f4888df29ef6f8af4ba3b115e8b8351bfa51fe925be831ed417f6cba857e6e98a2421c45794751b6991a5b7bab028fa2bcc443db2074999c07fa3a6fccad3fea980f8a311f341ff4a087b9854fd03623fb1b719f88c162bd0d273ad274de279161c83dc25ee4bd5a5301ecfa9e0036d47e6ea0d7629e61ea6c10e7b1d060d15b6f9f1de70fe872ffb3f59639c9b6de324ede7ac354d8d6db2569aead376bc7da7ac344f0d6dbf5d4dd7ab34fecd65bcda95b6fd4866ebdcd88d29ba44183dc7af3fde158a0cbfdb9f9d65bd41bdc1fee62da13b0fd35fdd9135964b8c29f8e34fd6c9f3d9b4e0fcf5a535a5ec00826454cd4de019a2044d1f7812310d47e9c2f92828e9cf7525ffeed912df32f19238e1f2106a978471f85aac153330617648931c618638c97080b7afe03e20a396f8cd0a711f84933ca15c1c40823b6602fb6d6da6bb1c55bdcf7627cafbdd65a7befdb7befbdf7627b8db017db8bafbdd6886b995c8bf1bdf7de7befbdf7de7befb5d8a25819800a7baf11f75e7cefbdf7decb047f96b12b974400152b30bbf9c6019a43a8440d38753dead48c000040007315002038140a068482b17020cb0341733d14000b7492447c604013c7d22846411867085286000000000000002002434404000df27eabf1fb5458c19ed19c600707157641d1ed88dea560878cfd8576c19b569256e3a2e5266d0b4bc776ea3962cba2662dda0e1ede608203ca688591c740b0b6647063fe98636c3dffdfc617882b2baf9246efa4d21e4a3d04f120aa4c6f90b18986d27b4530b00d227e9e364ca0c0982c1bea80734a5825a9fee9c1d2951b3a65f774b57f127c49b8fe1e2e07054f006e43245c171ec770763c5bcd54ea4eb3ca0ac45e6054a925cb854dd8e9325b8b42135206c876732aaf3eb24a4d506f08a333cf2b503f26d3cc210f62e8ca66558111a6af2f438d8f71ff157706300777a7be7cf39b1154945e4091f506126a5e7ffacb5bbc4ae315c5d01b9a16b92f6aaade329b911e021f9aa37bef063298a66ce264417a421fb4e3c42efe35a33e47b644a361064f2a49b902391a0604f69d71769ace9bae75514738dbcb8e03b48b57db3f7df5b25292004cb3d1edfc055d47254960c513cd1fc275f0a01e90b258ef8e0e094db54464ca4098e1204886e5bd8d29dcfba7fc1fae68bdde3941d0072c8e215acbc3154f3859c9ced41450a7b6cdb39d6c0ad4898e2016273a144a6a9aff912e99b19484cc4dedb21ef2af997712ecac6469699c809279a062fe5ae102b0d0402d4c402ea248be715fb8d263839bb6b7c2a8a11b2a302a361d29d82d406774408bc7f815195eec05c980a2794b7b2836fe482a20fc00ad933efa304fadbf9b6b8e4e5a90e32269461dfd1885b990ce08d0251b4de81465834168154305c4c2a604c4d2948f09a3112e7ac045a72e5cb2a708b326bd9e64b0eac13107b25c8cba4869c9f1bb27e4b64baf4b7219b436f6cf32a9ac0505194dc97844ee4318e6bc32ff9886ea8ba9b489424bb2bbfecbb21e3e7f0a8616e43b9feee7616712d61ce240ddb9743db70c0464327acc01634023f45b0ddaa887be304d09d1c034e3510af2f27e7ea705930631b14a50171be487c5537a914b967031aece23c985cf1e2e9cb1634ab420df32a3eddc27b962461dfd1567536558b48ff325a1417601da525eaf18f74610b11acb2f23be7d579a4ef188a8771c17dee20288d8a48717ce435face15de210bf825acd7e450fa66d3ac81b9f7e352a00ef108453fdfe400727d2260c693282616a0006907cb42df143425dfeb16b3c88a4226cf10517b5e5c91bf66067741fdb9ec08357ab306bad489911ae1f5c5281377b55e7d36b93a0eda7b39447b620e20969990c39f2e2a27199e8ea5460a78db28a088933818b854667992e01d7631b4c258696fa3ed661de7385f141c99097a4aa4ce2eae3ec4e4364d32845297432b3bc683d5b6b299b64d00a81a27510dc381a25813a51095c8a89cd2825b75f70b944b8796438c3e1cd60dc17651910d7073e5d0c7fc55f827ef5ca2887d6a3853104ad4211baa61ce01ab342f233b4029f0c1fdd9cf2cdadced54cdfaf21cc627937626ec231bdc4cd16b53eded052e85c04f91332cbb6a140d2d4b5845caba9c812a4b237544d174c88313220ffd73247cd487cae41cfdc126030fab8f5c21d2559331a501432220611cca5e085cb65829d228a26776804d07fc2a66537558450a638efc3ce53d08b48c4b629a7ec410baa1ee4f807e8ca50eec59ef1f9587bf56dd2eafb1c74608f62e510f7a7e9ac1946b42bfa1f421f9dd36a3effc58e0868086407ec9eead31c43e12191f97eaf031a7176d57db155ec16bdd6963225625ccb9315a442958c466189a4eb8d65fea89c2d3924bddfba7806539ff4b70b241845fa59d082fc91a19d423416a27d32463b2a6fca30cb8561f4f4f54f8903105714dc521a7bb485d9820e7a1fb526d9ad510fd69537528b31d99e9bc5e73ae9275ae16b988a73b246300462026de3e1ec2340a1cd7c3d206a4fd696472b8f7956ec3e5beae7b593ad9083c76bff317b48a20bc8bfd5a79e6ce404e3ec25a3db04d23e666a252c4eda409e3ca779910d57b811f4c22b477a300c591ce5613080733e8e3e45a0c794bca19dca4b8933d2931107b171cb5b2ede94cbe7194102ffff705e2265f39a489e7ad5b6b3502fa52d2734537c613416f90046a2bc3dab4987d19ba75900bdea93f835c835e23c6333181a48259b56d5cb2ca9d9409818171b86fca79c1c5e0a2e03dd2c26562e5f9ae6ec15839872b722e24c50a29f653915da855419cc682515203c456c90689b3c4e7ffca97666f323a814fcfcb93d97565a048e43e115d93f645951425215b8f32b8548ae7df50320541adcba4a520d02e0baa1d3fc5a64bafabe6985e2280c50a131ce611db4d72b2692c7512c0ed7663f88bb9bf01d9c0527b9a364bcaab64c02d168adc5ad8378632601175937a382302c1a201bcf85ae2352ae329c1c8a4ee729e9976c1852169423e2b891ba2ff77d655bb92e7eb8a5d70fffbd4a86ec91fe32682a0824cfb135b282e8b29ce8422c8041b28e2148b097149ea1ce7f8f466f66ce27c870163a821a4c9a06d25e7d86fc8ab444f2912dd853c2413671d2e041b71f650943fd54711a0de3360124470decb463e8c315839ff840020dbe165ce2af4684dd0f9074aa742a1dacf98d03fec97e5186356e9c4fab3637d545a93bd9a479216bd5e2777cc37a8290a3f65456ac113d484303e078cdddf7ed73698ef57451ab4f0ca8644475810372a3c100ce41bcdea94eedc464f05a3c83711aac597ef8f1297edcea1ee2d24cba7f0124cdd20632f9ac8932b46a023df94eb8328889802c78383033a0d33aee9f4304d89d66aaae4e4d274f78ae85c2b2b23e50308c0a8591521a86b64b52bdcb4d74e40ea3195c52128d4667bc0aa3921956a91297560b6ed859296938dd865a4e6c8d09ef2d793d31ab2ba85fec777f79adf4735b319b92bff9621219baf3faba4c3975f35de655e9cbeee18ed9fd65e3cec6fb98273135c9870081228528ed918e17d31ecdac5b7825608e218836504140fcfc14c8ade48ebcc411d90fef5c3c5ff0e95f585bea81be5c41a457b4d3e8698693584450926bc4185ce0bd4f4e35e1af5c88615451ca86b01fa0f5ad122c9b03a3e62a1a428d9a11c0e0999c652b2f045cbe4c86294362f186028f5cd4ef632defb44f18aaa05a362b421117d2fc50235a7084e28d96140f7889cfc6671b8edeaaf3fec52eecbf4617aa845cae312255e285897be021e10975618daf951668ee6a14786eaa46ddc31a0b01c33594a6033684d74636e64f421bfc3bc02c6b536f5fdcb0d401ba219e16de38bef6be01f34af803072f0de148b41a364a62d0386a9063e9f3b06a6271b56152dfde5482f35b05f18c26de31f0ba35662fec7dcd2107d9ba757545986e13aa614008cd13aa49a8f6509019a4a9e1aa1db9b1c543a165a0b52084325addbcfb32014080fed0bde52c6a2f6fdb0d0179c56267d13fc41eca336c2ec9ec530e863d7f398837cc0f9fe426557e68971c11ef816ef373800bf20d1fd5024a01fa43109f9f951ea3de6098457d0a875c102977751a17263ceb4200a4d0dd0e38ba38b52913ac461379d27783e239548e61dc80f000af00a58cb8dece01a04ad8ab6c8dcbd3aa135245960e501a8026fcc010babc1492f854fa659f7a63f505cb83c97a5331faba7a5f1a90d350e3c811b20182d8187e5c4b519c3331d8bb8da53e4b519809ab58272f2efd8b990f1da6dc8a76945958971c805194367c0eb152c6753066d8de5f1856e53aac9c8328d149cc36c1cfcd57119e4ebf8c1bd7e1b67fccfb903fbc1c4f862c4052daa6966a21523bac00c85774082302de7d4ed87352025c2d80888e4782a182bc42349004158189aad9b90ecee93ceaa6af03f85b46b0a2944439ada5713ce6affd1266326ed36f69b7c2f0d25cb194e16bbee87aba052a3f19f963ea6cf15963a490ca16ff1197053ce201ba0d8b33a31213283af9160abb790ed2f2b637b522da5432d21dc2a4f224112e1f92a1ddee68d73f2b9e3508802fc73703dec20508c6c124f42fe62458bd74b7e8721d10b8a35730244c397f03f9072bb187618c6e0adc88350f0bf0d1c410e034af3f603cb1f4fd8f28d2184474a9dd029a488d835d2e55edc926682f6d3ae97415fd50c9023d94d48cc706075b888a18b40b388fff646b0a713778928d15faae196d6e275921b3f922d4694a2376feb39d591ed3b76418641ed65812eddb913c2098ace7a18041a9931bbdb8049e4319f79f63140110e63e3dd68643f36dedc1fb341ab8c91f090ead63c5936e5540ea23ff8062b407de872210d15b0751cfd918906394a65c6fa2945c9389df23768d656963f4a0618473662131e390a945df3a2a695ea1ebe7a2cd23676a93d59b4a79e5b8dace567721b07f72dd904374ffba211b5f013337e4bcc2a7bf16df881c8daaa8e370315a967197d467aa9862a88a2996eca548cc3c4ac8bf5f7fe83dca79c2121a0578aad4250383653e1c5f5d83ed15875ef51bb47ab575f43eabc10dd1ec64736ec781bf77616ea5bc87f57d86b1899d1ea4fb9c51ddbcb410930a46bf3bef0c7f0b5539fb28462b574723d9f4e501b81bbb20ac6a988e510b11b9fcef055aad849860a4899497d268cad570f7a7f364c3b2d4e80bb46fed4219a12ecb8b9574c981b878e3efdb5d80e382723415433080ba892e286fb392f015e3918c4d1e77482b953fb6383003651de54b8e0abd0c423ce1853c1cb37d768b8ab6f760226cf252e94df788499c74c752b0acdc8ed30557d40b8262fcdda5de296030045ea79cb1f8817dbf66c434fef90178fe26bad9e23ba19fb793508653d3a6e370971e6c22a49ffb6db203d24ee5d3d03cdd76eb79915d7ec56558283a5a6f6ac5ded6739aab7537480a8c668bfd5937bdad72a36171e9a5c08e4f4c7eeeb69071c5142b8bdce47e950641a1f82da4540ab0e362869f1347937f5d07a0799cab757e957c7c5c917f219a9fa4c8a848070e6e013e3279ffe94cefc724de316e856941210adb30b0f15424b06a15386400f7fb8824b564c6e12757383a34357f499c97c3b691e33686e383e0c237ed8976895701dbd69f7243c34c637fe064fffb81993f23aeec3680d4a0cac65eb4c79a1900f626eac452ea00538d59afaa24724b71256a0bfb201bebc5d8707350ace20faa34bff13a54b87fa41830648fd0667db4f446e6d807632e0d3e3062fa4500a5b41437a1b399b2ade3d543f6954c9a198ca5192f80ebe9b4c3dad71423310f04f7cc678140a0f7fe5c407954033fd81bb8d1edbc4b54401184efbdbc1d1e5c3ac9d9d78c142c85d8051cff50f71bbd9628d23a8ecda3d13679eb2b322d7b991698a3ceadcbbda1e857025f1ea1a912b3c33ac96605c02091b5b85e4aaaf4f4c87034ff2fad8abd7f10e0ccf064ae07bd38e41e9dee86434b626295255bf431af8c15968e7afba169db470e9afa09830ac15a1b1aa6e7d92c495217e70c873e7909b1c1b61895a7ac2961751f145bc21823d82146575af9eb08733f8ad0915c48ad852a24e2e73a58f15d2c2770a376d5b94045e070c5b8194bd8c4fa330ea5788a05ebf6701afe4229b64afbfb71aa6cc97f9808098385bbd9efb0e407c244b025fc9e17a371f6e15044ebec720f9cdf9954aa925d2ebc3b473a3ae308c2cb7952ce9284db2ceb324ad69f55f14bc9dd183a4b2477b766c215e544ccbfa7591f7a0bcb30267afbb09c2974885211d8e7edf2ab7f90eca70494cbd731b8218af682af17575ab7fc7f9673ccafe4a1c49275b5fa4ffb8ee3efcef1f3709e4436531279e94ad803cbdbc1f7ae24d0a486e7df7410f2edffec7311a12bf1e13da6dd0cd7e789c2197e4bb5d286a8638b15980676d13abd9fa5c24f382700cc64163e6890844aeec627f30f2ba17f6e55cbb976fd30dd702362a562e071eb51fd5e554186429feeb4f0008cf29b6d00a15bccad717b732cc048bf78cf1b9a50b9bbe03c96692a51a2503421b2925793ce8e0fe1ffa047b2d57ec04aa816a843f4fc70aaded77e5b970fe0f4102b74913602ac04d768c8ae076905703f903b544932e4de64a795821f8dc031eba9a4de3396a8e4fe24caac35a81886494963e96e6663f8567350a8e6b7e72afcc8e4f99cb06b3e83aa54ca2d2e298f4e491f0977731bc2944f675225e00c5db90bf893dbd0e7c4a0217fc5a8f0c554ac13576698849a90dfd5a86e94229eacdb4dee39c639ad7847857751eb1dcfcf28c101df5959c6852a092185105e01c355e08e1e45043b5bfb6cbf879744756325e54571b660f4301bd31f018345999b6517ca95f7eaa7cdc0b4ca1c62635b45304d9e05f113e94665695f73944b45ab94bbe9aea63eeb9d0ce1c5fd19356393c6eb23a73ef28c888dd36091e3d29b476d63cfbcaa911cc1980114bc92ddf6f3504ebdbc3c8b55cc2e879582e790f5dd4cb81f247719ec3d659d415b33a273c6dd8501aa3476e8d50702821bb4b87524beb59919cd88f7cc40a49988eb09ea91803bc58d46fdbcdb0fd0fe6ee2b997463cc221e19bd4ec3d2fdc739cf82ba8741e446d8a81f7cc24853f7f38a5abf28b2619d9fe6dd6b271b6d35ba1158a5045779e2ea6746b5590ab6039a0b0a1cad0afa520fdbeec073242a7cadda492073fb0eb705a6f299ef21337bb8e1c5af10a461bb7ba98fd8e2c97a291eca606e2be114e60ffefdf0e624f1b4427a3b4dfa3991a205533e8bb2687569005a79e2d57ecdecce664ca8a6eb0cbfe04d368a781a74d6b359018238829baa348d5233aecb4590dde7660f96544864e5324a5b17899cae70783a9ff6f475b8f85e8859bddd80baa9b9524936c87d80e16e831148df5a3c1a022a86e44103d01d3f2e9c8d91518d9ae22357a4c3343f187f6bf026c3fd7d611152c23460bc56cfcc169c4f7a9bda08d8024d088ff9ad4df5742343a475d14dfa871b10a1e5eafac4950d9268bc74763ed607be02f629820ea371490c59f4a44e58c385b48ac40526c29852d4575ff913b302edef8450f499969db925529774efeac17cdc32df846eba69f0d9eaff575538dfe2998f77fd0f28d6d3018290efbb5d0fd01f1b92d43d14f5ceff4fd3b3b8e01b48c43a3a9dfe28750eddb1209919c03b12afa526dc317b203861856837e63e57316498d0e2828c2f9cff77b22e526f11c5113edc0b605a2e740349fc7abd12b7834a5e7188be911a45fcbbcc2d3c988591aac85118152c45c77f8e663359aa3cb49419c9903a7fbf6cd34f66137ea77d265e984f7c5549f9d0c6e27e05803c1e2be7cb7a3a813e1be0b66dfb9c8e4dc043dc5dc0b710fe792f613a1e8b3fcd2e80467988379a7c106c3350050938124e0a06ded0ffcb05e9a0d79fd23b98f7e720f5dd7c0414df807cdcc797d71c9569140647bce91e2c363b564dc2f158771d88d3c507d04d86f6a8436d8a4d5d13e93fca3a1532ca04ace4285e604fc572b68a819854cb41c83b7ce66075e1e44510a53360a6cd3f6d8178aa763c2b7303b43fb2f885ec18e98fdffca61e7a91d25c8a429ce909f8ce9ee44437a730623fdf6adc16c0c1a8372b1e4c321859df12db96f333a12d9511fc2302232b5a9f4577848fa7b4cc72d79e65b0ef3be4f6b2b69e823b3c34fcae24dfff10f6d0506040795a19a190d29702bde92a79b4bb70693b8cd5fc80301616ec12bbaa3acefa616dd5162ca70fdb1c45a01ecdb2c360823dc94d04dbf08a0a926f106cabb950b2c56d9c7e03b9d07f682a0be0a0095457ca303d10df8c50b0e2363b79842533f8b2608b529c14af9ff83edf87400c871ae9966b7f426c04e1e8b335c61477b4c83cdeaf443cdfbde156caaea573518855fa7dbbede404cf7804525ba319a76587a764d78488e694674d30e418ae3ec09b08bcf64f11cdde908429cb2486059b95d36f30833b08815464401f84dd3837e45e1558d981b095715b8b2bc9052b4b1967907184edebd91d84afcff5102e60885c7b8f2b0a9ee4754d1ce1b9998ac99952fe070e5001c5b881e569ee5b9f32746a468e7e63dd8d10315e15224948998e5b119a6d1002825b3c6c4bbb21c80eae9711d1ef97172cc28e9cb048d06e286393b0a38ca0b2fa95d019d23c5a5f0cb5197e4e387ff4879ee0b7294a126397abfd4338597be9afdb8e66834d1723a5faf961e3ec39ce0a0fe53512294f77d6c86d9b5f9204d43b2af858fcce05c6ee899ec376576c6da5c00c034ce269343199cb90f4dca3820fe9374f91e979ae8d9172c296c1f7e1242ef9c81c3e9747581e8af1354e10a68833eab30c08b2afbd4588cf2c787ca2bc4ed81de1061a6ce889bee659642353e5119a635027610c841569e2d6b250cb48514aa777ce8dc7e345f8b3cc86c47b6a58b88acb80908527405fbd7e90de3a5b443949bc051b787f3101069ff9fa5b019052abf4519a6c241a960215945e7d9cc63eb24a88e7d201177e62d853d60a02a32040db1a32f6002aa47d19d05a86f0ec815ce4d8a8a43c8678f597d6d4de8819f1f17d37f6ccaa595f11e952d71806e151f2fe18716af0931cdf4bb90a1f02d80532597e3f18bad392f3c6e1c8bcdb305db62a14e7b47c8cbf38be640777186124788fa6d3af48181c24cfa37dc052f4a4f3b682f0db380ab780cebc3ec362e7f7203b8f68fdb17a8ee71634325afdb124a8ac8bd7d2e72b46405860d7289fe9852affab5cf0e304c495337ca4d10a8e3b4a936c6b8c451bc4e385cd429324f55ed67f2eeef6f65c0e0f8925b56683cd932d8b1ce5b4d6a21bc923a111e67a41515165fcda46a342b1e999f447e1411ef4c947a6658e6d4420242cf56b9b568843b077ea79987ee393e6a22c7952c84e972ebdc1883b05d58c89adf026a95bc11f9c8c035fd83e6e11e891b16043ec887a7ec1d5655979bb401e3bb8350938b902aca2c1b035f5e60c239587c279b4a23da129e851d61858179027f9113ad8a13626e41210f1d282f6cc8fc3e9ab9e6c8ae54b9988a3a95ce39671ff2132aa7648d9915532684aa83ec986687006ac37502ea1489838e90516371700580f899f48ba68233cdc9d674d88b25553cb0c88103a57cf26c44d9ff4fa9e4f1baf2f3cafeed72d4dda71ba338e440b11c6e6682f758027c48422cd461793caed2f2cf1eb50f3914df655c8f5b5b93f17bd63102fcc6e311865946e7719d67dbc162f6da43f3804a0ea4633e4924b4ec582b71da2908a650356c715bf2dcda2e14fb581fbd61198c84cb7823f45aacca26d454250cb4257235d8349d2f3c5f2bbc9d52eea22dbfea7680968589faa87e62301788caccd67c5702f21476c55356b6909b03c1c161ff846ced2d92495f8457cb8f2b62409100958842d2f77c7df075396f70e061cf9d7b3470952871d032eb4c31630d6b714b087fbd9b4d14de870e1d3b5b2bcc3a2641e46442a170b3a09fe7342128a6ea99fe367ff740bd9893b8293a95982c17e6e46c7e1df095ff3667e8986c651d2df5b723ba8c226934d129bf7c717abe6785353c6bce5cce098907bcd1a723f51d4162ee2c74ed5bea982f4d302412724dda0915d4651d7b32a4fbac093e74092029ca6490a5ce14e40458361349851bcff43603d5cd253973d9381c9399baf0fa347ef9b5c6421cfb26c34537da20735127a2c689bd8b93f64f871451384e9ebfc4b0ea9e78901c0268c3f71da5d980998a5d959a95c374364d723ec72840904414d19764d6b74c17678e3d8fe2adea2769db415d22ddd867893f61c55baf680fe46db007c64753b40893cd9ca880093f3b9f5772c451b2eff2c776a2f3f48778bd4fd6df39e97c5d3a80dbc445598efe0b64a2101a5cf17ed072ab77f34ae3dd26573d515b88fcede7a6b6cae0ca8a1c66ec8a184b01c44a483d2902e7d27c7d60b2c113ca26d6179f2f6be410bc767691c6ad69da746234919649e3d281ba5e9f1b55b3db4649b84765beded8280b18937d172ad5e2d3dc0e8c5ea30700fa0f032c892330802b7d64f2ec3b54073518ac04e9c7e599d06c8585aa666c3c6b1a8d9813f32262fdf333056d9d758ee869049d160ff39164e8d41ca9b753aa710420ff8411c53690d6c583aff07031e02ba739d6248115be7b3dfcc7437083ddf6bc6ed07c88baeff9081e06ad53e8725049a0527bd473d37191e9281411d536b64724157a9406b7143bac0df6a2e5c67a2f5ba4949c0829f1dfcbdf7c51222e3bc727352045798e53011fce3904a1e1449888d2ac89f9c80d4b6645b375332232637dccd3d633061c92e8c165c32623e6d10574fdfc0f3d8e2ac4616ca52f4924eccd4e09470b3bae859d13aea1313c7f6ae063100bc165cd790ee30211137158544b75b0f88e0c9a4ddeca3432805f0a74522e477d39e116b832d13cb907d4f143ebdadd9612aa107ed4b5b6a44640cdf118661d838c7821aee10c783fbb6d701ebbd28215cccc8b04c2819d5015ddd5041cd1a3bd3fb02df34b6cc70903dc3a33df05f4850f5439242a90544a4ae3ecdeb2883db39fcde44b3147cbd373f7a1aacdb0664b6f2f5b4ef82f2ec01f0ec8c88cbc793fb9f3c482c514124708fe5d79821d22c07ecadd88c4ca053feffdc22e606fab87e5a20711a99450d72a0191f42307efc3fe766837bae0f6296ec34ad130fabd7ddcf73b9aa92f57574c4d186a156e0560c7a590045e3b3d4dcc8e58324c5eb0b05283549330a31723b8a393efc5914f022c662de2ab12094846b89ec84963f19233c852a050771f0bad8860f0bb04ce2a6335ab8709821d90ed326a025a08f6968c7a295c81b3fe58a7a5d2d8657d55be5a05e9f1c886ce3a545edaad02243902a422e3a9aba7eb4ac13d3f9ff576f915b03a8ced420ee013a0d373494205170497442f3849a44b46c91fa31b07979cd3214526d6ce060f11af3db40165b56722900a59e20938816a293cba388a010db40c139fd1520a6d185bfbb79c421b92dbc765b96e5b7a895fe74dc09f96cc96d532e1ed2caa02c41f70af0776e416a074ab01cc8a02ae16e32a28acc12249bb21d34ad266dd057d60acba914514bc0f5b1145dd7b51c0ad4605c0f8e7c955d1bb5c629db0130c741609cc7d798fa3060afb527516b8553905962a10bfb6bb0c8a38923f513987e2ebc9cf9aa1809531a606fc51d20827b5d7eb7bf9508b8938a65ea6c6dca8fbf0ca7d589e08a6eacbab2168f2d3c2ea8bb424ed70ff97bd339f56084517d4671e85d77d64d435281b515802b917d9eefc9a5276da9c0d5aa7e50e59aee03a6b1a11e8e4b677b95644e9d0129b06982cf8c4041f20f97cd94d6409d1e59a387458956c633e77945b10dba2a81ad7c324416542fe7b49048693cb99071c4ccbf0b612aadb430d1070299cea02ae51ce15336690cc48e0ac7ad00f8a68a828663045d1a291229c7f61f07fd68c1c7dc3d38f1562ef1d9a29ee659fb94ed2431d6c12c86a740954c95718cd934fc1ea4700c3845423da476ddb45e6d39b22da22fd3b511c2de25f92482a6648d99469398307139043fa17670b8c8ba0cc74854ae15fbdac2602abf11867ef0b8e5749abb7b0298ecc8238aabf2374d85240240233f624d03b63b2e78431348d9948dc1cf49047f6f0a13d161d2e68015518c344d4d5f8392f915a64040416c5e4cc3fcd30d3012d4854411772e841e3654c14282d3698bffcd8adb43ba6a038cd9821dff5c926470d9a4322b67aaef2c3ab43e20f6fb50d96df273bc8b59b9112000ae9619078980be6748038869bd483b894ea671e055f516555d75c46840bd1034b421bc27278fd54406e6dcffc56b2f82f368c4e0f2e95025d45ca199936fb2fc6ab876da1966a122e67f4fd5eebc5b8fbdab28bcc2b0634d6ea882b8440c3f9bfdcdea2ecae0507205cdbd29d4bd145a3ed033cda6b4c1bc83f089d231169aa4f22618cc0612e3e253eebb4f8686e957b9c10206387a49a21608de91d278db888653a1d3a81721227076e992f8acf7dd254d15a0424ea1a25fc1f26f7cfa4bb3103c4dff0e923b8613ce62e6b0e1602430b44038643d9079b9cb5e0084af3ddb5a5d92c6f4ea7df9fabb094e7782414e378369c3c594719eab9baa42b24698d6a6f80650d8b091b16cc38162cbe7271b4ca4e7ec270685411333a563f32f5749eaf8907dd0206f9a1f40a227630204734c310ea38105db3256af08eb1f10665704f777b90ad3cd942ef4ed771c8335352ca28403df0db70c0288181619a319596475aefd83695f3d8d633ecb10dd8c515e67518cbf1071da2fbd6ebe00012f30bb56c594ed40399dc054aab78da8e086266693649d3cdf845e6a57396efe4fca4f4ff9c10211bb33455666b3423093c1a33736fbab662f4888007a6ff8c927d96cc971b0f15bc392641a2b82fd107b34e6d7ff5b0919cb12d73d6397028fe4be1c085ec8c6dc6699c7c78c640130b1f5490f129d8431742c68bd56e8c69f2481402d4c21d1448d112c426e6be869288019e43d48ba65a6a659db27a2d91c0feecfe21954c5a8ed51742f43f3c20af513519ab78edefd00077bbb16a2bf38f2e387c0482b6d6d5479f7f64e01ea7b39b92a7440c76cc72386ec30467a72dd2f1813c38b57e672acaf8fefccd23f55afa86d8344e4569df52f09bee60d1f57ff09906232a722fe04f877245f0946fa46beb014744e648dcdcda70d5dcb09f2d74df3920dd2adb821a0757405b51702fed4f608fbf2be19cb09fdddeac07fe55cc8529885dfceab60974f819066c90845a94bee568b98a3d58b780e9c8fa1c5d6c9e1de81f27ec1ac4618ea93130b1bd1e1a969f15ae94c1b546332617f18225004f87d6da2d914c03165c73f660e6d68301b9846549a4813957c367146ba429e1d2749b767faf9484899d20cce2773cf4ce76808cf97135160658d60b17940a92c0b3b3546187e1c4cb06c9e365e800f9d58ae0a43f90a110ef20aa45bdacb0206983d5474fecdea6fa43f3e94281a4865e833e7c38263868c74fbd01ff0c47bcca76e16f4bf340fcbcbea1a27fd8bb5b81092b17fd25b213eb900cb1a3d7891539fa1a5043424c245ce85441fb81856848a6e78c3ad641bd93a6b0280ea2d377d4f23bb50e1674ace083abe9cb25359fdc768b3b2be793c9da4cfd21ec1e10d2301bea047a60e93d447c7d66f5fe4e909b959b4777f9e056da3fb895db276ec5fe915fa1cb6dcb5ee81f2f861ba5d23bc1ee16170ffdfac45fb13ff256ac1ffc0acb07b7926eb732bd80d2b3e6f6fff7ea219d3ea8cbb3cefcc14862824a3069ea014dd454a8c8f327b13fe9e670e4c6b7adffc7491b857f7afbe71f9ee10ec8ca4c51b43ab6e25cab9ea03ada4c66b281cac676de2445ba8160d4709ca67e5c144d742c0bd47cfc2a84642272ad098ef56b2fee4d13844264aa0cd5939c57478ed38024a85959298a4e491de2bbc4135a14ab64538099855040fbfacfd9a69cbe54d9ad833242ab3dd5d62cbb6d76745940ef48f20e49216c2fae94ae29a2288a9b8fdeb9c66a770922fe090374bc97be94d354dacacf83f512c8ff38f97657df808d6790383a2c3588c6b11f9e43b4ee281c2eed370ba618cb356d666d0d9b28f3374e75298a12355de942af589de2e0f8ed7f3120fb78943291fac786b1462222359704a04379811dfcf581685d41c74a85f686a9a82d3a783f2c4e9a34e26137297b477a936a85ac851cdca49a5051bd6d07df774d202686e646df67528b2144db23fc04011a1e5f8394a0c47ec8e91df66ed815cb44d9030eefa388fefda09d5a58f6da5702b4caa74d916ab37ff8bb63ba4e9313cc0c4a63a1a0005978ed8edc0a5e3e714bbb22838c7451a28d8e3733c7fb3142cad8e479aa1dcead934673b753d1f6050b6b138fdf83ff218c537e2a8fa5bc680481c0354b613f1ad14b4411430451c425461c71441341548859e2d5dd2ec8c1249ae3479280edfc7cee7d4bd5bd22987ae1fb42b451f09999a08ff48a04555b90f2e45f2031c771c8e87462b4f8081a8aaf2839b2d7184704b3831c97bfa6ee36657faea608c9b43015d09031f269d4d95decefd514d0d80ba2040a3d3e2f0d3b2a14fdbf461dd0d863270d46f50869ba4b0b0ec854073c8eb9a61d60371441a57c039dea781c271a21fdf12864e5e5884c0c4d8a20bec4a1c438b6c5a5a3b7e2be621c97679d6d9e9d9cd94a9fd0d45d62f835ee5978f9611cdb90521accd1f9435fcb89f3891d689193a55e76bd8f34b065aec527561f8df0943ad8293fe97bb2be4085d62877e02b1aa75063ac51965ecaac654a9d90fcd93d4efeb3ca330be4b61213eb07eb090ce9dee72b546511b52836c37126cf64f9c671a4761c7d5060255196356db10fdab5731d61b9e913bdadbe07c39fd01e164ced11bf987557eb00d2d3004690a50aeb45f76ec6e6622b8d7c46f0bca9adc7725fdc0675380e7379c026f381a9624441183f262aa8a668536d3fd075a8b410cd703ad82b516211499c1844884e842822928829b1429a13eca3203f43026f5d53bf910071e85bfd99332d3541ac2c63ac829d2fb5c8cbe3c4461de276d44aa997dfadcc64fafe3002cd2769d12a86ec886484578ee23f0566ed0602426c8b6d9554a4c3780e91e96758b51a23df7a7cac740b2358325eb1d136261b5b23994b978be3f73640149491ab80038d5e47c9e472d56c2f8531d2251f76572727c9392e8cb0d1edfb467aff753137998327a6483f3a861109770060764841d54724c2affa2932f390145796be34fb3427cf8fd1edf1d14ea8c5ee59b7c8f33c4a89e35ebbab15eae9d24b81d4f6193765401499567f025bbc1fb95b378df185c6e2fc70b5a632b1aeff70391e86f8642f657f7266a6c1e7d40648dafb4c4ec1c027403ca89ccb43e6327fb41ec3524dac6e41d87df2770a0810b601d346ea1e10813135f4e509d4c088a59d4c514f1196475fa0a17d14c3709a4497ec9ca2fdec18182fa0448b19834817821826a82aff099c8eb852efa21043e45c0244605e87e2a301723abfee2e63b987788507d21910e2f87eed0133d088f53eb0dc8c1803e7127dba519337aaf6239c4f507c656581aeb00afa507cf8a74da4d70dd5135e2ec5e699648afb1f36c5ae282507568cd2e26eda8619596611c502cf10584ec8898cef0f2ff44a1be22d4e94813e9937f9ad36d72505233fbe5905577a8800344397bcd817b4b99748b85c3eb2a597c8d6fef25ce9dfa2d9dc4f7e414708bfbb2224eb099a847125ce80f724bc7351317ad3386c32dbd601bc83afb9228fba35245f2c57dfe08e8264b4c0d3ff536aa09f39fa9c370145d3602f973fc5aba12ff0dfc2d8b8ff2090615636310f305d5045f762ba8c6fe6b24c174931088f9241bff2f73a607c925d33af537a207cfb82c48c71f5e098197ebf88a9bcd86286ddd644e7d90611bef4ac8ca0df9cb0ff5a027ee6bcbe36c99c34687f063254f757566a31380d7abdc3e158d3ff9ec3e84e04d69ae9096be916ced38a451bb3287b3502f862a4beea984d1509ca0230dff599c164af6cd6a9c3148cc484e49a708135912e52ada6bbaff3ac3651ad339070e9fbe2ab59fe9990a31e3a7b1873fb077374227f33d285588e90357e1f7a2303ac983867e8e8fc6a6029870617a0cc76481f95f71a3cf6f7f44378cd056bb78b22584448f819d9651516caed66e276c206eea18cd4a539f28b1f26b066fc96472407f250a043350b1313594766c2cd1a3e1614ff655cc57a485ac9f347a74acda9b86cb9dc568ef7b608382945a3fa15b198db9eba92f7558223622b297528b67aef291bb4f0399b1a3c1e66c4d0807ea5a428f3273537b1d598794a63203f92864706160b08588518cc55e63ff55a3acd477117e07f85cc116095045c7d5aa1ebb9fd656b6d9f9948c16d6ebab1efebfc16eb437e7d1bc1ce909a88b9c90e900bdf084ec0ccf8af92dd28e2779c3ac2957e71e85103acc4a2d50ad9cc8ea8601516fa7f046df3f0a569a60d978b9a7c5b2acb93c36a3d14ebd0dbb36b61e2090e29461cd65bc0f78580952e36b349bfba2d52d29796df6f8869c5e2bb2c5ab72ab0957a472890470530c3287011e59f040f466df3ca2cb007ec3108d4893f858339c5e07148b3a1f57317485ceb5c96f92d4c38480b65722b5fe78b76497dfc4b83a197a24fed110456f3a7723574f3a6e97219541e7faec587ce0f23277e5ec1bb5707e73182d7589a1fca3bbfae741937cf1cf1762846f41ed03c91bb2e5362eac4b7ed800dccfdb0e948ec2c6d6b85a85e7e47753d0bc1337310583542cffb9a6d9d405fabce2303e24f2410a521e01b3610b427a4f5fcf1098085165a11a31b17cfdd42719aa8fdcd097afd6bdb54e005833ffe8c441b5d083583161660ba4205f6cb7122227205804508745f127259acf0dde8a409bd13bd745e79811be14ce032d3abd0b9a5977d480370e9f966317c1da2aaadacfd44f22dcef42128c541b49681ea59fc427bef2a16adfbb4bc13a35b5451becd94435433149fb8b2d98c8184595fd1f9c80f1c1de026b3dac3354e1a26973010735f62e84b454d767281f246761cab27744d696c5a4016b56663116816c93e5b6128286cf7e44d1a06c2d19726e5febfcd9da5beafbec885460aa6f06de91c159307ad4461afb2df21756dc2b196fa3cabc3efbfc8b3914b6c1395aebf4f526a16efb4445498f9978283a09312f1c0115c6af4b47dbaf54687a512267a8051420342eeee13a4f07274418ed4fb2135ed1fc51242f423cf4745eca5180084f8f47c1fc1a24724a98c2f5fc787eea085987d53f5f4d0de3ef9ad3abd7c89d724539d3557b18f79423417d9e7f8c8efa1e3d1a0e3b304d8ec9a0200ad2780bf0220d24bff795d9dc7a90a3a456b582bedc2c78f0fde215adec074b85b80488c9e501ad8a40499be4f851caa30ef8d3d0a3209a5d976c611e8bdc4679ef9ca81f51d04dacb49010b3897b6faab8d7dd8d82dfe67e4047d701d6047d22c3c5423c149283a255c3f4385b99d45ed94b05b92daa04646090628dca1bc09d99bae12cfa57ca6a9bdd746a729eb199bd91cefaf4dbda213e409584b455dde5d75ae99abffc41a28cb2328ffdfd194b96e886c11e895a1d9f3535c5fc859a5d08d01faad425fd986fdd16d04817b53fc724bf5b7b88de25797e57cc90767d4e365cb8fea46a73017caff270e6b04f473afa383ffcff329a3c9c2e7661ffaa54dfed5aefa7b5b4a96a973d30560ce8db8499d6bbef9757522820a76698b0dae801a44402f44e962d2452ad5ed7abe86e968cd862534e10959b6fef6b2cb983228243f4eafa6384cd93f1ba2a194f9a5252e4096019be59facf8b287604e53ad2bc033e721fe4d481c9741d58cd030dce525c86828f11c4dca406416247e7a570ea17b3412dc1a0c8313406b25882dfcf0531831a6080281434a8a5e2391f08c31fc65f26b7b286867a8a444b2c356f671e414bf671f14c80bcc5b23dbfd494ac3dc1c6748ca194b7a4ff8872331e06624cd256df4933fa84b0b0db2fdeccf0d00329e921a0b10f01f84822c61bae82c54374e86e0831abe091f49f4a4ca0a8b1df16243ac7efd1ae04c97829b6ce4045f17ebf466f2e8251fc4548f87dc3c2239bf5f18ce228dfa30b8acb83b5ff559a18a5f28c256d832f22e53e4d243bf31f3989351dd4c73a2638a6028ee8b805e15c9ea8363c1fb2cac5c80911a530898713d3ae94a9123afe931f6b02e867dadbbf8156c890cda17ee9e7a158566e014d681d34fa636e6f429fa81df8693e0657fb0a45108ad54c73610f4effa32469dd5a9f61dbdbc676308f614d9e33c9a1518b8ece8bc2c3cc6d95682f1e524796a62a03e470763a4115a8f93e62a79498991926f23f036eec93805487e184d44a40b8a137701489092e9915f25fa0c3e39a7dfc27914e8ca6dd14124cb045f4edb92b3f97c168386399425b8f8d5c3d0d8beffedb9b4d59f058646bc7c603e17a922a130652f3b3c0e8913e016749c3f1fc12cb45be907f184fbf2f72fc074c2f2e85116507ea93ec779389b423bf0626c9282aa52d898e0f81dd770130f719d4595915e1fa20399feb52d95e9fc57dcfb212651095c40ae419e9b9e26c433b8c239ff49a3434f2e33f5c0424938fcb8fc2e8ab4e0191b5b2e18c55b5814609ca152ea2f570f7f4708f619012d630260879a15746cbb17fd50a92e3ff996988d529ddc32837a35af2eb7b4a1edad3f6caa7c51f26628e690b55f97c3642b1d1a66ba018ebaae89e934b78b9f9708d0b7d603f89e9c69fc9c80076e6c1e20a0b86a241e67c219d4f52cc06ed63ac08dba3f74b2c25127d04c0a00fdca210f300d42672ead8858fe7b8003a552c401b4e561c153b2c9fb55cd629c4b20c91896501be640d23ced90c66f4dabeb6321b5a2a7df8a0528e7490be6b70a152ca08235ef4d608d6b3f8e026203b27a57ac6e30240d64065bd1f363d53e45a835d5925b4d66188e9b908f97fbdffa37bda7224b011171f1d41c5cb34bc79d46de8bab3c518ee200fb554c2ea13ab050193b00d3f8c8501d99aef7b25b6d85e3f7a1812c2bc27530985778c2f6023424002a1dc0bc2ba60c55584fb377fab0abf6cfdacd2d17bcb81f864db4da623af43c27e92ca203e4f88aaaae439dfbe659dbefe4b173ef268cc52ce74e0d29e384b0e306f610b5aa5ca8524f6ae6859dd8c2467a8a89f5ea7460f78e4596670a4017e52407cc2220333f158e5df00106b77489732e6084ea63b45e3a6880c6f5f070ee32440cd3e799aca85c96a9aecea47fc95c6aac45e2319939ed46b17467a46d767a2e5df672d011d7ae918478b30324bde2c608f86d47dc0edf5d83c9705ead76a800943dc7c047118275381bb7bee0f4bf919cafc8c3dde8def845175f3877e0b78689511502182a564fa65ee22459bf06718dbf4b161b2201ee38884146f0f331bd434fbc0de17beccc22a014f8860b277c4256f486c0123f9fb0c40285deede070bdff7b4fa80a4c24e68a7200b7574c9071f8710c1000c0cfd9e29cda2a7884a0018955fe3371e30a730825d1e5e4ebbafd666cc6294da2957f1d6e95c0e3236c1d54f4b0f68bf4481950c0626ba5344f8ac2d5242becf0154251187dd1dbdcd753c35c950472266ad8c8dadc8afd2f85f07c8bdf288ca23b95219d4e279d0b6ccfaf558077b8c4e8edd641f43788484f049fd2902d95c3c723dc17cc7d4b36b2a9d4995c12101254cbeaead90511703fc2242c7189b7744f5234b7625a1423b1ef42fb86c0110cae03bd417f23e683afaa4d5109ee6b6a012a9cb40ed278b327ab70030b262b58669f59c117f112eebbf892b63c88f5640eb294d63a00b8dcc116121163f56f661103d398833df8452b774ed7853930a9aeb89532d18401147a5b8277a78c82381af6b2de0bb03ba8519e11e88a4971db97883ab1141d7c46ff41a63949a23dcef2fecb511d7c5aaccbf568462de3b4450ce6e9fdb94318f8973adeb7eec130e498beb2ec731a24ad1dcfd8a4b88a10a6ecb6b3892e17751924eebd48b9508b9443afa149faabebda4c7c75e0604bd46a0cafd8436ab4c412cf7d57a47ce6f9583eb71553bdd263152073a36c90dbe8ccc121be3e732c03c6143c59b8fe1425403be4d5521464006888f06ee802540164fc1b1b4b9ca52c173fdfe7aa03e50e6033e9555efe3664037f3b4ce5d0b6395a1722a691c09442817479ab2955d3106087e0be3bd5c905ed856d79b1be31dc539cd4ea853cd92afc2d93632bcc414dffd1e28c4775e9913a154407fe8916727cd97c4592aaa9a6dae60c43c5b5a8348ae76b4d72b1a5fbd789552d09c769fe3d9cf81b08cd2ffa86ef90d381f6dc1620ba8d14abf255f6a48ee5eaa60d985ccc4fbba2fbdcbde8b42c9ffa3fc82ba638e08f3fa19c758ca9102f630679ff348633c3e8540f2a26e06055d07e7f6b90eade9c34f424e05abd0cfe5850e82876d6b34229d92185b7d3c360820ca6308cb34b2f2ce1b0639473fa1585d88232bac5294bf470148443eaa366ad375b2a50450a5027d8fefce10993e3768b90b4b66ac06d8ca19e17c7db638b8e665a215c0677d1856e9ceb5d9174fc14b944bde31f2601792dfb9f4fb51e2006282999e97627b950b187ece9dd841771d878fb7766141f50c407674f56402ed85a2ca47130985546da8830c47cff17ceb13aa166d9f0e71bb144465024002ddfc20d0c4c72d66ae6686d7423f46a25d70f5470615de6afae74fe7e3beb09b40a87d3c1248d614fc72ae0c428c80fabae3c10ff34d6f0e9370cfdd58d988053b33b302c66c8a64ac81415edfab5987af41dc8ba471032b1926d36c19688038d5d1fa3172a7bbf892de8c451f45063703244428f364c33e366f274b6f46cd6df14bc283927c716d7695a0e0f246b15951f24a8dc0a9d7dbde6152ea11bcb38ceac8d621543e7c7fc95efead9c68be456f473af9cef814df4bd9011712eb693c2139484cfe52a1788c26939160a799c878bd42190f7384abf4f81f8fb2a4a2d15e0a1b4517309d55564bd08e32837a48a0602704633e4e8454f24e3a3f85d1c9d6696767d63fb552f138b701b02165ba748ae83b95aaf7a4b2d89e98bb64bd8c23be8110818608a4cb1f682035d286ce4a0dd86b1274e13eeaf157dc213bcea357e29315dac221e5d566ed0bcf29b9fb3ca962baeb4571154ed0bb061d9c4cbe281e34bbfb83a0c2d7337634cacfcac0741b650bb79c9e465e2dbf2ba60cb4edf95db888d88815e5cd870bc2d139f2fd21281e71c5ffb07575c459d83357471ee8ac22e26c2a60d404606189dfd461d5bf7889d1f403c4d38aa4a94248f707bf287a8c001f075ac18b460c9a855faac7299a2b3304bce3feb9856d06ab85d2da04d791f6bc6ee41ba626af5438b6457b08c86ce6206695aab06abe60bcf49c592ca8f3845d9a1e21ae73650ccad48b6206c5f71a03eababf3cdbaa8dc6ac4e04ab10f9412d21fe3ae6cb8d6e9bc751c09c36a4cb7ba9bcfd3852991f099f04020e407fa01fb603d0e7a3c5ce01b5da06a0132cef9dd4bbfb6ccf758f24a6bdbb60fe67a738233ed570c62c9f7c68a1e8c4de79ac53ea041a47c6c042a1dfd679c78bab590ef6731cad8791e602e18172a45c46f9e0e2b9513841df92a444f2cab17d3900fd285c65a701e7582b5578e41c15eb062cec8455e187c5d02e313bce0c4dba881a2ec13d2f8546c041aebd915ca26f688b48671cdb90c35ad9f78794f220e95a09ba984ac43a5ff8a5007a9532d7f6e63103c083791a71ca1769314ba06bc4d43015939bbb21bda3f32c92482dda0b687858d392de9c6ee2edd6b0e37b6e12c3068674076f988ae1dcca95f5923a721fb85ab6a89d74154ccc1a88eae5f4dba8b44e926047f7d939a6852ecb304e0d5f9c967097b7ca57e020d07b4a6e18488965afeeb82036ca699a0e2a00722bea59319567528ca2d4147de7d654ca245edcbfa9b2dc14a9a28ece8cbf180318f02e9c880692cc182e230753e6cffdc0a286f4e040f889302a3b81727cc590a0614fd416a161939e70b9e361640af00860d8b6e9f6d7457e63f23b0e9215826a16a30fe0bb7777b21585cfa6a66c5d3bed6a823941d7f6d8da9dea641ad9a4f5031823ad0095273ace42b97061d1ad3d77916fa50675572a7e36c02e6b554ba68e032c6a8d7b50a564b566da6d446438ca18d19013d41e73844d22e23c98cbac95b18bbec278505edf877d219c0d0e17af1f365901dd8cdd97634060afe25a2f76db150d0d31502e7e3d4e3e8c1640f656c19b5215a8c04f48037ad98dd220869e99b82d90d60fe2be7e3bb2a74cbf95a2434c0064db6dc0a2fc277dc2e8342cd8ebd93d875863dbf4849f61531067ddbe66e64d16940f9258d04f866b35cb69d1d00c4c4c8f5b0ad92cdb82964b33268a618f01f353b23d26612831691bbc049d8aaa1e56e25608223bb0918751d58272ba82dcc2a33a417045a79910cd96cc2555eb1cdf53d3a780268ba058ac2818276ca7c2ac9b24655f49aa37bdcc340745680798f23e51bd7a92aced61c2bb868b9f1c1f4494762d6489342c9c8094757fe1026d52942ae4506316c95ef926fef254f411a2b2d47e28ed05cce749f97af89ed3e387945e36ec8d55e294ae603bd7681a32246249f7b138d0a5fbcead5135522877aa183405f28a992ec14b4d713d6126b48722780fe7362c43548f6df27518db365e8a447a9db2dbcca01539ce0b973a81d4fbe62c79a841cd68a810b333b73e5d9aac4151046612087393dbbfd489fbf79e2e97ee8c1795f090d800fe78d670d851e73bda921c4c86524c765bbe5d8ec92322e788b46d7fa4e1c42276ee53bd468a60d35e982946f63a73685f6db38c259f1ba006283d2bb221ded4641ca052c9a0f624cbd70030e68463909074c0db0495e3bd581e0eec07e269e9a339af878a44a6e1dfeec306e72eb78956e42b6334fe2a509278a7f490c93314c69eff4d260ae3b8c8bca874768564e8f5c365c5a55e0f4d4b5ff8a15a430056ebacf209685912b7dcfa8474299b312bfc30fa382c1dab5389aebf3c3233074582ed5d96c3dea06d5c06b91d30e8ea50a3ebd4064d539c191fdcd1a6f8909eeeca71dba0ca12d2412638327dde0478a0944b2027aee5565562052c24a077a865adfecd6a31e5d91261abdb27aa00915954e1b095759f34af0d6df5f696224ac28438cb4df643a6d626222c2cd4d8bd0ee2d188fc2a618dd281e7ae4e43a376c1b3f58d436217b6fb2e59652a69464030622060007328af7c9df1179f895ffc2b1d51fc951b2842b9f976816348c83698d41f429f5a11103fda27fc60beb92d252951e6a9e53298a117d11c41e4338077dfa31441ef5e98e26de4729dd31847b7c71f9a19e72d0c5bd19911a79f8a5cca445aa071a6444788a4ce4c1f74a67693d9f893dd809e72002379988460d93084618c9c431214f21c111757424a3715ef02c7a1ceac1fabe6d87e488cc5fb88e3de0db3ae0f7f7f76d7648bff8c9b253bf788a9b8b1a94cbdb66798ae5822a3d143a939ca2f590f643513ae9a0441eace84364817cb3c89a9aea2130361742d3443ea6134f39f11447a6995a5b6cd2437da79c88b32f38107fad9ef77dffaad1839785acc4147a13dfe2504c4c5c0d1fbcfe78432933301ae1080e4d137196a77a8a13af9984ace6b2a619913c1583d89b44e12939254ae4119f5f021179f487957fcbb608f2d53a21dd66bc4c3ae9a18ea13f71d9b7f48b71fc68cfcffc53a1e75b7074e84c5ff84b13794e5cb79886a7fa85a35fde87dee4bd490f75cf2ceed153d280ac2648e702d8807ec500dcd00370b5d79c89f5fc8c26f258859529c786b56543efeb6cf8dc03e7c317d7e076af7a9c18e676bf035e71bbffc0ee5d60f73a41b7030a49b8ddf38d0dabeb6d6cf79eed5e07a87b16f8494c7495bdc3989f95184a7c70473c21be8a083911062250bf0f26ece5d8968d37d6c6b26c282bf88213eec13818f6f3c58e7b53752d6cbd75d74516ab3b324462907cf938fac5a176e5f31ad9b950bbc1ce0ac936e6b807c4a2fa436e67b90a2ee13e495211776d9036acb721c0d9ee4e485654df7170b9d690da90affca289e3fb1d944c9a124e72259c945112b438e38c33d038038d33d038638c34d23083bd48357bb973ca471b6593915f9805000ac19d9c56e5bcce66d301f9827db71c656bd6ac5973abbbbb1f791ab09be39ef33edaddfde6c3b9f9798383838333b75a33865abda0bc938f89e76aba72743edd746ae085dd446b6ceaa626a2ea79dff7ef512cb09b40bf9b8acbb80dfce1df6535ab1564f7968eeabbfa9c145e561b8bcb01e33643bdad2bc23871e10305eba6d631d4aa5183a5fae542e87e7e93117b749f1379b4da9b546febb1e17e64ab1a2b327736b9140e379f8840f3bb4c7f01d55b3415ddd434a6a99bda8b6b4707e7e6860eaf58a0df4d6755d1dc39a5a37c8c0fad3ecabfbccff3ac196ad3c97e87f51ccb5fc76eb6b32147dd496d96b9ff11ebba7d9b4e487dff6ef23230f44bc74647791d1555a37c8c8f79c9a71ff341794f4d4d0e34bf73751e75048fc388440d9b365a54e451bb9ddb2d3bbf61ce591d1bb6d266c38e7227953bbfab35a3367bfa395c27a47636ccde7f7371fed917cfc13055b71273ccf723aa74540c2a2302cd187694fbe03b7c6e031a77761dd552fd9a0f8bb761522deffc5047d40bca3bf924939e3a6578a147457d8d275ee863a2e6479ccf6ce3340e8e8ff1be8ef1cbc3e90cc163288fb204c574a76f712efe544ce411674ff7c3c38841b3064f540c9a1dadb5d69a45d5ea79dff7ff9a50a4ba898301942c30c6201144a0f94a5ee400c5343c1961fadd76e4cd6699862206cd77b09f8839e6b7c06e8a41f33d9fcc85980fcc9d5fee641df00f980c215623444bc1d3de6d6c54bfea3a212d1bed35866abdc7fa82c574935daa573ca66fce9cf90c05a5faadafe71d45049affdd5abd2b6a188f8b3b5b070d86172978ef5f3b9cbff9cd41ed37e6ba4e67ebbaee6dbeea70592744f5dda6d91e16baf7deb35d9763f538608c41fe9b8dcaa6d3d97c6cc83c2a29b9a73af28f58ded34e487d6e5affd5fbf09dee87f60e44335ad96eead7cc69e180214fb9939bdc86f51e1836150d254a8c39420602c9bb41dcf9dde4443034d07c2e7ad3898d768e36e6ea857ecde7bb817df929f250d914348bc4f3bd82b25ff267de30911ab6e94e5fca9ed2afa9e224948d2a1941aad17be96e2d33bf99bbbb7477ae5258ad3e6758e7a435c028181ae6ceba44abdc552784befcae6381d28c6a4b22510da90e77d21ee2e4f126e7f6957f8de2e084d253498de79f51580f49f5901b919327caec291dc597286cf32b73492ef550f42a7e25f2a030ad09553282e4551b4aad3febee6ccb34954acb9458379c31861936f3fb3988cc2cc7d7544106ced074cee93f435fcf9e4eb1cdf7f66eeff676f76e778f2c8fd19b0821efffe785a366b5665378f5c618962729b05c31a5cbe9f53f312c4a5c7a630ccb14377ca13eb3c59f972e6bb4fd687afae252ce49695665adde5cab26b9496996d5aad1ac564d53a9b6ca692ad5b6715cb7715cd7ad562cae5bad582ccfb3519366ccd39728309ebe506dc5f29a6c6cbedcf895db8fe3555ab2d5f2e6962f4d4971b7bb94d3e36c6e6e70705a2d9c562b274747c7f5c9eff3e6afc5e5e8b8be6f4787737ddfce0e0f4f8f8ff4f1f1661fdfe1e1e9e9f111e353c386b461c39b6d54cbc3f5f8b84f8d1a9c8336dc890dcec11b522fffbdf99fc68869ea2dcda4a6a7344c4d9a314f5fa2c078fae2e44e3c0b2bb1136ee2df316a481aa438660877bb4b396bad3ef5416b0100809f1f124a902594e0cd25549b1b1c9c562b2747a702a0aefcb9dda59c93ca496996d5aaa9a44ae5cd2a5556354da5da364eb5715cd7ad56dd8ac5f23c1b9b1b1c8983e3cd38389ecdcd0d0e4eab9593a3e3727ddfce0e8f3b18fa5cb9e9b85c9c7f1fe73efdea2f06b5bf8f7645e1f5cb6fac7edd863556e00a1432a8ad4ccac8a19452ca49a5ab0919a58c52fa6c792d1cff28e762a2a58cf2fb1b2e2f1eff64e92e5d5a6294326a416062d7123b740c6258965c4a54ad86d1290d3345f5d21857ea49b39ac55eea313d694623fd19d33053544f199dd2309387d1298d7f3b151e7fe4c8578b9f545993726e9f734e3ae7f4304677215c5a5c5a5c5a64179716d71625a51816d8cf8c618beddedddddded4d8410d4e7f3c2d13475c3ef4a991bd66f53d5aada326db32a1f6e82ac663166348b94c6aca87b64cd46584e226cf12776441934d1f58417635762474cc5ae34453537fc6e0f695891d6a41669fe1a9d314e3924bd7dcd9aee11298d33521ae7eca17d487ac718630f798ddc085fa4bef176778c71892c59b264915c90d9d143f285e3fb577f4e1e0e211d35abe2391437fc8ef0fac698114f5c59c4efd3e0f7fa848ce8d2a4e5d23be59a22326984c7dd1833c2ca0d3dd7152382f0acf746f0b0837b9fd7fa8a7072a27faf0851fef53faffaacc5ac44f150d9fb348d88269715cfbb3166658c152824aa6c51054c968554a29422216502a9c244e50eaa345591e27e1c620c9021ca68a0d7af3955c692a8d81064b48ce22282b1b886585a9a4b52082196c8a801064b60e4008320624b592c55414546596aba4b4c990b082a4b50c172c317721c7ef06aa0d4078f3eac8122102a4daad739518a5111c2f58230a074b7b784e26ac1cf4fcd6a85410d37a8b9a1a2a1417cf4bcd6e793d59f1b567b6649473298707d19634288b1c4051e9dd2c5c3e7b584c8c1cd6e8c0921e686deffb06d71fa5d30f6e0cd8fb7a313552133f0652bed08be4bad91fc117cd7c89feb97b43808f1e5462e2e2bfeb4f7748b710cc50f7dbc068a44aa7eb50af41aa85f036b03b93f93d15bbc516eb17d881f6d0ff1a5088f92c0d2e85cf932f418f5a8d07fe4006e97936655536d1c77bd62c9eaea49cfa6fe8d87f321b7c2e8d4392c9174ba67be910aeb9956057f7e23f3915cd7016e8d4818d2ce6da36991bedb96058b749444c3ed37226130d8450a915c37721b027eedc6ee48cee0f2356bd65c15f8b20be2435103530383c12e5b2ff1553a6c533051c208d28d9b1df980c16ee86b702e7d19f866bf1db17cd93fc38d7b7424e96ad641a3fa2aa320f5ebf70afd537b69ebfb701518af86040683c1ee16bbca0287d9f718f5f46856852ab37825c83018ec22b191196e5c7f24bed4864868b8d2484461cd1ad048be7c97df3f8391b43d47f143196e088e50b8f1ceb0ddfe2d76413c1852ce6deb3fc1d068cad06a0185356b5845c48f76882881a42223fe0ee0db47f06faca5f844c4a36c8d130c769b6d149a126e1946b3a4922c4a8910ec0bac48899e20fcf3e77531969a94e49852624c516c1342aed628258612698a24c857fbfa4994f867af599812ff1528816556ebeea63d9b5b76777777777777777777bf6eb7348135961c97ed251acf35c6ebcbdcd72d17b83b6ebfd9d83f660f5e58a5f619585f036bc83f9f667e82af987861ad67cacc2ed070e29e5a503e3f218e6edfd13b6290fc22fd92cc5e184822907c22b18ba15f32dcc1f293a80005b1c70f92c8837e5b6e189db0887261ea76ec2f0709838fee8f068f7ebc9101df0d5e74efda3ffdfa6ef03aca40a80621a1ef5bf27d9ed7fa7cb22ccbb22c8645989b65990dbdcf6bdddc18c3028a1b7a0f84e644d33434b878d281a67aa281f65485f7c4c4eaa90af71405e7c6181657a4be1dbcf0ffe78563064b57307163c78396699afd9f7e7d4f304dd3344debd10107b1326cace92706c585464e94d5b141bc71aab5564dd334edbd26ae169b01d3d5aa75adf9a73477e7c618164f6ef859c7c5167ba8d657a9aaaaaaaaaaaafcaaeaabd81ad58ff18f24ddfa71da96f7ec97eefd4792ae7f1bc99f35cb289d534abfaaa8fab0e9fc4c75552fe551768de4cf234957beb47c35cea47c4f3cf92374c2edf8f4bab29feb6f45a268051a275f14610c282fce14f5fb44a22fa3030f4ec0ecc0022e45505d6cdf132facec3fa4dd863bae3fffab5f8ea35f2eaf107f28f47a092579c901085bb8f8014c8a1845ae468b171bc092e001aaa9c8ff8b44287421022a066768a1c28922ff8f44098011e106599490d2e445110f366e50887f9b8346f2e5cfcebfc19e20f3d91af5f7b80de29f74932e1bb97b4f904fba0e0a31f23792dffd7007b9dfd3f86846eb5339676bdddac7c49337c69ed078773f4dddee7ec557cde8b7037ffd2484a7307c76f9606bbe2f8d34d2e89946773b5bb9cd0f63f4182d5f29dfa7fd4f878723fc517de8a361a06ef3c6ad747ab75d53ae23783c1df6a5081ca4be38f941ca0a3451a4acf041ad3506dd032decba1c71628c3dd76b7d3e5744f98284ab8c5a6b566b55736bec8a2b6478686cdc18b3c20a2ba0b8a1f74c30333b73143ae352e345fff6a7534677171a5efc90bbfe75ce39fd0742421012324374430fc9169bb3a9e67b63c9622851a23fbe51bf4f1b5b7294318484c618a3e51854a4a96249154a20d88e7836677381f1f8595b8c2cf96e9239062fc6ba443188d4d7a564c2adc75914f1da62bb13c5d8b1c09257daa3e8f13bde580030dbe624a69dc0702263af6c4e68b22ccb6896d12ccb329a6554024945f26d989f645a1c5028722077329a3b494fb42b24ddf849b828cb91a41b5f8926c3b023399439e2cd1b9d72002396b0c59cd45ca4be0378261b7f13146ef2d24d62bc098d7cc2cb7ca20c856557aa0cc46830d595dea080e2a09032c2edffcec96a0bcb0b190f661345959b28c0e0440106933039525409a3238517971465be26696ec7a01d3378949865116efff730757f3e9ccf8e29c89cf0d14903bc67a71d5dd29c106fac746cc0bdd1b49cadfd22c1169b9b932e63972529cc2c65136572f739bb4075799ab3fb11839e521044d53251664fb6d86b66049d6092e672e182032ecda40b2ccd7522ca091edc9813503027ba2871194e4e345d27ae08e1041434b6d8ce608d415c9c64172e50442b1b908884130e491c491983b830dd0f7831c665e986dc6d2e52ee93fbf5cb081b3f96328ce54cdbd4e0363dc8aecad442a7c856616a0eb430544894b12de15ad0ada8ac94603de15d61c36d71a3039c4e8c561266e42cd179e2e282f85447ec6c5a78bcf464a9c227cb538d2c5ad8c822e6060e3e2b03aa8260cf00208b117e321a48685202e521001b941715202b024862005a707409a2511020b322872a0b213105a8640c908171803174d033269831a4441a4436ecc89c20a0071e14881e93ca09b44a0290508016149a7c6453dc1914815900b50103b4313f7a90020d021032544013648923ac90d5c0420e0da04f5a983e38804a11b2e4c2110f5802021997087819528504e8d304342d28e00511aa830af8c002511720030343c880191a88819a0dd0f0c20d1cd0a1034a1ef0018629e503544060250449c4a045045dc2288cac2842b118410d4830c594e00b13f0e0e80746c6387206c90c1998d09861c909680e489ea0604249811620eea7822b954a1227d9b48231154ac99496a82486c1b89b4203961a544d2cd1a260a29a810d1ad40d5fe0d0832661e450cfb0800923e8b0c4c90e3ba87ee06188271a124a4db44015850b623d685050bef0a1cc0b9a08c20f9999286500116b220d29158720ea9329f50721281518482b549870c26159925c86a04f10b1e5299ba20829c754d1e2249b8c15df81111c833d38a27f7045a6c1c2311802af9f07045e8c6d89daa2e67efd62243806fdc618171aee9704c7201726f7e3241809c6c257f8083682ad70152e8289e0217889a9300c58089ec241b0140682a3f00ffc02f681a1700fec026e012bf113e681776027ac03b38073e0268c03dfc03630135ec235300d0c4b52b282242a48010a909c600619908e18393241094830822246a108620801083e0083073ac0811736a0810c60e00216a800110a4c40024322008107b820c4012d3480851582a80024851f0c5840d1f58182021270420f1e08d8413464828e0318a0004239081084630002007a05a004127e0060c1bf61a3864f0fcfcee7d2c96971961f4b6cb19f660eb61b6358a032e618146058ef0ac9239015ceb3c0f02fcb06873bf2cb7d5578e14b470f854584eeea55387a88a5fa39557f6303b6c08f41aa67812a0e54d99fabb2f4f97db8067aa05791c59ad9c8546c1c9771599665cf09dd688db2afe15f9577553e57c57ad5d71ef25ef5aa57d974cfd93c1f25b9391f93f8c86f0ece0d183f305eb7c023b61839cb31da2ca3558893349f526216de47454e793e2f9f88c4bc608a7551c4b7c44a5d30e1028ddbcfb97321d505141db68dc5b1a5bb0cb6c8012fc6b8987263ec066aae016e8c89e1e1bed043746856696be0dd30fb3a6d9d45485bbf98e7c210222910e3e4caf72eb6d85b6c6ef658e67f8a4c1a0a5dda20b5d5fab38323f8b96d8dd826516ea86ddbba7b6e71c669abf4fae7466bd444d1297e83154c9adc35b0aa563df755f12ccfd7c59befc329a03d8e6660db9e09f4770f81feee93ae0a0c916c60c877e3e82339e8c3336955ee376cf167ca688ff08fdfb68d0794bfe3a08e979b7d0f0bfed9bb0db5f7f9ec47cf4b30be2b747fef6f40e666370073b9a7dd8f9e77f07b09b28468dcbb0d933a20d9ebbc66c4fdcd7bdf6a7d0ed8d3f3f1ee7cf59e9ee7f97837077d7e037b58e0dee7b9f7b13d3d3685a49bf33d2cf0bccdf3bc8d0b4bb8a8498c0508e5d3d71cd49e07ccf91d30e73f305cbdf6f1ead8907b2d076cd91ff00634d2dec66a4f5f05ee305ad90e0c932e67b3d76c9742fc22c1235eb3a9402347710a06bb4837777b479aba6ee40885db31487b247a5546548f44ef56e6fad18debaf028f50b81c8334ff2dc2e0c5d80da4b21592a6b86e63c4a1bdd7af567e77ab18345f823d75dcf934059efc956764be8ffde767c70e9644b87b4f7767d91f11ee4ca6888ed950b0122b295d76223225a762360013d3428c3423a7ee5c9252d20c902acd64219df82707f6ab404f8275db5e03f9370eecdf582f65521225449ca768a051a69272be465fb37195aafb194a1b765fd0c676724affeca79460e8cd39e513095770a70f97e1f6487dbb57722718fa25f2d2c690a1d0ee7943ea0f335bdd2275b5487d333b37bf6e8de477dbfc6e6edd33d742466dc848de933dff1644fe14227fcea796c5ea80d09fd648caf99b64d9108925bfd75d0744be11653d27e57c16ff60a7bb3918a7cf3bbb8d9b700efad587536989f08a3bcab4db9e6636e4db9af3f9ad917cfadaf386e4f39905dc83fefcd959b0c94372ed55f38d361bb2ec847097e9ab5e7b223da4742b486f06c62be5957fb3ea9e182897bbf47de96e41e69a70636c8b2a170a0d14982d98dced72533f9187f74e5f5e26dc78e3ca0f4f207a7d2421b683daabc0b981365e05ce679ea760ff0b7fa3465843cf6dfcb671599671a0116be3389fe78cc54933dca37bce9e45b7a7acdf6cd81c0a5d0a7429a594d29d15b51debfbb0888eb0880efa59a32c44f26e52122548ae4ba9e9a154e39ab3fd198d5fffb0b640df158672eaf613210f68fe4e2442323df993f27585457484d3b235a2effaf92152bb5c1c22b544e24495497ef5b69d68c67decf7fd64289fff1b357aacbbbf949ca25337bcf1fdf4d91af1bb9e4567d4908f0d5d3b76657b7a9e65a1f8db7dfe86dd791bf4571d10ef9c56fa9b0d6b0d4bf97d6c8fe5e1df71fed5e4ba1f73e97e60bcf47e9432382f7d76f54ba958254339907cee43575756fd893cea8daf42bd47bc2694a1eb32145bb7926f3eac38df22ca21d27921b7e1b43a6074a016181d08078c0e74034607aa1f16d11166b65aff30e49766dcdd2767c3223a382116c73567a519cec13f33d5d3472239fbbeffd7cb2512078a72b9a48c92668ae8b8dc874574844257c57d286f88d497f5d403bf0e08f7462c1b7252e8c995601aa9e366bfb29d34c33d381b1e499266a89c9266a6542999492bb75ebcff861fd720f40221a1ef87ef8b314810dfe7fe41f90884165ec2407d529aacd102cce7c307041831c28009a203f2976dc8324c96dbff83238ddbcf397761aa8089927dc3e6eecedd0f1798cc15926edb23df116ef9a16c960233e686b5cc4783a82b6d96234957861b977b85a4cb52fa91f9e1b432dcb8fcd2bf2554165034089993a894ac998a7292219a1100001240010316000028140a06c42291400c8671aaea3d14000d78844a7058381287a21c06521043718c2186186400208000400c52c8c66c00a56d3261b78c975d3e568e8307113bf1fac4652e5598d4406b80979a904db5b65dc3479ada597a8c81d43686e15a6a2376d62ac86ac7c3584c429b405e4290c1dc510bba92aa4427ff516a1da6802e1e1a487ff0236d1c9e7a37a74a4964dc12997f0c3a701c78dfab34c7c30652f0feecf9735bde144299283873e18ce9490869beb4095a97a2a593a106ad0580850578a493fb5d6e4049af924425ddaf6ec08b3a0a86e6c9e343343292a78ace5342317d6a7c0ba7817f53a6bd93eece615c54f9cc3511c3e442ccc4e8da7aace99c58ba9fd45ace727a1c1ea3f9697e24e7b44adf4ee59a81a6f26737496058ae011424f177a5b1b0269493256667f43e98a16d73fc27eea39a4aef83996b73bd44dc6c8ba6708a867bbadc1cbf391b8fbafc210fb9de0fa09424ca55247ab31b99c9f6d5eea1ab8933c3f82708a4690d8b4f274996c624234f044173199892af32886e4f88c75b14a60e0c1624706c1edd2cf29204b85c92cb38395a4b84513f349121283415b72413442f9bd6e4704da08e8e6817a41b454d796144d6aea41a345ff24ff673182352e367ce8cc8b536f1a267a073abae4484263b611d40ed6b93da27050d75fe4fff42216de4746f6c26ad501e4e8469480f002c87e7297df2c091f6e430e493b17b93875a3d12131577cfe638b38bb62859dd96b3eccaa789e603e20e7449b823aa67aa43bb098f587f275a31c40e564bc49640132bf8410209220fbf2d119738ef5640e866a844a5a9b423da65288b7f0327b2fe44a87a75057c62fac1c453f4241d0b6d1a3ffa7ed76695d8723c45cad94f77b92d5f4af292d827578636967ccf7e4c02db0b8f5eaf90c63c9b29e9c1bfb3248f3eab03ba2185f2d052d702c69a93178f8fe582baebcc04ca9ade3f4e298178383f40a76394990d70d4f418d541258305cba84fbdd586bf1701a1be513bb8993ace085f35ab12b5d584444725fdda30582fa8d3f98ec83ccce03274ea6338ead5f9335b12329793e9a607dd4921a8a5f714838e6261391b0363276b0384ca639be6a0e362394cdcc4c1dc891c936aff4187f910f84c8fb69b9a95aaabe0e377d4091d210766a5afa9d88dca80e20a87bbc3594bdf7cfd3b2450d2b67e97810c159eb2eab44c820d19870ba5a765346bcf0af9894f987e902b8618232021bccb1ba1e3643f1f71c81252b43cb6355dd55d26e25c6ef560a610f2756bdd833ab4b590bf9eebd5b547aa9c2d99d4ba35ff21fef585496fbd697e8133ae383abc688538ee85fe4852bf103ecc72ed009d6da04c928bcb0803024f3ce37e5f4e4bdc4ae62ea1e7298727a6ac01db041282963bd0942725627f36e8d9d99c0fc6511f20a1bbb1dacec19d80e8f458754ccbdafdb09da6e107a3135edcc8ba95481ea8f15fb64cee75a06a5687ec9e5c63ab5a4b31e41ae75cc2f1f33759f92507dc6087f2391958d6e9be2507472a7117a62d877e9f8be49674fe556f30b25cdae9554896e9b3281d94f0b98c9ca1940f0c96014c55d283fb30ab2ea2a5a42775a05e8b9ece20f8addd1a8e89fa98983a0c809ee66dc982f6c35c7f3ee02870b6a62601df27bfc3fbfb0ccd313243448d85c53cb97deb0a1ca4a5a1fd13e7ff1666b0686cdbb85826bdf674b975d2538364c8c1ca1d046e69ee3ca5f7e557587b2650fa7f9639b654b03120ffb476a4547110e5c5e199e771c44060d94fc268859d98104bae486380286b2af3253037af995c8db45e2ef3a7304083bc5fc70e01883352089e00da69d424250e3e01a4e52aeddde851f29dac176756a89b30c54f60535baa27e7be00f3f77f32f53da219ae5502c3962db435a97f13dc2f04d1ef82913ac35e507fafec477cd3da9661734cf5ac8439a00078f48baf681b6a57e743bd15805b152c69a3d078f428374becc1a650b48f5199b748365812616e2ac34b02222bd670689b6cdb11e009d11b2b3900ff07ba7d162bfafee8c3d69bd67ce0fdf75d0c26d937250f06244c34420640fc79e7ee3d626b7f306cf82eead82fb8ac9c3f6154519f200c430c8a7ba3651b07ae3e00450ed87f1854d5348154e9aa50f2590e14d6190eb3116d5abff1bf461836f6a0086f1d7fb01067654ce8f4e3b1786718d6de68abfbd1c08b9f0b43b31e32fb88f25b9d367f9d4fdb4463dd0bd103fd7720bef4a9fe9db949f5bfe8f7821a4c3716e4a81de8756c4b498eb03fe95ed298ab9cf43a767ce775ac01cd02e9404e522527ee3f0badbc8fa0094b13bc8ec53b0799bd38015b4af6715b96206d9b2a8564c3d86bec949030c0dfa01a40f4c4762df7852d8cfc39080884b2a1a71f981cd36d9cfc994129da67287447d21939d46b4c5e355ab36105b70d5a403993249a5276c2d4b23b44370717693341787e03409aa9226e94235777a6c34aa9a5d8d32ca9f6ceef3f135d002b25332aac5a9b340b48d84338ff87a29b75deb6f35a124cef3b13c7616859639bf6acc1ef6374da884d6f841a9f534159d6d28a4f476b0dee954d6f22ec4fc520691e137382b66769194af9ac86edefe1066a686a884b0e107baa5b71b7418f9e97d9ca8ede3a82b5964358890c04a480d3b689bd2a3e289aa4a98f462a0a6aacc3eb7b1436a69ab96afe2b8cb78d64d8b800c37db84ce6eaac5946e5304ee2e6e91c337e089480d1e0065ad522979512a9f56378f8624854571b22f5067240a170888c34e53308bc67691af2301e6c5ca4effadae90329bb6c79f94d4feb78de54844ee5936fa45b14476ecf2c327c8dbee7d9484a9b7ad0d6181c289c5578065046fa28d2b588052a42fc02239dbfef6a516cb8361b99209f28ca226668378bda522bd8cd68d81f44706d622dd291c2988dc02558826c61ed8d85b8ebf432031aef728bb92d10d61c59ac943833afad46acbb0037d35a941312ede09086d529666992abc6b7c4b89f6a669a307e31b2aed2f452e893aa88426d392d886b4e59c4e823f895e076ae970009b1195495b214a1a78a5426e0e06e25303678ed460fd743ceffece07e17a80b16277d6e6cb072b769e02f9b3eb98901a895cd140bcd13ff95ace89a9d087f85d62254e3a3fd0097bf429f28d6b713aa73ce6cdfb6bb319aeddfa692c0685f2dbf0b3670d2bdbfb58c89a993fd082338e1521814008c8c76d606972c2a56827fd70d0ca7ab9295108e43e9f8b37cf426be877dd29ecd0814cb0d9170f54eb2bd293eed0c24590a2be1bba942d3cb64a1ec78abd3d4fdffa27d7e2c3ec6071db9e2410e85f7494e4eda7b8c71be303a3f59d4e969981848db025e7eb9756f1816fb78e3798f5c7fe9afe61cbc0cb626cf7de404071f2850d230bf027d9e06d505bde9ea2773b0763f4c8a3ca2b59df2beb4a072eb19d7c8aa5341088fc482aa68241b600863a7adb251e25c6c1a184dafc3594d3f5a73925afb9257fde5e8dc0c459e9e0208386e81f901b9ae3a708048e3ceacefe0e028daf5877e6f9b89e81adc2611eb704ffbdf9cdd10ebcadbcc82d230d022dabe0ea1e91df6a3004119916de3881120daaaf6d0d15c09b2c826f2a946ec78b69369e2d562de496054f575ce8736ef4bed669ca28023f9a0fd9e0bbb2f512a9c41fdd22028a1e40586bfa7db80adfef5c167a61bba10721b7b7e34f2142240bfb23d7283d76494953551662c4baa7b76af0e6a5c4c76d861b6792f3b49c8f25a9cb0eb08a105c65474ac589e3c89d195fef452a92d5d9a50b46d0bdea16790a28e46d07988a00dc13be7d66f1d02806dbb2ab394672f55230e26c86e4836226ef09d6dd30dff3fa7c650b8544e03e817da739dbb425b3208dfa8e8f2cc9a742b327eb0934223aac2b61ee6d89111c1fbcc6c3292dafd6c57aedd0b8cd0e06f0d049f2370c04bec5d59ab722982f6eec8c9b5f44f74e1a046426bb3836777191d8b840640ed36bec89e19ce4487ca47f1fe7f1fb2d06e0b319b695b6e204f4ce3cdb379d6a96f0a45ee4aa86460a2ee2cfe2ad2995fce092a9eabf2056a6a280286878bfe9e6831faa8e1a23e88cd76feb1c6222416f07f55aaa3f8c7c8fd5fefabcdc16d66395cd889c65acbfebf5a4b755ba321991628a0d44b049eb87e0cd6781bf6f901e93026854955adf5a5faf6ecc81db2f2664af1600904b6b94b62ab0cdecc4c05469e52620bd923b896f3c9beed12a93539d8d0a01d3723a503415132f811a822f75345a5f625714b1fcfcf3ffda1ad2d9eb7c9c6538ca9a1f6a353f0a4ca14f148b2427e6f36cdf88e460ab42355b751dfc3bf3d8f2d76d51447cf56e6fae8df78597a120a100f6eed30fa6132ab180fe2965c7be8aacd3453f3c128e7dda21be6a26ac9eb04c4a237cc5d0d3e83601ea791b8c8801f58d6b3a3db33085210839efb425099620112485716a015c4a32e0c7d22f4f7612522e49871f947a4d353394d76b05d2913fcadb3be5acc3723bc9c5c090fee901bf305da00693fc452b481606e62c92afc63f001c5381991570e40b72359eab8c815a1403bc3a63640f1821587aa09b434810faeaa2036d3c6e6b714478628e30dfb97d02d2414da8f4910ae65ae513c211af5cfd2e834d5bec0b5cb7d18c603ac21a29d5c1009dfe75459260f1603f99232014f833939d4a66191d10c45b55b6671ab2d97151a9023845084c8d9f1c702c0879cb81e0a5f1d40135caf179c46cffd6abea7f39c0e4f3b6a1dfe6a68c6f1fe43236483c38b19e8c3892a664894cee3abefa33ef4e1367ab6bde084e50091cab843636e062a23ee023e16633bfe33331039e5d6e846f9f09f8d06ff99a8bd3f158ef54578aeccd615d5c86bfb246e5a702afff0872bb1d85966ed28c3b445a9d2b9ffa2ba769e7b0b937f935022ed53e81dea99a4419a1ee128391ad2fb68a1e0aac615b780652197dfc293a1eb6d6041f239ede3716c935977f8377670e3b421b33797ffa3839f6f256c472c1f3e53367a30e5f414c48dad800633661f771f978d069c0d616e9b1c0ba1bbba8046e11020960e83a5eb708878d3d1e46f2bf2c106b17804bd4a9c65c81d9f28a08f363dbfccb06070126a3b34edcc9987c6cb7d41e1186e5494d0858a55ae6e03d13c62c3181256664b2f096863e8b80d51e8b46f269425a20f2a8694f5bea9f0cd4b1fae4d4e7a4230bb4b98d96d72d14b4368514d59497d6b81ab202bdecbcb1d6075df87bf798a8e74ae76f299121e0b763609ea479b1f3ed185e4d6356b2ed86f5827b932391f2f2ed2b995b566685aecd4825f18b99945c9a9c8c24212ce20f44273d139b726c9f5f7acc1f66eef56f57b22b9451481e2d8e3ebdf1b8e93c8efebee1ce2042752125a39a1df235a91fc05e77edf7ce51dfb0a0679854d2ddf7521efe0584898bdf41617999e84f593a22a0e807244b195be65980c60aab9e15831dce201ff475473335ec4b93eabd4c1dd1d34ef05ca5d2cff26cbfa06786b1d21d32fbd20f7827982277a68098fd555e6e3b6561495d72c3d9b4482e18881b524511e1f3a985048d0b25667f34c19c2043c2a5271bd45a7f05a76022706e7a36e4ea08c1be896a1be7612a5d1afb8928e7d380a19b02c3e1e73d6f74b7d5ff4b6163af80add5ef40337afe672bf32831cd5ca0931a611a923fa97293ee0732565aae8487d1e2fd4abd0a5cf860761a52e67fc97f87d2728384c18d4bb8c070d407545a819aba49cdaa45bc840920a3cc86717d6fd0157bec3fd64fe71d45cbe7dcfdaaf26a2ff1bc71cb47d7a7cfe0726945db53407ce82c6c16c56e71dd15ddc2181615065c6b2c1ca57f38cdd0a38d67e59623a063f49b1b2c70f7ee1934ed2305dee70c95a8486cd8c8e8101a53efb9ff5beae421fd44732f18fe11341ab1de7d2374204d9af88970b7d012b11059141f595c8aa2622598a085183d376315799d104378c335a78c5c21bbc9f2575156183af1371da551be34d780f3ec2b25e08087758283d8626a7d6f9b8b69012776a236f875d2923ca434f7362b5e1cca26ed797c1465518a9e6205f643e7eea2aa4382f82ea3ed68bac924cff2c985d4483096d7d5c6fa00c9c1a309114cff39799cb37d089ec85ba5f4ef79ad8e3afbad5a9886e462b59dec87eb9edc8f0a49d990eb13d6511ef73c9f62d8cbd98b010baf0dc7358553524d603ae530c92844a9978f4e5134f8fd39a01c011cfdccb0f0904479bc438458197d738e6329efc5db286926b4982c70a1008f79cb8c79f211183268a2d297a992c991b515aaad506c1a6468fab6abb9042eaa4c72187da0fe46718928b34bbff158b22ce3c8763a53f2d26a6490d2b3753e3d8d4fba15307a3f99cd17fce794ef121906cc3519d2a0905a79e566c29cb0f3fe9fc431f4a8346744e5fc6b1500e8737bfeda96ac814a284ca167d9c7da48406c2b213f1739d223da2dcec3b72b0d901a503169dc8a3bc1be51cd6209e03a537013919d00a02507d239524b1a6803a82511aa27046f3e9acf3b2ee588eab92a449d9864b38826a1044596f3d858d8e0d49d02fbb75fb1fa62509918ebf1adde492526e84e155b8e9aa516e2b78ed23de783cbe20961e575480eb3d2d23c44f5f9e001eea1462b6c9174267d515c3ffb4cdff309a3ac22bfe178c6306041cce945aff5d101c5ea2e8f29fffd6b42f62f3f3a9f28218c9c04371ce4f9af5a25d312845a9480aad287ef1f5c8c6fc255480aa5efba720a7bf30780239c1dff0da7019ab4be9005b3caee528e271c8f9de97e44a15c5384ca4abe078a265e33b625c1358befd7b05ef7b74396620a410e26edfe70c84ca6781ade92f98b9e69ae03536b9e3775a746707edc0af543ff800e6b070a7dc82d7468166666da704fb5777c08a1745111274bb9aa413c02d50a0c1196916979adfc1dba4da0d0fcc722fa38c8e774bcb1c6235d18b666b50d7613c18d15b2a43aac212995e62df56c8592a46372b02603fb4b3f5496e6761f2492d930745c0ea1158aece11d78cd8d5141219955839b95e489093618924839784ca7eb577bd4e19d9ec24601a270a4534b23ac7bf8e75931dd4c71567b0ed4af629844a1caa4f82de3ebb99fd734b79c5924991be41b0ba615b3ab9c674d9874d532c64125c5bdef3c74968866ed88391eec218d2beeccf5800171c7d055ab650106e05937794ebb40b7d16a31f3abaedb831ece0c76d7c67d9d41f19201155fb858c3383ce6bc04b6fe830f30a9768d241e5e82e12361f63ea59f1f94f3febb962a29be897994c5b98545638654cb4cdfada7a61576ac26db69d92d1f8e796377090412bebe8883e9da083db5a2c3f9dd8bdfea1aa89904438333d3e189728b381a6cddc579595efe6ffa0b66e003f2cb515aac86c7f9e25408beb4062c9b506bd2a718dfdf5fb26dc8c76c073bafd5ccc125b48293034ff6b30e73e25015492623534979234c7448c0a9cb89c4d259232c644a05539a6cca71a504046af665364f4e18546ee7303703c952b3bebad56d79255b3d58b12d69ce2beae4abf5ed94438b4c46157b5dad77992d2cae4a6b9e0042dc51c906a064a558f509011149137c76e98d4062405f129cf9578f0feecb76d4ebe49d1a2ad4aef5bff82fe63e0721d65303d606e81f901117f5db361b49db359c40aeb6d31df552874b9d3e05cba2aafdc762b5dc3388a4c0b8c6acc355c91b64ced75e9670109235f3d72c3e0950f8709d067ab10a098e129f7c1d2bd74cc262ddff4949157348fb26c01808fac59d5c8c115cea16845d82a7ffb931f4bf9de11073132cbf7037e81a5cc5d85f60bb7f3df14b8f5c0c5b4989d4983503e6838aa3ff452a5634e73a1f468e831dec35efdc9c322313142091fb1998f5da7a6f5112c4a2016b206bbce43a9743d973dc40b8bc9211e1ed3bebd8aed338c3b870ac23f489653ac223d1c4c36464c337f542a45e7c8fa10dbf6ce7119647d93201fbe3c5c84fa51dcf9e6a8a2d8323fb8810a2b1c2169b263e36fd1dff7c90699a52f0add65b6ebbb80c5b0cc3983ecc8bcbefd6b5c8158e93d19686130c1bf61821a448f308dccf57e8107b6bccd64462a1cb792e3923948903f3e26c42161993789d31de935da807e5e9eb198cf5a83a5b2b222ddf93070528c9df5d68c0a7dcf496b1e090dc6dd970adeedb04654fdbe65430a4dc00f1263a71dd315ac38b08d8ada99274cbc2f192b2b33f1e71322c40624728261884ca785e9b07fc10c55dbbbdcf60d6908ad0acc6d0ea8de939fdc9c44a31c9782a300f7c881f4c61801ba580eac444af2b0bdf808a8a4aae47921069fe0339775e7d37336bd02ea379015d050d7705a2f0eefa6f20619a312877d4480ebc0a86e11a3386b0f014cf5cbf2ad10fffdb5e9063bca67eaa2b10ed51a440eadfe1309287a4c8040dc8830e22cfe35250a46a12a5a9d1f48ad58df51ad1b9d0d2fd02ac19a1045b71035a6bcc05c73be5cfe02d3d75ff201ce055815d87ba0beef481c0ae6a3aade0dbacb3c694f10563156ac274c25a6111828fa7be3f844bca3ec28d586b69a29714f8a4661cb0df724b6f17a61a951de27454128eb138d7253f66555bb6db8e8da6f683532e52ae3dfde65475622c47d0847855ef835324f4f40b7166ff7b0a33d3767ebd00902c2f11e4537ada46f8fdfa8465b8682a81267ca51d8e0b977c0c2995dca031309cacb03f0093d80924e3a70d52ab3ec86d65c8ed1b57a2236c35b813a131497440fe1855e34a0c8fdf4020aff8eff6710b2751f195f2a6fcf61372c4f2812e00ccc25d53d071af4591d2d4a85bcdeccbc7869bb39289605684fac917a84be9f5f0ae5ad9229704e5dcd0cdce5bdaf11b077e17e6864db97c0e17aa321a8469a2bd55d3c9633a1e25846f8bc682def222ec480b0866c1f973855de1a9ba61fac20e7058cb711c9f50741cbe371528751848703c46b56ca2e67490532a83cf07d757e4228d6b0b3ab943a4f85f3c9ae9d5277920322aa30131af56d14508e96a9f961fd7d83d9e6e34cbd2940f25d695781ad2f0403898ee34fa7d70c7ba4e60b4e29f83d0058a5c84d3e5a199b0918c9cf350bb71460dc3bdf38febd5d30fbc20be40f50e9d00100c1c32810b8bc2107ba0c96c88171c2c2744481eabe8c30c33a6cdc4578592eb6f4a7560884efadea8d22b2d890b8dfa625a08357c8437e203f5793c76193141cc071dd34b28cc30f1b9ccd9e5cb651707a942e5fa5f1a66dc8ca01a90abbe4f84e0fc50cbe7af925ee00d54809fdeeb68d538a551e8a177cb5049fa740b2a2fa41582d95457f20f06b10b82925aa034016786e8ad06ae583dc4c23b5561050e1c6174ab22d1acb824ea69235362c70f4a811cf4d9462f447a5c026077829e06481eb87234ebff01bd7c1e2e94db71c8bfe03b1b42a2e2c68fd61563665c1df9769346d3d2214d620db5326db5176ac0abdab771cb8a379c74b908aa885a03b73e797800a31326888e52a2d2d68f9d6133474c8d151a335e5f80f04d638df5310fa470c1aec29c77f4808848e37d82812b7d17e20d67c8f42ece7dd0445d3ca0d72998ed6beb1c0a1c10d36e5e43d0ac73aa26605d9cd34b1e64aa956e591bf93a9640d0d2224bac1a650fcfb6282a4558d74338dd6bee2c01d4dbb7ec274840f53449a6a64976944cd2fa5ac94a537142fcb62ff045b99f5c22eaa7d54c29a70a63fdfcf5a340f2594f978d357a02e026b5fad3a23942e2ce9600b75719d10b62c5883ba642e87309599a5495906622a371593021c5758551a544a60599c6980cf2b408684105032563931c47061b25093d0eb0d635427430c574c0e37117ade01b40175c614029bb3ff4f922ef9f36fcc5be746adaad34e7541d9de7b187b1b3ab28b94ac610a424d109d1758f97818e815f8aa991442dd34efdc92dbdcb09561da515483b7b15edaa491f99fb699b5d961c0ea268ea56b7d0f39d6eb5814794315f51e1075f3b5b2004016525b0b432fe21c217c5d150a524af8a155f6e9501541522351227b3d26d3aa6ed6632d64aa8543fd7a14df856110d8ca7207ba5299986bb8a54bcc7790695c5ded1753ba015de0eeb41eb224169272868c2c2096875546d1a410e867a50ef9fd3682b14b09a91c44122805c91c64b45a94eeca9451cb95788e71da0253a8c686907dd4207015fe831572bf5dd16e66a60df7d8762f3d0f5cc82d4345c5e964e136c5eb55a4276c261bda7125397d2389cadb0f1405333ef5c6e74cf5c2b7fd1d164d2fbf69aa66d9c2bd37a1cde48efd147a6e9eb06ac52ae73c66c4361258dea2497b03d6491ffff3ab6a827ca6b87f01fe7f9982c5d1bbba137dd5e624415249a1b8a9ab5fce4db6815150bb5203a00a56a0225e558c39f49074418cd1343a715c6c82488031aadd40c594738c88b7ab2cc2b598ad7a26e59afc944bede4a8bbfa31a7d56bffc9ade01a814d21af4d103b2d53a4b8fc715562f740ba97faf8dde8d7d8ddb2822b5e074be245c9b39f4b8418424551c866ccc6bc257d8bb291218e1035e8238f5960434c31a049d4f9b18a18f0e0e7030451d5f01c097f259735a60a47994dee4910642da01936a2f85520d06a149e861be98fcd2e255124aeab46641195a0c0432a169c1a9f97cc14a1f6edf6c4ed287bb5f71945b34aafa661f39a6e797bc616a6046094ce3bc05a0c054d5c439d986bc5fb9e906808de9a811ef58f861c69979c5ced44f10c3100b9e00cde59e522199df10e58307046824bb3cbedc569cab152339d6c88666437a360d9c88c4997d1a9b3dabed185605b6661e9c9b4efb562f056dad3a488d946f7737c933e448d67eaa41d5d8fec48a483e8509b6153635ebab144c400b41aae6038ad15a27064ddcd4520f02147af098221ee0b6460a0cc5fe13b4e19451bd499b61edf46401d4b2050ab51c8a2054f538b09c95dff136ed9479502c04f0e53c9985ef213ef41426954a3c2f31913f0b7d847466668c5da3cbce292e9cb28fcba588bf7bbb86f17fb83bb15f2f41b70ca64c6975ec6b1984459bb6610ede0843ded07784c01167b945f7d75e519fc1eea88bd0e4c393e492826522a22076b373b601e1022d36b4671f0aa0a7963a5bd9cb89cc24fa95eb2c6b7d7ff751485036bafb714bdb47042a7996b836a1e0cd84bc47b4a7eff7a9a8f739e2f1ca11b0cb988cc1e295894fe1c3e59ac3b14b63630061a06c1e1cb8720416c5548dee42eabb0a738095cad224610926d56f31b92a3ead96db94dc48ebb2646dfaa58c5f0c524d525dcc6aeb832fe3d4608a8d10703baab1b4784809b28a22db85e4c302b6bf1154310539c80718e7de1910a585cbead36367d44c57975c032e1cda633c9c3a88fd846acdd7026225e12152af9cda1c2be23a5a664fe0713fd082c0b528ab09437df5081b1488a4886f2bed397a886c32c0e55d68911f60b9789aaabde6b26bde057427498d0398558576b46ef22591e5cbf1a091311232bdd35795513d5622e6ca25af8b59ba896663b257dc08535cdc0be091eeb3d4a08a241ace2dfa20e403ac9a71d464dffaa067011e5e5cb5caf707c8c7bd441a2b50cf4ae87915e16614530dece5e369be83c0cb2c7d5315ab8db8b2587316f79a16916bc4a56ba5b780d7944ee03d2396d980354fd49d962d98b9872dfbde3247297d2ba484cb6f0ecb262ae0739060e6227438674e80fac7a27229f9e4c919939015ab99c7d9f9482b412761aa6e772b09d0583158c854f252cf73a5efe7128c7963a44c923eebc1e0ed22ad695507efd7e40896c191ff341c1f3226b2664c0660a6f28c11bf1b05fe4092b50def2a42ad2c037893b383341d19183085c080312564007f7e270ed27817169e077077a06c5348d6029ee0f157e8394ad68e2c09d5378d9365941b167b63b48e1e1cefef866dc9f2e295e7c7456d99931cf7dccdb5f3953d0b922ef202a7d3fd3b7582ef85fc0c5c866c5e6479549fb6c122690e3010d337212de554111c535f23e8e073125188b8219eca0a272afc3cf5ff8669cd4d9afd65c9907d18c810fa80f1020afbf2e468744445b583d2ac684f7e1e2acf745987020fcd6241d4322d7a4b4db6967076bed96a7bfda7e2fbf663ee0f8bb52043025f5491bddab9846ebc0f65e3ceaf44290fe06400c7fe14bd311d1c3e58e8a809bb39cd26b8578d572234bc0359b48ec6890f37fc01495f08fbf717d01c456bac8e482c6863f79bbb9c0360aa58d9f1180b9d5671aa28f5dc188617deae3b99d55b32da2172479b78231e4eb01609d2c525347592906bd6afbc038a418d127436303a6f2eae75e625cbb66316266dfb43e17ee47652f585b6dc9c211d3b4ee4a3debd1e08c6d3da3924d85ab76f670968e50f826d657523d905b8ee8084d889398fe0a3d2aa1a56c5b0b39dc859f72021db4e3c5383e4ba6b9d91daec9ced299cd49bca2844582e464e998789a29ca49fc021fc95cfc9fb21895e7fd2bb4a2276577ae7656cf24354792e26c219cc451dd1ac37c4c326b94ed0c468ba6db28da41e52492062880e4e5cbab1c655eed3a825cd7cc17f16a70ea1b18da19ad2f3bd10570c4e2df467ca41672f0d748e33d40a6ea173f150cd734f8a2c4a4c99926656ae044fd05f52570f69feca2c441d403d573f2044b13fc4c3e92e9aeb5079a4651e2cee1fe31b7a892d4e9bd2941e485a5557aaa4489e9026a1409c36584645b6451d8fa67be6532d7ffb3de9f353bc1297dffbf804c41c8dd325cc2151456bb5e06a78bb51314db21bfa1e367ca9e789e8cf98aaa86cd310e5f98cd220bc1ecb16047e54a39f2d60829ea34cb63ae9f54a2c4a705405c6d3b270fecd62cb85b10b00c89b1f9fb4ca0dd0cb80f19382816da63f5d3c3fc674710688a124fae7abcba2b62732ccd78da75ff620c5e07915b4b0cd7bca4c598cc8671e34ec3ed811293b9d8f514327d123b36ff026738cac79c1a3ce257876a0f34ce67be85793334c25a33f04111a5aa8172753ae2a8449c839c2e47329c73b86cd316da48f8a4dc9f631b94644a9654a59474965489224c664d3e5a06631a5934587ee181498f54a820adc32259958dcb74c1710aa49b40feb812b5c2472ac3c42af9e11f3c090de4c375e694b0e9e97c4ec14e4999dfac062afb56f8ccedf78c62b78ecb62e7dfb88e836f2f9ae67fe6cbc1e2646fa943d49300ffdbb52e88461971a03b4214e08edcd6f94f5db99a2da23b50586b512261d28df301d9400072167c52cd41e130f1c64f4b0b84dddad9397e05db08f961580355af7d4e1d2cccb42751e5d3461f93c6e7def8a39dd1703d85d6e126d9a0fdaa164c87bfc80f3a1e5d34a770a9c05eb67909b524545ac8cc773410ee9a55e9fe525cbba91713394a81840329aed9b689e80af3a3e5886214055cd5b6b43e81486b0b998a13b4dbca6b7d597c8295291ba3d69438b9b79f7da7d45c1aaef7868c904ae4ec19ac10e14876a445748c462c56bf44ea5dbb192aeb566fbedaec19e5a44c5b6045e7a7a5ff19d2f602823e5049b731782b78fa9ddf7c7865c50760168869d2c27c57094f9dd012e0aa301cfd0200bde66b6f85676a9ef223075fee3fe3f44340c0af0450daeabbc25206c138de8648f62e4771a412b5bb8c047dfab20ce3c677bdaf52d978311a41d2a812c4d803d772de19eeb440354a0fb7bab167f4f6f3a28e7dc45d5a3162d7c0852d3eb04e8ed207ceb3a3879e3689fed0ea3de0478f346fa695b25f67a119727abc8ae2e3564440e0be63e91fffd4b907ffb936fbc9f4ab49a302a6ffebdbe4b4b64d37f7da1a7cceed899a97115f6ac9bdc0fc41dd873b5b93417e145dd237377a1430ca2c409bf2f40b3e8934fadeae314fd0daba7b07ac395725c00da4a29e300c3b8e315397b0f79dfcc8ea0925f5fe754d248425c2e9828202232a323d90f9741633689f3035464121dc23217fd87d3efc94eba17a4cf5ee849f2e1925b2280228b8083c0b64a811636e49db37142c16418ab094062cba7dd5e1dfa166baed803a2b82fe8c00018e1b474f5a8ca971e0d7eb65269a4455b45cb128ca4946051c3c8d70224b0a38e394ae78f051747e7ba6b583e5ea7ec357fd5f760321a3c731c6b6051910b451d4780aba159556991eeabc4d22f621f6e32a09fd1832dbb8e52cd7cfa7d59b9627383d841ff635991806ebf2aa1d1c1e92d22fefb7d088c557ccfca51d1026ee11e1aaba4d66094da148ade23a61e46ecd6f3a4435bc314e858cad32039f6c83686ee9eac8f9beaddc617dac9e92a4a7bd526a97f59de4e51b8c6e331a935d865bbececc4ec32d5c6aacb1c185566ea0e1ec164039d97518f271674e3c2ae5dd63d307292cfcc00c74e5a08272084152c187433f27b20280ac8bce64f44e85a3c0197d5f821f4b5173a975b9292d83c559d5a1470a904daeac8af7c5bec4ffddbbd27c50abfaf86741b8a5272efd96dcff9bebb6d3b9252bbd6ea1a0c0e5a4b6673b43bbaa2342a9af898b26dcfcace208e1f6c378c26cd303ab643b6cfdab04339b66ee35b510038b295999bb2901b8a815d52b59d5856167d49cfbe240a6a39355a9ca1db25368311d1b179b42e5de6b565bbd82aff80dd97c6dafeef15cdde82634e89bf6b1b1c391a4c7ba0495c0e53c1a3b242bf9e7e8bdf6e2558e84dbe68705d1e6d14f0a1bcb21d590dde042db13b911f2cf4f261ab138a78af610e6efb20caec19a44371de399deaccc4b10c3af2f6fc61812788fa6a70a2b66b8ccf8f9a6979f15e150d42a7662c060207e3e1999def7bed7a48d6ccfe5b777639e206aad8b2ae15838af946df29656e1730302068851b5c18de64610e05092d98bc008ef589a5b3e0179dd6beb0eab5948aa79eba1b8f81a8144aab1fd4d7b42881e15225fa10c6ce4fe676f60b1838674156f0b7334e5acf37a04fc51b0ee610389230f96bf95168ffdcb194fa7da7a217858d67ec12b1c7b8bc1ca7be3d5f0d12f4d4b6f731c113ecfc04aafbc02d529b30cc59100cc55eb7f8bcf38c79549ba01daa4f25c1737ac821508c59ca1d754507d539d48ff173630e0f550b79de752b0a28854c6e5e2b25b215f744ea944707d4695d5000b807f8b5cfb152dc9de207ee310bd22cbf15fe3f3106f2a086c26bcb69294d1acf3c79bf3f805849b28483f743a5bd785e0538f433669c8ee7d3fa86d858b93b7e522d4140058821b3d5a495770cbd039c4dd36d6f32a5a393a4576ca5904aa63f19667c09406c2d4251aae767aa42d027814942e5c517b1e875b9d0d37a3d1d335effb449ac008b5abb071e9613696fe166e55a6099c83177e498863e76583b1a0ff6de1446574ecd919d31f77b89ad4cb12ce1a3df7a992df0b1fd37a3cecc91978abde4a3151efc82c4086f1b7aac48866dee5bc70638e372b73ad14e51ab60c37a95194909e8d142ba664529c0b35236e315a10da1adb559b8d7398e46ac99620838e06a21087a3820fe03daec3a2103e0286c97e82d92778693ba6747a34744dca3be4201ef8c5a34407acba8257a9334b3e3a2b0b5e653a4152b28be72b0fb5cd23616dc3a6199e08281f311cc64b16d7c144a0d1ab7b87d09637859c28d83a976acdb40e5150097ac9ca1560053951535a3d2b9f69f845a49c1e2a07c89d39583deccc577e3ea82510dee0418105e80bd1465ea564ff34bd357142fae005083f9c1a72b5b38dc312c0fbb702898565709a4e7b4fe0bd466d619f525f2bb02c586d649c57711d9a89338ef99ed6d5e4ce84dcb3a586225307c406736f5ea9ea94f7fa2068f1da8e7e1479d0e25e90526c83970a37da5bbbb20b7fd652c42e0571a74a993fa0fcf4d54a09bc525388f81ebb84f982b0ce3cdce9fbdab52d909a484f8c1c3fffdc1fc552dd5179daac0bb7fb4658830e08a943997fdd7b6b2e01e672441d7532389a2b4f531548ceb4542214de601d6d642c57ad4671b0e4ca75082e61ab049a75575ef96da87b0d48dfc00c909ea507ce4b533c56490116a44e8ff43984bfa8a550ed01bc03a53d081fa168526bb8b419e92f8a48355f5dee96c544a5e987b6a5bfc9a6a5c40182c84efac6663dd43c83da29f3d3495144a9309aeeba41f9cf9ebb3043733de8f902b58b5ec852030dd7af0187dead75174b27783a6cb4d929dd3ce2c11ccb5c1ee27bf9990f0d57fc4d2a0ea3c89242c32168e442f4b6393a6f4e701b0299e1f896d21fe1ca58c6fc4111a4fd47928eb94e2c7d9a3cf1176e15cca2ad979827c5421d9b9cdaddc856e7ac5b6a356520945c11721bbc1e797f66a7785d143b4e3613bec623999269465cb0cbd12c31ff1d0faee1423d3e445c3ba156175e9b03ebe03f7183bc92f76f05e4def92eb8b9e0f8357a6eac2af7ec9ae8ba3cef00edcb5e834791eaa24a8d87665ce1c23229618d1d085520e40f156b44188cd3dd211249fd17e72eadc5dbd93440c44ed1e687888a5a241bd33bf7045c53811c020f73b2265a60357692f0427625d42647b3b882681780125691751696c0575e9218e3c6ce512a81776df6327078aeaa36797db7122cbb9a1457ded4a5ba575be6b44fcf9f8bf6c1f3ddc2418949cdcd05b1bfab4520f7834236d589aa0e4fa50f3905e65c8d72053207dc6a2e03c014b5fdf55b8c2a2437129f5735833c6b17c8645b2766c4197634af5b277b7f0738235fb4556b4fa1e79c95ea394630ac8697958efc9caa7376ab4d519a6e1b8701a631502be56a176e9393d261fe7274c55dcb777f034783835179566b86d07a88f590d59463612087b145df7181e4cba635cec3414c89537688eb6513f8e2abb088e688af4e43bce0467934a035b2c00f6cee488d2a87e876545d53b4ea26ff60a1555b494176fb25ac58123c186a0dc5c09ddf2336a98633358a9b83100af1a1f5c2f72e1714cf8e4ba0dd89616135c3480871b072071be4ad694cd0859a1a361e5f7a44b79f3945c69acd227c49bda87d61939abfe593c3d35d32fc8fc86f4d2ff6e5ec99d7bdbcb089375f55148bd6148570968c31fb6c5f7ba222a1cf4b5e199f4f6fe4c095bf3661b674997f421a305177d13c36fcc9d6306bcf34537154a0cbe44495231c7a1483c4f2f5f29066823605eed3d60fc2d944884983ebb81df24ee25919068245af37df64f057dad46b7f039099256a4a6213a9b7f2f371205f5ddd8aa351d925642390cd5bb25b22a2ce02f7df11f094912ccd47be0af0b2669b720730202075d06e071a64116e9b22e575c2b689ecf2a5846c05e8ecc3d17c19a5aa17ad4b178d5d189c30b6441d47cd2fab65f72aae3da02afaa76f1af2f28bb71611d5945a1326d8f5a38644982929c3fc5d01b661f6b87df3768671ae995d867bb81d85f6e3949abc3f67301a621ac06c0f1e76efb6d677000d76556f523f0d97babc9a6e3b78537b700c17f4857f8d67184e42e5cf28210b6a6c124d03c234094e1c2e7b5c27332c41eb5fc15a5eb7f91652fd4627b5fbb46686440cd28ee3e4c13a3a58ea80ca14b94d497934c55d9d34df310fcd94611ebaae7a0be25ccb97c69b4a5e9066fcc7b42d7921a4ad4262ca3c187aeba3bc8fe5b914306773036d37514d1e8e32723bfb3389b1d5843c77b439d3436404e9ab34128f944c960df4f1661faa50c73bb424389b8d8309dd623b516b146eba0d0d7874ec2d188ef8d453814e5b4287cbcc1ee478d46e48e6ac1202ac7b31171c4c049aac75dbcfec2932af569845e736de473f427887507b28258daa473ccef04f6528c38145f8cf2e39eda30ca7745d3941b26b303b61f18fcbd91d7477e345adb309c9084132a20cbf40d78323a890bd8856bbae45c52f9714f24f9ce6ba98605629cb216bf6feaafd8c684744d983a84c4a108e789ead3bb1617fc9e96281ea49d8289a0e399b393510901135b6edfd614b15c49f490d76f046f8bb61be9a4118dbe0aae47ba45ba7622ba6adfe4ac15029b2bc4c67a722547bf453905379173c4e9309dabd1d5a5527199012ab5593a0ab4209ab5c1e93fbb7af7942bdc3563e38ad4af992ae1ef9f2473335358604d13c884878807c67275587eef0072a219bcd69be69faf7ad22f24b407a17b2bbbb2c545ed6da2d7f7369e4ccf887441eb7f0930ab3c4602d093edb716a9ebda0a99ac022cddfee0ff6cbb282cd191c4231b8f3cb8afefacd1708bd7993ff4e0fdbe98ba3371df43f4ff87fac9fe3c686f6f27e9ca806ed72b78fa7085df7f31fe20eb8bb3fdc32415a48d62f126c1f73f654e7b88af14f6bcb93365751b5d9a9659c143bb1006902b55db21d18c6f56297d4e2d0f970bb3eeb9be00571c556b7031127b2dc32710a35878852aaefcae5bbe89f95af0e96d67f1ee080f969b520f7a502defa4255d90d545fc7630da0aa9e51a5dfc927b3160a1385dcba9fc91bd11bc57e0f685b2585c5efddfe796689c610842327de497a2e5196f65cfcd20d91b83dbd27ea0ba07f18408e2fdef48e4d612c9059d37340f6944cce0a5baaa6d84438deda7ed7d6b0efe110a3a6c80293dfe714234f9b6ff3e986c2ac30b8b753857a59f94dec9389f3c7a4c7760386ea2758e807e2d6d1141abd2da223f7bdc524f605c48e0765949be643d13833bc9ce7a729f479e5bd34b306b506760d7ce58410cdc7447eab3162b403844c1423a1591010c546fc9d8f6e804ebc9fefadeb81a694386e6de437c2c38f47665141fd61421fd5a50d7d5ac4f2d0b001fadd3df1c679d04d07027c38eb67258ebe3084eae2f430a12b5fa11be9be3afb1af4c7bba193743760ac6eb0a65ba4e952c96cbbcd1930e3cdfb7390da322c65c4398e04908305d72fe458ce9c87b0c9d7900564bff59379d093abd76a2863e713e61fad79b5b7d7317c7c721afa74bf00b5964e1a62bdebf90fc5b7b1d83120791a0320e5d8fdf2ef9addf7af561e103b4ab24a323680beabf0d47798d12894ab6cda8e410014706ec94f3f566773fce03004156e143e22444393c59d44d39f49f710a0b8d3399af4192f84cb1d14bc29c83512e3122bedc25545f8256ed9a074f0847002543d13b2ae990f6ee71b51497c084579ff226fd90529aad51f23a06918bcc53f7c19c5ac303461c267f0820b1491a0f207da89d501d57dcffbdaa23ff5f3f60c9033db29984304f0f205409bfab504df401965046c6a96ef4ac151481378d339e0e50da73c1893c5ef315eb95a6ac03c9eb7a4ab583a68a119920cd786880f983517c52e42ee9e1e84b99cebb0a549453d4cab89e926adfcd1dac40b6014a1676b7a7e692aed49b8f28a4aef7be8eb2d4bee36ef1e044e2b71140b54e059a85e9512f36bbd591ce1dfd0b3f23304ead0f8702cc16cfa708798277fb6b1ce70446e33873b41b40b7a3ecbe5f570033c84ba2b71b3a4ee92e81840e5d9803b7ac66c0272ad94b7504f288888ad9fd8c94862b87dec0e35aed461bc16edd209c207cb082c9895d8211484d10832222d0705b82cb8ff11d0382fd36fe08e5b001c8c248ec36ef06a4b4bf709894d9992ce3d14a441881d39376629c2066482beb7317a8913c1861cf05ffeb6540318ee60d52c7a9b8897e45519b0448794a68a21254093203cb066f8c5f013b02bc00cd5aba0e913174ff94a1acbd1bb94c40ba10d32677cd3f11db50605c3c4d32c0e2e64546914b69b8bf0f1f30e445e6b302dbb7520337244a8088117395846f2d34bfd6510faa073cc9449d1c3cc689fe8999a9d50c8000a4e90ab481048a2f4600499435002c941e3bfeb053000bf1f0a3f68b4140cfd5f03f72fa5edd690389d3e9c7f8d2a3c4d7cf7fe472d683c601aea2362c53ee22adc2aae77d56ff84b3447e7a0bcc2770bde69c6435fb60751fb857c7bbdc1601a82b6f9ea235e12bec55bc37670a1e1f6f11cc3f80f0a68e85a051b406933f678d89c61797ed99d135b143f87909c19d1b796a0a1dce77a02c766603e012fcf90871765f60383f3e05a093e6e1e003fc61260ff5cad1313f76dd9ff69c60ecd3e1c92aced5c9f4499fa27740eadd91112fb65bb9d5debd4384d1e938df73b3418d18bad51c326d40a62f6fb37984e3c725ca609ae2efb9db800f81d66c29286d6e2bb02df663d3d6941f40e3772ed1bf8f9ad4cd1f9ea8925371f4cf94921b8669fa682afe7e8abe0c83ef643339689e21fc172f79028352c430c5f620dae63c3ab90d80e6992aff711884b932274626fe7e03867b417f7dc54ef9fbd8582191066363f41237aa1f8d4d510cf6a1449f5f96ce600238262cec55af4bf943fb5965dd9ad0296ddc60a76cff25e9f6eec9a7e5e29cc86f2b23cb40556dd70e39305c5445155bda4b2484ab9c3f4637dbb490c560d98342751adbc3ed24da685692a63ea9a4feffe8f3de0180769f88a3d9e47dd682ee2f91e76dabf0979f2d3fe3390d24f84546ccd4ee9fabfec237b59537ba199111ce199454429a83933daa73d784355fe1a97525af003419b64d42d40cc377b2dad9f96a94cbaf3519d6d850a37783c905bc45f92373aa5b1d793160cefa749ff1690720109cb0835fe49609e44fd96ccf4e3c1692f23a3455be18dbb5d47c4f98994ab430e897569c64397a9279f328d9ff4745af46c5596b26a128570a6ce54f72c087028b08f6fb3b6ff0d5018a9586a1a709137239fdb0f6e60aaf4660182d4869b1f5c5fb4db13b2ce0351888c330a5801e178779428eaaa90ab1b37fb31933a25642412417e159f3af8e6af70eba930f547525fc531e7711b518f159d252a0547cdcfa2da066b1af128c548df54582533e2534fa7582a26386d52d497d813e210d98402425e5571a41748868ed56f7dc1d6e379244ee8b94efd6a9f5f2986c702f9900501d41d1e6599ec7bec48b2dd6fffe44be33b2265e2838d5c9eff1c284b8da8570211c74afde768c92387e5a97ad2400e6ae35bbaf2b05ec101c7835a81d2d983950356964d4554c845ed49ac79a04de7223439128a3e9e0d964a9e51fd5ede23c44a13ecca68c07542328e5aeafbcdb8f276f98faf0c9ef3e34820bc7316e3d02e619bc92527b65d5a15cb56ec0c4e14dffd2a808257b8320dcd6e80e2a97a0af11eab16046e6782d207221037e700dfa46bdad67a3568bc7b0314bcbd55ed5b41c8f788d972bea4a5ce7af259ba2b622bfa4152e4c7cd0d91f9257ae70b329714788bd2be104c80102ab36ffbe0af59409ea6af872201deaf8641d2276e07fe98b5124391200f0ad7d744e316fd6f78c645f41a25bd603c1cc60543fa1550d55488925dcca1f694cbb14e23763f8a22ff78b04d1ebaf3b2eef6da8c1aadc637238e7aa99f419a4e3938d69b982604719c0b94a4b26599d23502787bf01a57bef13a4d87d8e878260d4c7cf7481303af65a48b28ddc4d7d87226f40db779414fb84621fcac428e89ae55835ea7ab14468afdf816400bd11fdff24d9cbc51d45b596c58b322c480d6da561f0bdee515aa30ebd4b5ad6081168cb75e5e71fe583c99f448af9340da7187b1881d97d8cc95749033380d6351390e41c4de01c60eec38ed6414b5632cce8e1c32b228f91eafbc2121b0b198713ad2aa6ae5a74ad51363111ba6ec0d59e82fbbe070bac0b110bc53f0ffaf957319eecb8fd978f7f92c55f47a910107030ec02c42e48fe260963e8997501e99d6c7ff7067aeb19cf90834de3141a954eb95f8ef47e870ddb9aa1696ee10ff299931b9774d42c2482539a99dfb3b30b1c214c810a2d7d14c54e74eb7c2e7771138209bc8ff24dfc26bd318968b6410eb6c0133dd4adbf66f2f17c9c9aef2d65c5bcaa0a60ca39692efebcb458a704676af0abeacb3ef49055fad68a81f524ac29ea5b1a4c20b7a0812789e4daf858c3bd7e62e8e0612444394822841c4979abf8a1c15c4c68449541444c57262ea95a0885d87f3e5bb6eb6e0a967fe0590df80e0ef457fb5d394d501fa58cd485d30cc59a5390930cbd030db8c319cc1c1ee5410f0e90c65f6ccbc5386e2d1796e59110f4277688deb07fcfd2af0f3a20f62be9f1e04c1f3fb6a6c218f9b0877d332b582d8a63ad12a5543268b25b43b4a5dc428bb898890d026522629031b041d04840467297267299e2507ddf7fef8c1b3fcce5202fef85d587fcf833d85d5adb85fee5aa1d1acdc4b5ab16e91aa9aaa92b66cddaa80e0a5b07a888baa3d5fac0039d8f85f7c91edb2f1ddc06eee71d832f448852e1b9f55e88a3e73b28896ad1d620cf0dfbf26ca7d1de24ed4a8080449483364dc93a87e91d146efae7787548eda41bb66f839d253714faf5e68d89e41dbcac81a345aa554dc9cb526c9ff19104bc4fb300254a408f4cc0bc24e4ae9fa2aae8f7fce5a93285cfc0decccd9909c1adfdfae307a767f406eef79ace7630acfe371205cf3afa3772699dc7bf7ee71e77f26f75e9151d1ad3627fb4c8441d7eb936d38358e5fcf06da013f7b61a8af0f7e9db3fbf0ddfed8c6f1cf4f9a39f36c9713db9cae26f0e6d9f8fbee6119866fff381d0f16610ebbde59289ea879f6bda2f9992808fb73bcddc5eda8b63bc7ac3e13ebeeba23a12f7c47c5dd5dbcc3f08b6a189e309f39be2972c6bb337bb0cb3d12c21906b67b18c95deff2ecea1904d99c153a00e138ee2cd2003bc6b672d5475865d4505ad04631544d78f83e69bb4b26d1b40cfc27ffa5611486b8398edb18e37ba2d3a4bee454d775b8033d9bc8be1f218d68549334687f7b398c394f2473d03cef3f35ca33e137d51a10c4eb398af64078013ddad6cbdb9abe678e8134be261945935457aee29d04adb5411b3f0a211a04fc51785b1e95843f39850a67170717c8d6fcfeebd581073e7310fcc76e171507178824a920a0c2bdd3f3fef4be3acdf3f7ee7d0caa39dd15f6ef1110e6b1fdc9291a46b2a05f60f2fe5de3b3eb9eadd74506b9934fdf27a5256b739fcd1f143e7b1a117eef57e0f7485808a0f05a4d58ae9ab09674a2abf741f98ad5440836bce50a8cf7ddbef3cd19fc0b43dce07f207cdec3e8f6d70d6160e747e160fecfcb67ad18782738aa40b16bc500bddc7357ac24ec736606b592405d5b684525619fea75d4b3b5189ea2d8f395847dd1843dd1dcc59d7b4fcd29c481f72b7f9fb8bf8f677f27ca99501ac6fd46a1efa670b940136feeafbfbdfe75f42397f52348241a7dfbd9663b72ba03b4cd9da2cfec96f075bf137599dff3f8cff721cc7f32937dbf64f1fdeb47f387b0efbfd741bfcf5aacf67d9896a9cd893cfe53f328d4fd678e0f13bf8e1bbc3ffe3b0edd879d3e0e711fba441f85ba87719fff777ec72cbb777ddd391f9adf3fc72c5970afcbee4b16ae07dff5e083dffbbf5c260f91786a9f9944e079c2ae55cf108c7b7a88a0788b1e708960ee6a5880ab40cea107fe53973257eb79eb73638acf03bbf4d8e2b03a3ef37de6d9f109f359e5f1d92c056d1fa5652b0b7860715c13c65dac44c564ffae372a718e6cdaaeb71ee0ec2c5658a836f7b5c786ddf7d97bef0dba270adbfe9d6837a6a81b5b5bb7bd66bda74e9137069504074034fe0de4ac35f9330f2aaed7cb2c0b769a6f7ced0a67bceffe9a22ec863aaed315a0bfffeb059e68cedb13e79c1e2946a324a802ace06b0b859fcca2c17730fb0cffcb84e11b7418be1dd7f0dbd7e3172602dfbf05786a9f65d242f90ff7ee426eed9365ec93dba7fd81ffeb415304f30393c5dde0bfcc0f5e5fda972bac1a18c5c7a3902804faf77df9edcee7d882fb9a85a85cb702aa90e83e1e42bdf3c618213ff8df9b7814428f4e80a78cfcdf99a4f4b5efebdf714577a2dedfea54b2d844b7c3b8ebdeeb388cf73de2dc49d0bd7e7c8670249ae3bb67b441f5132f6f1ceaded1fbe2771fd611bd1c57bd84bfd1eb47a85ec2f5d54b702dc616e8d1d6275afffe059f33c397596b2e3c0e61b79b338f429005fe6ba246fb3ad7c2ff7b2e3f77ffcbd9e4500ea97bf7acf5e942e76378435e786ce15e3e89f483ef791a7b4ef9dd448f50a3edfaea27ca7cbe70b1f3af77a1f33bff3a63bc7ee78c61b4733ae97fbdcee98d2dfcc7afe3100bf1734e224f67ad3f83af4f22efc1cf2e73144ff488c57df0448f84b8ffbcea755d779623b88871950756cfac9b33dadf7bd7f987dfd5fd75435e2f73e96b2fa313afd3c829bf91d3f7af16d5c5627c7d12753f3e0affcc9cbf5a67b451f03bef5da7c9e2c854925f2877db2bba258b5db2c07f5fbcd8debe586d1be6f09a7e9db36fc715f7efb63929ac7ebf03bfbbe3500829d0fcdc38045a7b5facb32e4f5ca4b85079cde798a2e3be3b89b2df1f342c39d3683f3ce5cca354c4871720d6005183fc8294331097a42ba497d8ae372e3ab8dca87f5fa157bf9e36df3384a3ed5f98ecefbd2f47b6f779c5456d7def44bf16f944d1afefe5108ef6fd8acf6c3d8a97a5269f79e1f713dbf5669555f1ef3c36b316ab68168d39273ac2ce21fd34f2c7e78cac794ece8756c4db7572764cbb75acb863410d537d279495d5aeb7aa231b01bbdeac8e6c87f29f7a03c3649fc0efe4188d3a94f7df678910292580dfdf053e976ccdbebf8b24250d6af6976c2dffeb3d33a8a87ad930b89d63b4bf4783601f7e26fec47a8136707dbc2b1389b69faf8fe77d187aa28b265aa3dc5461e4d481fbe9c1f5f1dec85ffcd6f91ead4bb4cef9b556bd045ab3e4d4b0596b2208f68e59a4f361167d6354fc8aecd6398beecba1ccf013ddacb59769f7f7d8b4a0e666adc1e0f6777a94f8dece7bef514ee488ffe4bcf7fee43fa239c17fa6fecf319d89cfbcd731bd9fc0f41e667a76ef9836479f0e25fe4b48fccc68bb515f22afb448e5695a7588d1543ef3ac906534ea5450e9f6ae3cebc6cdf6bcf7a5edbd2f7993b5f9473c87b871b385b1fb7fefa4188ddaabedbdbdf29fefbdb759ded7f0447862e96be07f2ffa09f0bf171ddcef4e2323bb747dbc07c1f5f1fe9e3aae8ff72f26506bb66802b5867f02a84dc1af35ecf9d75ae865b3fc9e7b5bb366f99dfe31bcc744ae8f576be33d2d1491773d688e49319c3ab00f7e0ca918f6b452e5f7aed3fbf1b459ae8ff72612dd05368c1066ac8d0ac5d6258e1669b3584354ada8d488940790cd4299c1433a9556306905b633a997b4ebbaaeebba17ce13a4a8e151248526327c88f2e4c916a26db6299d4a93f4d8b81a52240db0b98e02402531a109d20c1f36e45066b750cb8c39a4546056a98e205b00a4d21ac576233580ad0dd59ada057b9e13346f4cf03c2f6a7b3734575176884aa904912ac08682931db984ae83b334a5f5e6a6040d1687439a243b4875732415800d4d0d5362e9ca1f6239bb9e171857987bdbd35612185bfbb5c7855d6f594b3b835d6f6764ec3aaee8ce99ae1a8404d059531b83010840737f867908befada5ace9ef705407b9fe4c4759f4f222de4d45c168eeb3a8ee3388ee3388e33f5670937b0fb4bcff3bc7c81e7711d6d2b040005b4fd6a81ae982724c9522739915ee23e2a62138682ce21a8ea4ade2a25bbfd21f86563c20dec8ee9ea851bd84deafb14c43977bd650dd9150061adb5cb591165ca67356b856d370374101ac43d65a5f60361f51b569b6dff02619f598ccf7273bb894baa5ee2a2fa56fcf99df3e738fcf7defb81789d49adb5e26aa2a2fb04dabf5e9fb28b3969eeccae06b6a393a32b0eb54e727272887f68fd7c693711ba3a6debcc1f3dda433cef1c35f7494ef7351011e63ef7750f8d511d43a2d1bcbd5acff61c82dfd642fd54c20dec0673c24f578c2566d71b969b7d805d6f5849388e73d3d6d90abc59dcede891d5f5faa078a3e53df51663d068be3f5888d0d32e9de494bd847f9253fdca8090c3ba7eed6e4fce9e412549db413dabcec012d958125d9fe3f0d5c1c31809dabe18026bad5f26a7192318e3e73a335337337886b0facdcc9a28f2decc9060a6c710666a005952ca9163490eaa224aae9a8c68ab2c6db5bb1f6cdca09124ccd50d2c214598805cf18083c755931dee7abb42f2239614a34192345a4c069293281a38a67495540685588d251c411011a5820c3354c9c1ddb80a12438a29ddc8c42993c30d992c32338aa05192d96ae34647cdc6583e8818820d1b36418cd121e68535256c81c106a629483794704b635640938380ddc64019d30408a98624696968b42c92cca2d1b29272ce44648459b3bf5d6f62801ce180ec7aebe266a3b94bd4ae609ab65ef5021981e058b993c8df8f6af9561749d54b54a507cf7c7d86be933b89d0ea33efedce276a379187cf6cf595c242cea3612168722ff4685bee88085c0bf0c11722e48791f3af16af13f53fda76c8cfa30d8e0fc38b2ed844aebf60bbbe3389c0af1b745134ed9b59bb1e854fedbaeb8755cca3500ec613bcbe7707df72a390e5415645658cf6444191b23a2cd453929c75d4dbf3dc2844c157ff19a2f3288c308f43e083a746ed19c2d1ae20bf7e3df8256bd75b972b72d75b17aaeda5cd8eed7afba263833d3ec3791cca28f8af7f85703454c183ffc20f8e2bec5770a2e0d9e3334c816965f80cff04a65db249643406801ec7d774de9fb34bfee36012b8b37341128cb64cf05ba86a82767df087a11d5f28aecf38e405c9c8335a85ff606c010c1463049d87fdcee30fa25d20d82943e777ce24a5afed3cecf1cf60fe3b66f5127e66a21475e77ccefb28815ad339ab9740c9b185b708b46d3f46b583ec8813191b283132c88a105242d948a124c1068f181b1b4c250e1b4846dec4b8ac29819491e5e082e48a8cc8d49927e58d1b58982176041159089454f0a284820c8c520e254a4925132d599210a5103366bc50c1522e517112a506132b2428c0a0a3060bb22235d2d8961a25c87ad450fa62446c4a9bd20756390318325a6451a8643b6e67f4d7443602fdd1501ad1df91b205fd05d921e9474c2b69876c8824a6a7241a312d5a71d82061c99e84911151252ba14a3a45e949d9b404c90d46ca1e416aa0f1433645634759020da62a1a34ca685d611333022b2644983155312c55ca265344f044c664490f48bc189135052999907e943520ed88f980c414fb018986ec082d2d362760c9b08489655549559109312516e6894cc612591824a50d2349414a29337ec4aaccd821b33283e9c90c1ab218b48c6093034b85303120aa76a882c294db93264bc4209932b22608981f44ece8c244454a060d345a4e6cd26095368491e95005449552c914998d2731384bca27242a1889910952821f321f3b84c4618ab58943434683964c063631335835c2c886e85c55caa0731522533944299734e1a124a6e669a3b4b715d9e8d3a4b4b051da57f9b1654c47f0d8288de6f71ed1b4ef63bf9746f3f31a60c60d24486d51dd78ed7adbd292c5d46915a1c419d184ebd68da65b33ae5b3db65858da2a6283d43070d7dbd6d346f5ef90cda0633de832060d674b47773631713613f0cfbe279fb31c74d40d97d264b5aed4c0b3ef71b3b5d1a77d3d7016ab851a8b586bfd5a8123c575154e161c31219cad262d1b088260183e6d222fd19a5a515a4bcaebf57a69ad65a575c5c12d70926ce49cb3ce70989ab06038b6afb96ca351ad61240f9a2c5959bb8e43c0481efd05f9becfc7fed214b13f5df5c72101a5d991262d7fd0195752c350fdf80a19c3d232942e10890df18685b2cdcfbee78d6dbb76bdbdb9b1d1a7b96e90daa2f21907423849709836e933088461565784961137c41e5b2c6c1501139670da78595656be3750dee0b0df245921ac98824c2bb7d06864594592a4140db449299abbb23140c30c1d5c9051c398aa5afd0acb18630cc5da27614984f63208ed5fbf07eb086874d6b39d6cb386cab65042cbc381b0f4a2ed8b24ded7ba53e0739ba79d7306c2ba9fc78cb68ff1756bde3d8ad079d92288ae216ceddbbfe1d6c60d555876c0fdf8e369845d8ce3d71e1eaf3fd329ea9e55126e734f283e8f28f6883c3ef36d497183e2fe4a2d1afcef3ba2cfc466edb9f85eb16a9ed41c5113b5c9da4249a35d51bc1806b3ce955686a424b05546f0364b557f48213d225d80ed4d3ab3f960014b4abb4c3ca059f2430b1931a98e9b0a3b8810202c0f558a5db3e5d52b3c968498ade6d0844cca2485012ba5c006da3c1c5f4a50b3c309d38f2d69748061070180ad475ac748b12ad84a00a785a3213b48984272a68a941951aeec2069aa989b2dc5c0764391256b43cdb26eaa96271f5bb55226b55942400497e62051b1d4274c34d222d212b62ca998c1560542890e5c520d0e606373c249d5185b42adfa9272494d6080ad87f44990d4820b6c2ed81d92de582b3da467a6a403f8b11d9126ad71ae9c5299ed87286dd22d22481d60f301489a00dfb1ad906a49ed921f2548b3d202d8ae099b45539a81aa56b9126165209212c0a6e616434a8310e9976a445a257dd98c58a594cc77828f9a2394e81045c407124051e363b7e02575d91060b3339c90e278a10651230d736c62708033446a91c0a413d8a4ec153ba5d3b1c9488b48b18d8d9aae5e3dc016904ca8e4ab98ae6a542aa281008002b315000020100887c4429148184781248c3d1400097e94385a462a9bc8e2601804410c832010c0300c030008000008800010c4508c497e24cf38432e91fac419f428c722240e63809de3c331eb149e23870162e1b800714e0e87ec3276f1a09023a6905c8854b21a4a343c06a9f9397e9040239d4366f00fc314c87d229c3c8b03096564799c40009cc9f57a2cd2501378919820a021500a8be3048933b20c7e8601608b483d014ecd864dd0469256441d8e0d10c439018238199c0310c54b615cb030264712688b8054a61549054f14189056e61c40215c16c7058ae0d2781e9c9daa4871f1fe0852669f102c8124c607b3c8446209e025d330cf4e40fcc5d61c0f87401df6dcb101e115e2ec763c1f5997cfb3e3f076082e4e2df139689ddaf09d5e1f28c494e6b96131be3ccfc96456155d173603646672a0b0c42ab4a5dc8a94b4912249359840696d2a15714883b44abc6d62f414161601d9a8cf598e9d06d1b69d832e4fa3e82d4e3b56a76d33359c623826f137b77fcde6cf433513bd08112489c0af1589ddc30df153eebd5ba4403c5f5be731059a33a485a68949648cc2e563c2ddc5f372fe2a2a9c5e3423fbe53659bd58db0c6a19683f023dba78e1463a037cb4fc9a344866e1da2783164a0f251db86a679b6b2d8e8f42cf417ddb855054f091ed41b082e2faa295e26db976c513945d9f6e0dec41dd84aac9adfd5433a651259630c27ceba7b5b97a0ba8830d66744e24827de0543d2a248809f11af4e1d9039114661db8cf7036d6795c31110c9e8a247aa8a11f7dc1cb7c04668cfffd89bd983eeaad05c56f4db2c3ec0769f4339e075f4bba69578cd5f4f81ec9aebbf0b4537f3bb83ea9475dd0abede907bff926b735e37a35cc9416a1762f761014cb2cb62a02f7d8f18060ce4eace2722808d221abbcce11926cb08f32579b6f96fe2a40b4e87525aabfe83e926af261058c0fea3cae4984d4ce0e71c2f0cd2be0d1829859867bbcc6624304d241087f3c7717478336a1d5e24b2afdd31d2314515cdc3ea6871882175c02b69a687bb3897b741704a76df67e12fe6bc6c4c6dd12570dd8f0087f9ab6685eb86ab775d1521a5554c8c911ca77ecb13604cf7cacdd993c1180388ed821f45893a1b06495f46e5c3d33979a8f5a653f0496e2ad5cdee736a8a0ad7e0f6b49d67eb74b911ecb51a862df85d4196b1ca76fd4cab22a1fc3eeef2262b5f93e1e0acce4090aa94b6871be64ae76899cef8c7a8bfe81720cf2c79b45322abb1922b1a513b64b3532e800cc6b4bb15f0154213d6ce1bc039f40397833a44a6919d2e9da7517b6879708b997a0f8666f46f56cbca842f50d2544865e54637f1fe671f8e222aaefbf857eb9cc42908a4d607d0c02082d5599d07d3a8ae7cb0d913111365db47c0e93b32219442cee0ea5127da51bce57ec2cc353aa0bf829206316187ac6e86462e96c2258f62494b12b314b2ba5adef96ca7cda800025f5c3531e81af3921e5b35674eac634c541ae19778f078a643d0c0582afd11d5ec7918ca7b756e1f0a74a33bffd2c33bfcc82bb6676450fcbdab190bd075c2b3d43a2ca2b2488b7845bbc649c92132ee14dc6b03cb9192ca94fceafa6901c193a91e24f5b4a4f293b8d359b2c24790e57922015c6cf39098bc9be8b0b204166af739c8832863a0d27e0f50508a0956e632ef2bcc0c5a20d3bb55862bba911b2a1a96e2d2bb37072d3ba23633b9684a0d8d1c76b7930e33c76bbb3b5c70df7cc9cb49c8fb74c46787a087e0a40e5268e84d24033160aaba129b48a0df68be3591c67ea3232a3275dbce9158c48baa821eb26eb8859e4f88ce92dc548618db326ae3023a60ddad86334e243ecf6d1fb2fb7a3c6e5325f505878093aca505b2289714a0d5ba9843d1dd47465d56ecdc39ce1ecc2391ade69a603420ee7784e48bb06b0a1ae794b182d39d7a81803b6cc3c86efed4817e79162486329ea5a6dec534989a2cf071eec4c9ac743583b912546d117472f15905e09b0b05bf9125259621a9a26b17d01a6a8c439f5fe6b0c955f084e4558674a02fd0c0962e6e62aab6212c124ffbcf82ea1f544184a7d35a8beadc440b9c991a89eac0ce345c83616dfd011ae6c0936aa2ff33492289114ebf3a2e863b386bff81998fd7a5245cebd3bccd7501ab0749c2b57d6d378c047cde18fd9800c1dc4b927f81e3554dbfcd6176afa08bff2728c7649d2328ad81f4f8700d2549dbcf623125208b6cbf3e3a9b89480a2e9358104d7743353985e165339be7d792cc1c278df8ddce84de88a3a606cf09cb1e8789f741451ccf8af9f3352f17ce9d2c0a338a4673f44b1b9dd71fcb086ca0934849a89ab16c4e78c42f30ec8779f269071f9f1a64332d115a5371cf446d7cfbc6393d7586511f297516df60eeb6714a98cdd0d7292ad9bb6a26de153a2f75ded16c22b087b26196b5254609b45874fbaafb3014692527b7a49da8c530382c46bd586782adc18b9a5857b2c1e33220d9bc18adc84b4c2d53289b0b425e0542d14acc8a9c2a922a404ebca2a7054d4ae605fd17e858d11d2014d689178161d35a4d7b9e07b246f97b1c5a9d049806c35f048ba9616141eb803c686b28860c57d4bf3053381586de140838a4a02828b2a4fea695b2c6857c0c9c276d07dc8d1471e00b76ab1b0806e0b3bba59427b1c0c221439196e6485b4c5295a10c62571a7716493e2ee8c05ce82f68af6153d25af2d880a538bd655a89143e269c36ed1512721d32e2c682c582ad89bfa0bccf85559779ed4ee5015daabf8ab20b6c80a8be8499130e96ce090a46b68649300ebd22827d9b4a9d2bee958c8a870b1c8b380ad857ab048ede6be0a0e55a49a3b97ae36cd02a805c182a90a1d15cc69c1f62e12b80e2a24c9d4a55061a30ea96a77e326e9750cb148c325e9d6145dc19185d4b8bf2ba82ca02d165534a7c58d17e9eb24d2228d2bc95dcb5405078bb4e5c667d14125adad9d2c886ba1c63bc99ec6019234750a16dfb3b89143ea9cb2584045270159e3b09066dc102d38ed26396d54c5592a38f048b20e69212f8b0e1052bc66dee2f316e9d19270c7a1d193ecbdd53826d55a99573ce592f4b6f68a340b93455d151c159d2ba05434bd851a4d2430340e54d2bd1b675158cf59dc7821ddb9425b78da2669391f1552816aac2e6a3854894940db38ce246a6eab82c1d0cb1f450c6e1415417c242bcaaf599212085996e96e1791b8ae713491be6a506990dcda442cd67845b23b290bf62bdab3e8b48824d44650c191438271490b0e0b8f5a74d049ca6968b180ba25dd5ee3e848dc6eb40a282b9415cc3d05a9f46950b7491fe33a6424bb71b64f9374d738f8a46f372ed1b9e70a2e15eca8b0214282d9cc59e04b8df99c5f9eb0f056012d81a5cd2de249d82ed2c2a5d4718854d86841bad1a42cda54c0dfa2c398544107d5907473875a61038bc4da7e2d9c6a71439aa46407358ed4d59415ae633879a386eb92248debf04faac079564052db3924263fab974bd7f0d27d7eea74c680c4ce646ca350222226ee6eb3df248f274b05b27569d88870a3412546a2ddc6044701f2c9a0d3460a09d955aee2a91bc9d312b5389505c9e61a5dd1985652dbfc41ff91b4f805be0ae3ab1500ada2c295165075491ca75d82b796b148239e84e90659c1e98be4d9106201f54a7a531bba64c3f51c5e4f3b52b8ddec8c9194d6384c242b0e758b1b61160b559c4a866d4aaf9912b767be893e3d6a6b7cf0fe1df0ff5c36953498f26b86517a6a6ac932aaa47503c90af20eb0acffc37327f256f4ee8816b6b712356c97706cd21ad8638990df309d8d580c9f225962e38027754e5b29eec85b245fc1b53440769b3f9e949d11a7de64499b564dc089f13b2dc8806daaa58e20ba49cd3cc9fbc691851477275feae88d667439a558c29cfb74eac13e28f4e69f15224fe7e3aef3c5fc408cbd7f982746e3bd1bb8cc1d2ca3ff007780cd1b16d91a1d09882e63d8e90a2c6718d21838237f27e2e3f6acf8aa06a1ed05663e99a4d66c81c01202c7b80b72eaccba33f708ecf4414b9e5f5ab8832c4a56c3500b948b9734281deacc7246ffae5bbb977bf2585eaeb7e636342396a9cbae805a51205c9fbfc5a94ee301e2eb7b89c3c229b5f07cdd6a314a1e4b68b5ef157ae4139a6733e2d344fc470cb8e20c0dafa73f07b516a67588b5d5658e37177c5f8231ff3ec728a38c5aac0359805b028fa305ec34d6fa542c2838020a7a1e08f3db0139d14020180b45b3b6092843f20ad58dce323230967bb21cc73d502c11110858dcdb9a61809a81becc5584895961d3bd6bf3439d0b2e0c7eced8cc4fff8e213d5f236e8a0b3944cef42b90d8cbe9f7793dff4044063506d382b417a17a8ba36915af1d0f16d3c62a1846c612a49a502eef7d34a443457b7f18d76f8f83a89302648d762e61f390f21e8a7383584abd614c095f75494af73ff7c7ef35243db3103a0dfaa6b1fbe7630de0d79284d9be753ba1ddcce5604404f152dbf0c50e4bfef541c5086fb269a2fedde6b3100b045debdbab9942ae24e9468253d2d08a259753e353be91cb3b8e473bf9f07a1325bc23b20ec2042212b89fafa4d2b58b2074cd516dd9645f9f2a1934df48b7edd60311164170de00da0f9af1925e11e5e4815ff64e9dc94504c44ffb4e2c9e66d282c84b9f1f4a40375c70791f4a0022ea2ffe200610774407f598314c66c36d3bf5102c1e032c3d0837a8a4fb1f422cba6c0d0307f0abf44b193409b898671e32221fcc025ddddf294e2bc64ac4461da28e0ad930fb03ff7cd25a439aeb38a6f7cba980dfa8ff608aff57651dfd909793522cdd1138c1e9649bafb444f23280806ead813c91bb70b829e425352ca3110f06477b244e3d298adf1ce256e0decbb516d73ecebd52193af43b89f7192feb88cec89ba091b61334e623155f2597053f41c1929da80d38375c913188d97bf3837f8de788083280589d0d901298c360a0a475732e7bd20a8597ae538ed96a3e4ce9fd81c0ecaaa5c6cced2e17706caa7801a68e7d64557c8c9de9cf12f4d91e50762f4bf9a34a7c13177c2370a31f0b448d006d20deae63233df70f672a690a56baabb34e217e6d38a8662d28ac454db4762bca69ede988b9b7f908cfc250557e64d6a2ccb51537919031710f16a0d781808d57998e41a475834f3f0b0575a6f560e2a1a3961598d64a5e675b3758c79c25188bd2e4047f3b00aa2f0d04da6f57b502eac2a906029535d4840f64cdf25a6a2975392ff939e89df0f38d2ba563f7311f1b3e02c631276621292158371103ab5adedf84e98151afa74423cb0418f6934b729db7f9db36c06bb5d26cc62fea9d22c17041c0808ff7732f3134db91e73e87227dc010c89bda52ed8ef18b1bb058c6c23d935e51f74f68c1926265b76ddb4f909bf72e81ac2f48fcc819a99ae564e6d505c52fa78cac8e50ed06cb39b35d4f1039952aa035c3d41f401ce8440094e0b506666250f8f2ae058d5d1921985fdbb61f9d01aebe1f0bc03d3fee2c0096a0c7649b6b1d22b2aa8c2cb9925dd040bbe80a4b0a23455d7e31a185d8ec9cf7541a70c48e2629bb081abe0f8fa81ca1811677278aeb5039121d911d901d3179397c050b2307e42390c05e4c754597b27e4a5692d486141b3c09f517530bbc80ffbbee9ba1c5b93aed613ed656f68c0c3566cf288d20d17ac64b294c1b512fd3aafbdc4437e8ee9a63eb4e3482965ff535376492b3e390fd608a749d3d265416397479024897607402f1b3cea89088ef84575e3ffe423487741ef2c4df0673e1a3ebe29036b4baeff744957217f4264233106f53965097f2787c054a28bce16884f1c94d0f93e25646a065a62e5dd86401f9b5cdf8e5ddbe692ec5a81f1eea02c5cc9c30d2301e26704c2217294b96db2d13d28e827f604e61ebce005a817e92facabf72a3ca201838a3ce333dd69615611db72b62eb54c998658b6b66b732216b0f662c1caa64b4274ae7a21ec1699c1227aefcc6a00d85c91f8d5a4151dd10c9f0a551083c690451e790fa5d9ab261e7534522f1ebf9c57bc27a308c9dc6f28337caaa0fb24679bd1a7821a463057ab2ccaaea123dd466ac63f1e478b4956d717e056360b89ad07b0c2cd0e38a85f45c8b68fe1ed90084e26f0ff34e095e0c28d08028ead191d440ee163220da86858c5020fb8fd518083f590e7272481f8ad438fdc83e15884d02964d92355c6f7709f2c3efd30a309875a3bd82dd484a1fb41d38d442c390fdd6f0972159b9bb4679086523b2364fe67389f7019f8cdf4ebd7cdcd8c3520c3e22cbf99c87e26ed221b6396ce36301894c678b3ab3b5beda44c3f943ac3c3349eed36892c13a12bca3d4e12e0a0a32cee375588e99ae8157bb8fb058e0e9a9938675ea512781d17797e9ac40723ff00ae060fc64f0314e01ed6145991c49a91228c01165a5257888dd3fcf34c3ee5207c4ca68f5566ee2a96774e390f3f0ee3de00b1df6778baed60c0882cacfc97d9636bd43407d5cbafc53d77e430029ea546c1bb25542c8a18777a1d25ab100b5ebc54e8e48a6ba9eda853ef102725b24c0bc636f5b16e1c4d65096a6b5be601370417193199c975aea3e041592036cc683119b438ae353783e5f5cbd1b33f8819b4c5ba09c818ac24c6daf1c01b024516a30ea5dc178e98e6e8f97d1c25afc550b2398d599660f9ce057f3485c8b62cc768d8a45150ce5aceea853e0c1b1159f4611be7d7ac6c89aca04660cc24c3f89ad3f082ef2fe41d9431ef2db47ee3e2ac7bf1b5e8d310f04f2a38791ac1ebda95a9038cb971468857370675a8b57d6dea089f971b4703fa75a1b0f1ee2ce6c4b960703f0516080b2a8a0b3f170076d9f75e841427998b350c710704ccf0dbaf4901e5913e090d2cc953ecfec53effc23ecffb206d14b67ebb583242920c9c5765002358a5ef0fd5f82050ebb4e893b093ef378e38584d3c62f52a3128f2c82ada68831d37bbeb1b0abc6476598beaddf18da7344f1e0cfd7e8792699b38311fd40001dd9dc96d53697db0ec0cf7288939493f4eae41c1ffcc165078309725a94b6b946c5afbe3bd030402026629eae829e4031d85a64df92b5530548b56cb6f337d3b1144e14518d2da2be002e13ea5a8f662368ea27027e823621b8cc9e2007a48d89968c6e1a8ec036feaf0aacc5472171111e033c51fb7e57554a246375ad46be8425e3c03bc74d8fb9205966c0d23371456a2b30a7f83c0b2ea27ee47b758cee0830e70b717948811f798648fb576156d269295cd10591d1c176f6d06666bfa03e9f8b0dd61971d1e51000d41eed36c3702fbdcbff9cb558efce4383dd5d914762b71359ed7afbda8e195466c7f7d926f8652f1091d5f66e63ab357a4e8016fdaaa52bf71453e33e6c8664cefd636e8c7d5a343a0337927990a3251d1bceef0222e0c5c959d47463520b4cbd4a99ea1681070b0587b63f5a0b64e65372f4831aeaed87c400629532c338cd97fd4d134bd933f0c23945330c0c9f1950478884d1d69a53345091081251b8d83f6607d21677659dc3ccf75339d21d7cdb3e6eefc6368d29efd10b9c8b7afdb38f7e6cf57c90b4c66c40b3fb8311b386726c264e036eccbdb13d651252f5da162574ce4dba059cf83ab4c4072aec00227cda95bdaec631514fcf4e19fea06411072273121b042a2a71107d128b8b8023568d5993e1a84b4f8998217aaf9615da0806523d14857ecfc42aa1dded8436fcafa5e13292db2de60ca4323e3a00b14952afcbcdd75285dea0520c353df0895c2a7856ebbccb7d47f3b55cff8fcf0b93a952531622c0b643b32a9a3a9b5589dd57c0aa28ad4605072f513ce3d33539bf88aaa84b9ff3a6aaeb415d1a592e9bd9a7e6aff705bd9b8be5a29256fd1b51c5d97a709bd96d2bad49d8e42b369105087e3a8d3348f890cda70b61a01024d3897d548af8135324df2caa55bce36d96c01de4760978b11e3b08ad722e85effad599892936a18d06fe466f40bf63e146e9fd058c43fe0761daf884a44e00539a0936564ff287d032969787c840ec334a09c6c794e13b566ed63fdaef8b95ccba131bbb64fec21b8849706dd7ab6f143ca0ceea8cf88fb701bd988857cecbf4d1b55885aa0f2f5eef15b33057a805bcc5e56c7f2203c822f425f9147c522582292f644fc64386e996af5873bc293aa33a4796fc367be740ab855979aa0d64a08eb206278808708b6972df5b22c4060969382cda11374666c27436dcb55d5d6117075a14c4dd25756168a3f3d8f51bf8ec15979f0aefa9c92ffcbc347a4decc335da88eef1f2b012c200b71fde02e980175d7f5456cf0431a9c03af49e320b8a91201628226f5cdf96ae0513df8249a713adc1e88aa111f34ee89fe4c9277c2b40c8c18a39ae45d10dcd3000eb543d2b090a8368000313c161c019e52dceeb92f24155aca3a197b90a1a0302105b86ff45e4293c9d3e6aa7526d933f38d9cc77b5dfb304cadbfa669ae672968db7e010a1b9394214d230ba4fe129672b04f39642c481a07e3f3d04a3688d280d7083302133b5e357f23696dce407d28b90ef300b2346b749bd628eb4d6d0441335ef5b2acd28922e2a27e5d254ff18c7a18a08b73e1c803443a461dd5e3af831cc52a15c3b9badb125256ae8075a26333a784b4f824c64cd35b3f75f57551ffb42b3f1e3ee4666e7915326bf5c395e760cb95d4da157e53dccdfb44a90f3c2381ef2447d77ac75f29f1e6f560e08428fc1fc2bc91a16a0ce43c0b9067fba3b97971fc57797a80b0aa38201b823dcf3493cf2c86ea2b459032a2cfa75305ad30c989e5f4884dce5cb2b5212948a6f28eef90d7faf06b4893b6e72546cce8d68663dc4cd77c04605bc1b6f2b96d1c1eac50e8c6852a0ed0347f245583d51f0e184b9a44c089858b98623dcfd9d642a28d47315f79c44fadc4b28f740b1c863ec22eaaaf496729e77c4a0903eadbce2897181dd2c613ac99e1d01862e57e15b51a281072b1436a2dcf977d21596f9124df26fd54e5592c69574392aad8c0e917ddf0d16735166692d03640897cbdd623dbeb99fda89f933b20612450fb67bd2728e9d8a5750dc525485b628c4db9eb32289ddbae05d3629ce5bd5bd6415fd727184eb31b8116dc4d6a74dba80dcb78afb675ff4ac61cf3acf208a662a4bced2b216bd77617655190c1a259e6af1a68f183fc494e42a1585f48cba183ea5bedb19321306f4c871db0d20526725b28699147b4a9e7a6486341d1a99c2bb3096bcba0447b874dc6c386a03269d7b8136d262e24945758f6e40f8686958d3188892fdfde9e31c52231a505e07357042030511e1278d36f2cc8362622dce243f70bba7ebe9dacbf90a8f6950e246a7e34b02aa47df13add0b80d4b2bbad1d056eca559285c54f7dbbf1793d1085214d6c5a9a45d92eba623fde88a556cbcb864c21e44852ed1e451be43da79971aeea7a823ef65e0d72bad5f998f26a3e6751f6278b6a6fba9d8c93e714cf70eb64ed54aca34e26b46b24bc8fefc361e6a1e63a64ecc0e1334f51f51cfc02139d56d305b68fa939dee63f70915c07df1b86364090be7dc1a26c8b6d040385bf5366a2f8ac1e94c9f34feed3a115206472229438385018697765fa2ac73e2b8dfa2783c2b7e74716d573a0a3be816edf069ad7eb4fd7ea44d98ffe3455b637254d734b31d6d5e4c79baa65c829a326cdc063364aed139a720a83f92da33b2c9179e45fd95f126b06ac690600b13290b9d3124899c2a4cfaa1e4e266647abb9e9cf3e3f6e604f914d7fa37dbba444edd7f86238a2a8b628fda215c2986f263c052f786b6f0590f8f86b5c3b68afeb271dc3ad51d689977ef9bedc8e98544a575e5193e6b30949350eb88ae79340fd19a8a9c1e881b90fe5804029d8b0620fc641165cec97d7ef74c3dd4a1075bd399cd13d653a9a903dac90af91ce1eccf3a8ceec338b81384416f6745e47292412d9748b48bf9f0428e9ac46e4ec95f2f8f3e7377dcc05c07eab6d5ee1abbb8966d7e27828855d563ecc7995c96236d3cac8018fc3686e29b005a2b4c54bf0b0dad5805580225869223d9620e44d60ee725a369921bb02fc79b065002a8ae06482f84e5cb43ead415f2e0ec4151f11c8f073a25e4d4d94a0e31f9ea078901ae8e76ceaeb02c9aa739e7db20b89f676b8ccf1f69269e3e05145a09d7301d4878ed0f5b29bb9753fd6ee485a2920c25ee97a848ec66b7b50d54f282ec2b00adf3464b253f5809a4501f8ecc09c1ece77ea5aae5bc05573fe37dcb2f1538dda8ebb0201c637e2131882e3812c9a81899575680870779407d18559608bfaeae3e00d0d1fd6eaaa64792c7767e1f299b5f4459becf9859bceeafa91ca7a1a40f2802ab25517990882fc6849e53949915dd656edad02f34c15e26189b886249b4bd3ae6a2c0e6310e6dbfd375157aaa3657422ca0337760aa294e475a9fb5a850e113d61422592386d4494cb0afc30d70b70a6608204ba6b1182f58e908f8205ac346c583d1686ca623e04bbe1350a15104386d0ea7d48f274113315dc413230fc52c62fb44136ba1d05fb54b69cd416af31a3d076857d20a6e46c16da3ac40b326a3d42e6e4d7cc4145a1fabf6486ff12e41b573c6faf201bf8499c141d67575906efcc69a0e99133de87de66af2258e0c15a1742e262c9a5182b930b8f83de3bfb0aefe4b8e7058ee4cb05d696a6b59860767c8e1b9247964f5846ef3c00d2343dc9e8fc8a75e9069ab90a31bc1e9416108be13771bc4e87f093a89091187bfc90d44c0caeb58b24d238dfe6f906b78f2bf9f918fefd5e9328443d782f265b0e1329032bad311cd26b5f06da1256f11b238726a3511579d5138126c619f2f1fcf233d76730addc100db254e427dd4308710d29a4c66cc46a11752b145155c66fd014caf9a1418fe134883185d2debc5fa7976c0bdd450fb624bf1a0dfc171b2bd6d4b40129321f35f2d43ad04dba152ad93ae20e952689dcf9d32c63eb8eb0bbb01270a7b2b3e239103fe3edd094217458f7aa13b9a3200272fed7f1c5f85313ed89b4c9696ac3973555bf20bef7615f9cc674444b9f2745716fe7df2801ceb2cf05fb38296c623e6023bca34f849704b8999538f142bdaf7fd4c7629dfcb0a5e6c34780934e690aae7f65b10a5f39d1238f083135697e60a81950fcece91bc51b6f4b6d03d3f814c7b9228af06cc0457de1d4c3a2f5b7fa9587ea9aa8c4b324a8619de7fceb238c9a99d5ab8bd67109a88979c5d264e938a918510b7bba54b285171f126e3aea6f649020ae4f81899040dfd785dc81e5a56054364b6d9b89e990dd1774e0b7540e379ec2d2bb035bbbd0859658449ff3e6cb1b1f7503300b0aec5d88d484b83be0c8e9a1a7f188dd221f5a80356311de7d9f84006a9101aefedcb5ba2c2915852cbbb7080e3d48290bf7b86c1ccfa8fa28203b73f29007c7874b556dcc3e6ddc13c007a6268f00e820726def9c0ddc5a608a25f3eff78006c78a4b37b9cef5dfb99c777c7c0e671d4d132e3ff5653530a18da180f97a86f3bcb23c09db60c3d982e016640d3b311bc48248026415d4717b2ff7ca1ea15abd2ac5856333c11ebd5f37194de1c25011cd2ddd46827daab025c807b19f9781650601cc494271fae5fb6cd427b1dd7a2c334bf088edfd50f998ff4f08f02435e326ff8fcfd4e5fa126efd4a209ee2e299306ab7c8601b909d7bae6298ce778ddfc885cc149602930fb453948cbee9e848da32b52a033e4b5d3b2d4cced873fcce124d723760d3c3f5d872a0f74cd31345ae699295eb0bed99cc3b08411b667be20e4c2ce369cea40510a56b3416b67b406f822b88d220e29ee3e636fd5c6a22385b92fd9b2b21204847e06d8108f5d97af9e719eb21b96b0f7409d0cf250269807a3bda6b4df04cfeb1c3f7256a0a2d51f273333d7c92c82d6a832b05d7194470f11c2a99bbda54516f75adea0040bf3df7db349834aa04561d6e7c4bd8a7fe97f74dc047e5718471853de654e5a4445290dd9481e74fbfb0f145021823e3be38c6e393331c50af1ae42b08035efaaba86c7e1d8e1dd120a7366fa688579a233a893810687d410d842c3bfa2177de1e1ae236dded8290091ecc5a126aae95494f3936ee1405e1b1da5fefcedcdf4a806132a7785ae93c321395f17d9619ef40f3b03027680871494996be604e6d2432250e6127bd3d5aec33ce2380b0b51b65883d8ea50979c67dc2a7c63039becbadcdb46306e5f666332363798466b661c46b24f2301edbf357163a86528ae2fa3e631bc6bddb40cc647e24fa9ce00396661e42043d84f8b1c5f702292e595d097cfbccbaa5de8ea33b57726fd0b1ff8fc5863933881bf4943670fd1e9d306366bf266d0e1726cb2b996076f675c14dfccba7db0e2063636a4db64ebd4cbee7de403235028c9e65ffa419149e1b890b169a56bd4a1c8c39f7e9273d1eafd3ed3d5b73060d14bd77832d2f0b99bd8df13c99161c15003c5b53a85f2c67f0388543fdd553dbe1bcc5a6b858c121bda6afc6e41f65d2fd321b4c144b20275df1e235bcb46085b8f93ac338931553fa2d0a7239f1c02328ab16e1b3112512b981742ed5bff87cfef7060fce04d0b978b76f721b57c77c84d87c53158c47db91db6cb18810aba01f11f783297adbbfb00a27e01ada427fea04da765fdeef591db20a873de3e1ee83e1914d90a32bcbce6aada8c020123641767285f00baf2c69429fc28d658e4c68d31921a1da689bade89d4bca1fecaef1ed65c9d398593c3decc922e201f1c602032a7332c80796499388d9f619b0d8f8613adfb0f268d6ffe889d58724d495a86104e77542f2f198daf9d517a9e832b05a2764820106cedd6b2a4e3221dd0e4bddd3805d4e4bf3fcd3c8afde1b490b09f8c65cec216dd15a9e2ec96e4a8c127f9d36010db6481b6936597c018ec83fe8294c34a8de42bd0b0e9fcbf2b5816d03db89e218e1e502d9c8aca41302861f29fc35f2505550a25d5c155c906e7b3743f1da8ab04ed4b3762f40719031c34fa3d64644969260edafbb07e2aa57625a072cb22b491229dda92aacd88d4b7372401ce1ead396325e91ab5d31a477d3f4d8186172c6a49a9ae927de8d4404c34f1532a140b73b780879bf3eeda1c70735a16f3239af47cd047c0d4224d38043e25577c8366a97fa756942a5f436d07421c75278b84edffab6c5d27834d7b0ac3ffe48b0a8f032b87a3c2804c77a959af77268bcd814b9f46ac13c2a84d1374680b4180f6e739fb61d3e8a3c69bc196ea7f97950ff34460220f4e86ecf2f23531d4775d3158fd659c4306774edb9c46a18010ebeb2f04c9f649ea368058d15711041d439ec20fc232238bedf3b533905baeaa5d788a5b69fefce528501bbe8c46fc423cae7462bbef96861084da05136bba92d68739df077aa856ac4ade1c20b5b015cf85352d7bca482722c1fa756f115a48b6c4737e66e25b92981611e6e3a86796e2da1b1c2a8b539dbe86c16ba2d81a97193309eaba1d02146811d45567810ddc6ba0cc1d59df174b03d42d89c4f5cef82cb2259e5df8777d28ef18c6fec184e161c827b99d5c061d216d9603ab8326317d5a700da12c425b8ef95ca57e647d1d8898dd38dc946478bf61dfda1b3af0db017e7eba2c50928aebc217a26f9894a5fe8372bb8b43dde1b914bf5d9a6abe6b86c7f5752653cc165487ce55b22fb38f39ef22a913dbcb94ee5e4ef303da1f355c8b455bed5bfadeaf1aa156b05e64df8e3863e70b58248ab1f18be18a29983818d27b455970cd18f29f52e658407b9001d57a2262dc31e5d08d2b03533d946ece9ba4709309821bfc19bb3c7e70d015b2ca27cdbc2dc50d5fe08652e18e684375cd523e2e3f7da163a88ba88dc241d241346b4dc986e9432e76e42bbb04d794c6677e06a3d52967326032fa1c72b478527c5d27a19f4fe8f15c435bd5be0ddd9974ce270844c9954cc1d8a6fcfa2dd64d076f653fe1600911ba817dd0fb8c2a4dcc2989cc405842b2ce6c3accd9d12e5cccfd87f4e75b1a94d687a9d6c31234376b7686e72300695b09679995ba4096814adca40b217b8b80958ff8fc3117e5f4e7558c874f7fd84e99dde87455cadc9e9e5836474f1b32c4ce2342ad216b9d8cdc2d49d8bfb75ae315ec302c9a378a7399da7f6d221da5246cf1f756200a67a039b0cd15fde7b6216779d99bd3db1b01d5e767071d3d8c52459a6a23b33bc0dd30f7f0d5790b72a645dbe8c0373a901d955ee8e77d124d92b00aea55e7c004e165b00e7cebee5302b604e32e029e02ffe27f83478ebb615d74e8677ef5ef062a44173b4941e6ea622cbb7d1910ffb7af6a4dc012c3de0b1b6eda9388920260ffc213c94d8b38ed6f811545dc95cd7f162bf6fbe5d8265c514a7840152d3cd1e3da117512356ccd78310945609ab28dfe9c9e33471a90c5d61e4e92d16bce659ff99cc42e752ac494be92d22c192f1c0d86b257f7f8a67fd88ad28c458e851394893e93f44976208c1a367a0a281a62bf44750d5c935ecd2529721b7ce103dacf82945310400a4bda383915387c25b70f7cb204ef21e176702840663f85fdf8e0d0aed8b5b9a62d8a6fdcb1def190b48742b1ddff0988d122673e967b632ebfd6e628a6b7b94d81a8c57a5a46b6d1ca4d441289ec4d3bf3089508b8081e05d29a5829e5cb49b110a594524f4c6ed1bab3ec81c88f3ed546ee966fe4ee29bdb03a15beced491477c8e6e0981ae5bdb1765efda77b7dcd4bdea1dedbba7966630be4b96942aa5956eba2504eeed87e0def4f673fbf9dbcfe75efed1a6de778db6066bf6106bf2686b9e91bbb3e86ea6987c3a3151bca469534c34c2bc6eab3de95b8b615889466967723539566a9aca80b0b01804a77e215e587c693152da2399ee9c9f4b8d56cd9b49d85d42c529f125df9980c851c200e99c330620727cd954b36436a4812d39d9ae63d42ae7275152536262546998f2c7f2a82856142b8a05252a4a6a4a4c8c2acd5d9231497593ee121f582cd7fff07801d997ef7af2ba301f582cd7fff0780141c9be5dffc3e3057497dca528568ce57a4549b1a2ee929bc48a82c9a828ab3fe7b8a8bb6db7de256984b0f29dc95d476be375ecfad6e8e4beb5afb976f590a7e40ef93543170fb9687bba3f9fb2bf3df7419a53c5a04c8db389415663272fd9c8369ad5181639eff39d3991b937878aafa7f8cae29e2506d5f78dba7c97938dba7ec8f5a13fb978c8bebfacb95efbf3fd691c6b22b53f7f8a415f7eca5bb6fcd5bbd9f21d2ad6444cf4e1abcfa7368d612e027d20513b22e7ccc94c3e353525f57764ade6f4a78223eefd494a875a3fc9aa1bc609076ec28183e2c001c3819b70e0c030ec04070e1c7829c21e47843d2b3f8c75e78731eb8f07477e9eaf3c3b938595b0129e1508a635b6ebb0610c4ad5b450f264ff7cb37fd678bca218b6dfabf9f69eafc76554c337f3dce7c93c998727f3dce7c90f44e6fc70dfacb3f7f9dc37bf8e0622efe5e1792071e77ed77de6d1f9ec753e238de7757e6747eb4cfa3b75ef7cd6badff9997526f7da777673facb7efb56fcaae9521ca79cb152cef9312ce3a69c310c3bc939e3a508cbcfd2c11d9ed955753a1d578e95b01256c24aaee35a550f5936081bc67a50b263d1a7fdfc18f6a6519dbf3ab87e73cbbbe42ed9f2f63adbeb609dbf491bfe2e53917db931debc6feeede2bffe46716ffa88dc3a31eca2eded434c641f3f9078ffbbaee9dc4e5fad7dd7e9e84f052f7dbc764f57fd6999d6b7736d0927d885dda4cb7493eed285ddeb1431be3aafe10ee3f02ebed193ee1256c6b2424903650a0a1394a46d800d633ca891327ba368a5945fbe997ca83329e1c3ed993c2237ac6fe7110c1016d187db2107a1fb9cd8c93c32b76ddbaab33e7fcfddf9ccf38e87e873577f3c17df7bf15f9d1863e4e1790e3a1e1efdede8acd3457cad36d2b647169e1b18a70bbb491776614e9bd352ad9a2f7952e7b4f4557f55abf97a37eb6ebbd793eebd4bee92bbc429c72c0d1ec4f0d0c4036c0f60c3d813376af601368c3d719ad0939fbd75cf7eae73bcd5bf5628bde8080cbb3edc72d7cf35d41f5eaa42f1d5a3f3dcc3e8a3d6c7dfbd336d9ea67d8c3a7fd4787e85e3b75f79abbd555debceafbc1df779f437593b7b5146da7e1d6da46dcdc23acf8bca581b616dcd3a1efa8ee673dc36377d597591bff699266237d53247edcbc5537869a7d9334e527e47e2342f7ef638e08069e9abd2da4dd3306cd3a11bfdcdb50d2bb9b66d0f243ab61bf5ccda581e238645dc142386b909113b716df3b8e1a527cfb4cc5c1751993339b112cde2cbb8d4e9a5abbfbc312ce225c74b3b3ec7dd1b71e82ff3ac22e5897e3998465a8c9a3834cf9dda18539ad1cf289618c6bd74269f1f1de9493ef98c923be647456df5e3c6c24a51cb684669263556a2f4f1fc19351f466d1a8ba56df3a791b6b7eff417613bfb8a95b092a669786973dbb66d58a9a7898ebbd40ee5929c8d95c37a36acaa9f18a4f32cb8e461e54dcda6665b83033f0efd450ddb48b54dcde66653b3b5d9d66c6cb6ccb29846cba44c33eb66615bb3d25fe5d9d9d46c6c36363b3b7a5be322b89caabb9b38b453f6527b0e70ec3ca6dacb349ab6d2720a87e6d1db1a2e695bb3a901229dbe1b63f38314d3482796d3e73127cfdb92a19bad69db1a8d6afcdb1a27e994e7bb18abe883853abd4237d08deb7839bef0b320f56704ba9169e66f6bdc04dfd66c6cb635b28a27baa2c4f6dd3c1fa79e2c6d046c1873c226e6e469bf368c3941da4ea2b6dddcd27ec5209cb93b859cd398696e14bfa98de28e5b74517ceda73f7dcd8de86f6ecafa6aeb439efb91e3b88f30ee8b4dbb48fb18f6f43eb9e3c3186ffc1b9d703bbae8ae3e3e90f8d94e9c1cfcfc62d4534fcdddd7e6cc3eeacf67a65b9c10e903c86e43e2cf9ff323cc4d989fe9a5f9c5a52f623cc4f3535f1e5fe92fe3984658df1c8a5f94e9cf6386437f33ea8f679bdadc8df1c69ff1b5e845988be0f51f889c372ab9096e84e59c3bccfad350eed8eefc8cb08ae673affdc7c23f5b0f247fd397bb6fff9b9bfba2cbbd90fb572bb909dce6312ab908544f7964254f15b125aa36b1252acf02b1252fdb6e185bc2526bd52a13a236605c0173a60b1a9604a959ecfa19c90c25b1a5a72708dda1bbbb562e28e466055770f5b9ecce90316f368c2d39d9d6b11084d23de221872f7f872f28b12726cbc743f7ca21a9637686cb861863d0e76858d7b0462aa7f7c977e9f25d7e915f18f455e9c38364693c6716fd9931266fcc39e79c39dac874c3181336624cd2603346cf0f798b19632266731bc69828b1bffcd20807022241ce1847f88cfc6cd60a68841893285b6e186322c4be8187fd0141c124879e19982849f246521a3d52c668c5aa5a3d58c184a6a5c3989e28523d3240424e113d5e9486c8a14689a9c584121326946a6849b1019935cc90d1534317396a7085529a2dc8b49c34d1dac2250e540f113948d121071f9c72d0a1272a87a4387396b0b14619ad293739bec0a2a706535c51268aa956932e62b0f4b421020858538f18b0262d29604b5a546032f4ac89d33a73061a60e408238b2f6ae498e96972a2870c2fad22b27041a535040e41b490707882050eb01c73704802c78d1c62a0d1e386183d49b698b286cb9929c4b49058a2078d965610555a3f2c71ea11b3044a4b86254a39cc584283127272a0a1468e3266d04ac3c515362d28514c3dd1b304133d5a6cc971c64acf961ba268b9a1871610372c7db9c1861615370043839e22debcf1a2e70c19b48890624c4c8a2fad2a49f4b0b962664a15493ff49c49daa1f544d20d3b2421a569a3e564468e29be6841b5e991818a2f2b168b355d3b647fa0bb7a5f123d569e12c26384c5254daf7654d2e2c3089b312ac5a5183433fd135f108849fe481002dd571ebd1f57151b1a9736355242235373d7db1ae8bfa971b8add9d8c8719623e99099dc3cddb8e33e9d507aacb834832abcf48ab05536595809c3e013148f2c4df2e755dbfdab62318f45494dfdb8226c156158e95f554e6071bad264c7a95da9f634ce9d7d1a116e4f9de1a1ec356d46b8e35f98136f5aca591c06f1e853fc2947e94977899be03bc6291c582ce9d2a545fe72f631c628ad88dab62e2672ec0a0c8a4ce984c117147285097c497a833743704bf8529e250efce110f6f83c0e549b0d6355da40301bc6a098e4542106c915e00f5f01f6907a4af973522aa59453ce29a594cee44b1e1bed04fef0190554128c4382cb4caed967964b6a1b9ba9ad2690cc93f5435fb08c15a7184727be8b6aca86eff292ad88b161ac0ad52661c398952cdbfa85e39a33799b31b9be2b2ac7a52332929b1867fb4731e29b1804c7b7ff9ce9c50328be5e99cb88ec79ce295d66b2cb2a28afb746b994477996cc7bb9d53ec797a6e9d5363f63ed6cfee6d19d5da95dacfa56d3363659cc7800cd4c88565fdbe3bf48c88012b0dd3d2377bfcc3e836ce4671e5403a936843fae8b609acdb5242a9a9cbd566bad75abd5ce3cabcedbadda23a1bbb3b3f34370efe816cf17d5e7f9ed333a6ae2d9c95df68eb68e9781dd61fbee019197b396dbead35a2b17d7999e98c52ccb6edc622cc2bf6999d4ee7d8cdd33b0bdd78d29f318e7119cab4c7efdabce9ee91ce78a65cb7117bbb87fcdeb5ed1cee3c73cdfd1ee9e62a1ee5b38bea83ef7f5b9c7f1f6a869ef3c0f0e0f3a8fa7f310671eef68ef7819d85907bf7bdfc4185a6f93996ff4eb9c14ce2e538a3146185f14c657a665f4684f49dfa93729a593c61825e70d6350725e473109f6f0b702aac955265f571519becc723e10d45f7704624229a534c62ec618f3dfdcc5d87917bbae8b1d7545a1d9a669dfd5f9bd76e64c36d22d43c0624e72368c3921ed29041ca9496946210cda67e903060f52e50e4740d45f85f115238c92251049c6c2686355bcc4aa3cfd6c5e02e2cb7f286e7fce3dbe0a2bb0103dbaf69b93105f34469de93ab190d3ffa1ee1f2397711f5f9445420268a431738fb06a0820d8587829109923f387e29ebfcd29b31792820ad9d59ef3e8a4f0525dade49aa50f7f61d37929a5abf8920e81a636420cca5efe6abeb6845858faf19390ba052c552bb0202405cbd9e7ac11eb91400d1baa988ed4d4962cdd94a726260db6a404091bbd6084042d800089fcc1589595fac657b49189522de99cd39dba2375b116b0545dac63bbc76e394ba5be775c95d1895bce39ae05af9e7621273032e12f3a71ce63b2364bfe60957f0bb5cad8d52e08f90b71de17611ca76d23f1159f042d48c9520a01aa72616e4dea16b05455c5a34cf23cb1f4e14f9b2a4cdbabd83046656abbbae4afca9bbf1484c4578cf169a729bedc892ff1bc7c254930bc508da400042dc457b42f5760e1939fa520c4086b4b20276cc91f508b08ddf2a55e4da72ebd7b6e46ef09c8bab8c8523e952d7b46714f4dd5466229e503891da593ceacbf4a374da98ecc75cb22bee7db4925d592e91b91da0521fa42f3a370ea7a3d8a852ea594fa4fafeb5e274b1d0f3fc4f368771edc134b48657bf72416e2341f9b3e21ee881588eb8a3febc620da920f7796fa292ea2427cc115600ff89ae48182cabe57ff6d6ebeda6a56bdd6ea75b3eeae3f238f3deb6dd5bdda87d0bbbb56adbac542db43083511bafdbdc2879e2b4bfef2869f572c1775e8166a50d337bbbcc8f667eae341e38beecff52c549794fcc129e80388dc417f80489829c4a0ab3f98060b6956c86741f5b7ed4bdc142e3247ea679d4b4ba6ff19ed4fe78ddc5db3af3ab5d381abaaaf747591e95bca5138394a29c7bdb5566bf9b73fdab5d6ca7196fea47a66ae554dd78cd2225458a167054f85f8f220f05d53f9833503b28637b118506d2867c3d89429ba458670b58520ccb2ec6ff43183701ef46a7cd18c3e413fea8f5ef65b9665d977b4b3ccd33e6a2254cb6db0582c16ab4b17d686d3084b670d2118db5489a1024c930012207cf8759281da95c49c73c26944ba92c8aea7937e2f44a06886853126a5cd86b1286bc4a2c4a664894d59baf7defb23abbc53c8c8bd9e0dca9c10c76d38849ff3eec6c1df3cfb1cdd101365fb6a96d6257fac0d776c0ad2ded93026e54d10fdc863c7ed835083828b4b36c4e9cf3777f4dd5db3cfc8cd5844da5b6dab74671606e5ec737c657a0526bbbed7eb190b7fa2446ded0319c6a23c6dedb9b7f3ce686f7cc91aa9fcee90a68bb8d7deeaa23b847bed7e7dfff874b372cccd8a2ccdf3cd823f846ead467117717f6342546dfadc0b9166cbe79e7b583718b4bdac31c885b8f9aef0079cb03ae5e6f4af6ec216b7c444e09c3943dcdfede99e3bee0c0fb971db7b3ddfd312c1a9bdbde5e87624a40da7aa9ef1d5c1989a3d87c5c2cc05c5f7ff4365f657fb95e645e5ba6dbeafbf94d2c8a577c3ea522203491fff2e202018bd39e70cb128ba96c810425846951bd798ec8aca4f52b8c468ae2a17768b70d80e2c179539619c5a606d623a3089ed4015dba12908312e2e4e14574af585551b9a743cc79e27b982c89fdb506fb6e1358c31d6adee8bf0d3eff0d3c799d1b61d86d81e6deb19b99bd3aa869ed38dd2064de06c6fc35813aac8f996f441e291b51a2fc51785f2513ec59b98e24b7ed43c289710f973285bba9208b7941c7f7e8e34e3d45ce202c3e61e979bfcbdf69c7ff32a067d2e0ebedfba6d9bce17e944efbb9f1174b3399d1a5ff11eed6b2710b9795d62fde3097147fc48d5e3fa227f2cf991847d42fca1ca6a043244a6f06597a78d4d16968b0a1140c49aa4b6d57115e1b0f9044aeac2eebddb9a5853536cc94d548ab0a834e1c51aee786f7c3c1dbbe649aff19555171159fe8f6b4a8efff3b5a775872ebbfa3f40fd3025058885b803e06e715c2763ec6acc87aa580f713c3159fbec37edad163d76dcd7e7f40d62c294992a809b30639c8002cc0e049ab0871b279e0063260c183253546210f0c554eccb99312cb9238c2f659ae880671547983e5fe496fdfcac6f020bb13484025b3dc47ed65f07dab733c1a3c7c8272e00bc55a7cd28d930368669036d188342cdce3188ee692d19700754a3be916598a103cf836dfd8a813b20555593dbb0862079e1c1a6ef5fb010d503d8d61bc0b6b2cc0580b77a8985baae7bfb370671f0f6b3f4b17afb8e878ef89c2dc4823d6ce7c96d3d7a00e0c0a3b2c20f24625de3cbbe43e1ee7d095c0477ddbb1238c7a0eee73b141e62adf61285448306d3c75e6625992bc9e09577c542d91a5fd9cb7247ce4284745dee3e85ee57882ffb4262d0d11672050fc19f33ee62578595d55198c87ea73f18eceebd0b26b28ff517c3eede93c8fa3b4283642514977a9fa54252b1c1b0add5b194a5f58c222bbeb6a702c7edd3945fdad6b194bfbb2795d47673db7722300a9d0a86e6ae3f34b7d52cd8037f47bbb39f7de77df6b9cf5cd62dfc52e317ce7fbde022f957f165bfc6a0f7a8aa050ff1ef9ef36a0ceae0eef42abea68e24d93f0bc62e2e58881583b66056163c64fbaedb20129868cb3a74c85fde3c90c045b61f21beecbfbab7ef5a3afd3a020fe9deb547b9b6f3a8e747e0216d1bcde95930917daa5b43e877b4eb289567a66021349708ac42e6c9d9dac7f6ad8c025b233051f756174d9ce676ff19492c98a87bac8bf0dbceeaef087bd28aeb52f010fbddfb154c6435d645dd136c3600368c3d31b59f106367df7d868b64dfbd63c145b0fe7c46c722b3709851af3265f4a74e0788a41efdeb799fd1dcf4390dbf5a2f074384413c8a3178ae1e26ca42388618eb65d8a355e3eb5e7abdde0c7fc0d5ae5fabc8375b12e22bc613e22b1e9d81dace64c31855d399349b67c3d819294c549f8b7148fcaa5bada85941eef5b2c79a48483b7a1f6b0a1d71588502f7517f59caedafd487aa5f8148e9699cd1acd54866af558e6eaf7ddb6724f757b50a8ee0d6366724ebe6652c32f744d917d54aa46652e4ec21fd9c7948e4d62a12d286b8722126ce98a4cfbec31edc4baf7ee6ddeda5472d277f6e3b17b920f59715c9a484128d9d3fdd73fd6daedb6cb86118aa2dbfca9818d896ef61e47017c21f488e68db057bc44d4862a12c573e4cf9fbbd3f067dab9fcfb5e3072b777ab3f4befa5fddea4b5ca43a349a73e3e0e4701187de375fc3457011ffaf61a43684354b3de9fbfcd97413f9cb5f6949b2ecb9ec3928289d346ad8b4c9b3887bceb32cc343b8cfb82cfb8b42dc11131952b55a9fd6a76fe7856236845469a6f6fc6f16d1af9f791f11a71a425bf551883bee5a3fab305893146481d4d6be526dedabcc76787676328e0bef0aa3e0535bab5fffcb3efee615ed60225e6bc643b2a728c4adbdbd9e072feb072801425668c1c80b4a969ae29e11dfa6bb55005cbabd06bf6cc3446485bbe221b912914f758dd3a1a4dd54e78692ed3f058c13f859fded3fdfdfb6b5bd3db7372d2912f94647b42f669ac7b01dbe7f846a11a9534ebeacb1adbc99e7db465cdfd23be18f18ab976114e84bfa44e66b34c6473282a30d3790f8f3671f652e99ac9d77caf9dae59e567a5188efd1ffe66bdaacd3cbfea7c83f7e75b944a6e3efa343960f6391f63e4ef27c9fd96bdc6f9cfe1cfacea44f9713456acb97504ddb3f83b9d93a368c7d11b33f23dffeab9ef9e755be5fb377ef7e85176edeb7fddc5cdb88b5f11bcd7dff63826acb675d7741c93ea4f3598f1ef7ad0ef7d5abf6350f7ef6b33bfc1b0afed2fbe8e60292b9a1a6ee5f91ec338ff233adc83f7b4d7f4e353cc45f3e1cd25cbf631478388feac55249496dff48ff8b0fdd795c1e1eb3f707228be25fa2a98bfcfde148416dbd614c2a697b8b3e92b98f389cb7cf65ce39752de3b6ea3f9b470f98f9539f8ea594618938fbc7863125be6cf91285078ff882f0870bfe10f6c8fed384b48f5a6634b77f96f940c9324837fcd93c600ff8314611dfe95be8b586ccd77e68d63a6747f843ae5b48e6f63fa20375eb88efec91cc0dff88ce737fb427268aef1a896ff9487c675b8bc82cca74918c9bc71ba2cee62e89443db3c00b7fc42ef3e5fcf903fe38a2b3a3375fc62fea7ac52299af898104b220ceae9fcd2a81805c8fd0e3e343069252e432db56c296706f17064da1ac422d7ba299bd66b79e6fbb74467a3fc89ec81c927d7d898f7844e23b7e11cdb65818838ef87ff3a7ae1a033e4ac228a1cd1a2753aca112451061449d21a3dec8197c688875a18a25c1858f12ec236acc14f5ffe7371c5a361bb62d8c152fc038b1a2049a201b1854acdca81f6e14939d37a260308d2d07144cc9b1e2460f693cc109b251d126d6e50b1f192a9d3e34bcfe2716d5c5ee368c45a9d9df035d2ff58bdf10475762072d5f6cb101942496b0e1667fb9052c9f19582c209f24404040402c96943e48acaf09f89f1106f03000d047f63183e4105c6ec42dc68d7af1faaf5a465d6ffcbc78c4aff173d58ebf62c592600344f69a96bd967d91e6f1d618a469cd7546d61e1ed1a9724619e475b1215d6cc42d83286c0d9172ce9c37f29d510a7bf8c31ff984b5f05a971ad9f7c3d7a94838d939368c2191655b7ab1d71a82bfce76dd10cc3cf936e209b1c476c33f04f711b7c19e5fe3ce22d61c74af7f3dc7285cec7d43701719c91ebff6589f207b8dc342f587a4aede67bfbebbe0b0477da3a97945f6b567dabe7dc78e48b2ba4524ab58a87ef41de326eff4397bf3be1864181291acbcd7a3f388efc97953f390d43d351217e1087bd606cb95068b05e4420308a80b2d5b8e782a03520a298590524829943a5e870e064429638c41d9c7ed3bb6604b6a220b88736210dc9bd48c917ea4d15d6ae4f852ea7983ec9293e743fa0e7f6c3f1fc31f5add9445756cfadfebd8b4487baa892c60538dfe02767c3847ae71bd11e32215db92c6e506a78312261eaa625cb6a0a2061754312e6b5c705c6fc4b224edbb61cc08395366b058660001b99431467985cb0c968c514669c41b2c5d9001b39fdfc1ce3e8aa966e00eb83f1d2158a4e08eec6b7c933bd870c7126c97588846ef60fb934b8c18962c0e834d5fe2490e930a4d9b25e7087bfa18915f53cd1aac0d6354346d0f9a800028822b06f9cb9ff3bf00ece98325cbf7a73c3c2bde68b1616c0d6cf780411e7cfdec19832bb73de7a6d85df1d563c63da380b37b368ca159635bbf3e50597bf991fa40652b56b090434187921dab0a096594daa74a76e84344b6fe247db064b8e1763d9f7a56c8d990061bc6aa50b26dc443334afd747dae647f5ac5072abbf6b192e5cb973e31e0e163254b7d1d6a8b5caf381669c4e5415f59b40da3e01bf6d0d14376fdbdb4f0d0a2c575592c8944b7650b16ea61f188af394f883bb050d4407c8ac8fa7bed9cc48a470c1a61474a4473993c3e55322b8955170044b1bcf428e15ae2222121213905814970075c62f221240b27b8034a79c084d74400be7c30a706006687132184e9214684310578e200641010f351a604284c30a3002a069cd9681a1085509a2129864c41848a226a88aa80c01a095831013615b8c20232c000161af0361cc8a2035a7c608b10548d808b127451e48509dca0e08b2360a8208c1588c182315a308317900183374765c860469233688063031a37a481831a39acc184063ab0d1a48d2771a0d4a007377e7803083942d860881b48f13944205191a1ca0c56925c5162040d47d480840d5c92badce065c912383001fb920318a5304cc62c91d1a1cc0e669a9c7112c5132978a0024a154c56f470850f58fc9045d3164070118417427ce114c610634421434a1953ce20028d18a84185064f6d54a941116f58b10194cfb92203962446d090c586236ed0820312396c61c24587249a74791205c54b0f4afcb0041052423031441352be103145054c1527ac84b922c68831473c8104192eb12e65bc40b1841926a8be9c0183264c1463d29091a2cc1466a838a3268a2aa45843851555b0b93e78c41d566021a95f50b2fce84058170217f1a7ba28463969a6d54e27eff0e0587100800e58397a5a2e1f1d1ebca703f0f3810006f0da0142083c7a104004a00218e000232020c8070925fc3021010a58000380ec200d384108852121431c402485220f205201021190c00a13a0400558b0c0053090010d6c80032d74c0031f0041084430021294e02b32628213a02005475c5081d10a90b0e08516b8e00530c02086234772197c064fe24a9c06afc16df024bfc197380e0ef31c5cc999f892ebe03b781377e24f9c0787e24cde83fbe03f78930301ddc987f0282ec5a738111e03a7e24f5ec58b702b0ee57ec5a1ba9b61f8a13eeb7dcc2072b5e1df2a32f431f5f71b563c14a38c3cc4e833458e3f2d10bbe24dec0a37f28c181aaa07c0b853a1c31e6ef6e742a36627c30d63689622534c0b2a778f31a645554c0b2b364b42efcb29989fe9af6e48359c487cbbfbd4e083f1f5b5e0ae3bbe3b1b0ba118ff21a9c424c4977ca239e50db65e13baff30121d9b6d2baf9d77c6da6c57da304606cdb616e221d953fa993ec6af833f5b6c31b6d85a6c31b69ded34708f56ef83b1c5165b8bbbcee2efb0c5d652c1d478b3614c0da434d66c396f78daf050999132e364005b4c07c5962d800d6350c0b610379dfd2ca70c9b5d6390cf40496c7fb061ac8cd356e3546669ff6c188bbdd92f9865eb0d634fc0e46cfb94f27cb667aa76f7b87b1c3b03675b16748f610c2a9a54d3cf510a26a2d85aaba349d6b1438e4f977a1687672992babbb73a1463cfdab8c5e2f0a878e081076f23d486c588a72cf7082d4bc00802124a6cf102e50e2e51497481f1d52509284388e2e2650b943b944002c6d7125a607c8d11800004f0364a09401f01e7890f3ef8e06d64e2039da5f58106540989204c15999f9f9fb7b1891f6d0412ee62383c2a01084000dec62f174a1f01d058726880035be02904800163c50c1c325808045fe04008a11345b4a8b0d00776558c61211080a982103e842784a97206a90c16dac017241e314f39221a2ca4012218a1c0422d4401216c807d8a4f8c60dfea2732ad6f4de0e8083e51897da11283321d131e97ecfa96eb5dd603ad6fe92f5d0c88c0441d2e73a12c414aeba10ca1e541190211b83313658a14aa21a44439e3046508f8a30c81a6840e6cc8508610858f1319ca1d31cdca4b42c351109f5f7d9625380da5e0cbeae7ea7d746b056d4e10fd4930e0203e7f1444fbe8a411824881ff0b1c08fdb6bc1608be403c449bb33bac6577fa88ce9c4d658829debeedc93284f92dafd53d12842730000e8427d8a8e6425942eb03ae6fbd1303e068a7d6bb56d0e604f129c1a587687dabd313380ab27aa7068401720a03e4d400a00ec0135a0f3105aa96203e3a89ce9c20492304593d90d8f2beacf410541c21a9814354a1d3a2b2fa960a492a0d3ebf7a2549aa8672c7ea57bfd250eec04360a2ce091375768d16274c643b2bb0f5a43c2fb9e7733cc419e8f91edd4497811c9f43379185c04436084c643b2b9e344165f530826083c05dbcc209104d3268d2f40326ea2cc6e2eef0830f6da43a48ca308210b3f00193a1f5b4b0df59ef4813f6a77dac5b43e09c9d1fc9c76122fe6467acbbb8053ee2c13e927f051e6cfb9efdc80be4641dabf0779e94e3b7f38eaca07bfb2d2170ef23f6b346d2e9ef4886ddbd9c3367ce06125f40c20e38daf67b7204617e8e24ecf00224081b908308bcc1eebc26ac7db23b241d6cabb9a0a14604f8d04512cd072f96f8d0839b1b7a60fa2289090a183640e1218c1a787882893a8bc5a0e18993319438693283244d76c0441d6680e7796f23199e9e4185958e3be800e4ffdf5b3d5c7932c48e8acfaf28e0417c340c1ee475b0d62e75f6cd85d287071a69f550ee00825558e92526980877383c2a3a3eebf8cea392f40aa2e32df6e8f6f9b88423701464f53ede8658488595c6510913e11c3011eeec1931e4008373a1f40103180e685c287d441ce292345ea0860be21a2d8072475c82893a1abcb0e40636587043521b486252b421c6815a018caf57b421d6106b006504e3eb55030d6ed0408392379428499224268933582c27054833741db69d0dbab728e8e021943778eca840b963eeae0319aced78ec0d4e901fcb19b050d654301226c21f439c73a1f4016502fcf6f30fe1fc320916c29aca1c4c84fd06980877568618a0dc71031bcc00031bc84972a1f461c307a9e183c020e70d2525a08104358c00c6d71b3688e00d3792dca8c10d3588b32404ae6f89c0a5a10ca1a5a10c214e1b3878a00d36601d80320419021b34c8a10518410081066b28c5b03f18aca1061357238da5a3dde240cfe7f896fdb87db7ac6ea147e7d0308280d34043870ca00167070cc008420401ce194d2e7086194e2c6046194f5828e30d0f15784306140a903103a609cc608c1e5618430c1f242046183f44200c309a2000e50eb9038c2f805001ca1d5f0441f4851b211ee0c60ba7225e7431440a5d701185081755521c50b5c594215b684184102db288c150166da8a0d0b5712cec15212c9e8ca892a5087984950ba58fd58c23d8975abab7b6f38eb64f53be3e6564185f566f81853ad7e2ca85d2c71524797f72ce9c6d3bb9051375ae451658c86a1895258b2d6db0f07204165c647085125aae48828d154b20f1264317c18a2e6baa90da32830c618f2aa2d450c104172abc4c2145134948a1449a28be74212343b9238a25d09cf169ca5f7ee5a16dbfc6c83cdfc1bfce4875a0a9305117c3c66e0613753c588289fac20c135038e125bebe80a28932619428f325266689d81499315264c03cf104136e9e70620c99260e30268c98d8171e37808b008698a4a3a8d48c787539e9148d080000000dc315000020100c08c442915014863936990f14000c8b92406c4896c924418c8238926118cd18430c018020034866883469002b2625ed3dcf68502050083ec7ed6b115772ac9160efe1e7f4d306e152cb03ba0e9945070d90997878e226afe2eccb7c157a537df010e48fd4eab60bd19678821c1d68a4205874a1211452ea25d0fdc67bac3dd6554939ad47747ccffe95fbf33d4e6c96b4e05ba163b8260d22effc5bbc6e9f6571a0274c80782f04321de055303a7709b787f9b30590254e852e572c08a4dee245ab07cd7585c6a51b1ae66b8472369a4f346786f07d67b1e8c6562e2549ab6444dd659f826daaa5061730b7c22a5985989346d74dc1040185f6285d2d1e6632d25fda891f40fead96cb182ee1f8fbe55a4a0c46f2fddd00e1ae5b8075d6b643149bed1421d66a2e1da2c1e9e1a0702605395f69b55fa26498b8536eab7773b9b80891fec482f7c86ff8f01d3b849df29624328477038c2646680214bebb294a813bcda450e088a8e6174f778770a2e2dc5cf4a65573cd0273b0ccdcbaf07762f11bc02c1683e01875ba31111544fb0ee955b817e672f47133055b93882498404a5fa0f6aaee4112247a72f9fc5a2149e8370f9aa690ab45bb8616d72cf70488d746fe2b2b9e71f4de2f66d83ece9cdae4d1d960c96ee289dbc164a3b39d7aca25ae44f648f2f3fe67c9c4141abcaa1e7df819bdf1aa2e856520dd6442f05dff96c7bce1dac0eda8d7d37ed3b3dea3330d1240fb722bd3cc9bf865bdb4c8fb3f98230940c1a576636b1f1ce08c8d72ac18cacc824d43110890eef194d3829d4c6acbd9d55520402bb41ec1b24dd9bf7fc84a513967e32974acc6ba7c9726699cb8eb86936e9c74fda2b94b3d50d703ad16d0b50159172875805e1bc8fa80a807a27aa0ad01426da0d705521d506b0159235075005d1be8b580560bb4fa060816e811e8f8807acee86bdc5d6f6b92e853eceb88c3ead2c2ba46176b8774c3603d5e8adcabb86eaaf884d439ba7aa544daaf41a00e117a84f511d243a887b826020d08f523d4424c8f303d827a88e86644970ee99362a6428938d6cf1d8387d9aa7ee60806ecf6abb386e0b16aad9d33008b717badb9217c587ee643116ce1491d55668ec1c5da5267763c2cb676d5598330b1b5a8ce3f860dabb5defc48382c6debe787c1616e559f73040f66ebfa592398d8da57ce0c81c7bab56ece1016c6b6357386f063b657991f078bb145c5fc6158ecdaaae70de1c56a9bb87d83fc58841339af9c37008f7d6bd58c217c982debe60cc3c76caf36770c1ecbb69ad9e3b031b5d5ce1b8789d14e75fe203c6cad55b347e16068af3d3b0403bbadfacc3118d85bd7e71bc062d45a7766003ef6d67533e3f0b0b6a5d50726798d221eb5501459f1f16ff56b0bdb32ee0bae2584c33c0742d112b792c93a5d3566f16113779907e4fdf0fcbb7ded3296eda8557f9bcf187ffd4fcf2589e7cc0aadf916d503e37ba4cf37fa28cef9ebda7b031cb15d6a6c697292b9e619ab64d704b13f63e1afff00d0a8bb28f307ca40a7a13bd4b71050296d1339370967bf6d929401d644da7ef8809465e1191e3e0bc50465b5c41ff8f3b19fb3f5d317303b989ad3619e49400c4b576ba49085688492ebbd62e73033e6d3bfdf9a6776a0c1967b6e97716e80a3754477012d3aada41097bbf1f454206d3db9bedcb7b891d5efcea9945f510e95f4ce2a0eba2849b9f10d4681e9d101b801841746428535e9155a3663c831e80c24b19b052b8e3c9b6794923d96620cdfe5d9a7d4e32de5f515c52fdbd6f7e52ef07614d5eee09755edd4d897f89b9ea208ab3afc3b5b950bb40e236d0530ed6c952726787202ce4f5331bfe1b25c4f026d1a2d558c11dbb045fc7bffc52fc1edc31fd2667ae87cec51bba80ee50f0bf79cb8b16d1e4a2a69823580e260b16f0faa247f5c47e9201754b18d6c0e3e7787c785ee47c34354e72e393a4c11475993adceb83ecc6cc888928ddb304847aaf15bf934d4616cdc816c1441347d6744363e9343fedea06e641b724149371bb2fba91adb027563b5463279e8c0d3e25d396d0eb9b3b8c4dc43f8c9fb4afd51f93b5deb126666e486be1f912b36daf13587c67c5a363a5ecce6836b9df99745551a9419d2226a363cd68bd5b57220646e3251299ac1d3f2fa1dd503a7007194fee62226a6d8700ed7b5446f85b94e67aced3b4e17086a1c9a86286f69edadfc1cf4807dfb1b930218c74a709026d3c7effbe662f2878026565551b05bb842d2d2685cae6fb8429f02a65162e0ef0c5d010bd03994656507c47167b74577bde6bd812e1b1137e188c1b9767a853679af906332dd2058b51e4853cf02d4a6823dab20f0b7207a24abcb9aa30fb8c7934756c42c418e878ff1e873a430b86903b47182fbbc435f5ee504f2012bf5a7267c346000fd8422ef8f0a6154c1612727f89043681ecc1f7a7e178b4ed855f7cdc8bbef977f9e46d209b719b79314c6ed8e3394c1966eb3a971cdb91a5363a49f7b085c76e4340aa014320748d323761b38b981a9f61eb2b529fe4a1a18d4c345650c71fe9fbbb4d122003502b17bb2c6cba6dac25a490767dc2ba74bf01b3830ed607ce33dc43b5b558c362d327c03bb5c21da263d9413f7e584ac52dd506079c58b35bf06b3417759e3cccdee3741119ad996e2390da039186e4812fc20a654df4afabcc0eb3b44dd1dd771c039a7414c171df14202763c01a31095486810e1dd39442fae978432c2931de0813d086f55474eee8c64b8f37cdbbb75e0eaf4c1236d78292241d8bd5325b18a96684351db003e8a0efad1ff5a7b28b48244d8201b3c36198cca0a7a1f5869c0a683fd83dc63827bf38c8d15a27c2f8ad9f83e3776a44d85ae2292a1a80c1e05702ab83014379cffd99ac7e7e746f3034ff35b9e59dc4600009d1d627235ddf14465fa4ed36f8b9c728e8fcfeddc4c0594b82f14e5b8833a752fdf3f8148ea3f2cd5f54e5c5e2fd710bb44822fdec9ba2d78db68d9e93d0f7eb7e353f4c7d62133a49828c68d553049656e0938be8495af991ae06d1d90c6db87b8edef928a638497cb9eb209173452f8b142bae98c656f453f853b8d80dd50162e78a5f427dd97cb0e2396702a3de74e7d6f5d4e5e8618ef6602d9a6dbbcc13a62feecfd8e2e8a0973732377cb21a793db29d358250d1c22b20e3053024eb183bcb7bd2e598edb6d1b7def9d55bb714b977cb66c62a94621ef29a7cbde392277ce922f388d8be1916741de84c689c7e052094bca784c75813b68bd6b5a84126538832bc5468ce626c57002bf9ba2736d1006ce033f3bb99a2866727a522d8702eda8d7967832fe433941d11c49a1e4abedac51a2c78ad8916a975c356a07cf68d479814bbc01cf9a887f82ab4cdddd89541c477c29d01f871ac74a1d991da3e5f4c5db24172a2b808300017195882bdb19d6cf4d77bbde658f2749f6e6e7bb45a36d5b7eecec115afe8e031f5f76d68e7b8b4b761c36f431e70831654c96a2493ec84f21c353ec83f9bea31c49523440b925ee12148a0c176818185f1136a1439cf0edf31e5bb1ad9a44287d71a9d3b0319a86ed84b5ec160879ca67db6780522d3f6b7504989add1940179051d48d2cb4b837e0b8107ee3c7f65dd484a6984c5892037fa9e3322b1e5135e2a5500477ba2158bb0cb31776d2a0fca371f874c983c4b9071b3f737c2d5ca6686aa9ed73af8c7ea26ab4734c855788fdfd521d396d8e8874aba90954a63c15540f68a726193fdf35c97af19791e8974f85e4be79eb48843e5324b2be42b2fef15649c8877f9944fd72cb388db7eff6132c1b5de1848eeb4f5a54bc3c04e4ef38084b1758bd52a9c37e24e4d5859f4e517a768fdd8728d3c0f5a1276d934998b2766c0f1eba0ae432c03751a3f89e4960ad3dd02a1f2203afdc6aa1671025f8e5e8eb01f68f0c1b841a1c412815d0cf29dcc692e271ac3dfb0ac9c79bfccd1b85f707e78f39a780efe08f008c264e036ceb9424531ea6204a3afbe8507f907bace191af7a93739993f9fb75f6828e1ca85df95728869453c0ddd4e0360afc5066ae781bf4ebbc90c4ffaea9e6a3073920580249278dc0d9fd7f6489ef29e9dad650ff20166ee7a1ca58b2580739906a7ea51aa3831e014c8ae10049d925305f980682843609489b32b2f14345e1e261efe57cb939fbd45089b164f3032bbf80f500a4c84379bf4e34836911e7093da776e09cc7fc9cb10099ab29e06b87a52b7ad6d95585e371732120b2079b498b3213f3485f0909d46ff493f1f7db4c08ad959f1b05e3a9b983f6b9fd472b1542732b6371e128a3a586f7d81d3a66d8b2a5ffb70505b0455dff1e8bb2c89f1f849b410496cfab4d11e3c7ce9e33f87e3de839c7c4bfe7cdb8816800074e8c3d95a2eaa1f3a9d5b2bd072ae783a415408bf96c530d9b9ba94a65abfc73c17970b3a35ee55d12f3fdf22a1be59faff493bfcaccf3c5276f343f57e96fd6a525a60f41fd3329fc79d87b96134d457ae466be679ee1910ff59273d599f589af6e16376fe88fec7567560fcfb4b99c9946bfd9af89f9fc92f78b8af82c47101c66a905b6b31024c0a2e5ca164fe2a705270fbe067f904c7740b1648774723635d4a5be3c96a870348822db03caafbda67594efb04e736bbd50031db3ddd19859c8b1052ae47144b5c856043a198edd97e3f86ff7c93afe124097c2aeda86c805ff5df48a4e55a02f8d3a9fcc0f115807a433285d57223f654abfcb1f478ef0a0edb211435bcd45d71b937b0046c434519606446c9888f3842c0b1c319910e1046648407c0e7c764434a108199cef8197810826ccf24013130b31ca844a4105e053e03320e6c46448007c0ffc61c5949fa5bebf3240cc7543e18a640be625c3688c365417edac7353c302e8269390f2c311edbd28dac236e7765b6018369332684725dc0bf528936162077e57020a4ad504e37d22047625b12c304406f64ab35440c4066e4ab23040c408dc517a1b83e2a45c0f21364ab1fe5d778139e04ad0b9521594fc90895dd1f0dca65a1afac40c7c537a762dbc01d2d0466ce0551aaca04fd481ef8a7d3162e17c8fb8814d49afcbc4b3f73c007a01a0702d3ab149444eabf0615ac2d06304a1f6b920e703791b86c0c6c805bacf824b15420bf073464f6608c927ccfb3ff38915dc9940fc45a1e6616111f3b7ef47f60455618bfc7183d069b3e52009b2f72a576512c3d544e7902304420c92db36f828dd569235dd4d42e53e7a358c2f2c23f59db9653ffd36c5fbf3f32f3a84abe652e8b5828fde77c9d00052c7d539f82c5541b2d0bc17dff435a32d2fa5ff399bebd7d00121a504f1636c11073616b03d1bb58c2133ebf4cde1735c511086b474cc280259da0198f2c5d7668960b5fa4451a59635520110c5722e95096b48114d46b09406328c2022f204bb28bcf9f0f85888af3402efa83763549c3148ce1713d3954b29daf04b0892f3c803e717b27ee5dd8a3e2e9d20db244d3288af9dc845db67756208548a742b09c48c29781dce9b44c3d7bfe128b8dd7b4afe889ce3400dd0d4e9319d49af6627570a51d08a42b880e548a6516b71d403f59ec8dccaa60814a5699b00471d459bca8345440a5afc35cadf2c2ef8be3046958b5a93144c4f9575b5b49f16823e2e365d8b40227b901c419f720b78d49c967c79bfa5cc8f165f20d0e00222ebcafd8cac6b5b7d1f22b0c4e4f3f73e3320072e2139d3a5fa37eb63d8bff9c6401a4838209cc94e7cdaf13d39bb1e9fd31ffb529945aff1a18a345431b0992b373b2f0777d2ce0de7d7d0c664baf51d911184f542650de7dab040ece69e7331853eea5ce1de0c07cff8cec6bbedd5b0f93e3c8e8641f0308d021e8f5e9e84b10fd34d46c194e3f0927ce617fec082c9c616a068758a851e427ae20cb59ab810bbbd52f41086a9e64e970bccf29ecde0648d7af9c2cfeccafbf1c0c22c0ecabbbd07fe3d5187ee1140c9821b1f051d3cb9cc3b446143abf060e9eb358770e4e379e31f1cc83a653ecf9018b7480193fccf43302495fcc35431053c3c252023c42c666a465d2956668c488ac261c17fd9190830f4cc5d603eca89ab2d8cfbdffa7efe674b239100fcbc5340abf9afa98b4287e59bc9aa42a0725d97327f5d99b723fbc49dff5016444c51f2d9da7c54439f53f225903b7994ad971c7cf40b8efdf3dd01d2056d621ba50cd30b89e6c6b65c24dfc6cffd2a59a414112e20b0f56bb1499d1eaa6ff3884b9a6d252dc6735d9736d2f9f7715eb6bf2a65b661ea2740d1217c1a805bf3997b1478b5552f24af3571057a752ec30331b252ac5863308b1cf03d12eea23087160cb328f0ce9a480f8ab0aacb16ae5bf261cd7e5f94458772292f1202df6f881f279efb7db11b6dde18b70a3c6703d7fc8772b9e8acf7682deb40f9aea30532d00ff1a40745ae33f0f5fa715738e05406bb5db3be3c3938c77a7adc68311c191cb1e31e8e2ac42c5f72780637518001c0de3c4d71082d13699af7ec9ec9a885c498f552fbf80bcec9399df1fd13867e8c2600da0aebd78025673b90a3a2306a9168821d7252a02ffc874cff0cdf41eaf7c2b51f4519cd06af7b318a046edb6609105059c9a734d919b3cf2fcd9acbf57113bd141db86b897fbc2289282cd6e61d49c87e1544bd8d93775bfabe9327e0dc65b5e49c2398402e84608ff2a38c2096bb49fc4ce1f51e9cf9da78f83d2f5fe4e43a42d5b758487bfed3b127c21b2ee0d412a221902fe80a94a09c734df1c6e0a6485afc4226241f740d51ed81293bfd25a03ad538ea36a2bc93241247f608cfc14d4366fce5403af4a13d826f6fdf92d53cb0cbd10712d34e253dc47d500ddf53ec0cc5ed2f450fb1427de3f2573cc8b458130ef1cec46da641d186112c93cb92caf1df0839bc0e1ce94ec3ea5f5fcfae24fff5bb92f0dd0b8917e349ca116c881ac10ef8fc3d890666f9529fefb71afe582d63faa411453896c45979a87fc02fabf91115efb3beb2f959b270097652e6f2951d0b25b297638b663e34122f7f314e5ce53ded37b9f3f0e9704ea4915fb5ee3dd464c3c437a8eb1654602bc4d11d5c5dc89f59ab73a2266fa54917604b194642a2967e121a8f407ce66c4a81f9d3a20ddcb5ab4a77766feba23e02fe73210ba2b7c6777b9918820c9239210a7a64e49eacdf80b792cbc37ef304afe4db5bcf7299a8e187de7d8cd07f6121645e89390ac7f31721e05545631caa27397e3966b9a39aa2dd7fa44030ecc43187102ad893c9b158e3f2c4f34e09289605cadbb3208d398d69a1ab5f04183b2c69bf85217c3f948424b80d464048e1ca2da19a77ed5a6afa85f1f1120d989c95a67b8f29e129ae4bafc5c02449b718ab9029007dd9d454e297ad23ef2fe464f9c31fc99c5b72d170cb06680f8597ebe6e08faa0a19f76e346f599ee78b88b380491c4c74471116f4e8a481730760c5448e883e0a7a5aec38b94684067d38723917b8e12c079d138cfa9e9a6bdd3b0638fe2087996286831a1a64a408abf1683f6b67b1402a2b83a1c3665a93c5a6019962452b676df2241387566aec68dde3df2c13b26939ba4948efae85dee583521f809a93ec4b30b2be61a6cee10035b13a79648495a6532ece7fb130cd43e35621044f1f98ae3795964ab3b117278751c62404fd2811a15e29d709dac3c7c2ca8bdf634f4c8e31075a2a475c2691b72c011a23c59e84212b382ac8b6cbe03b174adbf095735509a9b0d413e65b2f54ffcaf1d5bb7788f3e500441958718946fb777c5abeed28fa6c915e453f4acc8679dd1cfd50a720d78657f7e7fdfdd12acf591501e04a3039acac6a3ce4645cb14dcb45784aa7be19d22bbd8dfd39518ea1238aaf9b15c36f92055d8d2ef1e6a768bf77bf2bba3df6922aeda415869930bf8c3837a519329aa1b82cbc54f53f79233f27534753c50021cfc5a7810d72795f400979957a72addaa13cadd1d3e7c5f9b59fdbb4ad8020444a41778b5d52e98bb760d3cdcb275a44dde6a2370261c21b342b7922271727af3b35a32bfa186a75e11f88ff030d461d208c701317408f349793cd1e8c49d5089d9eb571d8f440ec6dbf9921fe8e04d9d5db93524a897abd05d37f25cada210612fe0916ef6c31c6b7c9b2cb4070b449b83502f9ed7e8ff8b0baa9a003b23ccfc03168216580b8fc3eee434d99bc8b90c20161fa531763a9adf018163327825e9e1df697c95e2c7ae48ab2fe96e281dc9c07f650a5e715d28cc0051632c41351b41b5f662480acb1d69136d175fcbcc8788652006aa5cde0d97d95a1bf6dfbfec027545b4d72aaca46a1c589a83b667bec224938760e73256037cb3cde4f66312aa57b95ab0ec59988b951b8446ca1f112f72d1838d386794358782260823c11bffc267922829ff2131e25bef8d7f3f46b82050552be83c8169a5b0ebb2e0ae4bc8a7cec5efc83422bd11dc9f9b8dfe37c9ae878478ef7cd4b118a89f06500cecad35b53525019936ace8fde529d470deb4164eca8535894e196c50a719efae7d005204af00217af4861c22e397310bfb5f1e0c61d5b7310b6a15210a3b1a9fb25496ca62a94454e707b247169574a1893f3f3a62aea3754f2d2621178ef9d3374567151fcd55c5e56f24f59f7514a375556a344c29bba52afe1938876ae84153fcc6c2fce6a646eeb4f247d8402548271b45cc94651e0582395a3add798efd10b9c8adb24e6e5413d345a66dc7a8dc04b901735f56c196f8e0ecd56e12f3b2b9ba1428c451a256b04d3bb1283a9c92adc43940a7d18e8a4688a2d6b521ddafa48b1340b459acc2c070bb6afb7decba5f922e8410dbf0c6cea0a5a2f1b10edda63accc6e2d28b8594917a375973de0efb8f6432dd8d684b3e51c4a2050a0c36a643ee787adbc444e45555696d424046a1af61031be1ce10c519862481e124b0461979e3a6a9118a27a1666402ad5949811af74c8c25f17ca0d7bc43a6e667e29eeb33eccaf89b2753ae8ac540b328b3469f3aa56a82f716f96011246b12297e640074c6fcbbfd5f566ec24b46521ccd6172123d11171f7e0ee650f489287c0e077a17898c4cfbc544a08760e63bcbf7349e26d50e6f8808e610cdcd037c27a12e7193ee89d1a1b036c734295f37245eb67d52e4eb715f5f2eab1f20800f674682fbfeee47589f3f2823ef972930288de19f5f606acf42e1e249a58b54a1e77d1ffe45853005395bc95ece9655f1a9c7ec58ac920b800c939f6b8e03aad798fad025025e803e69a4b797602416aa6294347983fb74d26ac99d7e9a8d762eb6b2d555046e53fa26da8d271c0de790146ae40ed216cd7c299fb960b3f7f59a3d389ad59bee98c33df9978b9909149b2ef1f2576d13e4b8b26bb16a5b03630caf4ae103ac3a1986b683c26320b77837edbaf69dff7d533a5218104c6423636f33dc2868204239ad339de4981b8a4f88a1caf81d2b09a4673eff07fe18c3e8d6024ea48dd69e65908ad33a278e6dc398a02de4ed396e1aecb5a962a2ac924d908009d00358ca851604abebfe8105e7028fa2e996888577672883ec9d412aa07621805e7ca27300384e20bca561c2fc856dbbb5f854a7bbd3fb9f1b47df0b35daca216ddfd2f0542fa563d26acdb63ca0c02db0ccd5f2070a558b33f499979d6441038dcf50923bebeb8b2a1b906976f53e27de88086ef3fb60dfb9c004abfb54ad3be509cd6f812fcd31424d821e5b56257acbab414ca9f18970340bfff127e27682eb8d2e27953575020c50e35068659b829b4d84a0b27d56e31bccedd0f49f941d40a577b3b956430c5e7613f699a4bb4085dd6df433f202846f11c19f44c121025a5081ee2d939974c3d3a827dbf7bce2716cae872c0b0435134062ab54bf5180dcd6cabe6ccc06be6a657f82b2d78b658bfeb903a2f3ebfd17ae4a9fefb837754e97c9dccd626f9cb4a73cb0afaa7c6fac434d1d903fe643cb13ce2566bfe0dbdb037525ee10ea54cb63b41de636020ba65c5c275839701d968d681831a9db9aebb46302916d4f613995a1be609df7180742d0d1c9110122bf81831c148042bec808e18c4d3a8c39a8b32b4fc460c72005ce543e59a79ee0e16161ae6c17742ac356401b38fbfa3c9ca44789fdcb24fafddbb607a691fe40ce99f1beb0cd8d6c414d59516fcd7ace65d094722063e209f21c316b56479a3a0c1af8293e4ebea1d4cd37297b12e98a4eea699126ea4970abb3a60765e9a190b6d739b812f003da21d9240e9d477c78a70bce325fea864d2b8e0bfa8d94b29fbea58459013664497bfdc2e5bf058f5eef224a2ea7176082e51db818d7912e3840ae73bdebbd9c1eeea5a671a585882d202f9a8af63b9b450f3797fcc3605e922a3b4daf90a004c89624c107435955d0d50b2a2fb2d99d8c113558b04d35e1a59c10871e65fd18310560a60ec9f80b986e9bdc9e7b22e5937edb9163785ae33066d22ac27f31a052433732583584c38937b8fb1e7bc08b30b7c7050f9a0a2abe4d98c687e2b1304d735b0aeb44e881a1f6769adff06dcb28389d203dc7e566cc98402ed05d2c2f59b404928cbff8797f8fb47b23cb171ff41398a28bcc8b40fdd511df64edeaa7872086f10ce0e870f19463dd9151ad776b00595a50536a9a4296c53159544111d103e1f3a1a1bc36e83fa419cb3153dc686b5963bf318dcc0bc1bea9141ad061727fe1e264b562d03537c09329135e1022e82b40c0cbba61b969bdc9cd1c79a632fda08e89bace29395c9c4268d7d4468f596b8693937252ba692f774735af33797d0ff0351bc0ea99a0a373d25e701a218e857a8d32687b837f207193c11c5fb339c548d4cb0bf11eb3365b791460ce83487a2eb8c6b4572cdc00a073381a5d514c517ccb3b4009b33d5d39ffc95bfd40021cccfc9b1d9de4e6570da9054c7488139b14a214d709b66e295be97d692b668e5588001d8ad77b35e0e66b6e38006ee1c9710076e650e4cf592e684ecf86ec0eaaac0cb723174d5e5a7194c1124024e3017e497462856c944fce1e600b7e025dbef43a5c44c6598ac83f47bca26bfd2b113c7758edecf73db676258f5a23a5ca5bf88100b89dfc4617c9f144583e3db4a7327494a640acd8d06ce9793b9434d977d1174d242066cf29b5ffbc43fa3d2f08bfdc55c471faa0a63097d1390e8cf97b604f029a32b410c399087da595e797ffc1037288b9d22d4253a12317f21afd14deed3d56123d99beb6cd662da354ec11713fce9e6b5d746af2c29df6fe9f6c9ed7794a17de5936f9b600a05c3fcc023b46a600c8f60cd63da3054a4f3ddfa30b578e657830846e77611d8cde3350802c6e6ca6081cf0b38659c204a434fb93d8f5cd19803b958182df25bc460ab70ee5fe9910c54e42ee3a7b69238089418ca1cd9d67c58b5bd5858aba44cf578f783a79980ebf6fe7e213cc9eb3756b47afbf682567c76d0a0425dd914a85b8fa81bd2b8a825eba569585edebad0eba9fc8614f7f47c3089ad7ed1080f018178d2564f872219f4de95147442d8f2dd0a1c981360972cff734ad18ef030d920b23dceec8e436d70b9313602fdac71ead58d117db342cda13b7a007f1a55681fb8b8f0e2e7d0b1812a3474ac36cadde89d9970fe7d3f5811bd80acd0a2bd27a177ddb59a4d52b0421e06a9dc46e0597a419acf36095d8b7f651d486339378bde0cd80a44cbb1d47830d99b034947bb495512baae875c2527147f5d2deed22e052daabe1662e9d57a24f44e7624a1abde4808b0751c3aae7ab5c840d0d56d0bf21c0e3835898600231cb3d257a1486d62674d602ab1b8978d08d3db5578969f21b95a42339fa186475a3920e0982ca2186bb8c7087325b35708946b86aad153f00db6902f048cb1b44d18046f0af50c93cdf20bd677a2f19df49f2a6572327a60bd59cbd11d0fd338ba73b42f1cbcca0d46713d93d507db95be54f11cb8026c9081775a9afd8372ff53c1d9173a4b607219cebeb4addefab9d314ef0b3cbe2e501c434ee82d21270ca3897d2ffff9cd4cf4564c81158bb271c28384141c9611cb245072f4045c396db59b863b0cf8f9a33df51208bba6d0f0c7c30472466bb4761ac11d38a8e926a552de60dedc3695dcc1e3bbdd54fef51d1ad2883f0bcd0393a04a5d6ce5cb11587df6a6cd167c96685e82851faa78d9ad882c86324596394737ce930c5d3fbfa65650e86d5569e28976203d29d1b1e6d686e037fe647c5732367a2cde741d94d2550b15052b4b4fc2411136548ff77738eee2625b99f78d8df4d9caa0d4e6bce3b96cb129b6871e842c418c6e053eb0961db923d45e9aeac78c2fb21de1fa430e2b3ea40a59b2c5c0472462ba537d26bbbfa2eafc1a9eab609dc109ad825da4a9a5b9997eeadd9bd802c9a1f72433b4264e96a1cf7b4a91398c23126eb0852876c710918e74358cf92214481700c1d5c417aa2eba90b9a30a51c6cc251331cda766002d047e1abfad4fc3f25a138a2b7d44fefcf3fdcb129a41866822146302ee078253c6592c73364360bf83decaba08d4a1cf9ee7a423af73f95dae6f074454e910eb52cf884c1d8655749a6331dc6febf8456aa5b11e05b4f8faaf5b506d9b8e0bceebcf0443790e9789e8f01e0d5cbc839932cc8fb72afb3811ec6d0accde3cf0f0aa3668fcd5a23e4f8080db0eb4025ced48f38cf9d55d1fbad440a9c80456b4f33337ccd7ba5e5ed3ea676f82e2587f859aa463e34be8bde0520925fe091caaea606808b8727b34dc6b9766a9ad5fa071394973df21ae43024253bff7a8a4436070c2f1a1af50fe4d41dbaf5e2fd961a8f59e6f6c4819467fd940250af6e6044f01818e758d460ae0a7af5974d3851d9d7e6a7405f96edfcb02e8883e851bf4ddb8d6bfc8ccb26008e1e202f35f2c47f805bc705632da85e678cb51f50f86f9d0e5e0ad420fc13064836dee17592a16ab1b8fc217c9f2ec0bd55d3dc72e1dfb6ee6a4f3b23174445f1c0478333e05af13d3ad3ad53b449f3e92639e11f1bd3f04a5283297dea187a2cb2ed9e9855c590ae3c2182d464de2ecd2941c2b0c2c137fc47f953ffcff72aaea8ae9b4c670883bc02e023c268cc635f54167474703888b8cf0630a0754ef164501aa800a4bdf7278e3fbe80fe1fa68828d459826acdbeead8277daef5ebadcd3a1cd19a4bf68d2ba4a54505a20e654486595dda3cda00a2789952d11e02a3d527ba54d4830c89c644bd1d54e4877024dd23e31f8ec9b668c78035323220bac454d2e120d47eebf7d5b1b070f14f415ebce7821125d540d4fd1104c411154f046224a9bac84a1d5b4da348b0e9d50f130c69489f59694ea13ed897d9138549fc381986f120b44910c246033e431a50800531e726c49c393619113561fa259761ed3ffb87e78edc3eff42bd555758419a90d3f635526117102d17cd8a52db8a6023b673acdd2ed344f753843d96ef5f8d061850474fca9a45a95a8696a6559bc87c96a986cb116ed59242ee4a12ba8bff6800864479b1b4755fa7c7f895d5d2493869256aad7e14690c7f12d18a65c29c2c9fa5843144e1917260613b74137e4b0ddcbf7d71b74a3ca078446164bd92b08b9dd8fbd1685b9fa5a83bd4704243bf635540809eb74a31fa2b6e093e9619257dde191cc4e54ccd2879f7638fa38b7f3148e50fa905fd8609dc14e8796e4ce6ee49e27980b11804d54180b248ad0f45551b91d6477818f3495571a202e64c149380cae0129ca3505dde7d7f48d0ac2c0285c2239780ca9c053786ba1039d9d8fd24e875584fba7bab8e23f4e7508e71211c511f27e1c50c8444f208eec1cfbb391fa630ebde129e0f3c661cd2f803312315647a3161147fda965f06a3538e30ada10587e34e0118d350bfa38547d6561cfca7d487fe6e6ddd7b873ab2f6f9334373dc8f4e7afb2fa7c5a57a89bf66b96108871e85dfec245b7dccc1dfc675e1450b5bb95a9590f27cba2ccb53bb0481f47f8a7a7d85d6dcb23cb774475f0a42727a1050e22530b4dc6122092cf45af20201faae3821ea37068edb0e6152138783950f39898b4fe13301d16a733c6af93557e1c62286ed7a0c2d8e9bcdfde6d8b5cc977825f83438a0d8aa20e306591c46e8c1bc366229558be237c88b19271f83a7b1fed38f4dcad13f31cbe9b244f47fdaa469daf9f5c1e8d8a6ea4a8a4090f69555ac790dc746c68f434e80f49d7d794db53360be9a9919bf60e7fbb34a9af1a8494c1ba9d6a7f28317b9c664303f2b3de300c0c928b14213e280728c7380753523fe8357fe31cddc920ccbfdc13a709b05fcb81d7fa779c3628d3e4e25bd68955e619454c7034f9edbeb0d4171249106d89e21e73cc83cba106aabc3b6ae994e7b4aa8f3fe0fb98c8209e7483786bc293cf5806c41dcb6c3fb7f836d277a4a57696711ef44f60272f81bb1b0035c1c6ed17f62cfb0df534bd9f6bad360d5f6f1085062300a75641adbb10fde526eb6ecc0d0798b53bf6d0b4a161ae2fddc6ced50d727142d2afeefbb7c158f3707928b985940229548ec7974cf6dc0c71f6977dc4fda83e3669ec307aa4629b5c831d8699811d9fd793992c0a004d7d944c45c6fcaafb1abcf684affbfe84da8120095153c4f302aa8d0c149439f82165235437c27c4a999b4b3a1a9e4f6b0f8eb2e338365fc67c08da33959c0f117cf1af8381ddab3d67a0dc1d7d61debd834286a3298490f0901278879d9fc355bc3b7559cf2b95ddc53d4f7f105dd786ae08c4ed1992216d3cd0b2d6104d9e5b01a4b6261d32dfd209f35b64868d6546844b628d547a2c4ff8bd0f399f08f343012543af99e887d371f565f5e258551cacd2ab25c0220607ba9109311b5febd5c564c17abd767a40d3d3da400043042fe2d5c49904a1a6b1c1ef7a7a55d98a5d03ef1966fc72d9882a8e1ce366ea180f0dd9f7a5d115f239eaa180b7b12b28a82047b36a3023b7f9b10b1bda3ab6aaeb6834b2a026ad950148fdf6e6bc0a6b169f1077b5bb1f7652323ea4b066366b8f607fca5f90df5b52a4e2d1954067e810989cc42807adcf89d00a2fa5d5a114ed09422c8905bf2f3e106e0f07ee833e44e2175921990f7559e9201814ba04c2d5032537d8e95ecbe3e366c8fe8154f470857298a234e7fbd603408ffc130c8853841eb23c7ebafdcfa87d7636e61c8a4b88edb5c6ae872657c26fd52aff29b536dd45ba6bd637d468d329f758b8681f82de63a947cd8d3dd230fe2c637b74331a739000c925171b12b0cc39dc4809e40831314a4a2ac0e262a5fe4960971cf74ce651496493d1ae30815f154738cf8a6d543f45af81f0dbee49bec8112be2b29bd06ad87506586fff5cf35e10ea890d3428a973a43542f9fd5c9d4f2a2288baea4b75dbbd4f5099f88431fa70f9baa27d928176380376f2b8da735c643ccfd1c0c64c3d885a2a53d343da49aff7ce35e06c514c5fe65e4fb792b8ab99475feb93251fc4aa5e6fe7ad85c536de220b77b8128765bdf6495c2451a8fd59c50e93f4d2d6fc0db74b78ba5e0b3aedc51886fcb1bd0998d0d70e74b1ec6a4113b7a6db8b02613f7a441207c829f812e84c5b3148aed959f12f9efc6d4f117d6836620883c20a9e5962951287fe26c1ba2639662937a0f8abbf7aeaf86690c314f6cf55641284db5aace512c45e8cf64a7f73aee208542ce74eebdc6aae6476f71e824a21c089cf719ed23439d7b65fa5be52100c0050572bf1a7440541806eb12d4a2dbd18d2818646cebcf4b36c9e4553cc56ebd4727f32d0f723005e2d03d1f6f871d8fdad9b9d17af1a70eed591fb764512383674c538afddc5462fc27c9e18f50724ace163ceb4429a185cbcdc401aa2399325c5afb72d426381fbc43232ebff7febfd093ee25a2096d9a58208e7b945b74692e12d3769ef6b7209c4da94aad61d38c18fe7cf1d8c5eca841209e95d82d6160a939c198200993467b1ee5ff8ed8e8e1691d898f985bd690905baa3afb3ca5e2cd060e8fa0c9025fce2fedab3e075019e635efc10498aa3cd4b15202cb0bb4fb64ff1906dd780e1f70ae74a0d5327a790c937266a37346625f741d50fb5bf67b2d95d537b983a8ff32420be142cf94dd5c600c11853e765e5163490c78508a4b69dbcbdf1d888d4517a2dcfb7ea8e6768218ac36ecbe1d849c83b39f86557b4c227106077dc043b057ca628cbbcf856d5fddfe24ebdc886511b3e18151cea8bc471b966bdcfcca6de29ad326f9194f223f31b13cc29a583180e0a30c7ee250530473537e3a670bcc61e90f6741366c56b2c044bc5c46ffff12f1ae388aeb4d174534c69ed3abb0673859101b87ef35ab52825d692c0c915e42096970333574899739b20ca5ea603a716bbbef8ccd443f2ac50c631603bdc4d229f714a54795230a7071085e7d123ce2e282b44d1847a7522bc5948a3940245fc9e4e92084d19daa02dbcb16d1a980aee82d6112b035615276a77311e9b0c86703881efadd9253d18089b0eda8d1ae8869ffb18c1135ef470d8587ebb9b1e2f42409b006e3ab10eaf87dd28d226be80bfa2ab242a14e00bfc78792512f5f080846d6c312b14da868d0f1dbd917e0a655314d7565f60f6355b28073b372bce398a37e55c095164e2c5f5b181306aa791dca2fa90cddf1ca4f5f11a92280408ac138bcb32c012b5336a72659d8c968e0ef6c59d56cdf4d2f4fac0e3d69035930f1fa42cb22df4796694b68d37933a2b20eda26522cf4122cefedae9d82113ba52cc6dd28a3e88a455062ba8cc9386412f775c3bf29da5141f60369c02e36cd1b842d550282de5177e114a289c0efbfd04e94af65b3af53fd42b4a863b15a1642b154c15cff7bd4b57031baa944152e734134271128cd88e9b173b148a7d24baec0021a0cf53688bddc22a1224d8055d02f0d53e4299713d3d9b7d8a54245e2e80bc51d8542011f7b0f988cf8134c857c239f631881221b49efb8847f18134c4b615610e5f82d4349334a890a4b327923e69b4ca99596dae8b54e3c065d81b488e5de752c3152a663d12dcf0e9911d94a01866aa8a75bb909c8695e28a815e82641b4f68ea91d59c172e22939c6c87180dbb06f9904b4fa3d3ed34302a190d21c3ad16af202b5d18b2e5882ab4dcb793498bc1fd853e2730ab409c0bc939a1c58253d590f04c1b66bffdacaf04e5d01797cb8b7a376391d2a78c09bda39aee8f17197047d52ef2dac27d8d75da166839ea0bfc3f859aa65f8312ca378677391e82e99513133710166d93a00406ee156059859eba4703505918ca0745cc0beead7b93eddaa83ea0dae830920e1c2d24735f873bce0b68af7e8073911b1e77912ca36c5390914b625333634db952094a11904a7811c63ab898d5f6b724528ac48bbeb44dcb144cf6a9dc3fecfc4bd20e2d2008b3424b452ca43232569319e7d1adf50d530f9512e61e4852c865883ccb6135194ae8877079c7ce9a49d8f653b148bb958a64beb0a299cd9ad267c5732ec5decae306a83d8e2c5e84b6d464e780ba6427039b309e8ebf3e32113e26c4acc392fac11aed4de6d361ccd5282741cf5c5e7f3dc4d7fc3e335f4da885a48b4596935acf7360cfb7156b52d40076bda7681e0fb6b5e69d8e1336580edd5c270496fef9b399d30429b78c835354b6171cfbc5ed9b481c252766f896aec35d598ba2a08cc4a0084f8e442b1961a366012eff43f96117acf12dda00953f05b3cf9ebb999063ece28e5983c7b95be90d033b42d674164c6ab9d0b5a967abce69df4f357a3465d9d2faa25f409b3702341457bfd9ec231fcd7fc54f73c59aed81d171888c5afb4367e35a00084cf911d3ac053d1fd417d5daf5a57eef4fbc737342fd4702800b0daf379a48e8adcf5ed9d4d1e1f4062c0cc42b925f5d3640b3953abe1ef0e5669c369552c80ee8454b54a94b02b4a81901916b749b84b99345101f8b56be4f4706495b04d67e71abd9df66b92fc4e3c5c94f4a0cc67629c9ca92434a12c5d981b96587ce8402550bcf078e0fb104122a72330ceb2c8682f392b9b17b555c919737423a1098ec96bee8727004ff3d39a9421763aea2037349273c7c97805463af43a47e1a42928cb4f5f66d724d7b9d2ba8cc61eb5a86dcd90cf25a63f8d57b27639195a39383a386ed0ec5b670e6bef8fa3d3f96c6275714b94ed7ba2f42944a35508892de3f193217c2d21bfd9fcb9a1daac144f6f10f37fea6818ce2c0f77ed0ea9a6b8023381022014db6640d104bdd0a7d191974d65a24500f99af4a4ea62901465914b1d5b503994e8e49a0acc29be49057ddf688988b5d3f3e932fec408a421d22fd2a4572ede8c9c2a6ba0d071cea743b6c5da0372ea662b0359a9442088bd259127e6680da289761affed7295ff6b41c0a6370bb9def739cfe5a1c74b36c076a755221312d97594b435bf23b38ae9f016f8d9dfc1ca74dc397fd1de0acf698608c24056a301bf4030b330d9854b9e5b9ccc604142060bf9d25ddae259551e28d82b7ec06a7eeaf53628f23810be335bb2a944de7659b6f9d8954602b439b2989f4de2f3109f49519f528ffb228e79e245d46d1ddd533dd6818cc9b716f9d09111bed297e9eac0994683d86774bf7f6653fb83c6ff3456204b1a525a9abc01e4134b5c926e53a5c35c35a4fc995fcf2c5cff75c129815055bafac53bb9a90062e7f11f3a722a1873cda44a39060a5da1828aae6ec2cf348fa903ef95fc11a987821a0559db6a51fc85cfe9c027dcc53ccfc0916396c606cb226cc91765af981cbf02ed2c90109e733d07c0ac28702dbbfcceab0c5d19f683c172428bd3ddb6266a5eb7c64bbc2b310c531d123b289404ef8f8e864ce8f22a81070250226b26b3570f9b1c102cb05e6f0e579920dd337fff4dd8118d2901d724c2568c97ca6c3d2df45f3c9ea1f922704534c02acf30565b07820a52604b3f7129a3504535350447b22027905c10f54c3809b97083b03c9196a3d11c6214780e7498d9d8627d791d1be3007ae808f0efd0f2a561ebbdad6e256deaf4586cf7aff1b1044feed5e1881798e485f43c28331f65e868fe0c323ec7f2e44e2efcb06e90d805c8a2d7eede4b9420817821824be00bc43b2291d5bd4487302fa1bb9286b676bf29b26cf52efd8d3d38550a8b7120ef394ce7ed2aa860aadaa68e013e9e1b54c73c14efea96365ce74dcd1a2b5b2660b2c8a19e9eab353202aa4e17bf8392f36e8281fc20eed210feff22fd7a500edfcc80bce4986f2388d185841898d31306a26c23b25c327e11f5552356c52cee687eb560cbf2e9b3923b2e7029868e2bab348a4621989637422bee423b6515e018f01b0f5812f2bc5623e3eecec51dcc1e0a7083fae88bb57f6ae751e902df5562cc4b2eb39423a95a55a132afed023b10efedc378767619b8ccea721c8995debf9c734c6a4713000eefca77f07f542f12efa539e25db11359cbba164f272eb2cbfbac90283ca2dcee3b9ce13fa2171dcb4549fc7f64089fac52dd16acfa88ab999846001b56586ec8a66f4b473f2b1374039ce2b42776e6d65d8de5a02ac66a49a5aca334a59d41fe7c2d1ea857edd63548824cbbcffbb4d7954923c9386b36a95f8c484a26b99ce1f33ed7b78b9033fe667d67e4ea362225b7c8b5031d0b3c0b343a2e7af5e6f1899e9aa048593474d3a50e16b39b02e108ef892ba87f35eccbb5bb4eaa6ebe63ff15d9dc6f4446f6be3197c1cbdb656c4b9d19946d8bdb2800bfa0b674d8f3e3f4bd83eb656f1d4f6759e31482470a63d91af2d1f43d5481dfd182d6824a61e81ada9f3a4948570d06869f174b9c9479eeb0f771bdbb4733020b5e1e5b3a6aa0c8e41fff123dac2adbe41cef3741971e74e7f88000349019896af3fa0178c8a5cec63e345d07ee50802e1d1b1a88170c95dceb34c35f72155b4f0ec4564840646eb38841d16894d7d0f4ad293b677f04e13d17e0413c0800c495f906a4e1adef293683c736d4a16df078869e9f6d72e38d44f6b9be6ad768a5b655da93da4b1d6974148523a54e4b901a04a1b5f2439293201b83122535a228415e87e6a4320a625a70c4bcd44180ba89bb4ab18c486422ba0262dd52efe2cdca294ba4ef905b26729e19470c39e355329d7e9ba414c4652d1cce85835685154e18303a49caa820bc2a955a6839c4845bba60581e7e7b70abb18c5254afaca3809285ad6c0a9f09d22006980fc58bf48ce4dd653306e6214cd32eb21a135f48e64e6613d38035df38b38edfd5e8cff17d512b6d19d84326f0c323e979ff38821db220a59e3ab43ccb79502813b409cc5d8f1c1c016c49b061255fa274aebb4540da487380afd243fea45a3d84e1ea5b34ca63d7cdc0ec215277eb02313fdd60e582959122b8098af32f81c0e401b11d785c4d7cea186809f8f2d28f11bd4eb1dde8aaf255248285c245ee51580fb93edf43da2f0bcbea72ea9fe55064a52690e62381ccd94f80659c2f9523da1e0c223dc401c5791c1512da625ba246f570c3683c8be7c9b380c21f5ad418c7b7274aa5ba401d7b6b038b0c221382b9c5de8fd920319886be3e7ff7c95ff75a347b151e759c377d7eecc47041f95e19af5aa875476a8f2d169552e53dcb7ada5e49c28c63e654a2d781d076ad6fbb277dffbc1a5062450b7b5e3c5a2d00becb2d988c8af63aab173fc21ed53e19841444f70c58deb8e27ac13f829e6c2da669d3138c035762479de95d8b1ba51b3935a1acfa85bec5ab56644a6d95e47b35f4c256f31d5a35b1c0644402f7ce8d866ed4053fe014a962a2cde340b1318bfbc25717924dd9bcfcc732ebbdea83b87e78b9de5df405b82e38c95611ec210e54861e1e9ab0f18b6daf47ae7bb18b799a56239a8bcb71445ee692a052cf63745702c61f0de884234043401251200fa64b93266c612e3845ca743efd6c4f985b04e57a9d63b3ef780e01b6ff498d56b7c59778154ba28a3098a812012edfa8a924250b87c0082b451caf65c6a0a79c48587b7898cfa502ea3230d3691cd7d25d7044d64ba8d1a82c16f33ba74adfa590512e777a84cd5f9cdf11a84089d904df2d8f5b8b58819d69e87fa336218e38575bfb98af085a939180b67f999df16e2711ba73d53e5296449245ccde3511ca5432b7b3e575f5934966bcd40b1e9dfcfc4d9c08259a7c9a4e630a00c9461ceb85a2e8ea9daa3243893f08296247de2f0813549b290693d43bbee026fce40b4beb4c8c204114a8811a1461a3917fa38d48f548cbb07319c9d43707f2541766c627d88e02407969996d6f5b799f10430583f2242d9f3df65bab521eac656dc22a2c9895971e994aad189bbf15196729c18dcb7aade24470e42772117a209f58346376194e238fa8a4dde1e0631fb48374b76d6218ceac822377fff41e9929cd28d151df4abb13f0ab469bd3bd063ae29e688d812872cbf1943429c0bb43249f1a014de1b12a374a0e9bf085a7b236ed9e40d62d2357161a9cd2c426c9e7c2729429c1d849604c71a4de046e077d09b6b3a6524cc62de374e9c681475e71b22d506fb99c4d5a81c2905e272f3fb4a031b084bd18bbe5bdad1365ab1f6bb53f634d01f59196e28ffc8caac2e0d064758ede5e3351ff2eb748b028232e6dafb49611ac9692ff6a132672f6e2e0d17dc7bc6497042d8a681b3815aba53ba4026ce7bb7de2cf588d0018962de40aba0ca74c66ec82129d6ed648f059b0a03b100a79a0429af18b4b218acc596168b9fb39a13ed68c148cb19fae40f85b1905bf891ac69b46223ca6b4817c0f834081656b3ed88c5162845300f2521ebd2881fd9680c3207dde0fa87cb8680bc3f540a0a4d88413ed9ad2dada29dcca1d2b7853cd1203c72e8ae20fb286da38d3378bc0853417ebabcc43afddc3b3a9278105979691b99070463b822020990e3f45aa1eab30f9e812d64ba8e8ad34c4795e67a7a18234611b2dd8ad27e24835fd3eaf48606218380a262ac6c7047832bc89c116f6c6cf238dd435bb5979642f2e894c2ce4d948b27cc01db5937c06b231d2c8f8834a5587101dadc290c17481a73b9fdde2497bd9235e573b7ad10d5e56ea44d4b04f3f5a4cc03418d43af1ab4e9c13c9334d055e616b8f48d79f125e6d962698c0a791106d45f462366fcf023dd10db976116ff0fb4ebde06dd29c116630c757948f8de18a9bfa4fce5510eb9d84d48b2ff4d99398e1cdcc5a2398288915186e90d3dafc0dbfe078c4a8aa3e672f79495f9b7cebed9ff929d94c8fb8d4b459708b88be53d1e52eaa09da93b30da140e220eba27a227ba3e84b36008b8919df68de10e5095fa8093e82b92846eaeb96e1625867c5cef761eb7c0788542e5e61511e0d583e5d4b0d572a7d9f7288c816c3fe3b6d64458459b6a73e970a04835dc2128f4e1fefa1aaa3f4498727b534f04378e8b57348a225d5333af3bb496b865e8d560822b5ca6f4c5ab22a5570ff79f511cfb675ab1b8a9e2abe8424abefe40f936a33a78f9074eef50bdfafde7667f8270e85045e2af586aa04c6faf5d4a6f682647ed55adf975efc5a80b97b592796d4ebaa7517da0ffdd67e42f9c56282351df276873e234fde94220de027718829d148d5b0b3a91888471ff037286396d56f4b646ea473f761b759b8c784b5f5d5749afc98a55c35d0cdbd39650b767a7add29c9e45c04de18d6676ddee08f7c0407f1adb345187db0dc4e23ad128f43ecd2680ed728b7d4c24d1c38f36d0362e6d4b40eb8b5b5046775f23cb3885584129b72e44a003371e08fdfe8f358c954e9204016afcb3b360dd9c4e6331b9103564318d40351ab6a08074da893f0842793a2288fd9865374d2edab17feac344f12f20b9d1bc09d29db87dae5f7cb00a600c45c2813df76d7f9e588f47d16631d7ffa495a683e2313e011c29fbd9d50426e6780e10203946cbc0d86cb1fa04fbf7033a301eb17e66fb01f478e58ce30c33c3e9e11c83f49fd02a84476672b32daa59924fa5f59836f6432e0b55df86fd492f6e4eefc6828d576e5442f0506e744e79e18a0442a1ddd09931df1c9316489d89d78dafcc7fd3c66c5a51994820f84ab0bebee5c4fa5508cd9513cbbca6b1c91b6d1c74d8f459521eb934a8f88aad56d3a20f2d427a8ad5fee66fa587a8cdf1b127eaa5192657928dbaa8184a3ad13d64a0cd73eadf630e6dc85c36d1f28358bf693b72fe2016bb784e881ebfaa8975618d59abacbf23a8b6a277dcc1700812945642bd55ec9828d241cfb77d2f8357e7062478c842080751f0c16facdd5c4e627ce64529b2b458d760a4854aa859e5fae87339001e3a3461b4ea269826c7d1304c232f615d3c6900a63832a40d92eee2be0f65e0151f5793d5d67cd930622d5d8aa512cd504f577816b7fc79ce89e0ec47a1f4d70b253aa7de3856cf238f64d275c01e13c4552a5d2f1e08233cc04cd2c3a437ac345dafb6d187d2474195f6ad2c067705933293a0678ac0efa4094e49570ff28b21c9d636c4c6333e57c17f5ecbced4e4b0632400196c3c5e4d968f23c33b8048efb60bf0bc25067932736a6f9a6fc405fe66401139fc77b97775945a25726f930162fbe255a517769d08748696a4b42f467941c0e5d232caac450f084c279ece4144bc5849f0bbb7117db5a44d0deca3bb8e863a3ac9326456c6b2fba3bd89fb18b9e865d4959ad80a3edd8558438c17c9587c888c81027e0fa558ffe1eb4f6e04198d54c28a549f01f734a03944267c6dda7e29182202620ee3f70861c498693f57b7e3732a4d1ec38423a0f52ec420c3b14258fff37fbe6be668c44710a691fe199986d7b6a858c75f4b991885a72f15201a1d7ca9b788ddcf769fb55eeefc1b3112155ab7b166e8036f83f9063853572194e363c0e67af116642abfa857edb14c7318dcfaa773a00c41f2686f2d480e2056a36ad343d1762877b55294b8d1b06e85386aea746acc1f34d24350f24e7a0d4e595ab95451558b23ea886f77a0dfbf9a50626592a2e9fbc6323e0420b01c2875b7f0e85cbcb4b9cb5a2b60c147d57ca749fd529c8a3a7efd7ae6c4e715a17ba02294209757c8ec148e5b74ece755893bd798e64002bee7690a41228bef31d593c82737ab09ab446f97176110f6fb3d0088fe34899ac6eac4d07b83a80fc9e5a64b107a62d5548823cacdc13cbcf6be992f7e88cac24205ca6e7efb7ebf659410e0bc47929af851a76126118408774bb1c99be4afd232b1de862b9d99345f85c84a0f2af2249ea0e05729fe664b4309ae8fe6ae42006dca26446616f9cc3e045367a351594ad139b0eed68e99206b2c44fd7b58ca09fe821e84fe027d3b19811a6d724ef087eaef8509a7b674c9c8d2854d6913d2d10992a61c8d47e858fe4e526fa02b62c398436da836680c5a86471efc769456b67d8b1343c27a86002962c86299c0a9094cfac63dd6875cbb7457ad38a95a6918fd2753cb597b88048ac454895d5836523518dbd0336749e0633b51b743a0d2910b0274d29dbb15d2e325f42e0014e3a1b9644927ef3823e9525672272c218f9f8576b0981ebfff349771652a40b7dd474b1f3a36713e78977b1a22d203b291feeca12e9bfff235829228faf84fd28163d01a8af98e2834f3e1ec77f37151cbb1b9f286c9a24222053f224b93d5b4a9d71cd9416cf93d38ab2ac120251e29b212824a6605770ba450bbc2a3a2382690338b92264eb99e8d44f3d2519dd56de9248574c5ebe055682a87f046442c67ba3ff035be42160bd42e7022f1a002683d5e68edc5550c9b4b600eaf6b9918459ae78319330f0002f6f10f357034854e807eed0c31429c6113ec2999ce79b94cfdc454d1ad512a3640098ab4b15b2b0f2577318a390a0aaef8ebfaff7c0dca9aea982c4bb7ffbb3a565ce9df5b4982bac46fe22eae7e45a158b15a5eaafd5426810173d203254097b338ae3ccfc60167ebb14e2f81e96a9db87276337dd891e64f805720d23511a6154726f01df3198f587fb1d2601bcd8532481c5b9f9ff28dc59dc2643c26783fae8c72c0cca4402ae94748618f7187cc13d38da593b679be8e28b80f816e867bd27e6700c49ae429c38022dd65df16b511e1b56a2858be0642cc4a0a6c7a2bb59913b967e2f4cae9cfe779cb8b5d55415422ef4591d34feb03003cd4e817b9daa1f75f65a9dd43f1e00ae270e9458efe3e11f3791d3a4fb1f7307a45c3ab453ca73bb8b7bddab66640d87f0382ce11d3dfe8cc5f0351aafac864d5718c4744a2a4d5e1e923aa5854574652cc280805aa4be2f26052e00f70af9e98496226cb3836f34a2bfaae5d34bd260b70a39f24a27bb442561180a553118b4c112d8a998686de22858d609474153964936e576f97cfce766e66d1841ce1d6854aa257e3b104bb58ee5334d005fab8080433b89d74f8f42cf7e06778bbc01e2ce3603062ed35458640ebb5b9f0c9715e13589a21bc5dee073d906effde3f913f91c3b6ce358ec22993c4d14ea8be17ef56baad80008248b133aa73c7eff94ec6f038952f41e5f6ce5e5a2439278462e1214af1b158f71d31cb06e6d659754cc48f730cc4f01e5a7583588d3bd6d8b88cc0c5b2caf2718d65b95df1123a6f2a93b4a1fcc987258719a181cbf94674130c7ba580e0fb19e6897d1c0188d59391f2ca1f4d58460ac602e2a98b6143af46f98bf33a0e5e8bc80086f052509a6086c274411c55013b63b046b401f6652045f487a6c3c041a7ca5ea55020f9590a7c90696140ea423ec8f145216e06cae2f7a065602a43623076132e88cf560717d515006c08fea9ad8105d36d59c8e996c11acf0a549283fadcd0535ab12b14980a7567fd27f5ae4d75dc706338db7c061e4e040cc39e23b7f053b8e91c0e263707eaa38f75d2ee6315f30411a4638f938a52f89f6dac06bcdb9303f6cd202aab518dbf6788ab024a6ced6732ea82ebc636d1510505502b4562ef21edbefd3b599b897a6037eec0beead21c4cbc4b42409541a3a04b6e6426e08223b4047f4b8e7638d28002cec601e16bea599076e54f238291fbc11bf01c9b727e969d864a8b8628cfa506ffb56d331b598582bd6b9c3d8ce7d2c1310f386adc5184f656258f4756117221005eedf72d0fcabc9a251fa5075f133fc378799018a2601cf81857874dfd0bfb6b9498ee70c3d49798b69d54ae2524065dde09697907ea005be7b6f0da4a0007b6473ecaa20ee78ab257904688fe997aa437ebb8ec2db9dc916c0d8956e31e44ccaa9c99ec94f507b98f746ba35e4f78e3b7a917ac4806af318e63932e12215ba7979877b9f7435bc92931005e00cd1dec3a0f508f758b141e659e0a782d68eba06a393be32c9bfec3d2a9263ae0ce6b991b201dd02be222cd49456f271d848a0edafd5c3f58b16c0d0a0610fb22812af68792f8753b0c74b0d7fccecee297645c0d20104457fdec44020233e2faf86a277f94a9870a9e731356af245c4417e86f9c1e0709554457291dfe1ea99accb38453dbb8771f365d4402b58b9b614cb05144f13bcb55f9b4c41bc9389ff9417ca7c6681342480fa56f82354367d9f5240798432d52a391463af38d2c24336b4bdb0bf7054b2647f0ec593cbd2364c22d84e58e1f62c72376a1a5826b7d49aa836b485c10905e6dc0ae03159d5d2fe7682209ce64bd7a5cb9a78d9ade3bc9519bbaa0a2415585219e25880b97a83596f2716bae6dbf669a6627c8191ee1062a73cb20a2cd7a196eddcdb3c9a7a21a440fb642d6d2af9d6e54fd023645bb516004babc136879854cf6caaa3f60d2dda7781374aec913d6dd66c317602efb17d89bebc681cf376dc27a79a969a18e5a70989013e9580fb192ebfeb4777918e24554eb46edff8dcf1ce766ee9da8ba965c5960f0851a5f8d12f1d850edd43b61f8c167c836d70f99265dffbdb0b1ce1e42a12a6319bc6582245a8e4283116ba3151fac53b04646c4e9b483daf411656b1929ade38d5c4db82152998a43b10e0382e494da32ad2ee57c05fe9e7bb41e101d6ecbbc3c9f1bfc8176bf72e864c254d23d04a41fa97172b280f095af12323a7bda6f0262853ca44c7574ed66f2c87379e5988f86ccdf83b4b517a240480ccb4695bb1748377acaf824544de72a42f69ee3acce172250c88503c1ad6834690d3f9893acb2d1e68b14da01d7db40d5019254a8a00c82703495d3a5a72eb38612653030eba7d93b768770748510088738142e55415bf844ee3a96ac4c1ba050ceb022e29a83014f93f87bc64674ee4e5de5c1e0e8f668d8e9140e4477088712bc3993bfd25f8fc518ef8ebd55c7f80088e59fb2f36cb8792b587bb8894ac6e848f59e7c0b6361c159c4510ec603871bb0c354e967da380dfd51587cc0cebe4497bfc9e502405c99b4cd179b8590ad5eb6d22aacaf440980aeb9a1d5c77147dab6dfe9064856126564e56a70b6a838605df452da74f7f124eaa2178e0f1fab107043f703ec416d20ae4982b154662ab7b76b916e6fa78ea6ba9f5f88f6524cf5beecde1dde1ed0d3b49b5f509360b02978df4e62ff42190a9144afdcb554f4b29d1afad71a8d7e3f69a121d627ab526042932d7402b4dc140172e3eb76d371d15108fdc64a174664f9542ad18b5e5a1cd09b6a45495adf67ae552e816aa112bd0b7d48d414007f8c71379058465e89de7d0dbc4a4fb7bb27f79ae9d4be9a37392671bd4e60c3287a8f0c2358db04ce491adbb7f100d858e8b371d186deb2d77e692f94e621da41924744a3dd0e99e2f9fe0be2f179f123d9b4c34b66e93c4179de68b677ab187bca7177cb70ef769d71994602fd35a2ec0d19ff48ac790564a53d41f4f877b7cb2a2664822f8f9a026039a472440a179ab12d6276362a4b0e06ede10f22c533f0e3b6949a3c167b9a41af5d13f33605824dae01e39ea8f6444f2966aba332bb3fba7560f9c9be3a232e2334234285b473c288dfc3d66bce5eeb99b5cde1ce27dc10062fe7621f6f8b8bc2dd49ca41b7a87f4554375cb9687051b8bb9e6e761e13c523b14a149a2c42e377bb2dad88ac4655e3d6ccaf7747324ab0a4899d3a058d3d4865c230aad2e6f45e960b78c61ad10afe713498d39d09ff79ca98d700d28c79287fde336515a40bcc949b6088448a1eda7d946f95158664c5ac7078b59fe451666ae7d57a2744ecd355310c09267070b4f976fbca7b0a2980f882137070d73eee49944cf411e34a78ce7163ff30efb627b0ec7269ac5cfd2c41ef018882397ff3bcc5840a3a3fe60f5125f2e043666710c474819b2fa94bddee3291364b645562aadb95beac41cce60165362d0629d9584af053e365f72163e2a2f03288ea7f7cd3a2bfe3b4eda1d9a7b9a8853066ada40d61c45093099c81b64ccb23385576b9a95d2f5ddfa91a8317f101ba1c0b9fdc5f92944fabdc7f18102cd31529c4e802cc74919e66ba0fb7888a826bcca5e49e4d06c31a8a2cb0a34b8221b04d64724465fb0e4b8518ec339c986efb4853769c984b9754b14d8d7014abb6fa1c1ecb9b7d1a97cbb2eca5ab9ff602bd61ac0f63b52e5ec17db841bbc288a24fc3ac48d69dcce16ae99622d48b09c55f300db3888a040ca57c9aa6be233f0560fc8c868b2b5d4496c1a92d0ced2e48261c9ff020e9004b7ae6a5742de9c1f32db679d29d7f6b8db0e21f6015baac6b6f9609faa15e16edf5c0f90a68ef765bd2dd7ba3aea86da2a6c920b49711f60cc19492bfd34ab85e176383551d2c47c0f59c48f70ca7d09fd25e629748aea2c6700ebb063afa857217da71084db055c309c7b052d98b9dc8992ddeaece06e92e5620ca92d2e0b9858a525f0c45f850f479f22c373fde8209d00f201f5d6804f5f414c0a879af527d3d47af382d03fd5b948feed25e041df9cdb19aec548628ddf5675a825a599813a2ed03357566463511ecf7a817fdb2eaf316efa47502771aa8e82029a920c66e74e74c89d2b4e10fcacc3875ec3e9fcddbbdabbd726afd6e400741cfc961c6957911ec3a0157e78ca6845ed78fe67f4ad9c1e8dacf170ee5b2ec37f8508eaa10669979dd623753422a6354f6fc8b6ee74532f000efe3ae52ee5362d00ebb543e0849a22e14296c607abeec35917c190271fa4c787fc31741697bc92d17b742fd205a307bc1005c26e6e2f972e1d20c27a378b505147822ba52a29351234f210cfe890923f6a5d628d1c54fefa34025882ebe61d0a60f16e7ad0fdd454217179614ccb4fa8d0d189401dd02d160412be9b5b1437a085dd8508a1be686954fd3cd20460c557acfc9e1beee0bea4c37f6aca9ab9239c2a84228f7c318ae66999930fb14bad1e627380b3f69a50a862c4b9106d1f5af15ac5493527d492d58417f2e9d40604cc212b166a7b1d2e249535e19eeac01871dd092ca1446825ac319cc8101ffa880fc88f78eecf17823c9caddd027d581deb27afc7de080cc40e45811781c0434044b81ef0ecaac6fba6b8f9b265199d0bc87583dc3e00c006a7e16912c94bdd32972590df6727732c3f87a65e007290d9344ee109dffe0f38a1a808c77b5ed1e0b9efdddc30adb1eb8a27e34d866c368075733a8c1a4975b8f8174406b1752289c9f956f0fa169dbe3ab9a1408a6fb2b6c0f707169c028607b648bef92e52cde33ca16f93ec90245fe037ac2d36d7f886599e1fd831d3abcb9b279102c513fd6d823f4cd67ef6f4f05ae95e89531ade3766dd2e8b96580d20ac50e9f4dbdd96c08ad1ff805b6b19d0ff5537360088028a73307b292bf978c5784663c1b78a0dea97e742e22489227c47adc80842a518253ea9a3ad551913107886201eb69abc0e05b033a04a72db29e4da477038285ae4c540a2be298a8fb0a401137865659ad4f73d2bf5c58bdd77e130c344e0272b884671076bcdbe6166afc48699b5ce6edd5452b1cd197c1276ecf2b2e77a700930e9da3b08b765cefde81bb3314e76b6e95de86fbdb8f741c70382417cf1fbc3996a972fa004200ec1e5d911d3f73a42ec2140610b36604f5ba24536b865fb63a3fa5d4401b9b63cb90e7f06cb41ccdb0ed18d5578059fdf7e0c63c84e8a0a4565f87d1bfa00c9efc1cd0c212b58ac4837d0491767b1976295f70beaa19f732167112df5ff033914a28b6336c099728ace5d5da002e463e09a18dd901229fd47af5e3fd1350d8b11f2a33be0e9fa0c8ddd7c1a2bf8c870e596a6b2bad0f4c753cbac47e9923d7be931c80d687a1c5089c5c7df082cbc3b2c9416849329bc344754cea2843656dec7b044438dd12c0a3bbd73b49f6798429f4e412560e797051a76af19b70343ddff375adeaba0deea8eec303ca4569523deb87264b172d02591a10a99b956e2f63b6ecba86b4068fc255076f185daf466aa92d525faef65f914cdf0b6456c7a661e70e7e8033430daf537bb1b4e896e57381fe4df940c522d427cf44b6a7941b3c7892bbf3af8aa9c0c8990fa10b445a33d0e6c3f47a4baf2ffebd09c62fac3dfa4a8b5b2c4fdffea85075b2ecbd85f23f08b03ee1ee43cc47d68912d91659b95692d88de1ca2683b6419e405ad43164e0ea8add60cd3325072eedf3a93191068235ed27de03e61ae424ad7645c277af2b77b7c7b189d6cb9a471a0f311cb681e63d92b5249e291a03c25ad6bba07b10f7987c4913393ddad2499f931d8a8572a2d63ae2342073540822b194d3961b2281e58aa61f4435ff27634e020155293877d080a637fbfa995850292ae286685e692840e143c5dc69c67d51606a2f033e2e263af14dd4ed9c615ce95c9c38c4170f81fb938f1d535c97040709df3f9e50f4223a4aabb767a0250ecd80c753cebdc7c1e23724e92c4f8fecb9af6ddc27b7ebd3f810d24ee18b89261fc08299daf0a3d6df9ce9d626cdd4c1068dd1de8f65eb83d224c9c3e7a33bc4153298a673740b2941c1a9c7c7ef7eb64ed9222c0270f30f3a13b3002265b86662009a226f800609370ed85610fed8f04761999d0c89edf5bc33aa462968de397e44d6b8bfcba8a030002f7b7b6f37effadc72bccd0d41cf49d2f8c9ee244fa43a0c235c063dbc4a7a9379a42f4634306a492dcf496e9ab90f00827e8822113533e8f2d0ca963b93a0bfdd8622312b099989345c0173dc046a8b295d7da18b859511c615d4357c28ed3a08e1fa9fa864ea6f83911406ff7aaac4d0fc2d6be07665b027c5d2c5a158572841a55d5f8422dfeeceafc2fa5d6cc9062753498b113862cd50e54d892b4f8ea3ac99dba167d63ac8f8c62c77186c987e0fa78986174f1f0d61dd3a53853c41bbef628ec330fff3ad243b6de6e5b3529e613888b3bafb0a657db96efa0740ae7eee630147a419ac3c52d1e3da3b390b3cce60d898ec3259122a1597542ceecd606a70efb91c8608e2fd702c609e7a1f3d37b85e6ba56c3c89b8d545267a3ed7e74710a0054c9303ba6ed27d541060c92a1dc8b0aa9e442048ca0358192513003077e26661844145610768ff8b8b694caa53d0b046ace8aa1d7f080da5a1ecaef88d8eb8a326a4b682e6affb5bbf97a77d41425d0e4424217befbde59652a624653f086407f407479872d43a30222a054af1c444743351b8d2776494c63329b8aedc2f4464b259161a0fb48dd70e6d583b79382b081386b2fbfbf8531cdd0359dca59c315a2d495a88b24fc4b2853c1f2dad7c93e36b09b02524c94aa7cb6ee1140e916dc0c5b88423d975bba7691c47437435ef0bea5583dc37c8699a8a86e87a1e56ed00ed4a660946f2477afbe93618def93c20e86bc49712bce4f93e66971ce6c42bd9336284f33ecf1ae775de38cf13c2bd3be76952b359b22c7317ca9aa669320d89535f6be5ea4383f2a591ce3261f68c193366cc9461042ef6962d516ee4f8da82f4da92832d4b5bb66cf18223c7d71a51e4c8f1b58608d678419e50b8191b6c8142b4e5498c8b819511c8c1ca1f6c0a7ee8ebd0baf36eecea77cbc3b117fd3ab4d81088d1a789d81464fb00313e7a0fc8f037c6f581400eb125e24f0cbcc83e319688b55fc6af74bed04ffca1130fe5fc589f41be7f622c31df89d00f7deb2fe7d34a2b5e02f5e587e2a19c9f8963e0d82546931cd65842088b115f1e2199f8112d24291583abe2d18befdf8c714a4fce3fa2d54a423f032de498243ec54a662bc6a8437b49c468c5a8438c5187f93d1720c6476f0139b462d421c3df0bae4f8c510720728831ea20832455acc8b24f064962ed97f1eba4d9d73f633fc742d732c8f74f064926fdce5fcea7952ac99127aee2b80a1914e151f8f2e54b4e12bfb10ce22321851c8916927366791da18dc025bf8c90e5658421bc8c40466c1aa28f281aa21b4e1c81c01971e7eb085b64c962042b5990d288a561e4929e9dc2f501c62469867c65297a65018adddddd2d7b0958ee6735b823e76b7ae7247f0082524a29b536b3967e16ff9005d160d11648649e6028b2d560138e0715dc18dbf9c16ddae250265b193247aba67d7cb79aabd56a95400d32d4c092a5471035b4441c35aca87165ca90a59cd7fb61bfbd496383ab65f42dde6c32e7b38ad4a181dc396139a57140d46ab5be48834b1a5ed468d213448d27f126e6104c234b1a5adc26a741c64d03cb2a0d2b695c89de0ff9c5d73435b8f433cf3c4a31112e9ac6934c993ccab4720a0dba898efa0a11a2d6c9ec67a587d89750668dcb2c52aaf4a4d5f2887ae232a31bdcb6188a981c629f88065b469ff37444f6153191a8f24de6aa95965986d08092e32bc7572c5625b645e6b2a457922b4aeb50365e6864913f92cb3a8933a5611f550f08fdcc23a2c433fd3c2da4efcdb0718f5440fee7f89ce4388a2dfd50865a4ba9b53e32f73ebd24dba7d27b2b7112cf43a832874324993ef5388ec25aad161868508955a2958886d20b51681034a6d09bcc75a81e5a92eca161b98288d3df9806b94fddf29d136ea2a3069b0a9196aea20615da84ae72d4e54e1a7552eb8432cbab7542c9d449565eb19655a6b751eb4d4ffef48028cd18373698693688207e08c20757fb302e01d1e4ded42e2737b4bf71d4d3b42ed3a6f4c1a7b5676a1d4a3b9a859b351a10b2a8799ef48ebcb26347cb5f52699bfe565969848d9e9579381a7b8224d8a00b6ac09c3d977d728a3c929feb0889139cb8d21e10d947b1c762f945bce9378a37fd35b8461aecff1c347326a7b44d6b4fb195524ad95d2fc3d2880657d6a06c5faa1aece4bb94466da5931aece771853822a2753a7ebb9004290d3dc9fd724aeff44fbfacd23a9d5bcb30f571a748ba4c8fc81453fa1a953e0df24cfb0367c48896053142c6b5cf8391ec41d07bfb32f6684132db7fd005d77e57032291e967386472afbddd9551c9bce0dae75632d288f3cec7a7c1b61f0d0caefdeda307e4837e97439edc16099869e6d9ab8da46c25906532a514894c4e83bd83befde49406dba8c13c23851b2291c9b141fa547e9af4711f72c576fe1044103772433077c37490c2c59a29cd88f9759b5abfc62b9987d6914a789d51a59beb2321fdee97f88810faa80c64e6fa16e65a70a8d8c59e2d6ba1ccf9e072ef7df4809afbf9598f0887a3cadffbd1e599e19ab32cd65ab1d0265d0c3abb39e79c73cea738665f29a5744ea33c83e64c1084f2f4c1a540d7ce5675172f9f59a7a244680d610848d9bd733c13bb33cc198eeed63112556602d71f63f419205c2197138082a5c9195c3298e3eb8c2b79953954adb67e4552f345e8cb776f88f6121f9143e86bb8d6b7a9f579d4fab5d63a6bad4f93838c490e835ca98928392a25f124879febe7e4a8c44453fed6895feb956813c98842a2c052bf7c8f7ca39b376c223813c6a5f1c67fc61b7fa0981db55a2d18fc8436c728d1264eb1546e9595950f828585e58c9dec3f7b642c5d1e4b11f2ce54f1b83cadc34a429e4a4dc4f29cfe3539b8f4bd7e35de84419e299e41e022cd931b5f42f0923310d6f1e6a44812f4083cca14010d41f52273d92e342e3610705b745a78599cb04015dd2b521f80f1c00d282a2b62aac041450ea2d5142b48c142143a9ec84031f3048d132d0c7d131f13d8890b4d6a9678410918928841b6c02f365590810a3378d931851b29d0d0064e1756146a80820d4fb8814b8e13706043a7093b4d3c6bf0d8d2c3841e5a7c2c01004a0840127260f241423ec28f1174c8b2831a3fd2008206502c481184104100431882858733889831002114593212040294d103100a40860f3f30800f0ed00304c07ee0410276a0001d2ce00a103960000e1aa0e48057103778c01810b04104ac48a00613a001052a9024440e1608400880233e90f4b840cf103c30c043c44e129d2270302227e8860cd8a0a4060db096e06c8086cc819bdc811d47cc80840c7932b111025b31e4246050e285256a9ab8e00433f135f1432d3841f3c40c14324f7444c182142b4cb122ca41058e2a62ac5041b9e101980fa4aeb845282c4e5a68d15b487fba450481c74597bbe05cbef5800c1fe4f882b5a487804affc1131f78b922c7570fb2649cd43347377b9f5923e381ab2c01f38950a54291e78b0854f2e43a7ade8f9387bb4983b3091255b658b65a5daa874322f2e9ed73d5e3b05c6a70be161e575a9149494fe4ea449e51a9d524cf975efa8964f21df97a195d3bad8f77d0ccf567a4f07c08aeba6156abd4ff05c14ea2f9c095ad560e6517d9457ae9560f75c9def7f484f473387c1f3f6ddf6dd8d26f664e7a40b46bb065727f8decd23a4dc475ca09156239bea4002587200d91af544960158af2fc1d53eb48b1500e3b31bc78c9f1258528395c0945a7c2cb7f5ae7679db37f5093eb8eb6ba6e337d30c14b9e567aae9cfacecf3ce1462a7fc63c697529a4df05af294079b5c134138319a42ca18582a76e8333f6c4539e1f723d3a8973e2b26bd1721cc771ee0179f6fef475df6d3f3b0fcbee53b5cd7cfac9c41b90ce7006a8be9d1d85ccba4ceeee72a6fd36b76cc61578cf29a79c72ca99e79cb6a5cf20a66d1f760f1f89d3af812c71689f2e5d9981e46f3829c80eaec5e4ec0b630f72bf9178d3efa3c10641a73bb762fa5aecb1037d1b7b76903d82489cf66805749bb641648f1a6e085b6256bce9afc2ed1b9b6dcc192adc2164e83c22a5988297ccfdf6d67aedecab14abbd4f5bf78a7015671ccaca5a29a592e22396490b51ef1bcc39677c9feea0e6b869378edb7cdad6df31b52b3569656277575d5d45af5c83b59b5fa3fcf84930472d7e52c3527a5f6bb43606d50f8370ac5966ada6fd008231c61823fdc2fb837edec9fbc1c58e436d280d7542c2c291933063205111a968886217cec871b1136a4f4816329933428022a87bb5e142d2dd20cbbe1e65c9d93addbedbd7acd56c96c55cb7f71c96e5cfa42ce757dd13805046dfbd22f5d31124dafa54162133c541d29548aa846b66cbcd707c1fcf3a6a20c7dff82e4d39f539da68e522314572fc8daf5f91d49f9e8b1fccfbc7f9f7671fb39f61e3cee760702894fa94b88e215dd7c5955dc8f105052d397a1d3e92715c86c31babe7625229d4e9848a1e90e7b6df52dfe9b96f8bf993114239e6c3eb9dbefb4e9f90ee551b939c0272a4fb984f4b322a8537ae3ba2face08a1ac7ad58f157eeb5ef5510790d3c77ccc47eac7fcdc4ffc2899658e9132de3ca7fa62be90fb98cedccfbcd639f5dbe3c0a1a13eb57d580411adec5f122699e3b01142398563bc8979d4c3bc8e8f856f3608b3a53e858fa8be7b0e1f89f9530d95b4703ac5e050ba50cfc92ee63be150baeae963dea7ad0e0de63598cf1ea6dbbefb541d0ebf7bd51fb15847eaeba79e7bab03061721e4f4319fc242ba573df7a1502b735889e715b0903b94397c647bd4aff0c3bcfd642babbe98bb984fb29551391ee6a53724f539be3d21373ec773dc77fa509f03874239478e6f490e831cf5e91092fa1b9ffa1bb12cbb10e5ed334f484cdeb41387e3b38779d4739f87c325997baf48cab9d3e7bdd77d967d31a7d4b7fde9c3f1c57caa2f5c92b52eadd9ddf85237708a9eba3f759f7d87bd38535f28c4ddcfbd22f2b78f9ff69dea3ed5fd09779e6dcf79334db85bf6f6bbef47161a2194bb0643efb5cf32ac75e713f7854464aefbd83ba9bf44e4d4c7deb94b720a87dc6bdffdc5a19fbccfb2cfb012790af2bc6558753bcbddaeeb8a90999b59e3869f655e86480d7993ae29d225a348a30e23f19c7138482ae9bcfd4cd3ddbece38e1f66ff393645f6372bbbc1c5870403e202e7bfb6d5f75681ad63eabb529cbed39fa9ce679a72fbc1af68ed4efcc7e669f7bd4bb7dfbf7ef091fa9bfe5d67febe120e7befb621259447e0622e55b6ec33e9e854142a4874b720c99d890251d4114621915a39453162173bf7ffd202fd7779ba94388fc4c71920c2ba98050aed808fa4134536c047d25a94cb111f283bc2c8bc89fb8b112c9440ad56e26705c8cf1296ed7fe48fcedb5f899d78f9ff614cf18638d1e0f425907179f8bbfe188351ce4d9e288a395ee04c7c5ec8fd0af9f2dc93aba432462d661ff48f6f56df6f5334c71183fc8df0aee095756ddf9ecbad6e9ac71987dbf9d31e3664f3fbcf4087d22f467d0cd1d76393e410918bc3c9795969b25da442ed26b379f50c507111d35ad56964330c5312695a0475fb163a7cd735e712557993db2c3e066d4e15265cec9fa61ce3967377fee30e79cd32352319d735ec1654aaedf5cb6a07f330ab228a594d22094524a29a5960ae9aff8d2f9d7daee3ee25aa77d82c1e549a64ef092e38b8d2636c6e8fae70cbb158f1bde1f7604810296eccf0396ec3c82a8acec2033148676269eaf9a58ea087538c839f95a3b7394a9af45ed6d7763d6b4af0177b44ebfa6693975ca4b83eb4f3150ccfdf20b2e36c7c693bc7ab15145bcc9464d5c7253963c9b8094e5bb0c6713bce49c1c5f4d7865e909f1100927e2ef4d2b41681923959ce38b8d30f28b0da38e37fd6c14a120778c2f36accc0cc15d5287759df4395ba59a93becf39bf8bc8ef1cccc0ba2efe8c5cc3aebb03e90f3a227fe2761cc8f6496bd6699ab551a49452d35eeebe6daf359628a594e396b22ccbbaae1241d334cdf35e4c59388e3b9d6c13aaf33ccf43a1d6e8b246ecd5e404a5030e09af1c5f4cad9d1c5f47b09239d9459544bd4561559f706c9b50553106e75b77db5e07527b5f42ac341cae2c0e552e8a255110e7e186f215fea229e3ca9fdfa411c20db925a2ec0e731b7f6bef6af520c82d65b744be6373fd322164d7b2c396aec3b2db1c4a99b823a2312e463772242f72a2a698b73ad64b93d6ac66f68b56dbb88debbcce3b7df1d4844275f1bbb78bf15348af366a57b79a9aa889e985b484248f88a44bb6bac4259fce54135f5262d9ed3e27b5b2dde7a4b44e5a6b9659ab6556d3b68de3ba8deb3acf3b9d509705a352753106478e9b2d3593ba56ed537aa16405941c76b9ad78925ba90a2f4a553c21bfb252154c3dabdd3a29a58c4439fe0ba494dd4b39fe953927a5f177906599b5f161dbb66d1c7794e3fbc0f33cef742223d5dd7b6f2af565a8ba1bde8fa3bc6af0c6dfb8e101c92ce5a78a4a5654b1bd143f252bcc5095c1d1f440898849764a4430aee79cd33f7a4486f44f2bc320cfd24657c114b12996c01dd77d0728bfc2333d0cf2cc4614566ad19c5150c9b3a38022e74f2e79ce24f24b18244139c546b9ee2e678392088ff55688a4cbfe7ebb1ed2df1d4171a40485d116d4956813c9b058b26891429ee0226fbc91fd4495a0d94d288af29c93a34f3c116de21355d827b2b82158b59c347a0ba77008e904966813b3582d97cbca092fd1260a79a2edac2e70a295a794d6f23c0179ec529edfbdf2fc1dd387c8972e05d70dee1892711a716d777bd7b94b1a16b40c949aa8a2d4049526aec066c832f6f44739512b1fd59c92e7e77490d8d3ed3d6c2b73ffe281f535349cf4a8d56a99c009194eb038c9a225da38e1126da28e1027538860cc610cb967c8929bd1fb141e911b378e35ded0a79595272b675affaa024a29a53c94cea794563a839c06e9d6da040cff264cbcfcc631a997e03ee79c9d836e9637a53dbd316db0c8849d2087259ffe7cf7e18195e3de81efee0e3469bc91dfb2737c74c79a424edb50ae72b562561657fbec6bd4e8675f95a630ca33392a496194b94ad4a44bb8a37f380e8fc8fe0dd4fdd6e19e32a88166a63e4ddb233275265767a69ced28ada9dfff05ab14451868e60dbf8d3d1aa6f1663e9df1062c527fe2d0888a67752d09db16d7f48ead6db7eda69476eca9d9b7ed91e19b8883d3ddb27e4e33c6c51280faf5433b7f56dc71d9ca0633037be5669927946538c69bae418f884c26bbcfda50c6bfe637b90346c6db1dabe4c540add99c339b5d2bc5f2c15983a48d36edfee28dcf2e81913b41f288373c3fb1aa93328b9b8a37be83db1fce777977f7d3f94572674eec239421fb2944b9d2124bd9a9e0c93e93c82f19157b24e6116f3c9f628f8f1b5c999b0b8d9452ea436be8cbc69dd1ff1a560e0de2ffac958a95433b87522ac788b262b953b18fb6a14f65a8691bfa91d2ee6b9a44f11fba23531e9e78439f86ca9def7845694e10150f7d1f34be8e212dbccc42d9a77fd0aaabeaee76f7e977f2a0e7c7ea6e5577b7d7fe3827aee9a672a3873c5fe33cad13e574c5a9f2f971ce39e96c21d45abb9bb6d3eea6ed0477a7f4935c8a57e92c77f77bdd5dfad35fd1a73f6b6ac53572c7f6edd39f90655926bbabfcd55399ef7f29dcffed772664b21529d967d2779a3818ed1dbd1ee412f14b52ab857dbabf6172fc43167eb0e28d3f0d955b258d3742377c1f1efc59fe395fe3dddd945249714debc870cb535e5583f3ce19c34ee6e469695a70fb3fdecca7e2209032c618bd58d5d8236928719d39d254c147e40f911ee4d99d58c951298927b9bf478e4a4e86726c9d9652ca9e01176b244dd1a595c6ac866096d266f477b2963b19f67843e5c64c35ab82db3fbf33a5d1e276bca1ad444c09a61e4294688a3831872b2596a24dcccd428e1e108a69b0b8db96824b370f48bc0f7625caaea4c42bfbab6a3c2d8c7bf28e501d0aee3d71a97b02981418f706cc94abba61821ba32a018e982f72e0305ae59072575891e0b2b042d4c18295d1d179cec878b634332dd0c86fe1fb981b7f2e6059e3c20b350dc30b31c030822bf304639836a095c1a6f39c4106cf76c70cf26647cc4dc38dc4a1a15938516a6089e0da504308ee0d36c49c1b240e39ad838317d777745c3c3b3c787a78f4e8f1d103003e0200801c02e09343f6893fd9a5c3cf0e3afcd801c80f2020418084041180902102e0618824c2c3008814198091220430d20301ba003df8500003f870000320e0003f20a08beb09f841010958800280580003806800031cd080201cf0802020f08008404002119880042830810a5040880a584088d002f14888e4c805907031c405303004111848424411498c2822c8880c0429c98006942cd1c006967060031de0c0111d90481cc1040921262da1245a4a24b184124d9670d28409274d3031d48413434f38d1503cf1048a289e4811c51452104d41051117555061451550acf000940f78e08a0f145d0182eb5814c92cb0d0228bde420b106ce15c80a00b2ea2ab0b2f5c1d022f44108228221841944882114821813492e25f1895e08b6882124c318104638a9f008c981b052790d98f50d0398671b4c5f52cb3742deefc7065e435be3459b424018b041ed0ccb57e4964d378d398068b3b254d91e44276018654419453583fd4e0624dadf56b76e4843eda67071fbe25add3e588202450b9e4fa3e3bf48e0ff589f0a91f44eb44a52960b9be042a8bb5c304c86ab03ed8607d1aa4bb729ed843bf7ead35a77bb2c1c59652caee6ed9327221a5148226091aa2992e9985e871baf7a045a94545a9b54510314a7934bd28e4a0e6cb972932e7de43dec9f33cebfdc90ecdb963ce79fafe4edd1cc79d387c6a354171124bdba0309ea249c8145d5a428886b2ee0beccbd297d817a600a07c0cfd0f0a4b19027f507887b6991fa27ce6b7e6cb265072db87378792493249269e0e083eba764923e9458e120b2a9c9049e4f81b88d1da7b57ab7f106465bfe1d0a2719390574dc85fdbc8fdda571cf615b98170adbd77b5fa97f8431b0dcfa62d167bd0a0311aa3311aa3311aa394524a7dbabbbbbbad18bb5c2e97cbc5a3ebe96880706fc0a4ee6fb528f6ccefaf58c41d2d070e53291c385c6185181c7e5fc6b0b016cd79f1e6b8e258cc628929a594525a6badb5d62ccbb22ccbacb5d65aab699aa6695a2ff5e868c8b8a1bf620ddcb7424ea170ed41b4e93f69d64bdd0ec396c20ab3d196bc89dc125758bc6141586148484848484848ad56abd56af98bebe95a48b3c988c68a68c8b8d9907b36e4d9906743ac1e9b2bcc77266cc2266cc2266cc228a594521aa3b16c364d246bef5dadfe4170dbb66ddb362f7ad1f369ede3cd26a594ae187b628e2d24e12631a1429ad33390b87eae3f9b14bb1c4926572fb9e0f5607fb89a0dbc50e9f453c80118b84db3f314762086d4459d3c7a0a8f00573970c4a86ed45388844d760a99586e86937c29e713ef02f9eabad77664dd679fb327ff6ffb886dbc5902ea9e820db278667b3dacbed2cecbea67351dd0eabbe76897794032def8cb78539f7a403377de0f234d9c38b96e13bf7a403477cf659d36bbce03aab97bce76dba6759c07e40179d77940de9fbef380fc656f13f59d3e950ce77d566ef71e5087570d460fc86d307a409df5806cee9ed3a2a69dbaef708c37f569d0b847a4cc979b4c0e6d463d7ea604154d19977eedac281340fba1f6c3ac688bb98dfc6694ec4f5db43ea947d93f9b22bf50a57a92dd9e5465dc2db62d61b92898ab3efa8d87f9d45f142cf664d9efd01d0a7de926c51ff9a3c8baaed1ca914eb1a4532c095514b38e2aea265451175491b750451905731b230c5bf90b0543c196ee90b73a7c877c68e80eb92fb92fb92fb9fb92fb92fb92679e79e699679e79b62db90d2cf6ccf7b737c96f92dfa458d2528693b6259005da9b14bba7d8922cca9650b0ec8d82d5760d65f73b44997cfad294475951769a157997ec0b6f52fe911f4dec8636fbc26d49fec82fb4f2ebcffcfca54a6aa1769832b6a6ec1c4d1997a60857f6a0fdf8348d1937cc5cd9612e1c66463173b90d1132d7d67444dbc5b4f4426a0d1115b98c585dc0a6675ac5ee9285c99f196de6323a424aaa47ad21a22223a4a4d825a9354454e4322ab20d83c1600db3b6ed8962e721c3521fb407eda13c280fddf95e8a3d9cce83357cbb624f67ef2a4670860f7172f6c28738e0afae6de1431c10bb50238f62cfe9e52f893da85fe1439cc842d41165e24ca48938291c294fa5de27f6dc973d37627cf4e8e1c1b383431c1d1c726eb001878543c3cd0e1c196cc0186078018738352ee0ef7168666474b08083930387ab60623ed53b51c33cccc33cccc33c0ccc173a1559bebfacbd977b988f7eadb5d65a3fc4517dddc37cf5b32ccbb22cfb1047f5790ff365df6fadb5d67e88a3fa4e0ff3d9d7a216b5a8452d6ada8738aa0ff5309ff6fddb8738718b5bdce216b798ba77b5fa07c18883a3da3e954aa552a9d48738319f9655df0d6ce38d7c982f85efc9eb5c4b3368238c247821041e9c242cd590a35215515a9ee14d29a5f466efd393cbb0d4d7328da3359ee13a848449e4972c5f5da4750c994f9fe2dc1e102dcfe7a40bc8942734d249a9b7a4db69e239c43dcd19b78bd8be7046c94e348f3a5838fb750ca1d3a7331d43e6577fc51b19b3658187423973777777777777776fb2b2cb6dad869e082c42b249f7b582fd121863621d8146ef5a155da22187b9cdcbc2eed22af64ce010c8f3ac15787fe5436e333f52a714f6e3be531f66973ce64cde65b6888a8a5cae18638c317a2bc718638c31c2604b4bb1588c31c6241e6f269e269e2edf1acaf2bf9027fb7119d9a38bb44afa57539eb1a9fe48a3267b8d8ca8d18f8c21d9a42b63322663b9cad8fce9226fd9a12b8bba48bab2a2ec3f3fff69980f35b198c0d82fade20b76edeafe0a7c16c8634f199652b10fe51f5a4315b8581356180e1fda9c0fef0d1fae6cf8f06bf810647dc8729c0f2d0d1fde9b1d1f7eae337c08e62ac387ac256ed36ff3a1053fbcab7fe143b0e64356962edcefc3d57ff8d982d9f6cfacb2a68560d658590b5960de3e6fd1fb3716f7995b71bde436be3365dc71abddd46a05b7c9d1c5c8d1e280437b7370785737e070f536e0f06bc02cdb6f7170682f0d38bcab1b1cae7e070e1f9c0187a00c3864e525fdd60687f68238bcab1870b87a1870f82fd4c823df99d6051cda8b7178571f0e57ff387c1c82343864656aaf0c0eef6af52ce0f0c1157008ae987c87c6dca6dfe6c0a1bd3870785731385cfd83377008c260572d729b7e560a872cf0e2107c140e7f75c2e1ea86bd94fb9dc87b6bef5dad3c22d0c3383974a29cfdf84b7e91755da3d591bfbefa335b94b6688bb668abc5caf3a33f13a956a48a54912a1212ab7ffecca66c3665b3299b4dd96cca6653369bf2fcfc871af98ea546961a596a64a991a546961ae5fefea131160b04ff57abd67e6a915bbbfd56b7af45db87e0568bacd54edea7e5eeb349563251396b602285da69684147a45405941c9588ba64197254a262284f27e28e25f239147bb4170309298ca32f8cbc7061e13465dcd0e6d85ad670b6146ffc2d110e0e08feaf56d112cdf7e9a416a8b40db924415434000000042316000020100a07442291501807a2167c0714800b767e4a6c52381b88e3690a4359c830641000008001000001118c46011afd277ae4eea7e0d019689c56c1443e09b0e7463a09e43c07563179651e2e897b43e8f70e96284978ef6b82cf2bf9b927bac3fab0a1fc76cabe6309a704c3fc7178ec9701bf21f3aa32c83d50b2daadf0994ea8db9b9e844f315d159d93bc2cd58aa484bc5ffb8adc3cded693457236deb75019d037d40327b2853f20f5c08d7dc2b59db3255c52fd0ebc5ca937be84076b17f379105fbf0d996682eb6c6421ef5f43294126919a1bffa355bb3322248b7be729d256be9349dc47b035bac2f062a92f7127736d15063d85cc6d822e4de1b4b6299c54a538b3e71e37c7509cec9494c9a82f8e0dd23139d3b129eaa8ecaa23df30d098f62cd5c19adcb044e2cbb860cfa68e87707597158b7fe868c08f954425a5c49564375c9d85b28a354639ba73d8c76d6d40ecd9290021a28545445a60125f466038726a990de4c28851b1013b239ffd429c7a0da4157653ab91f5b4462ea201a63c03da6a4010b4071dd9e3fdbbe9401d8cfefdac1655be2bf80963da298b2e625999bbcb485490a7624084a7b3941a86f87ed89685c29a1011d80825b8071157cf0041f7a11494f31577c72e2d050d5b67b942b4dc261ee08ac79f7925289abb913cab98b070476698a390fca1d0808ac80a0133c87020bce82414f85da8d04e1a87093c38b9903e4f763805044ed71170bee6808f8bc20594c031d04e2751ed7de4326fe678288f49823ec18b15ca8303a8e1419da79fc6bcc54a3d93cfb7f73de9f984f983d26ac32e556df7d7690c394287188c219441a4b53d5a39d3047d94853389211f0433835e087643585e4319959a5bbb0ecf05da9d48960b79596ae944baa8d8db92760ff2a52b6e82e0e2b1d004e5678697d734fedaacacfcb235757fc8417e381cc937e647068f515745f01a341d68e32a98ce341ffae860d32f0bc1a84e3533bd66d942ab36f2aec17d5ef23d4198cc816fb30cbecad5b9a592c6546ec935774886b836c9d5d9ba6710c692d77c21fa8e543a6e3b08a8ba9d0a68fb83f209923321336103623515760a14b440246f3c6091f7f8d23d2410a5927800fad589aa04a11ffe465b59d4408870a7766d421269268a00905e2ea8f3be110fa008f6425c2e1aaab18b7657a4904d60b3db79a00a44797fce887c637532858266fc56523aabb84a30a62afa0412b1277bc3e1671bbd44114c68cc38e53534ab141f3a56109082d620ac750d7d65ad93abb31b97a067f2064dafd9b9520bd683eb2951a4b4c65bb5a8807849cbbb79a68b92a076fd135ebfa07090a0be76a8e43b7831592f3e8f1470c4f7c3b4bc0ee34399a59f5da28be0d466a863e0d953f6a000d57bafb557bb737e1718823986ffa330c81af30c20c94b9d61832c5ba874687712b698df659fa73093f735758c1c2dfd085474117ea90111f6fbc9863d2f0a30ffc369942c0c97ddb59e6d24a3d8c7cb58464555274ac1e644d2af39fc94827c7d87c79efbdcfd22d0659c59ba51558cb2d09afc5487808bd5d1c7fa62bf182ff3755ed64057d237cd103eb56809562843d43b49fe2753fe6b385956c40f953d670177a8f9d4ee07ea9b745495f3ab4cc03d5894d72ce8d12ade431718559366f7560d230a82896b14061f735ab101840f05beca2f888260cbaf11058128bd44e191c820225045517f56828589c4433e61717555aeb5981e5c0b20fa23a726cc72117c7026e5911b0c74595596919049c370c0247a74c45253aefccfc4eaed572e5265de193142eb67d6e63bd029e58956e1951edf423709f5e3c35dd4ff101877af22a4381287c3a703ce4d22d89c5377a98a3b9508f04b4bc96b13490cb6bba79ad4675384d5a6d0af27f9a80827fc50fd3241a825f60f23e6fc7fe5dd12149fd47b30cd4d44ae5b09689436dd17ee6d994442221aca4575edae9a7057bd5b3d95d783bb482c4d3ebec295f4ff2c7b7a2e0088ef7df192950ee84eb264d09e6d644b1cf036200f9320746e08dbaeb9036f609b001be6c6ee226b09eea09b4a7a43ce6a42c946cb5c74074433c51e59933fc9bfdcebce50281d9bf7a19a312eedd0cf5e1bf5760cf94ba41e97a6411379a474008d8c0165c53e29680a2ddb1fe35e99b7eb827c4b95fe040071d8cab216c41dab5bb339a2d808e59f2c0f485f65f553751dff0e6a021532221600bea8b95715dd49fefe83db1281ec7ec3b71ea7b18770d1ec485c2b6a80d74b8f160fe9774a5abc750a99eca7f11d4f62caffbdc737995daab1873b91499d8ac42eee3bea09011ee92eb07e2ae2a586d5871111ccbc64f84654914d998ece4e144d313a747d313e35a9b33b7f0c88779c94ff27b2f52d4525d5434fa6b396fc7a8f04a70a89a04b74e2888e3d122cbda38c3156d4fa5908c336d5d70036ed41900c136a2826a1a8e2d3007f0e7cca58ac6242a0157db66dbf2aa5ed867fdb73f2c47d77f33c24c01600bc7049043313890fc115e0036f4e026922d2dda720ce01e359dad55334d4d4f7413c03a66314e283fd08d569e70395fa49864b98920fac85e714da2c88bc9c873de0a92309f2f1c83e06c789e444d692b2047d7fcd41458113585335f83174abb6115e54ae3a1190a0e5a9a1227e56ccc775960e8faa35a0af544d5d31aaa9d5e667c432481e90095c051a539b70f5a9da3b9a79fe49feadd11d680908890613bad0c0eecc5c5f1802ac124a8a6c89492f521e5eeb69a30554215f8526f2cf7da330c976c028f32f80b8741156c295937bccc31b7a140922c345e17da6b8a60e5409c26122540b94f72ec0cda2e6a27db1fa910ffd2ca2f11061c1ccfee413b2ab9e9b1435aa697df8899267e3127369975a357adec42013c983c4dadfdb2af6e9dfc16aad35df8b6dc66502ae56ba8a4d2334c4798bbca02356b7d421728848a16ccf75bf3a791f1ff0e152280833a78c611aac64870dd7f19355016e480437eb7fa301e8e33ced5ab87a7fdd4e3c9982b90b1d1412e00ca2d5ecec97fbf3646252631771c70a6f1ae4c3646c0525a7accdef0df5634d1faf58c762bb7ec77e1ad671541edb463d8e557cdcd8fb38edfe989090a8dcb43bf949b20a44ca282a05179770cc03078e51aea53dd93254d3dbef1b6e5c7880f422502cead8491b83699a0c139eddac803969b2b1a0466b4ccda1936ea9ccf2a6803c6f9df2b67aa76bbb0be902f61fba36ba7a2e03825d14f204154eb671fbaa4b1111fcb5981c1328a665d0646e6cefccb1f2aaf402b53508a8367e1474a7e40cf1df7aede32ccad3c623633cd38bca0e9501d67d2e0184048c0b5347f5225107d705b3a2af3d8b67c2968138670c47bae7e6a8c657cd6fc2b8a82120316a08b8e625099628baf34a3b937c3901800c5f034061129e89c3600f9b2c98d2f3a0efa7d2212c52a5756852efec0e55064cb15e352c4c73c6eabd88028c9578544b5bef68c343a3060e44598b04c98d62cea54d612e35b14b6578f1f316d87bf86951e7db4f29f631962645b1d40c1035d62f00c5520db9c876e3d7d2ef2389857b6d4a000253029a29352019a9c3600e1af5a22cc81998c620d68a2083368d5e73abe414e8e52d2a607a739fd4034d7a135a14d5f723f684ff691f5a99f25260e4ff06c137b6c2ffe7f2203026ebb2f1a9facbb6ff542f3e35fda3e23c23c6d36bb42815b0d0aad1c09f4a28ad041af554d1589bc906d06e08e0be8adcf44273447e1a406b0350fa15e2730b95a3f86b109ac6017d65590bffc6a0d31850ddaa888985e218fe368266637021496f110b2549f1d1a5ba835065ea3a5183d04a93dce938cab3037a7991a113a4e261b03d213ba689f4f7262d9d5f7f0a31f0ca3c8dae1ce45682728c9df95c87d27f7e86f2824aea17031bc82ffb1983031415bfd808f0d2dd0634f7e813e83fbd17303876814a45b1f71d1a566c6d390f4267713b180df124fb89794a5a2e7693d4587b0a85ea12519cfab400477cf4fa61fc82366b955d42869520a721c0c34a766d3a5e9a9a3b22e004644d3fe02fa84943dd03d1403937a14f1dec367f934b5314ecb53d021bb7d84d73803b8e2b110ae5241f83139432a55598de2716c15a36e4c671cd4b6f79f016c7ff270cac9d711e0ba66a8afc8504edbc7c7fa9e303e7ad5d1af84ae604c7b8ca2030975a5f9857a32667118ab1b67469741e9e1cd38607be3532255c6151755618b1e8cda62de8795e08069e3dc80695f6b95e56a1767cd099184b2067a262a7a3e9350533e30a1179f635e4cf2822dd4290da91f187c632146cadd7b4c0a149424b25d296d1d71410593b97122d2255d688a0662c3ba8d074ec6d657d3ea5ba5ad9c7d292c24c3db8003d24af983ef61f05f16a3ba4a7737376146bdd4ffc289d07bf3ccb613e8c7ac0404f761882ef6d3f539e2a2391483a0151a2f37b8e9b02d87793b36ef08a4aa9f93d4ab3eadf92272b25f5977ed2c6a21aed8226adfcacc81f193476c67ef6a13cdc16541d4f36820c13e50d24e06626b01c9008b9d6afd28acb5a943de69abbb5b7d654b714eb16cedd26e5f9bfc9e013259478a2c4532885ed212f5442ac03f7b273688f1e803bdcc8f726a365aeddcb3b5f7eee4098a8c378ebf8b20625e67b4ef89b836af254318b4dacd1f0c71ba3bd335fcedf719824cb34f4153eb48b99f6bcb95224000282bc18f168e177cc4e1f3b9ad629d9649aa68a384e34ada58be920ea7bfd8bb91a1ee2195aa8583fd62de059ace1368e17b067958b1d92bb1554558e0cd621fd4c653dd6a80c48d54eabae72f9f152487bcd5a6061a61a5ae0ea43e36a38de649a255bc8fc5191564049297f225ca5f782c2192a97bc591240157a74991a77dbb991ced913670adea3d332a97830dda89deefa50f511d5b2bc16ad868b54b59d63bb291ad2afb9bd4aba28be703b408614c7291731ba88aad82514bb0e6d1d6f26cb8bbc434b2de822bb207aad91d8a586b642e1b792d2ed34ec4615dcf7f362331c57129268d099963275f46a34e3f76307ab77a6d3880e1134d13ef583c6684e8a28554cb3d41ebdf34e8da623916703c459e0747503e2268f4624d00cd5bd3aaa312873e19d7f48bdf9fecaa63defd6ad8103e96ca8214be282765b0591afd9e0a4b311e355a281699b0ae0a0a7366c0d1532d62eee94d645b732c1aa4b5c3755855b78deddfb052fc9781f7bf08e0dd0bbdfd70df9de91206f8071cc87a58ed5659379e2647bd8cecc1ae9dc24ae8363348c8bc6d69501c63d919c48c6549badd879ad91bf5418e4314d06a6ad9173d4d9421d71f09b97250c4097f75e72fb3d2de43dc9b9eaa8dbf3702ca8c69ecb14b69efe1f12db048f5199f69178ae1aa4e48b163904d5d121a34fb023c021e03830816f9a8ae8c72772b83996889804d893890d85f2635fa0611035087c21050ab706537e11ddb050247015d286b3b197c970dbee5ed16c6c68d81aaeb4282ccf3cd17a645118c5c34bd022eb9a611ba1a7420baae16494c30b9e49ecacaeae8e6c40e2ad48cc89b9d5a803028d6d2b003bd668b3bdbe8fd897771154c3025a0292ba07ac51e7f79ac5ffbc677f86bb6aaffb8c12e7f151ec20522180a767b9fd7c291d427d0891566aa599b5d3ef8a7d68ef7c558e05af20327eab53d89858927359bf6701d04da54b8413ad19a4ffcb23077a81ab0d6d9013f5b940cfc3d60b1d39ff8ba54f5486403d03598bd9916df546d9aa08a4073ad36476714b794e3c528a5f072cf79a56105bf45d916daed03f031059b327e54acd6e53c060635b722dcdb2043933dbad181d3c64e19e8d5d06f6b545c76f5aa6a33120440b834ea9634c3aaf6c416f9539d25b610b28f75e3c737dad0d95ba3bb17742d0a4ac781bb8574fe829a2e8c776002d442ebb225ed19f0e05ce9af4db1d421ad0dd6a5d0615dfe2d080cd6c3497980ba005e28031658159d429847bed3fa600d83c9dac90814c444faefb369eed6f73d21b0938ea9b904373a054aa0e3d7ac6c80aad5d155c90d385de31fd3d2314b12c5ff140168407b04766ab2709801ab1a7e06b3d490c4903d32c4014e7f2159e64502aacda4c2463848027b1188c5834653ab740711e9fe624d4462781a8066a35e6b5892d41a1d75365dd3c2b015a27be673c49335465ebb107f8c018cc600ea77443496222a1099b7b25418bcec93be5f9cec7da38101f6c9068b41a175b4633d8dba64d9270e418cc7492eaf22951ce72e11b3871f0c0b17bbd99ecbdcd98a489ae7d5c8244a6d96f550081b12ba75e7c5fe90aca434cae6933809100eb24c7cdc1bb4fe32a8f95feb061622c312de698b963d615fd60dd10582b27bcae61832103f3c433aed6557010ae1c15d2b42493924a6a727b2dbd29d64f06dc5f1a57789c7a8771d75c74ec7d5ed5c41d3b1c7537b65209aeb3676cf4f1e0b8d307783608359058f656e3554426512627b93b2d044d97d91332b83248e10cc80479fe6fd3a8276b5729917ec2c2d57b4ddfd80bcc02aa537c489b046a6cbb2768913eb5d03a5031bf40bfb237f9017eb8008d4345dc679ea9bb03132db8a26c01394a401437afa6a8fdb348506306e857a04209cbb17e9cc30eae875d6380d6c1c7d8e5141faa3c06da8b362204fc59894ba3ba309e98508499820491457676c95455b44c86e23e617ce2194a4a81864ed3ee1add0020d6326ec00111b859d6beee93e8a8b21cc9d07b33a1577f5d9790298d3273abade133269540f749ec0eb9ddad86a584fa7d6de33b590b38da0231762beebfa5a0ff101810d561b7f5d8c5a7096359faad3c110c78a4e1edebdd482809af0b69ee022fc4e2d1564b0e0d0dced0d2214d8c87cf705c3a84b1dd500ebc5079e572eb8d25e1bf1c4bf6a769fdebe43e37cdfcaf0464e5e4a87ba42874598acb27c5a70835a7d2342ce2be9ff6144a27951b2398c380b9efb3937e9f826a8579cd026575d09616674e56e088e89f021a6d17c651dde22a4bb07b55e64125c0089a4f3a6107275c8f464ec341198feb4b33e938c0cccda4f3ebbfba8db66183696672d280f3ab34dec1f77f1013a73c3314df9f3a20c27c3cbf7d239e7ce32a83d6e3f640edc916ccdfa312aa80fb5161d111c45ae7a12dc3822a392049332947cf03652e0a2cee4d45b79ca3fefbad0249e8c0fa8d2f6688e510018379d884691ce63af1f91fef904be68b0d05482c549ff57e8d9eaf4ee62c3a07cc174afe6668dca3f057ecd97d5d0f89828b3bcfb42142e93845d951e24ffef2654be971847395e62ba6cdcc404e09370372507d35ca3a1090beca93ff814fc6922736ddcbff8f5569bff64b8e60f157d348df83acf93e9559c19922f33aa54ec5aa3587e98c8452890e697645139d8234d617b6db35db4c047532be12e81fc5cd47deaf50bf1211b8e3279ff1f4188e9cd46e3ddf43ddc7550cb3facc2ae23dfb1ab3354abdd42e171dddd2f81e65f4f74f7188391a008a9cdc32abc88d2058d90fb2d8b068fac850d60fce40d5695706b8228b1ea331d4f915af08e5da68c23b4c57dd9b7f4a05daee221f9f4725e8dca9a75cd06d6ef9fa445402a5722237863ba2703b86ae368f554defd0b01615bd5b6b48028c7a964b2a1f9d869f2c3aa5d6221e26a2550199c1c813e1e5f1f9775a15e8d6d72be18bbcf6a196ac4eebfd1b079627ea65538b3b2ee6ee5cf4488d3f3e0f38b814467fd66dfbd858f5e7f1bb3fca9c72ecfa145b221925c825dc6539f5339e66f01ca766ba4cd840d8a5e270611ff75f5a1cf17f78fadbad5dc06655d1682b1c3a021b51935be7266ee2e6b98d71d371af66ac99ce74335aac27b2cf8ff647f57af9ebfe40022e9ac320ef2d47bf55423717dbff4676124ce5ebaaf9fe3be2ff2a8bde3dc41002934d0ed8723b9f216600a985f85fc4318cd54a37e6e59383b67c098d59146eeac8815d705c6ef73913602c3fd8f504ffab487ddbed397677c76449035179db8a38140e615b9ab046360514cb9b1e30ec30e5e9d5e4e8704ba17c7c4fa65d3a37537e49340716ba38e5a5244c02585bdca6f572ae11160fe626f9326774ab0d5aecb2184534a43b5ba4fd92029600c361badfed4ead60eeffb60051b72166b45ac6850af6c693a9589b3c49846f41339ac2a1556d7fb3f8930a00ec7e71fa2d6bc73f00502261a1819a9927e46f63972705bcbc9554a106b95f78ae977b08674b0672192c85a9e439f7f73abe14099125c84c304c8f6ddcd1e541c4e619a88074ba4e7037ea9e43099475eac5900870d1e22509ac267a34123b316fecc4cb84631ad21feefd7604289a014a3ffce188ef28c9956cd23274cc510793284da9c664fcd1064645e491fe44ceb9d66ee6cca5845a5121f3a929ab4d7bcb0a12768ab8ad612fdc0804d38ae59ee464342155098fe4697e7b4ae2e9fde17e90547a46d6d40e8ae28008166df00776dc3b0c8ad8c697dd86d882fd8d97ad81be8cb2845ed3d5c5e2232364eb4e1e1fc7e625f11631990b40e2211f1a9a22ba5ea460f584e81da3b8f7d06680655743b3c9e497f2057ef31f387b6a09aab826eeb940ecb7f1b9a859635c000a206224ae2f05b7c94af2f8d50f6dd8cf8c81f6c11b24db9a12aa10fa0516473ccb3d010b5de279b265ec495b4a26857d751df9edd682043823094c390b4bf95e84afa044e50f85d17080accc2fdfb7959a9061d80079ee0c657001d830e2abe1806cac32027b74853991ec5bca67289222ca5d064bab307817cf23f2d46c1cb68a6cc9e460555f961c26f6c3a53bb13c1e2dafa69885d4a3517a7a00527d185289b71b90d8f25f60990638f22d536b392f1d8053c39790979c04ea0738721da8b279c2105bddc542e713cca624c40048fb25493e7612297060040c522e0ada46402d0558907e0398c371be4f28782e1fc301e33fa9f3c023efd450db515fb6bcd5dd31bfb303ceb8f2fd934e6bc46fccd412ab68a7a6198e722b226ce9923d1976cb3b10403285a679e4949eb2ff52800ce70ef427b96387c04d3d863da7651dc07fc3c5d9392cb5d1722771a5db48a34f29e30e4e6515b06bff7d6bf7f03373c3da6dcd5b80c8b906b0157647fab1b44910aceb4b838ab6a156aa107b064899a94b143360e0e33782731ee41161bce8afb48fc2d402a038ca7c0793d758de24923ba9fb6751059a257f935199073c54777d81b88c24d4d7df678bb92f835fcc4ffd0fad2b371f68e3eaaa56dbeddbfeb1c89006a07ad8e8aaa67db8af6c77d7fce86cdfd67fce999342b2e0be083ed6418046c2c61500384b244ac6cb2de206119f2f424bf1faf7c6dd03fd71506e0acd15c07a8d0bfaf1eb2fa185ed5bca144a71e6839ddf6b1ddbda4b5e7f7f6fe099bec9cf7b221acbb630dc6c92ca621a691c635b65b5f4235e7fdfa7a1e4a863ba9e5f932797414d4c26c5850dbc635f4d7e574c7c035734687b36352973b49d754ce252f7b4a43435f9d58778bacdd782d6e89397ace6647b07485d5f6820267990079290e3dd73a1344a7bb8f9c2ba15f0d617d055d7235815a371ef0bc3202bb269ea51ea1d82c7b8b1c0e52c2434bc4ca5381b82e43a123b36b17058e07e02b96dc02994c52bc788ec68b2ed921c49685a64c5ca03564c7473cd17e1623851f3052aa9ec406a97f4e6d9174a9cb9206b41bf1f4285460000e9c5f7036126f9b616f29642cc6fcdd4790b7c36179aa47078689b126a6a0bdcc7206b34a4a448ba64142f38712051655e6dbd44b378079c2ecf674e8d4f9214ccc4c483f72e97ab66928caf47b18b66516a146952e13c628dcde353c0e459d4529c5b0dea93c35e7f93acd3abc2aeb002991572f83767926b006930f506a29138ae688244a98ab64943372215491754b2a29929b10525c0952c54973084a90a3c21e68ce89e02e79ceae6874b4bc96b0d761d626abc518c99b4640e382c8f0a896111c67f1e01531e651ccf8650a007a258a03c3105e9059ae62e7069296deb7e4c7200ab45c9b913f0b9a14faf1cf7d53636b7f4983338387483e55447aa8ad6b5eb9786905d15f8851618ff2a67f32d0e8a82354628141db2a88fc01f0e991e7d41a978950e79a5b0641b1154ff11606fa19c42cca98521049cad8bd62dddade1c0262a1220d6af83260447f134a198ca00271ddb33828bc6131ea93e5940b1d18f67414024fe2e9cb7d1e03263aa4d5722872dc371400f3d3fc6c1b9a7f20830e16ae5c951189a85be7ba93a692c756f29085c380e25f84fae81cb800d0eb5a09eeae4305747a6b533cdd20e0710742661711728218c0c824d306ab3a0b5745aa18f897a689f6eef7f07f6d205f0f0f17725ef85c839e3a6a6509e8a9f67e33056c3d40cfe5d1b2be1a0e80cd30e627637f588c92713ac94722ec47b79c80c26c42390b72c3c04a83ffe80b9296735d94b0bc1f6e5034c1a18c17f7a253159af234dad5af550125f947a1dca892ebb6a4d0e335d170e37fdba68c16d815b69fb0095a364b6224be4bcd7269788734f518775f0adb8f65c1673181bba88892155babf701934bd825b1a841d7f90566611240bc7756ebf9fc981a04f5495a6fd2596fdf97f023a58cbcf2df161737ebe492333a6c182b8fc43404560bf695011c9d36cd5527459a0a10f1ab49c724ef7ba525e6c786052f9f2527bb49f36227df3eef5167d45c1f4436bfa041a300af64ba06b09bcdd79429b662776b09f964e4ecceeb1b014acb6d3068042a9546cb26c921363fd6e2215b53cc6cab1f2b4e480484c469ba78ae30d45d8a6f441aea6597f1c96222cead5af80673da4a391cd4ec7db0beca301ac1965fd493c4d4411b01997f1c51d55364df70a5df486217f6b5076c7c5729385809c580ae1432e7265710bd4255f5bb44c5614ff24a3a2cdc77748400eddc1e2181b4d0eb94bd0fd080f5d1c023d2029d85ad6c9bb2c97fa8422e2f891fb1e8f48906ab01241bb983dad0e90a5fdd99d108aca331677d81bfd8a92ec8db6407147dcf901105c1e1723ee913ecc43828f93bd7cc084d28bc5e6559caf364313696ea330e76f2afc83d66716b81a699980e9646faab5d303c1edb41a2dfeb65328b5df3fc9d2e99998cd06ea7f18bfa38f7c3c1be8517b17e5bdebe5382f6703d4cc9c738d906aab76b0b9741859f5617a613c32482d08f2f08c701492957387e9380adf5b66d957112aa4aaf95ff68fbb58d23ea2511c0228fbe0bf74b017ebfde337bbd44e81f459c7d7685ff78d005a2d6c6dc7279b584ea4ab4034f3e98539c56111ff008b680c8252c2688a20c0f824015b9e1d06acef97c7f51384fc7717ca73c3e59ce8a01dc58ac45690d507ff6b20024529c7708f0e8c8b4579faf66ba5c3cfde782860cec0600eb26b720ea9c0b1e17c3095d935334ec7e389634907f0845142b9104e0d790dbb0e3dc59d2831d8370f9c0a2be863e3803754f5c6ee54ef1b95d0d927e8482dbe172d2e6271a0ecbeb7cf73f64641759436b991c9cce9ec30220119ed18ec76d58977f173f413d92f4ffc9d4a5ed9a8bc2630668dd6dfa396c343a15a8ac58aae5bb68e58d89779ef6c75b0194426257f4d395f642cb5184aee8ace1fbcb81ed36991e22c73b1d4f7251bd77622dd4cf79ea762584ff4f55f10d335050134fecfe4b599e2eb5a90b11e2cd5615047a331ef9c1960f241c66dc2b24c9803c0290d226c47742d2188089f52e776a5066eb340d560507d50f0876dc4c2ce08ae8fd800b63f0201171ba14da949ccc70875a9b1a15a7824b36c592ac7f14720cb7aa6449b973d4949ca2371b02c12b5fc6c6061843140c3b5fec63c3e4122603724d3f98022ca245b4cd8421453e0515c0fb61b54f1c33f5a1918920e1b400fbe0472a7aee7848906a69881817e60000e22729303487deefb5adcbc22c1e089bb665e3f64ce405c7888722a8f07e72983cce38173988baa9f3ad0544320bd98552478b2194089cfbb1c02916e5b2d6712e1cd4bd8726ad09c28e30de8cedffa670c710dfc7b81d0f9a8ad5951715992327d49c5416081b24efc9a4abc4d714cba6b0466e5704975fb61d082e2bb19c53314d27ec4928bac98beb4295acacd6b6592386202c27716a464a8bea163a8f7b8738ae8f58c3a990f7336722ee99afe7d447845a03f66f45333627cf3f0a38c22f10d66217a15abcbee9f52b1ff1877f52ae6eded0fda71395c90b2be2cf472a06e4d492322413efb1314195ba2f3395669868dc0e989ecf96a9f0033c9dfcba0e07bee95aaf9ad03617ee11a5c6e069fd3e3183467a78f5c523ccf7454aae46e8eebba42ab54c3cbd7f0bc80af47a9c69d01ae557dcda25a37cba54b4f02d342434e765fd7bd0a5e89f5ebbb212d07af99bcdad7eab9dcac3750349ddfeb06c0d9de7d918e624e18b92bf4ba98928eb24084f2f61fe0fcab9e7221e5f45abef3d1ebf312f6a5fde7e16715ee2756a4ce0cd4da0ca36b11f69784034771d1e4e6a3b5eee2f281f5cdaaddbfe0aa8db050cfb1eb6cb8873707ea1a592af6368b63f0f5c58046818cde83b72cc8d6c8680fa080fa9335a4f0422b1f56a12fe5ca2695a2a4e2966eee8ebd5127cd5a815f0c76167eae1c976b79a80077f1126aa9a74e42887e85aa2ed26a657f33f5bcca960896872f73bfcc8f5565fc2a03604fa2a485af13d72d2496035142403a8842082c35d0270f3a0c09b841415deb1360717915c769e372d95839e89efe719eac1fba2346df645c4494072dc8cf599c4be7d356d8df5a98ba49887241f8308344015c55b15b8e33e1cf115f5d51aaa9fc13d43b89f6443e31dcecccfa31bc765ccb59449199a6dc893c5d299b0c3c66370bca37ff95829ee755ab309dc4e602e7d386ea63dbe806831bc5d75c453766a8ebe782dfde197051f3e52a7b52170c0681a05d149ca8c81680098a289115f96135d388e74d13da8c878e601409e5c4ffa30e1d670a394c4bda6a031489b93d60ac5d91b3c567584e119e8ed7ec53915bad53db60cf3dd669effdb91ab6a307b72e7f72eed18f56bb3c8b852f2c718a1b019e3d91cf031638ce180be3ac104752368ae49bc89864c1323e1f2baec5d38a2df39b5cb0fba9acb1691afea0c7ac666dab1e33ec3e1ed935056cdb420e83524fae77a927a9a6216bd368ca68191f6fd6206f12acbc79112e174ab0d1ac395647779e3df85b513f42b616bdf4f4651ff1a89dbbe76acb3ddeb3daf7b1b989d524a306bc2997cb6c696542de256a4e79a1c43613f1f97e2a31b771db916696428da36c41e9c4d15d4db40ba4ce4705da65600f4efb5c60ffea0904429913c09fabcda745d5e1a8908e430bd5a16aabd5c7e9352737b3bd5728decfb729bff86b9af58ddf51bccb9ffe5e2a9c4e44f99b40c05df0b00a5af7335032b82f963cb635142a7fae60e65d294bd7f58b9334ffd1f111c555b48f9c70af83b8eff3b4cdc880f4dc7b24377e417bc5ee8bd2f4cc3799c28abd790e98bd884cf81b4d0eec44ce8fab4c46a1a5bf1d8c2e85cd131ad09e727ca81a414b94cd5051bbe65009c5e8be425bf9e023e47dd9e85cd7195404441135cfd4719ad6a811c822f87f6d59bfcad9df3fda5818cd66598fabeaca3d9d60f29111c73216a38935c6721391c0b4b22d4c4a838da6de2094b1e46b9974d44cfd9131cf39bc51c0c2b817234bdb35e17cfd1ea4a5835ba4acd2b3e3031cb3da882eb6ee041643559cc74fc4a355b09e7086b0b85a7398f60eb30221cf0579c5293366f8dd4406eb8610f414aeec7c7e36c9c0b2758267815d5778878a2098a51c7cd4f610df0e567d161e21cf0579c549821814ff5fe59c006ca5c7b60b7965af30d2a1e3b9ace5cf0b282944779448557fe56d4a7886972b39b551cde9c5ccba2df073b5c7ff06dc9d7cdee1dac3fb06e6a8168ae49fb28ddbf319f55ae3e6b48bf705dc7b79bdc3b58ff7059c3b39212c783b79bc847387e73b387b79229c70f6797a837b0fffabf0f6f9d6696c813b93db38ab489f223fd3ba76fc72edf2f30eef0efed7e0edf3f20eef3efe57f0edf3790977a82cf5de7f8936dc73ed63f7f4d4ab6f813fd73d9eefe0dae7f31ade3dfeefe0ece7f30ec73ddeefe0ed967c934f20f4b14e4b86183ad7bdc0d7788553fa9cbf798fca137974ec0186eb886071448a1329966011a265c068a1d780b2ef96a07862c5081643b858a2a28955e6488a125b8cb848444513294ee8285ff018a6fc435fe012a8792968c2773a21b2933a11db3a7730b54bab59cce45ead76192257d6154cf1a3dae0be72707042ed62e51a2ee72ad61639a9a3ac5374ca9e5a57219ce13ab717c41302c4b525142b2e32b9ccc89cd37a42f0439165dd51a0d30b656c79d2e1d312cce0921a445d9799157048a3f6759bc2a4faa0a8e7d09b0d12826015078360eef808c8ace63df7eada55b7e4b693271d4e5eacb4271f42443d452f9475cb98131f411f1ec736b8b33fce723ec09566f0afb6ef540300ec45e5f256e7715c4f0d77008a6c708d00d3515b702c6e35b7765212ba8db1f59cd285f89de4141ed2bd01090dac0047935662b458e68ab14d2fdb707df2bf6d6b4add6f5b4e16391f1f277baf804af4f65f8004adb9684383d11b59bc173e3ff115ec2b181afbc617e558b3aafd66a67c20cf5a058c79088c28c3e6d3b0120f2087c9fffc93fedc72b263a6aa3bbd59fec0d723506217439680c902107c4df05da0c151fdc9dbb6a2163f3911e96ef27ecead1d00795e5ef424d360a85affb5122a4c32b8cd0c2332e1302feb7c3e5055107e05cc14a6126676a9cda744d540edbb995e109f3fe562a9dea0ef1faa10d116ba88f516efb0ca7876842687be911cc6861eb4c0eda1c8cde70006e98135375fa0af4418abfe3159cddd17cf5e5431661af0f2dc95004cc4debd5023554bbbcf7849e365e72f5420599e4660627691801121b865fafe088e09459729e7bd358621497b2e134ac807ba24340ea40a60fa5331bd88d0cb5b6d8975d8fa8afdc250c9aea772101f0a34bfb68738f1dac5254e5e43e6cc26556ad408528be2428b32312b432964038dc786d5ef7395db67ac08a39d88c39524545156ad89a060393b3f3dbf380cd3b248a99f466c294dcd981f477050c1bf030a36fc6a0449fa7bbff0699957f12ea83bb4e90493ddfbce5c88865f1cac7f5545b107922a517e862c02d1cdf287081a5642271e0ce4fafb6687b5612e09c4761f322b5e15f82a6327f8d36305ccb355d8b98544f3aab442139e7218e39917c5e703741f1cd534df367690328edbf543a5e221dd40f2e208d9ba9f7b82e6a30b44dfa52015a668ca7bea8ea290dd045f8440bbdcaf260d1153b76dad70c1a352a8c3b1f4d5419bfbb4350fec22262a756e02f2b8779b212c0cfde66a2e228f4ac3bdb22e2c095dde436adf209a20b912704a1bc190e9fd4036b4dc46ba0b24b7448d7b729364bb2d37d3b76e60a2b04d25daa5b7afecd27f5e18408a1ab823e523cc8092b7e23965cfed1ddedb34c0399bed91d52858a8410edb241a94d8730597ff9db0d74f0b524a8e3e3b79ebc495031d3aaf616f53279edee68386ef15e0dbb36060ac7da0edb0fe8d0b7f510865179ce5f6a82c50949ade471164fe593025a0b82a6895643b1367c8668dc6b7ab592f5f410446fb340a18d742fda34cd37a6af1dca0744fb7e44165c9ab9978bccfe452c4ae60aa204f31a5e7b0a9520108604ab59c83299a3aa9385074486ae6d402e3ab4939d110a1fa879c92a71df0bbf4788d371ede0d3ec97e533d16066fc5a8202c3265e6ccfd937ba195d62a9a618d50e023ef2c671dd01c87959f15ad24bf179b6c49ede3c1c41897d35d28a3ecba0f6c808fa492437e8a8e610b3be2c03d34403038fd2e3a2a11543d877ebcd0f8acd1678493edaaa48da33a475a3b67422f98f082fb8adc449949272e1ffe8e44fc1e54391773fb4487e1172ba6aca83776380bcf0a6ef1708fbe87c154afb7589a4305ce77997e82ebd89f928bf80d84bbec1f1571220020dbcf71c11f045f756b2f3c17eea9ee021bc2fd9d2b7450692dfd372da4a3c44b402f50f1c4586e3c01a3ea2e1f9a980d63fd752accf535f2b0e5cfad137193a1fff89f2a55766cce794e94a1dfe1a3b0f7fe0219d1c62e8bd29a2c3465e5a5f6342a83dc6a18a7669a6b9568ccadb2480c2308c8dd0562f93101845f82b5167c1c0ac0b9edf380ba8c63c1341a7292c35b3baee7ab2f569e4cf847e24fec6e378973cfc35aec12c85ec6085e53839a9f20fc425391d7412baeb6fc34c6988132e4a1abb0cd6a69e4670bca219512b3cca95ff2f072edcd5c08f75788dabb8810cc96696a6a300989c9d01b062cfa6f9cc510209ca095301230879bd760973264134a183cde85cc06a4169aaab670fe1dd7cd388cd5c938d7f36cfaa100e2ebe84576d987726a40e016acc5faf1fba5fc278e7a991b4330ab2a897a91b345736f3fd50d14a525ef82e59ff219a258a2c31b294db2a2112424753578047c6148292c3d5761a52f45b2bbcc52720066af657d47af730536aa04c968950e8dd0beaebdc436a48190ec15182653aa48c1f8cf3286e2ee111cb43dd3c0bd1e641163d82adf90905fa43d34d924701bb67c7486f76d54e038e561c4439b294ff4f56e37125f0ac7b9f62aca90ce725b035a6ef0282f5f285a913a549b1ec91b1b5dd7492296c39a00113bedeab5ab219b072ec79645608b334f20fa42ad058a33672bbe24705995a6b7042d1409aceb28c2cb95708503174f8b2d470ac1cdd3b0d246b5e0cdc21c74113cd2a6caaec6c077eb749b3e04251e2b89706d2fde4a97bff07ceb6a9054e6b700bdebfb08c51493227ea26726e2e859ebb00913a23c732854adc349d2cb85597b0ceeb12dadea8114d2d4a982be5ffac3b1c4f42074f009e15b15c8501914b0c29ac086859aa6020bcd77ceff1f8a7b64f411a8be5f3588f2080463651a74eac2f2988117686a21395752205c745e729d7ffd465d3eaae8d8a42339aeb87d0287b47487f568da61280aa82da221d3120b75891150323f857196d201e5c7a8855e42924b80818e3e0af7973e2cfd0c5506af9886a750ad0cf64ce54794539e4efec0a8c4efb07bf603373f14188cd6cae0d949cf9ff68a03207d9f4a0a0a57a5f9ddbc12978823d1c0b8e3917cedae5eab715768d044bde5df23862f3123264e01d11f3d83790475a469edaab5a164980d49883e37bd801cbd05740297fd5b8ffe05e83dbc95a29bc83ea3c23943619a476bcb754e1261bc320e78808d46fb659fa2b10d486fba534981363b6500024c4bd8896b86d33460b5d294d090a1d34f4f0a161876c3ec66be1563461ebd93888949990cd54fa000c48a502286980f8e1d79e74028ba8d66688a91e1584cd05b411e0f425169e8e221aece77ff29675e1d11e72545bf3787608f11ef61272874ea95110992abac9b149cdcaa503241b5bd46d37c7a4bb158211192e5fad7fcc317aaa4a3c7b7641eddaceedca52840ad3b0c988dcb42366e8a198dc455de252b58059d6e9da991de57309d394089fe1b3fe04e87ba97cd8c868f5f8b00ef26e58277fa90ae2e08ceb8abf52ce74f465f1dcd06949f22d6b0876cba32388e963970cde1a1553308be89f18f0965b15d123938da9f97c091991f45c952eaef3dde6d5217e557f387acb0642a19d8ae33be94a661d1d393b1cdfe1430252b2043e080bfc59c9307d147d8942db80f9373227e3282d4aab739a659632ea779c5acc9c5e6f768bc5b628fa614a7001e8f0f46ac398c0902b1c6c2985ba9d203106c7add9ecb59484876a9233bee1e311b436671c8af60853da08950a662d9a930676f85b534d94076c1d49a6ed17e341c7b6fafd123a4c5c9b244ce8601296708c3e56ff908f8752bfe37c7132f78202da77378ab4b4e11c03aee58547c4d8a9230c9a60356acf1c181cfb22309784f7250bc217638ef1119f8ba8bb25e8e2022ff226aa94200e281edc056084f19213f40514a88c777babce0926b29f424d44b48f5f752f6b4bc25d3bbce4c0753412a144dda55eee813758a86be67a428a8b0828a86f01284ca7ddfb62817b78158fac5c16fe7b02ff1d174774729c5f53f8e06651aa1cced1f471d16db7353b79b37927834b78e236ab5bf0e49401a28a67aa8c83862fbf1c5b2252e1480cc72766352d5bb2e6880e2fdbf050dc4a2b759a364079170fdde308ce9f24d1187860e4d9a9d704004dcb1801a1f9672702094ca4c4b06474a6e875711cf5a8b49f50d4d515030f7ffe1404d4d2b9fd6e093d8682fd514d15433ba45127647587c6e3efe2b72987456d0efa62101385c7953e867770cd00ef3f1459a3f44b93b4ea6dc70f24444dc737f586e275068fdd745d7012c6e3d904ea70b15e18e46aa368464b135a866885a0ab47a1271dfc2b84881f7caf98131987c1249f9289b80473a1be0510ee2f8e439aba30ccb65ddbac2edefcff46a1000b4805b7bb83678001c9b6ba0d861d4f96ecd2b06796bd8a08a258cc9214d1f58e807e1abf53dee795c67e214a180de972850c56f1c46ca914dde2f1867b7cb2593e3893d7533e2145a6d4868de28d83f6f3ad5665ca3c2606e8eccd5a45e60de1010ae0b81abc71bbe0c65ed4dc85c02dbdfd84d1106068936bfa1ef17fa76e350435eaef74ea30ffe36dd51d47f4c6e7e68d9bea756040a68294aba2feb47ae486402b8565fe3eddc4f7c2e90706fdedb1c2bedab35e71c18d2cf3d96545993e8cc8c78284644514f6427c4bcf9a48cf13db6a1e0317e33935482861a17d403f5b1e3f4a44f4611fbae958d182ec696d1ac512d28fff00938de6390ddd283712312a15166be057f02779b8f13656e1203361751a451a0de0a663635537bcf09db9e1b3b0e4bfe647b7199025a6995cfe28e1aba5711934b232a1cc9e2e33a55878f95cbc409816a70620d63e10bfb92c16ce41f824749cff2936315824a0f2092b2b37688c2bef315047b0df01c1dc854dd211ac4fdba90cf9d680964b097325670a2b904cd9e123177376b6f7dd9a162c6904399ed061cf86b0560784006e878e5336b4aa9821c51d0aa256869fd26648026ce758a993268700d7aa341898732488cf8d51e262c4699fe2bfa11db8c2811fc020abf6e0a5ae6ca2f66c56ec2892534958950d3674821747cb120ab4adf2a7787afaa211c247e43b55ba752992b7bb14e7d046fab2f33bc8f69b9df6898713b5e230525fbfbefdf825bda20fb0ab1cbfb9edde8ac3efb0d009b25572e93c1466accf7822ef4a31dd7fb44d0e63609ad3eefa9dcc469dd39de426856eb4d6138bc7341c55bed4f9acaa138c8a032aaee5819f116142364cf6fa868eda08cc9e42748500c972eeefa8b3349df8eddb4cb33dedad9cdc17af92ea1755eddd70866e812b724ce015db71b5a8f89b79da0af808696d970edd7d1069705a912ec584d011f83e01a435f0e4c05a52f1fdb6f44b8d03835d1e6de2e3b2c525ac4b88f341dac3983cf44ccb875ba864524d58b65921560692fd49617a136b512cf304af3d1595068be7810afbf60c3271764f450822105ea31b5f13403e3deb18d0036110761c8ec9411ef8d496953d14244e76deb5c0ca692de0b8880bb33a892b8e4da0eedcdbf2f7b51f56fbdb444d6166b8ef700dbb94a0462d00265729cf7659113bfd2a262304a0788d3f713110956aa0618f26567df8ab382d56519f30869cf599647ead581f7f72ee77e8022e418d31cd22d38c65680c1bdbea1f1f8e9b947c72cd97cfb2950857d400e2ddd5a6ec587204bcac85aa07dff63207f8500a2ee04100e0c583239c7d789002d5160a88493dcf3570053774dc442ddd84ab3732bb11aa55ab41b44ea21b20db42c69165fd622c07002c697148acc40803a2b96a26c6da925b3c02520a683da5b1927dc959781e53bf5730e463f7dad320b9da046bae5050174088503e0f4dea085c1d54683825c2ef1480d698ca3f038dc0e36c46024b1433bfa61113ba48865325725665ad81594a12138709ea957fb4a12c9325d4b4980d011589b5b23ad6f0aec18c3542768f75d6c48f7e8632c47c3040033ccb649f5ad1af6977ddae10820867d7576894cd013a3284fa4a097468a9175e32d24880360c45d73ee6118fae4aad657b0c538a9e4d1291be79e1865cdb272a35d8702b7f3489a94bd4b25ee7ec4e65813ab95b9173b8e1875bcdb280597124aed2c9508a9583c1344b4957bc152b2229a7f63beeac58bfe5e8921707b37207aaf78506e1a9211c313bc92851801951ed6ba89ff876235dc5aadee61b7665bafbcbf4e5003930a9b0ca7ec12d6de648d978a21356f6f4cbb61ea6da9f481668f07d8bbd78d3ad55aee927c2698798b0a39abaf9af242fb41eb71012430df8fcc606b0f5d717768d214c55e9c80b9c05e672943efc148c8c8ac8a50204e4108638a16a589484ad77b413d8437bf17a2b4be433283474190630df31c55e462c23e54435c343ad76ee64020f1623e8677ec1fa9580c7541bbc163905e798714316ef99a72fcc886d98fd072e3a8b165524d3acd62b9a092571fb5b287d07531f0dd8180d7a24868efb09b58838904f0413a0a05a14a8dd8032b36415b6caa86e6e034262a2268219ad1d401fbee919f60a428bb8e016c50805f9800ce9191b56512ef00fd9d96e6520bc2b40fd2fe444ff93f65cd8713ad4016193cda7ec8225f0a56ccf2a275ffd731e317d64673e93bf328a1bf1f41790c198e4c7fdf8a283531f144fd406d1049b74a470ad644654f21097162ee1f13666f3c2f01dd9b30ec0499de63d365da0b7794e7a2949e688a1502479414f3bb483bb720246d8d5deaa7f695842b17803feb8485097f03ce947541535c06c5ce8fc5af8d68ef30c926b5831152750772a256aa4214712a6d791d767c32c91bcecc90b72a242bc4f0c543ab8d9c20c7f233b389a0140e3ef90f91e5a87672cf054e39c9f7fb79104065017e2e221a0942273561289b0e8daacb9638d1d0539dd10a90266e0ae18da1908eb8c2f4bd8852313f439472276dbf57bde7332d0bf02b95370c355d4d8b42e576bac4e2ccf2fec51c7f168afbf8714341afe6d91e2bd021c582917a3ce163423311c52e9d829268587fc0868ce2cf5ff89e5384848e24d62951a6785c03a116a1229250fccb5cca4bf88098c09dc605eedfc1c8daf17d46f29eb84743b0eb3c55a5622a0a8fbcfbbd89ad3184160f8d90be701970679b57beed788576dfd032048992e5975cc676f8fc2f259ebc25e375cf3778f1c81d73a32b006d8a71678fe40ad2576687719861095f5b3fedd2d83d89624691cd4e920b43fd453cc6ea026f9c2d64565469a0baf6c9233c286205419fed50d48abb684922719d2b21591fa2b877852e2fad5a95aae52f71d777ac56d4e72bed14f78c0a42b68922c312ce976bbdb3d4929faf5c7668a1ec93bef961c936a3b96274769eff28f40050eea3eda4dddd9b2244e2923efd92a8fe76f7767c51f15aefbfabc6743aaf1e2bbca549a5c3c8156dc42fedbe9c850c0c1f69b1f2c7900c446597d81c52ffdbde793a32a42c40c1326755e8705f8bba0836208bd203df4f62f1f1e24599d981ebff4df2307eb7561c79158df5c10092fcf5d2ddb216c904227a96f78c2d13245233b382d986ebf025a971c840828336b22c26d819bf50860121795ccec6fe73ec2c74b1cb320831b53424fd24efd9ee293039aa160b913c0cd037d1e790051659e0f03ca0cf204c8b0a3498ef834db637fbb1838f36f6496341c5b1c43006bc9d1521c236e616389c2798c5b785eda00d50bda8613b9ca12e0974efc428a13b6aebc9fd4393e45452c109a2fc9bca4357b5cc15371c5a5d0efa36119f538404ddbf83ce545b09f05c48c0074a82f11920425aafc0e2401cb358ad1aa9561e17fb36fa5003a3b9514d069e5e25d65634c98a234144b462b778252e4166b37d830a8288b8fe77e1827fa39f22f82ad6d04871c87f2402f2d7f86d9aa49c3a8fec19152320648a808ff9ab9d682428c9ac14a6537ee7ebeaf813482e1c4798cb0b539fd325a7a0dacd4460eb90f97c0d67f49456c443335e3066a71e4c74e3466ff6f75d68f01e0a2a6dc3944203a870a37e819ba715e2e57ee2e24d6fa7d3942a1ce74707703ec4138948e040a0d4c20640ec4d556b695ca5664f383d8b3237dffc885d830e18890693af7fcfc99d8e82aa1b9d95151f88d01264a1b3d02c98ce616a527af957369505757eb6e86c774881db25d5719062f61b48ffb9cdd52038ab87143a4afb1fd11b3ad15d389be7178481018b37fed470dadda7a88ac6ca7346b85cd45e1dbdac422e447303406ad6c91c4394a29971929b1238437957cfd5fda4e2ebfeccd6d338eae0bffdd9dffddb7fd89f82edbf42a8fee7affeb62ba3d5a811ee249b62102fd62033f92980f2651eb9804c7032dd29a02434d31a94c5ad1aae88d074a4a40c7a9405130fc0491f6424d31a941c626f422b20c8d00cf55032ce43ed4283f2a44846bf265712bc1c872ab3297c6e12b87ca779682003393d0010041d036f3757ad0adadde79b6d0325cb7de96902e8c98526232d01bfc1c4438c419a9f666214758c091d186b9203ed051b11925d8a8f0e2b2cfd9cd6673b04ac6025d868a311cfa9c2335926fdefc93fbf893d74ea2ab35187d908d4a06b05db09376a4485947c7b17ab10d75f8e5cd144a2499996e4589c10dec3452238602c9cf4299df5f0b878c3d7e14ecdea4f2f7664e8d377a13c3ab05a1d54c813e1256218fc4eb60dfa1e5802b89cbecde95512bb413658415ee37221466aa3f54a3e84fa34e15250d9e083c57e248aef4373319ba6a17ebff374479fd761e47c7bbe8529411b435c012adb10e01badd38326624a714055d7198801b4399524deb301bdab85898bfbf645d48718cd83a73956fd3a8cd57196a05777649f46d80a006514109000e17c51d5dbbce103cd8cec1dff26c2b2101a6a7851b80e88be7112d15787aeebd089433f9cd9af07d73c2ee51c4d8f6f3f2d6e4d6ced5e90baf0b37c6a1e2098c522f98cfbee8b0b3598ec1b89ac0a9fb2dedd98e813b2e46c97b3c9f49991451446903c483ad28d14ed92636754e4f9178278c2fd62855dfa43662c774bc64308189f3c21de6c3eafa7b43c0d78ae0705b9f9725b1dc8e26a2821276b88f00b54100e547896156b0455e419c170df4fea09988853187d6265d07407f8a5a3860b88769a812c5f52023c703ea58c9b35a9f5c4ba30b76a6e8598b725a5d28d4358b6928b55d831b9d9d17d4c46d56cee1db1a5650472c4dab03c4510c4bbfc97108149cb7595bce71e6010e70400a7e1fae69ff1cd5b0efdd0fc571947c8f610e9829818fa6696464071dca629083d040567a3cd0ea51a818be411b819b383b9893d71bc570d352eb651d72efc7643e8dc6e7cf8ccf77b92c8ebd9ddc743c4bbeb873b85690585a71f4fcb7aa3679a94ffe25ffb9a792cd8d7e1f6f478d0015fb379165ff28fecafca47b3d7b2e4fb9cf068ef88e01151e668364dfbe96c9837b5c01f49b6521c89b9d76e8c47905d035f3e2e1c93bc7684fac2db6d5231e97a7afec176e09ed1309db78b264cec9ea4f057142d87bebcc20db139028ae9f6fb266330baa15e8c328c83db9511e4f398a8c40653d5e08f924c2c1759890c0233dcc204d6e9918715275d580e474b160e367a4f92870effa553e49e474f23b16c3d4c41edea27c6767ca4b08a9125c4512cc6d63ea850232709c42ab622b03dbcf7696de5a5340415d857155619720e40ac4bab69270c52083138a258cb39afc37ed10d1c130d5bf0d2e9ab4dca972797e5f42ab3b2a45ca1db3fbaa22bfb4616dedb9ed8bc780022c4645c701a10c9cbd28999f913eeb01d6f7fd2f5f9829bf954893797a1172026fb7ef06154651c68d5eaa04bd231f368840c0494d209ed27aa42737da7b92410c62e8f870c74c3f18335ca8eff745c2cd8e611163a297d6231703debfe6c1a7520ee57c79f5b57c48ddaa637dc64084aa8581827838c19d6f5ccf4469e07ecaf68430038c3f2f9f8740ed08100120cf85060e3b9a24d9196313ebc79f2c3f244d6471be2e6a09c5d4d66a895abdc7025dd3e4253392862f9c663c321deccfb28c5469c02cd19b3b6479cb6917068952fe58ced675c18455428437f7974e26fa90823554cdfa8850be0285492e0be914d1ce977ae0657a8524ee7155d06051f539cf27c757ca8cdec5ae406bbca2767d1523fc2bba8e042a57814a2bb1eb68b41125defab0b7a2b43afe06b116931b550dea2e88753a508e3eb7bcff78036fa40abd0a74fdc85cb999bb36013417c86b0edcd7f41eb06780139b4e0c83020f42d0a5a98eb3d2be8f9c6c27c5e957cda90c14c4951bce63e5e2d83f02034183c37d32e873f37d35bbe8ed7a1417872580834cdb634a93a5875997a1bac17ed54d0f32dd391aa15a911f5a97f17047ca1ec9433ba86bba27eb23492ea86de044ad4ab57ed90fc0373807ebc99eb0ce131c5079648087bb76ad568b88e2cd6c8a2ea57ff456ce0b8a9a9b41921a852c29a3edd96990944602f2b6fd8941640af48a0e3fc726d4e99e089d4e020c3c7e0673ef79a4d5ce5edb59bddf7bfb039a20e2ce02a9d5e44800f22c8adef7396f9517b8611bfd6d6e0747b2a04daa9d3bb64b0e6fb976d133e7bdc7f72b3fa0c39bfa2c6ba9e5f320dd102438010ca558f483d8bdf16b5b29e8ddb9f202a771d181271f2a7b516fc2f56a8266e1a88e5fd1308adec5d4acf427a8c3d84d9764aa8c64af9ebe727ffb7ad2643b6b979fcba246368df20e92150a53a57ee4a02f8c05a38aeeb9bad1f2db7bb749b5063f84acd3737621aae8f101acd58d187ec196d1a540406ff0b01ea99be4dd5fc59ec732a92da76ad8cbeece9dce9f8215600c2e5ef125db473304761964d9cb284871619911199508655d2d2b8f09313f6d10ccd11a1492518099ef5c7822f21ed8ac3ab4dc8035ce198b415307f3c5a74a0af362dfc86e108495bb01b1554e7adac28e4ecbca1c22a0deb23545b347c5132d40408d3a0a1288dbbe2cf8c177d8f13c205edafd6be493e93c4085d4fb5b91f0c13e4831c8b97dfbc9f228a9cf7847d80f5db7cd7c510edd045db9039053c4e6a5995b561e545d63eb619645eed55637b6c48e97363780fbf3894c5a2021980bc7df5a58b8c6677ce699ab49c0b94266e9fe641bf9cc29fc3ad0c1e28ca25ce5f8b19aa6ea9ff14a8cc2716cfc6bdaab5106a24d9524ac99acc8327a9a77e70b056409d44884c19ec6bd6518724800cd6a469367140d9f876f3043230bc56a0856d79cb0e038731f1c5baa79f71b4f3c390784085c644f9170174c6d28bfe62ed134e05380803b6e06c1b81f40fbf7bc91217bbdedfc566db4a9103fbe705d6432e4f2a5c6c72648678bb3bcfc0e0cd02411a110860e8a26e87b39bf01c981794bfe819d1a12b0c995123b107551bb72fbb01054c43dd2ff9328e35639f97015a72624c7e78697707b7384a7229beca3b596d52298fef6dde9b31a1331b5d511655979289343a35807a5818c4a40daaaeba7ae5a04de98c5513ed87fb3a452e967c21ffcbbf337fe6692a32ac70a86f14b040870820e1c86a8bc0c29fce1d1c02391a05c965f21390f517437f5f1538cc92d2de8dbea89fe99ba766467e6da41cf167e9000017a6ae0565818951f10ea228e2022ddc1765a60972bffe72c55f62b7fe1e60d8b47b6d366e17584ecff4aedbf203c407da65d7e784d1cf7cc488a0473e77444abd420d4ffc3cc24a160011750973639a989c0be1c05047b364c0e785229ab495e9e3ace007797f28565245fa28b1aefca6d62618c3005a92000ba768b466a41b631fe5eec89ad784c62fe3e33c7a23929aa1a06cf48c08d97cb664f3820450607600a4a29eb6a111a32b8b8285b1992fc3b9d12f006d6a53138b242a82890e240fff738128c9832d17d66ddd840c342fd9257ca44bbc04b371fef20e2b41ca9a1041b2a9aa03923b2bd14259e30b41fa9b9f99e7f50876fada22d6746d9d0bac850a49fafa4ff5ad8651d2cc3c3d5ad574dbc6700d96b11460d8b84ab0b3984af7e290337fbb118afd66a489dfb6558027b317a553021a8ed696306314dff9941c4514e086b7f24c120e55865c8824ceecf6b56fd76d02052bcdd95e5e4485befcb81a69d65f2508d30718392f8be9325d144b056849d7e68a3e75961c0ff071f026f1a79363fe20171fa5f60bb105810e8f01c344fad54901656ab96671afaca3d4cd8d532a07213b28f41bb43d2e752d7501a9ed9cd768f7c8d219a79f1ee486b4e2465e7af1ba8ac114b44f8d4792c809e3e2e9cbaa5aff76fc5e40ca3f50af985dc53122ccc8d6097adb0c8764568fecd6d53d6382165a139449ddae064b887c28e0480902ae04000c97aa1c1656ed5014e9d973a610bf646bc8b0789d089f6e98c18294bb08df078b777d49ef19542630ff0fab57cc2b5c8a46e6a25e607e52659dc08504abdb83ce65864b1e216e232961e59e407441e37bcee34ef7c76c3761255db73c5d05d2ec15da0537c0021fb1f98931b22b625500fd209773ab5b7dde6ecd72a91ed792aadb143f8d1ad86f0d785aca75bf0d75abb9b5be6a05b5db858ced6e060cd51863a766480da657c2414de8c890a0219fd3f584aab8abce7c7a07612ed6e9e72f560ac41c6080cfab9beac8e0c25ec03bc84820db05170ad6f114f76ea0c9e3ecb6b707a173c8f6b0b0194780cb5cef956ccae3dcb6bd6a89dc4d8842e1dbf96a37d1667b9a509f9a4761784c8e8e821047eb2d6470f6b43e59b3c0be6946d9d733f8dc624a5bb21054ec95048260d49fb760139bd54fd41064f4d666edd2947355de1834ac2615eebf4b44ed7c28a1aa8a9cd8a7d60417641cbbb3563e2655cd8f6eeb981e49fd22252b41f94917a78a6a094b097ec3d44505f850284b95e539da100241293400c8b5d792417da4da16c2e70d0a9518abf5c84ae1087fcacab277c42cb61d622b425e4dcb40e8fb9cc8477e7891958524c79f279c068984cd0b3a771a974ea1e9af8a73d77775157a4789e2620bed92a46bed41c8ae22a2d05dcb112d862e5728227981bf18a46347452a2f5ed59859ab8e8fc82d005224454146b5d339c334b5a9193c70191d8c69c307493d74b9d211b851005bf1ae6c9b9159c0beb03a2bf0689d5d7489516defb68835c303f5a2157076d3a4bedb069e03890c234621a3fa53e7cbdaeb438de773e67b9e82ad424f76e84435c8fb430eeac26d4dfd9469691cbd61eafea75e6b20c5d9b28ebb5d3887553fe4bbff74bb547f951f87e9550688c53075f8d6b3b1f78e8b042e77ede05dcc65e4b6860578c25720ba91f4279c42802633da151bea16a428d4863c2168937f9919d1298ddc7eefa6b1bac2b29325335b34029e333f5315c31211d5cf63ab1c412a357d54d54ed7273d694303b280802f6499406f9d6491cbfcdf51d9deca174c3918037be3e504a7be14efcddf11a98c9c23de79cd06e583271f8b2754591cb3dc0962eef48ee1b23d38cea4be9bedcbe8ac50d77b3a3e394246375ecdc3b43f96269854446cdfdc39874aebec7bcba7e4b6a915b5fff8e009dfeb82f99420f4fd1cfa93d3eb78089d709cd609023b29c5fec66bc8e6d702bf622f13dc72be44574124321591412c95717282c18a214d7c9ddb7faab7dfe6f6481e401ba8ce6c399e2116389b4722dea9427c1b4846f67427748107bd34dfca82aa1736b73fcb01704d210441d4190527ba5c770372d2dc80c5971b0be483a5e5bb08f3d6ae414f671af710404817f6ca1c2f11a6b7be04af64803a241f278182475929ded017ad383e2993493c553917b851c9a61ea2b467d3e41e094d42ddb7e503408cef01f6289a7ab076e68871d5cc2469b042be53a5058a6c4b332e07049327a0dc8243f95dd7b01723d3c7ff27ba60eaf63de9e009d8bc034023b870198f0a205336b1f788e2f410669203dad1bac33b27c46d59e870836a28ff4896988f28203ff568abe412fc22ef5402aadc735ea478bca88af5c507d328605db3f4fedb64c2e141eb0f1bf59c51ab2ede55aab64b8d31f02b2c5117eb3e3748723a57ad03137c618e19ee09b9cbce1b1d92c4a7fc49a2a4f50788b217920f511437613ca4e1d60e71bd84965d248514040ec588c7e95767142ba1d42ed4f017dad5826aa876c37bcdce33eac612b293a239896240021683968cbf4a1f4c2fb22995058854115ac7677b54fdd74e7f8dceaef2ac6a92525b022814e22fdadc2bd1adaf14e7544a8f283022b00db489229f70cb67d22df00534a1bcd89bae7c5c23820a1a6da1482d0d7f90dc173b3781f5dbba0cee3943337d8e13b05756cc9bd808bee72d68a8650bac0a2662892dfe83d06d5521c77d1a1d3247fed765c20a220b9066b0beaaecbe6eb0821e31c91e87ce40e43937bd540efe914db58be64081732868d46a1241048c6b3f848cdb8f1423f05c1d28b34358f9a93f0ac83e2175c40db98292da7e6e5bed6af737d09494ed98d5eaea093f4f606c9c06945488337f2f2f491a991c278cde1f4162247425cd121378c97c86329b59fc746abc578ad806cd31cd3da87e31c39f0a981810be1098fe0dfa62d1dcd03e4d22d0ce22749919103db610db98d967b188d19353feca19564e963bb44c84a5c728689453872a5da4602ea7110696c75eb510d4d60efa179e5e87c58e331c438eef473b3c48562615b2d57abfcb54caa53423e6a3aa130e4bb229395760188e73c863bf4b7414ec855a5a92209ebb7c80e2fbaef7a13f1c9c845bca68ed68ada89ba62c90aec7e89028d7afc27f905d14b51f6ba58d6dfc11338c2041498b01f32a5359822409285def176ed756d007e34ff05a1f85504d7f85e1cbc77510166a4282cc63f6de6529072f11414f20de83f72bdbf77fc2ea28a493fe7da57f58c8cf556645da05a3e7c182f0836fdb3809bbddf7947c323f70ef5aa963e9efd64df79b6c7d965ee67661837edf151522949918d43c54ee76891ac2b72e04fd229093c0c8b5445d5c6116f0c4ca46825259a2b028155ac4136b4b560a7566390afc26a7aeb23b9422822475957697625490bcae62ef52460892d655ad5dca684152bdaadd41192948ae56b5bb292382c975157627655420b9aedaee508e0a92d455da5d8a5141f2ba2aac31e289136fd28d3305b955d44fbb72a7e0b70afd6937c714f456a937ede69e826e2bf513dd9c53f04da57eba9b330dbe55d04f767327c1b7cafa4977ee14e456513fedca9d82df2af4a7dd1c53d05ba5deb49b7b0abaadd44f74734ec13795fae96ece34f856413fd9cd9d04df2aeb27ddb9539078fbc4da1be8aad01c5d3508797c65d56a6c6c070c676013294d488aff8374f1824e440133e88d30aadf877ce58e1d9379eadc47e9d78fa41a6c83afc51e93d63e51634639e20293fd8c4b776fc17894d36389cd28cb45681da52edb98166b887a8a5df651add6d0f514ddec632dac21eb293bd9c75a5b43ea5376a9911cd45b58166a593ea1e05c4b81c27d87202f4e7c6ca756e290457dced8f4bfe92a0027c327ca51b66bb474ae0b4acc161421b8b2d19181d9a291147ca7623e01ae72a6b9e59694f5c456b758d4d65054255e95aba462cf90ba718cd74be3ee4ea37071799ce6801adaaded0ff448fe595a192e2b1a344697dfb7026abacafd14db63730fb0df5159a69ae523fd9f3920f1e0d39121c54a742537c4b6f4ffd1bf0c62bf66b9894c477216702768eee640b3c04a7c3e5ca0018af1482f51809a713a9e01aa9a65888ef180b82e62ed6c2d4df5f06a23697f5fd3b3c6f960477ab71f73b374b5358c97bf8453fd8e62bb7e388cd635709e88c69e7cfb9ac635f82fc2be91b0da4d84a494924c52ca1dc302d302c4025897b1529ed69a71cd1fcff33ccff36aadb5d6da6ab50888dea62cd4fc13a33e97b2c73765a1063b28df75dd773d97b2c73665a1f7a8789ed7e2799e53ee5f1754cb5ccafd94524a29656666e6eeeeee767777f7ff7f17f11835d6c068b62695182694b964ee6c98364fc06aa611cc3f07b3572ad464d04ca599375ecbb5751a9946e88a572e1edb9485fe0d885e48bb5661dbc7bade860778dc54718b5122b399aead0f7c1c65f73665a19eeed194855ac630cb87a6300bc30f3bc82ac8231553167a2c62d45f7c45b97fbaa6cf74b94c176aba42d335a76b29f787e69c73ceb9bbbbbb94524a2965666666f72c9b41eeeeeeeede7232655164c0e85571a3992eac356f6607520c99455e91543481d578ec8ff32e63a53cadf5e3b55c3fdf7ab5d65a6bf590bbbbd76c523bb9a7febd83d2755d877abd5eaf504b64b1582c8f8ae7799ee7a7207329b76b5b3107be835a6badf5e7526eff388ee338eec5fce217bf5edddddd7d32c51504ad56abd56a21307205e48f8fe4814a0c50364c934bb01a08244beee56116835255bb9931422375bc96ebe7ebbaaeebba2ef43ccff3b016d6fad56c8c8b4d6a346aadb5d6ea1f1ac024bfeffbbeaf83d2755d97711c1769c896b994dba9789ee7799ebbcfa5dcb5d65aabeba3f4a31ffde8f7313333f369655a65abd02aaefeffff3f88688111a68a3e94882f4eeac8136408b20331b26c9816af603541267db1dccb5a2997f633f34db0ebbaaeebba0dc3304828a8e313cf4fa6cc63adb5d65a43134c97cbe572b93a285dd7754e922da7b921e640960d37dc70c30dbbbbe752aeb5d65a29a594529a4d2dae582c168bc58a60131b168fd8301f1ea86c981663c06a226b3702d6891d48c1aeebbaaeeb584d6cf2c42b9b54a6f9ec38c526351f21c7d0c994394d0323252409c86f21f72c4ba5d89b89713541cd42732994aeebbaaee315ff3033cfa573ce70777777ebaf388ee3388edb02356cdcc01123b33232534619190c93135b8c7ad2f33ccff362b86bfc5a6bad2ba5eb1ce6c5c55ba25a4ea67e98171747b59c4cedffff94657f77375d81eeeeeeee611886610c1010d0dc9085eeeeeefeffff7f100441909999994532a3eeeeeedeffffff777777f7ae3102e0068e18ed4b74c3b8210b32cea5dcefdf755dd7753646b2ebbaaefbffff7ff0c6e8ffffffa7bbbbbbbfdb2001f92d6a3870fc60d9a426f3921ad00cdaa4a6f262fb36a9ad1828c7e6c83165cc91e34b9816e5dc299bd456ac99835b9bd47470158e5510e04bac4341b088bbbbbbebe8e8e8e8c83977296577971e132323433b8c7674c5abd9ab5f51265a85d50060f46e63f42a6c73efc6e86bcc4835f2b81a45d7311260c700a303b02b18154c779b2ed699743579368a13d18cfa8667935a02a8663140829c591f3ea68c3e7c7c298378c6f644a44120fb66d68856a90458873916c25b68199bd412a0412805ac701945950ddf6c525b808744950d7d6d5263805ae163e44202224d5968be0baae554436b6a76ca9a9a2f5110eb81fd83594a9b79dafdb0490da6b5fd6c52ab41ad6c5265435940e24661a0dd02a3e7f5308f2008822008aee72d169104c4bf5d502d1d5ffaea64cadee3c994f5ecba300cc330e4150ce947bb488191ff74612e97cbe57285b149adc65cca1edb9485fe1760c0074805088220f8a66c299b3266feffffffb9da155d0140fac17e63e42a0d568463e4aa989f18191970939ab650682357d96c6b939a6aabac76b59a32ae565f5acf5972584b4e1ab1494dfb6f2c94fd6de27eea826a3999b8df999999b96badb5d67f6d57bf55854d6a397472e8d0d16d520b60790218bdca666f36a909b04376ec8e1d53c61d3bbeb4b566f41d5958bf0720a3290b354d040252018220088231cc128661780a4353169a1e15cff3bc93e7edeeee32333373777777bbbbbbfbffcf950ed20f17ed18b56a069c1960002c9bd444048c5a655380151ecb83c79491078f2f394310dd4d4628618a23cccc24470727daa2b279b3c4123e595879a1872796245981eb108e105205102d2dc2681241735b2321636b212065aed18e30893167649a0c142b3b45c87cf09383448c18994d26d342265342f6f91c71628886c2ce683a7ec37c8e48b1d968341d85d6e38304c8e708169a140f611eb98293a57d70aaf049d26947b49e5486f239c2b38d21c274d8746b939a88190b7223f2370882f5901a165d6a21094698152408fe23d7dddddd3d8a016a2d06281b917e3416c47aed999925c7cc4c2a65d94b6aa7162c2849820b96f8c27a48ec748a2c2b9bd4502ee922b517a04dc6299185f590dacbe3ffff8679fdd1effbbe2f142406090a0a0a0a626fde2c343d2a9ee7799eb7d4dddd5f2c168bc562b144a4510c900c4bb2582c168bb5744f3b7dfd355fafd7eb55ca4ca736edeeeeaee7799ee7d5ac86eaacb5ce39e79c3333496ea5112dcbbbbbbbbbb4bbbbbbddddddfdffffffbfeffb4c271a626666e60ee79c73ce29c3d3e58a75ce3aebacb3ce3aebeeeeeeb637a737bde94d6f7ad3db928806e94724452db230e7bc5bf6ecb5912014f21365a3d3497e524385d2a58c05a19033527e580fa961722e0a2539596593da0b4cea874df2480eeb21b518a04c927eb8bbc7e9da65eef88a3f779e28f7c3bcb8a09e3ea594524adddddd398ee3388ee324c7711cc7c90f89da9dd6ac86eaac5bebeeeeee8a463140f29bdff74d22a4b9b429a594524a99e7feffffbf6834fb2973160a777777170808080807adb5d64a29a594526666660ec3300cc3dddddda594524a29efeeee2e3d8d483fa21603948d50a41ffff2e7ef4f9708357a7949d500e0c6975275d65a6bad52e417bfeffbe25c7a32713fcc8b0bcadf77bae40ca3fd64cac230f43ccff33caf525a69a595565a69e59e6dca421c8661188694524a295dcff33ccf5b2c989999b9bbbbbbffffff3f0cc3306466dadddddd20a59452fa42fa814592cbe9bb35152a9bdda226927327656eff50483412914a344a34321aa6530b8ac74c0b69029717981798144c0d006a8c6cdcc01143023293925940a5c25436284c85830464e606690214a6b269608b31236d5b956acaa8f2928c97300d83bda9429f84b9c297cbfbbc28e59cbb34ca397729e5a5ccddeedffe1f0a8944a390683422914a251a271898370005112645512eebd42d2307cbaa748c4829e7e4a19432b77c8abb7b54611a46d201757c7690a44a3b55766ad8525bea763e9f9c2bdbce109d32361d222ba552a91477bcd8148d2822991852dddd930376fbe818d9bab354af523244b2d00e0b53c8d0f911928d36cc47278c09ca4a1be6b3d35dc9441be6b363c567e735a3e9306d988f12127c940cd96c341a2e621425ddddddcccccc3ccdc3ccc35385c9eceeee6e6666e6d668de07caddddcd197337cf0f528b0e227677777777ff209dc82cdebb591f48bbbba5e0994b689322394774cceca4c94a2927e44461c2cc3ddd134512998253a4bba787b9a7bb47a3a163b09c879999b9bbbbbb79beede6611e661e1e8d8682117282840b1208137c891543f040054a07ae1970804e1092a342a400cb77851223b06ce840869cf8641289010787bdbb9d20e1428bbc841a275e48820b81841a60607d6037104d24120e72c8a11a11526d48812525e7662918592a436519cfeeeebad89a614018b28476777733333333f7f41891b2c908254cb164056e4649a20464661c9f16bcbb87999999bbbbbb7b989999bbbbbbbb7b349a10588449922f9c44136ee08cc17284ed687777373333733333337777776b343d423733333373cf4d0f3d286106919c2a7e583d5148ea01c645136088f0c20d0c5968889244499c452ad8218521445ca105104360c08101e706221688d143196438f1620a115ec071c2e4d7a78913198a9c91c3942e5c98e28160038c1098d8e2890f4cd000a5a729334f21498060450f3a245b20c9420a33d692d244f809122b5c98398992251fc82c38223461666666eeeeee6e6666e6eeeeeef8e4860310b490c28a150f7410c18516705618c2ec24890bb3bbbb9b99196366669a9999eebee9be20072d6e70602254e186089a67eb4ea2c5d6daae8669344ec40e96eda8f4cf7bdacc00411004c31900008020104571481053a9ac3a1400091f524e3e762e1e303c32948902814a14622814418831c000608c31c630a4943a03b22d05ff60a4a6f8fed88ae0d200e1e436e4bfbd908ad27c72814550e94071741bfa83d91f7143fab58aa65eb028b7fcc91bbd1d96ab1c7346ba868b3227c91163ae5698ccceb98cb8fd26673b5136b76036fedb99cd6589cadbbf5ce8600a8b18867a90c6522ef24d02dc7c61d67e68fa9ab27ff970b9af05b1c5cd297c23e12264651e124a141786c53ccf673445dad3dfadf3752aafd3254c0427cb7f5bb368af13d259259805fabec35fedd14bee6b8eea5744e8e66682b71660ea6fa9ec80e8c93e0e542fae0bc7344bdc07a8dbdbd02c0d208dd4d9d624f504ebfeccd2d721337569bdab126f0321358421c9fd248ffcb7ce33eec412fe261c8f982dfaa60c11b3048dabfa99268cdb846196f2e8e319c558e28ea9e18e098346c02c6d2c8538e4cbd2ecf00f38384a222f4b1ce94fa9ea86e0b2b4aef5082349ea334e85ee54be33b02cf14a64b1bc2b4b962a75ee3ffc4f192fc89425a89c239f0161d0a894a5cd5eb552468eac11504673d43db2129112516c5faff7d7b0a6f2d6274b03c3ff180c6c800c4b104bf348274b9c624ac8b6cba62208a5f93b897825fde3ad7f426e3793b1701524442fa54e42992ca995424f31730946c2e15c257c7d3b121d68df4b3285168f2a2f0f74d7318c8d185b8371946edf0d640805c65d0ce3222a0f92a509fe19da47b5060d3e4796585166f45c02661a676409b2a909cdd9ff4bc3a1955291258837624a00a211a7c42e76be87979f4d0827958ea01c90280147dc625edac681794cb6fea25bbb7fc38b880731bc5c3959eb418ff884f02fc94bfb2fd12a5e39df6dd3d830e1e1e18d20398c8979b1b9d2331a6163a2ab5f95afed7221bc94ddb7d54ecdb5b0a5fc0627c3eb2b07fb452cf578b9770c1f187abfe6102d3408d730ac0dfa24660cf0908dc3da4aca7f7d75cae712b96e246019cd4e7a9ff5dc57704d841d9c32c991a032293c3b8b8cfc6ae4da148e041d024db394c3913cabfadd6261acff9b59f22ea557d3eb59d8641172d82e63952cf7242cc2540d646afc9bf4529b4d73797e0479547bb22aaa0ebcd7f6eca802501006cf1077612cb5b82b0cde23b0a4c9d3c7e570fb984607a807f5b2af0125965129edd43cabd11588fe6c0aee744f9ece35ea08fe6dafbb7a0ff013dcab13e728f72744652364cbd29cd28dd746448bfcbadd8872924e8f74fab2a66153b45db9e73442f0ae5682ae8a577c481ce567264f7e01626d68cc1b43649b444bcbc01056a2366ef11b0cb27e0b5d98b966491a011e6044449914e697e032ad2c29f87e3f0ce0d04ba332db91d1b7b4d2ab673c0c7fb22fd47aab89a8808d8890138c6244ffd727cdf955ed6cb6e36c1b96461c1b03bee667e0876772037457c905d4662feafa2da03caddf3b1b08f6a65b826d9fa0e5a489977004be93f51a26c8758bc584475c6313010db302c4c14372e7900237486f04a0521ffaaad83e6b710eee49d3a4982f34211f24b058a306ad3bfa9a7fcd64bcd6fc813a57a6b911f75dd435cc0fc406c9d201069362dece9ddf225838521e7f706b665ff62b509393acec37a8ab49e7a62b43a371bdbb9154066a3ab7bc754f765e62c4dee842dc0a34651cb3d1afed95ac79ed4cbea97c1ef33a80aa0601b7897fcc025d020253bf58f95ad4316c5cb1e851bac5c236cb326ad25aedaa67ba84e6e1e3582a75f03a0d09f8cd5c883121074fa26645ab0f1947975a38584ba9d45cf5c5056a065d8e96f85238e8b2861584405dc1ae61ed40043de5667824aa0ce425cad25fceba4a0e6110f6923668eddb1ab0d64ca07575d21f227bca84cd4f0278e612ed04b556e801f48e5be3bacc3ef6069b1227e5d824b4b49278655d067eec5e32b3b08e5be0020d5a4b7913a0671f12cc19d47eb2676f22d1f404489ec7a82d692827690c65b7a06525afdbcba5b0d9a2809404a6f79a52550d6a3786d61887f29a03cec8d9d88f1a35b5a68769dcccd9f25644a9223d65a9d11a88a71be823740fcef99d749a0352e3a8d18bec2f6f2e028c539122b78bfed6f4eda9a3abd1c1ca3a829bca03fbe268676c72ac19c6913e01ca612df9228ce317851cbe99e0cc0caa0af20d5cd15e1ce8b73d4183cb42f3cb01a228b734e0567773488bd2fa6027dfc6ea3471a8ac9b39479a8c82812bb04e78fa524471e68b40040bbd019bfe318db4872f49fa027c3b11848eb00c3ba9b527a38dad65b8ec83e23776555bae9aa2e18cd095e7a831f68884be3a1825254eca6025345663d697bfab17fd0571d2a0abd5b1f89c1ce5ac78c9f9c7469f2cc8393b2e5f6ef7b17d99613d233ee588abe673ba8d25f577ddf6cf10fe026a3d41056a0227a7d1bc6cdcaeeeb3ce63f34a995e64e33246788428bc7c15a23d2b9b4185427a45a9c94bf53b29e13c8a0388f143a2d5c0200528971827a5ba903e36add2d51cd04a41da3ea78a987f0ca6d31e9c5594a60c676e0d9a7687baf5abd64ec30f05397b2132962fbb5df1da6280bbba3251233aa1834d0a98ac9b51c88a1e449700b50c1147bc22bea0d42e89b9500e0f4811d3a313545993cc520b5f72a4ecf5fec80b1a914b828faf413f63982925ee779cacc58dcba781c31cc40149324fb2352d2b845ed1221d838a3b559a4e713afc10b33679d2346aad3f7bfb61c4b6cd7552e7c278f5db1bba998e8c7e906d21db9e0633557c9c9ee69e43bd2aad58ade4d832b7e86b573b70150079e6063a1dd13c9567d984438f52f1b56387fad0c201f5c190a75cff312237342292fe1399cacb1e4c4a2bba31c04eeb3499eef2700d7babd30e490dec80648db03c81adc4a16d749ec6713eed9763ca6f216ef52f5df0ec3495681d688ca1e965ad98b0c5ac6d64da69ff28cbd34a0ca539c6374b6a38db83a7b0abbbcd53852a0313c2a62899794caa6e88129bd011ec2ea308ac54b0a27fe45679a2fda8c5727d1024af0c5358c526fabdd0aa05c7b989b10a62a55a67f91c984dda8f119b79d6c9952cab9929ec43d0decf327ae2825ce9bce5b67ca4e6848182201c6bad36d3cbe2260a5ada715730dba190964fb32410b4d5896a4f8bc0703409783f25f003767adfba2a345a6bacb0e9ca3c288c3a2923960ad60a43584c925383336fe1c3e313312e947425d79536012b66f8946380a3c5c71266b6db7d20f474a0e97ab82a61b6da00ca34562e29cb745a65aa25bc42230c9324aec9d0dd07ccac321072b05955569df6b3b56edc7c0a7b37db6610c42fab28edb7013a8fe964b0d5ddaaf6af5577e2092238b614e2e59063b0d55db312d6848dc97741619e6373201451c6ce8b6247064dc32d589fb2329fdf17ecb5443ce4808353d1185c863180855301322b46843781a30073100ba1a1c0d1377877dd06f39ad0d6c2a362894c835b8a7d390ddca504406e1fc876cbe344597018031ed958da2ef29333e160e5c6bb61fd0fabacc6d33918d695788c4b3ccd82566e53f4f0a5189908cbb0aed62a687b589c038d0a86190deb12b1ca9d0638777ec0de1e750db9310515d717ac83ec61e5a1af75aaa37d5bfebdf6e8fbb2a84ec80f55c10512598e5a649991530e89b8220d3fa5eda34806a489f5ef18c5e1517b8c77aa5f21ac585df6d00aa9fe56b27a1e666a0f30af0dc7cd9cb1dc3ea3e587e6651c34d24bc45c5285546f70e4041257b5d0f1ae1e79285d34624cbe3a71f176146e57e1c01ba5a1dd1cb0d4b2f1984edc04997c01857740160f6df37cdc4395a23bb5b152d8cf639438c8b1d44a28d65447539b17c0c58039bb42b477681f5ab93f086d35d0102007aad5ffcdcf8a0d766565a042c3a4821d23015214da0c11fe19be8cfba427c5e7496b161d4b7b8ff31784c9e24cea1fc6004736cd07c886429a11b3237883e50aca299958fca0111178d0c8e3087344ccc36b4acb462d29e4e80c13e819373736a7bbfde0cb2aa64821c08361127119afb977d0e56d7e0291814f821dbb345a4fd12c203b75f0c591577a32e151a0356cd027804f4fc422c913c3669b2ca38a98e8d80df2b8af04280a481923b239af142d41af08cd79f779af13152835b209611703dac2023620e92b675c5b03276f8d22763ce578f6ef2e4bc52335acf0fe6b1372e632abdc0a92cb740dc6620fd9207bdb1a5bd5bd9cb613eb42849a01e348d8e2aa75f98f068dac375db13ceb9386bb016f6176a257bbc177e50fdb6a82839fa61b1257a0bdc349016818dec5a4227cf4fb360ce00091903bb247dc458aadba1896df4c37e36fd8ca18aa97c2d7150deae147a1c704d22bba83206f2a1a331d95c159529f49055fe002a0c2a69c56e4d6af981b6e612ce79bccaa38eada9c295a35c507effa4f993fa7329ebcca38612ba197fca1ff9561d21a57cdf7cfa194ef72ff8e2557768f4463cd85c51b8f3d47b735c41dc0cb09f187a5583b8d223c1038e5d16f6211ad170ea760564dae6df52fc0a704e9e00742f472a20b191b9b9784c39f69ea29aa4e9ddb824290a47f72e465bfece18646a1c8b6a07ce5037911acc800f858d36f3500b004c41f069e09f6274c40ea57565a0b867b7804ea947df3856b76f75be31674f8bd734ea830e4c883dd1807a6fdfd4b26a5afcf4493321e9f615a9a18832e69df247387b4ef1e84bbfd846ca24f8953de38bb995abdebda19f2bc1c6f3d719e19e741b067d213e5e9070b6e0de064e3091056c40c5ca518a3aa18c5662db019177c755f148a416e1f0641b1624923c53d978136ec3934a367c8e2058a872a3ec73c47176711582dd5aabc6d2d02fda04a73af7f7f67c8c5b0626f713170c98a05c71fdbb0e136280f0d462cfa2ccda24a2cccf39cb539e12c6a7809a4097a7f30574cafdc0b50bd7d73f7ab9411de54178a3d47bc0b45e7d6fbcd0a81e3379d69155fa60f10d21612cb704ae2340ab1bcc16f32026c4d67d3d36b349f57aa38b4c8253f4ed067a5e44d54193bf906ca846698caad8173ba99805584f840c3a6a2bcd3b6dddbaeb9f99028db7de9e8cb0c00af94fd3d91d7d52f579f6485295ca01e10662f268cf6724460888e00f4b5233ae67884467b8ed9321b0d08c7bbb844e584fa755b73824163599e4fffd2cec1d76b74442efbf5ff0e58ba40d55788165859cb02da80843cb0c88a5ce55ea8983b29a08b802e0dae7420401874dd72806971eecce97534e0924113e4e9e324d91e3f73faaff2fde83086df3bea33ca9acb4f4e7738b41565586cf144f6e56c440478eec50c47fe3c4382c63b55622abfa5de5b18207a7a1ef465015f1cdb6b3e3124d7a0b2c935ad2805645cd7b0e05830672cb092b8910993b28486cbe5325b63d91fd8944286313b650c48a12c8d454d389434b7c405d1dda92537fedc0d4988bf0fee7e10568aab64cdbccd050fa66d298074d4ca076670c79521d628e3fb40412525b360406b6d39f667bb89151b2b5802cd11fcf5a3060f4456ce8d3ea29397645da97faa9cdba88fcb6bd35b01c911d9275a3f0666fd56b7ec0f9de567991f979e4e227796445e5e611ea35357ee698648f43fb017d63385e75abb7182d33658f8d13c05f8b5e8903e5c4104b80445ac64962ea832a5fd2e6990e93f33e1f0678a7a63484f599f3f7c17879915876005f319366beb5172e3ae01524451d7e64cd18aba334d55eeea5bc3d7fe60b0ac62587984f2cf75426801d8c14826e922370dff33b5198b2afba22f80d3d633bc3226da5cdca2991d34fb9ff2e6599fe9b59d4dbabec154319771a5d129b4b985721906b583cb4933c806a32d0742e1d3318d3e8f4f6f08e11c8b5b00d3d0574791dd15a7ec4d20f93ec169af677108f7dcd1051f9a5c6ce8c3722737419f25bb2efaca3fe54d8224c9a5153a43d119a164c99470f7eac45bbcc18e6518b91b86cd03126d57add397bfa66883f77d3d8e25b70124cf57a4cc7f74b2e8d3c322259adeba45f04d90aa88cc735912ec96ad998fac0a360d0d7fa78fe8ade070fcbdd66b8bfdf8620621fd1f54de3e1875f7a34ba1d3d514a490072ba2eb41d1090f5c0fb04a6deda142f5558bc55c81e2e8fdf83b8c5da7277800ff229961886408f50417c6b1254209fb76e3a99a400cb29a6f0f7db5f5ec6eb9686eae18284c38696adc8258966f9095c03ee4138fb7063188e983e00250f9fb43df2c62401ec014feb3bf694aa7ce176c055413efbf47bdddfbaad8ae87950d07c6260d7840e54db5970b55f57ecac783252bef93ba5fde5f60bd7ec0c061d2c2625478099c2e9ac432a66adeb61ab8d33d582c8b14fe7d453033774e3d4fa0f6e275e7505aef5ffb3e5c20b2d78320e0af2d67374c9a6e93b8d2bf202f9f2c6c3322a65ac4bd815b3ddb6c0681429a41a0ec6610f5420ae677a46f75c0c5a7f47a563e134a75d49d12a45a2f1c306c85d013104894a061d69dd083b0e62665e6b44a890231bc570ae1e067ce135d7b68ba326223e9e79679a2bd7630c6aef7f892296770c176ca32471baa0f96e29ad479a412d3168cdb95514e67f8870b6ca68aad9baa52b23355b87a892a53339e0a5287a612697361722124c3c74231b6fa4e64ed30bce6fdf9dcd7df0929a132cac0a1fb1397875eb96e7cb2644b49164272bac5ebb7cfbe7eee02a1989ff8fb76c094308c4c1eaa116539fa574f46bbd8597992c284110dd6a8e4334ac1c4402ef4624ae06fbd2192c24add0c4f2050044f8b8c90e01eb2677794c21b11f3da306bc507bef3d703156b3ba491242e165b194cb61908df61963be181e901961e301fc1c55c0563eaf1f833ccadd333b2c69f00621cea22de19c9c0c7c87a12e43a9d6c1111c95550ef1cef4a1f0a17b2ea35ce5d54a1603989827d5cf73fcc210f3dedb263c4c4aefa87ce0fec95e011ea3595727e58f5cac63dcb219fdef848256fd8a2465195113cb4000c15df5b0829c44d47fccd03912621583267ed0a42c8552c82f617e18490e62db31468244bd4f2a98756a4978b6bf2d8604f1ed14974523154e8210dac7cd41e7a71a11c7bec597223520bedf729dd128b6b8b6da6a38fd746fdd646d7fd26d59559a39c426274a2e6349cd2b47abc1d31cc1ab49588e9f1962c9ca14c3ecdde1ace601a620c598d174a53980f11190b1e72a0379a97580462581a0abe99511edc7f86cb3751df4c14909bdd359aa7f2efef9fcb59210ecf187db7054cc633c6530111917ba0e88ee96c56bf88f7dece1a6c964d91906187aeea2324d8cff0874744fd412bf2c3b2ce03f788b995d676dde0a5d972b20204e9f93f0cac29a1c82c08f7d944f67df044f9d189ff2aefae3a200931e57d7969c3857c8744648993bdb0f7c4277e43ed2ff628be73368f84d71fcee1d40b86e6130f75a4720534084fe652ba5cf803ed11e60f46376c6eda9ef73d3f45e18a93750ddb1a997a4c4316b102ff60f124131ed67f83b02a2901bbe5d7f7eff23fa2a9a134c35fcb1dac142dd32916de821de71c7056a1b8b04b5863f29b56e0de785c6d3349060cbb8592b780744eadead480f7a093abaa034039e87fed549d18a9fb4dce213033135bcd6c836452e62bed3e230e4fdfee0be386872ff72519aed89b9c60c73e9830e3d65816e86cd40274032e48f3d905235a0f902fa8378a5fc4ff1c74adc922362c7b1742c1a85454a11a5afee784f1afa8c55e14137d6d220a13783ff7e624e61fd5ebe6fb5aee39f9a7e63f5aa6d9487af18198dc637c5b2a972b86081bebc4ab6616d81e409602d69050aeb665022a0031f60607b1942f7259f6a5c42bdb427f50b209b2e6f9cb3ec350109924584400bcf9c51d30aa3348c604a496952eaee6c82c7521cf5a61cb956bdb67277024ee66245cc52af46dd45a882e653d9a3d86376689e19191dc5e281bf7942fc739904a5a4464abd495abc8a4a7b4e3531d894a49828ba830f7b2a67854ee3ed26de7adc9aa2f3043c282118c3a5ee648e03e7aebd55035a74006878352c1d784daeda2ec03e8fde0c6b6352b396a170f8276750ab3c9cf90fd34be26388c3151214822b0d893385865006241e949945576a5101cba3a88686d9031f32ae1001981172f51be1fa0fb0fff98ad5057dfbdfb4f81e209e3167aee61c5901647ec9e16c403963a976ff7ed789179a4111bb0ca3c41c4755bbda8600056c77dd74651eb20345b790153399ac9a49ae7a6843bbd85670e94d0899f51d20c52d88c894e015635b772a204a65de2249b6af758339076860dbcd904f1a750054eb726d0893541c1a0ddc4da5e3c26fb3c05d9031dbc657d9966f9c8221d2d03791a3cfe86e59657f5d2ba08f632aa2c8674f4ee2c941a4ce513ac80fbd4c0bfeb7555be85fbb10988ba8eb25c19586eadb23829a3c15025522310247068d0485322065b4766aa19b7f7b3d5471c9022525bd0852e82eb923dc39f936d2312a9b1611992ac81c33ae1eac36d11a007cf51d767f0983badeebccdd50c417958b5e69e9067b795791ca0e7b12e5825e1c8cd20f8f8f2948f1262aeec2820da3b2f11daeff1c0b9b86eaa0c5c0d513ed8fe68b84756bbce4e21abf81775ae0291a68c4eb9358424993f42e8a45f0ee30b3a79a3d7e0ca80e65da4ba904884b324bc67f0d0ab0417efe4020787859eecb742d5545885bce533d2efec919fa8856713b11d8391761a8b999cffdd7ab258e5b39d2f74dd6c402cef08c9b17afb43b92f3b2fe2108b4534918d76403fa677d931273baff0733ef199c0cb5477b00b33e2599e294bed8b63a8dad1f44861029fac9e0cec10d63f462ac373f2ec67887f56532900691b41cc8822e0d0309f4cf34bb4f2945f3889fd21b36451153c69a785168a325f60c2015372b9d0ed3332fbb16dc4f4913470e1e765285fbcd498c0288c0618549401e668c39b97ad51d131ec751bb2d15ad4a2ac50f0b597f1ce902dea4ddc1bbb7f31ac24199ee615d1cf3102d92d930a303319208942fb3480fb17d92b0c22797606d103c2c62b7fc6a185d160724de8414de591cf2a371c59e94f53dce18a3b8dea330f7b9151422f6616f243646885ea9b1815ef1e002b423fee6a85544014b17087927cd7501c655f284ac8b2d15e135e76ff4db53c02d79c38310fd606b0fef915a43aa909424f4a2bb6200e2a2177fcaad31ef580db7ffb79cc86bebf2a080923a59b3ec47b10cb2c81446f1dbf2838954299f3308a866e11d225e7831e15268f935364817292984107d92c9926581c7a88c0d3c2911c0f5618ad3020b171d216abaa7e48aeb4c43cb65576d1d72a676dbabb78af829e6791bd569f497407b217ec759c3dc735c110121369a696685fa5443b5a493c0b5cf6e858b4bdb52c4820a3515cf61fe14f5ddc63c89b1ece3fceb4483fed603b44e622415b8ad30367ca9d6806229013aaae6a86af97124f407b62842f7c30eb05f8f5ccbfcd02cde2ac03bd9d1df80a91de8e497bad5c311a647a71d4dbd15b86b3df46d39281c09e0c842a2694bfa7a7233763aa8c150a7da18c15657ef150daf007e6b6ab8ecd487707203881ad431394b532b2d6a5cce76a509baeeea07755759f57d97f7bf52fd057034f4c2bb6ee0feb192bde3063bc62337acb788654456878f12e1160c1dd0c78f576a06b37044ab92948b92d91586d29cec9b8c9386fe0d48835e14ef8137d8137a1ac52669897542e110f5b377c0472d4de35b0ffcb31c61b0479ceed34af591a8493e7c64adf1807c4c18460ba0562bc325d91317b9aee2532919b8a22bca484bf1da48d048d85a7e441dc3b7b00964902ae15a9863e6007992f451f8b4c18d5fbe6712e8e9e4164c5263f2b5b4b1f2568cac6299a3238e05fd14d342563154d4d38c68618836c33c91d80e7703307c3ecfbb23ef3a3573d17be39d95e920686f9e93b542279ee7f57eb185400089f06fc04803f0d66d2000a130eb738615978be196cd6460036fcd46e7cb13a6e7a2cf7f264ec2f718a81d28373608e4f3d93162945b749f5c654a17e8f48f402d16b3f9917f25603bee18bed2f8157e3cc861e51eef24d248df927ca9f025812e8d585ced4920b7333d64ff16a5e0b55c11a69030f9327187dcee0e8f00747934b18cd13dfe566e29a121ac3ee4a0f3d77730722f9ef107cac133d946e3aa8e1618ad6216c14d18ce263a6c02765655d8a44e023f0eb5b74a9b688846a4289535b5098ca9046a98f8acb363ea6f8f85bc964d153277bb00e70300f4a91d201b82b6a2438bdf53ad53e829511182855119dfd810157243cdfa129ff79437d4086758dc87eab8821198dca304687b0a13c4aadaca04f9201ad2461657d82e88ee990437749e5414f030ab39d02ef4c3100049ea9cfa5e8133bf81923ec0089c4fa5f936629be10bd7aac600935b74d5a5b4ffc2e4e8004d71e1a1ae09d20f6042b4f199bb81f67d5f342783ae65c802189ba50a4d56fc9e2f10784b2bd0dc7a94712d0e07cc8109d0424c870350f70d0b4e9db901b2f547ca29b33147527953b15a60666a99563095f9d51a1a16ad92df5afa433e8eae4083036d8c9cbc8cac8cb0d4207a509791a4ffea9e77cfd0ca2c80c1b307d85722020e1addfd1a76a1b6bc1d36e8c8188f28140713ab02f6503a4423290447701aef1cc3092ee966a1a80b72c084d7b942616e37e24756ac4b8ad58185c97fb91c4c508f1c40dba44685f998f2e8cb2caf1c53e94e8757ee7857154309c55202f082385251468d8eeffc2c9265653188f7b7d8edd549015ca7861abc8a39aea969f857da560f0044d400288941abbeb051009cd641d6215c64444824319e09e6a820efe369cb23dc5c1689154142ca9fe829c6708a4053206a183d05e1a64a00af38514aa4a020dd2d0fc67de4df208483110c6b789b1a336b9255f484b9ae7373830007b14630d98e62e0538b2ca81d0244a539baa554af240ea3c48f69afb77d148960dfb2249a031b4da992ca522d3ac7aafcdd137359ae13360c6153f7a9154b1a4d63006f630e30c415ed1677be0332f3475787e1aaf4413b8f8f8d3e336b8b3e4581e04db82df03646cbd95badd9d5b55c6a2560a10435ce153b10aab02b89197e0baee99c160459426e044214d6677788a6dc77b3334b6bfa3edbbec108bc57bc93ae8e7c109cbd59abd64cc4405238c0dfa2d38695d614bdb13991b3ed5dee77365d43e8d80f333d28c3e90aa0796a43626a0078df85cef4bd965273effbe24dbc055e1fc904bc12f858d89efa525f996e0c834641cd3e3c6514079a64a3282128aebab02d0dfad3799a4be3a567b98079f13f59f61e113c9a13a0a15e2a072c476e853500870bcf1dd5c45600dc695b24deb60580e424470f993d1d0d0bc06ad9aae309a7ba99e576128d06f80824dc342876dffd34b927fcc4e1600fa2784edc02567ae9d705cbad7928f42ce494831246362a5eca0651671429baa3e5980e5a7aa08f067e97995b446946a8fe5557f5af2121a170436ca78c2d3c0c249b77045e73f86443b4f16bf821755f06be4fdd6f39ea69df2a1e783a0048c8638129a3571a6f807b9220dd498c81b8a60ab230f272580c3bd681050019781124b601003804a1a429d0c3fdc2aa387a24bf777c0041c22b12314c40d6bf17613fb24fb90b163565c9d6d693f202e9e27aeb31302557b63b58585a44b137148699975124899e8e4ffc63b816d84e944e1c511a94d41ba1a005a8590382cd7480f687b0831a123c6b6ef5826f724d779b61ec358c05bd2cbe461d6806b03f26a2b5538aecae4249d4915077699e8fe9cf9270f6399fdab45032bc7ccf94a4a2cdfa044e29693986b3009f13f0eaca233913c08c98739b7b94aa1291fc859de5a9c70a1b00b3939f000d47d07b878c4709c605daf3ec63088f0452f8ba1d2accf17cd9c0833f018b6acfc0ab4936da582c993a254c5f327515a6511288bc4caa1a18c906449079300732da23a700fc4ab34f0c4d14384e125a5eac1460df8a1a76881c0ce19baea01e8572dc11cf6c44c2a0512abb19f0547c9c89a8dd3b839159bab96dd9cbc45d3db1b979397834c0471a7324e79290c91e3e0f98450097e6a89bffd3b4be69f08cfc2a7521152cd6100aa8b037ac907889a9bff6709a5818b8d27ef900dcc013cb1fb5322dbac92ed90c9ae7a8b8ad95e05c454b6c4e9f8a3ea3462eac6f6405278d63d3ecefd00f9a6dd3611b1b37967e92372a7311a1e12c89feabc6d66760747cd4a92ad2c1b2438ff1a6263bbcc1dae1aa25b74882af17ccf8f920026a82c6dc67321beafa9b28172a7e479c3291b83b906bd1ceafb1f85dfd125ccf17aae531e85bf2ef853bfa977e0032ecbf720d1dc108c677187a71d2b82120cc2e255b9ee47465072ee7a96ee78633ff45318bc5f74b456e1695c9a91ea1d0cea21e6d563585216b32cb891260b3ec48f056347b1b0963e2ca4b64ebc79dcb9ef9e8fbe3cef92ed8d3bea79fe63ceccc19993132130ce976e38261870d8c89ace59c03967b614e475ba0f756c9f63b8078a41a28fec2e808b5cb2c28e7633cd0008bc45e6c16a3585d5726889108df32066ed3da0ef2da96072b49f5acdc6deb88ae66c50e41ad2f93d38a3626cdb9e2e6716b93b2fdf4efdbae1525e760d75810ace82b090611e1a39831a4865ec4cc000679e963048463f3f3d6b82e1183eb0ec79bc53f871f0f8c2a5d901654a465e2e5f82c4f695c1abef2b4367a37439a641e3fa6cc1e5b05a1c2bc77d107765f616af771a9fae28a19257b7f605168e36d0a733cd92d2d88c88042e6b7c57d25c89635b3dd2faef00fcdd0ba7b3580cdb76edd73ba6938f716303a4bcafe2ba2a3837ea29c15d1792492675f72a84f81b18e5ba9b53e93d088ce604d36a4b5a62474d8dddc04a02c64df5ef81eba86240d7f329a675bf5fef9190066cbe3a7661e6abf01e305f35f6aaf90cf400dde72c6b17a1ee236c16be9dcc32c5459b41ac96438fb649f2de66feca6af8ac72c54e0f8e754f49f642a9bfd480afb26d4cb4e6f55475c8a4fe0849ca57c042fdc1cbe92d0da6f7244acf31e33c05cd19166c0c286d9ceacc648d95932c959f6c604521b5cad94b998f736a8c1e2c66b5f1d221867036dc92747ec4a42fbb42e52572983a4d92404806a75b3384a86d3a4c213495a6b31b42c3645a0f73ed1d869084b9f3065631bb14228b8295bf0a4ba4409cfcb4182693e363566a9052e73ce1f1c26900874da32538c7e8ab00c689cc43beeb3b7efe981faf7d6f32aa307e341151fd47e8afe748af0c16c3533285addf6a11b4eaba69b13619a96eb33871583377e0bf7dfbbd9ddd95b7a99d87e31bb4d968349136a54f108cfc2dd11fd14a9c25d63f4ea4c9c3620ffaea5ff578aefe5553b6276ee430b89e8deae478b117b24621598ba3acc55bd66298b5d90b126bd6f274d7500add0a55b4b964b56f222491aaf7719d517a93e6dfbf7e74744a7fafcb7117ea624bba55d1eb4fe43056cc05a1d763f76abeebf10f9eaf8989d4dede62baca6b465766d9da08068ea12b5ce821a21131d3232a0620cc1ce8eb25d50f65bce0a764b1a475e339c62c8382cd64ebd08404bdc5123af7ec2eefc4dd1b5a3131fa8b4d70816ad4f06980c4539f60478dbbc5a9a8632648491ce903e1aa2d1bf5bab991ae1f8ea412e5a850978e704876848322f1aac0e2ebf423848ed96cb6afddb47560420874a814279a047ce2cde9dd2693dd35aa32def5e020db3a90e1be74a11021fa1e50cb4e6ae2f45bcd52bf7d2ffe59de2a476707dbae7854804c9774c8631740c2c2ac62352b9da2e50867cd31e04beefb7848cc759d0fec1bf4641a8b129eed7cd52cabd377f25e30ac416b41f2c423b5d56327967539d0adfa581bddea253e53bdbae956db32d62c957534721bbb01a23462116f11cfc27bbbd2160678cf4f9e9b0c36ad5ca1b944180b3f3feb97fe76fbf61c27d59a9575fde038ea8034da4a265ddbf88c10d2b12dcaed69fc258bbf58404dce02386ad0c9f666888440397c5e83796d048fc29ec55e231dd4f64d04c849e896611bdb853691e83e9a0db94f88956934bf2ea1a002f88e0bfab65f9f2bc3dd642a6f5ba15d6251e14b4d21cf988d629093070567bcb1d139762c72eb2e42118fad6014acdb5b6dd86aa054511c1228ef836d0d14412a5e94d41930a5341b97207e0a4899e06a14b463fa78eccd29013e4f7bcb7053711fc3322f48729ad063ba8a53a9757427cf52d879476cebe0e4c1ba5ae85a910fece9433a7f9e327a50d4c9b599d659b12f051c04e0dd403bf7c8db9e3b66d29b8fd29587a34edef941f76d303887f90b8e9519080bc2883cd2a476363acc8888ea4ee5cbbc85e0a4e0608d3d46341c2068a9e694bb6c88687552f340080ba4eb464ae6b61b5a3a50725566b6e053b87c320ceccaaa5cf28a83f901e4d3012a1c85395f901211710e32741c7f99029157ff8044bad09481861459ca9eb18fdc710223b77a028b55a7531b8ebc28ead4e633a98bb7252081fe6e480400100000c64a00681ca6b9ea29b5a89b3dc23363130a0b8aaa053e35a1582f2d59b972cb9492048d0375039503a3d128dfd16814fef71c4ef899901336bdbc66beefca341f89affcbe04ff5899be86ae446d72e40895f2560b15bb230b5ff9e24c96b3753b5ce30d4c9f56b1628d0dc0044110e4801b100c9ffe78e3e36c3e92b3d96c369bcd6603822008822087fb0d08822008821cb2fb0d08822008821cd2fb0d08822008821c32f31b100441100439a4e63720088220087248fc1b1004411004c3f29260f9915b6e40093c108215ae1853ac186511cec00a0978be5c56a4c81df9725971b2435fd7e52d2bd6393aaff33a29a9b4724fb845447d0aa45a61f141229d4a89100024f220f1b178718f37c0b4bfaa08d0a666b989b1e84aa5ab1656f2961d6fd0ee1ecc78c378c37883d61d754ab14fec3c48e5403aa2ed30eff0ad9a26028284d75233b5adddbd630fb5bf767714d3eb6597081a3218fdfe9d3e80fdfe8c0459c9dadd9d92db05d3cbc022174c2e9472bfb356c068ad6f02dc5f82f70adecad80d5635c09e6af1f71475140eb0282b854c5d1a73c0224765a5148a8ab2d106f8fa7a7537f54cffb6a2dd3a5cddf900a1e606fcb026e375dca6ddcc6295060ec05414c295804b009f7df442c3186284ce07880fa2470727dc801fd664bc8edbb49b59acbaa4b81542f8f856eeba5a33d2c01809cd48038beebd328bd57b3d15ae1a67a87c24fbfabef227b16a358d722d473ec2b148dc99fd5b597447dd28fb1d995dd2a1ace4541ee23f16018b3ad21de1c82d54ff8e747b44e7ad2edb2bd1b5f028064050b1831064b8214ebc8dc6140a84c8010742e800772f2290b202438a0d2248714991410c29aa2c7a911b46129e01bbc03fc038801e240716b8c1dea800569e32d4cf21c3788255944e6cbe5c54a46435ac88c13517a47befc5004ed1028306aa88c397142ec822fc9808b8eb22a1b51cd6da7559a7a9a2f82f765d8364006457cb2694fa0db005fd589a061532aa0a18b88a1aee2e2a668043860337b2d8152ebadb1df396d6811b6bb83760dc0d7ba6c8516bc53015241512c8b2ec5e97142b2944405594b27865b00e70e3c9bb3a370baf5f2023e0febef62edc9d7742ae10dcafb934ed6e19ac06ce5b99762109ca758f27c018e6ee3e9ec09d069c0deaabec2a0f21a98c4cbf57da2b0b96d2ac5e79c55236bb36bba5ab6ddac6a5b8ced3548dc69b6a3a2f43a2c19f067f2d1fe891809b70d331997ed8ad90d371e261a3575a65464beaa555da6ce1e813241c5d4281e36c61a1916259d56039d1139a424bd4a42fe8091d514a4b60f4e51203333e352acac7f4d8f0d8f0e0e0c1913d367a04f81e1c3c38f0d80039f1b03c3646d5a8aa281ee30d6c4d6b9ee7799ee7a9b55aa7d3e9740a599c13ce8883c239119e214cc8ba44f4a37c848658229767e5f1b4da414820271e96c78667f595509ed5c7fcccf8b47c529f97cfca47e563862c1fa1a15135e218cf1f8d3197148dabb146837a545d224e3e4243f7622c8affdfd9bfa6354fad959d58143bb496d62a3dfb98570f654ff74329c2582c4f200fe5a128e65f090b593e8285ac90350a59212b647d250fe9af8472cf7abd21ab7a563e526fc8f2ac425687843ba4b243ea9044c4937f4c1fa928176351fcff88270f196dc022cf6a851fe459e513b41f553ee2aa8b45f11f041a551d9287d0cc66ead4b1aabde8c3e21bf58fcae7d3c2bde883127d52b9459f97edf3a2cf89d6bfd9b34201739f91e188034657a276d865316b9bbabd99fb1d520bd53b4135d660b4c18f35fe44168984e38b44ee450f96a22b1a551ff3635e2464a496339bb19a79d187e5bdf327041709e1f77f66a005d87cbfc8c7bc0c805ff4f8459f97dc9f95fc313f2a3d02fc7b6f0e496da301a00f929eb3744dd814cfd3d9725a5d163ec51f81468d8d32aa51b9bfa29c6e0b4689a957815a95433400f43d1247a67fafd6eeb56298ad98b55976af965d4ddb368eeb36aeeb3c2f93d178198d06e3ef03f107829b4d1872381d1e1ea2f8e103887bdfc3a3bba4482453904b7eb8f7127103df47f1907bef7df1d421f988f6f7be9600ff5244ebf78f37b0ed904aaed0a378488b1d94dc2f9e3aa4cfaa9ad017aa498675e934a1e4cb65858c4c79902f170fbce04ce05f197cce3d122788e30d91f49487d01f7580455b66da58db0e2e12423cfd2d075a008fa7bfc1f488cdd3e7463e721263fcf0f439928f9c8cf031dc50074a8fe0a0e04a3d227cfadbe9239d3f814103e2e371159fbe485e0ff99e7a24fa7bf259174746c39fbb388de3bc29c76919eba94b04fd3107f812d19ff1c88ee49ec3ba26b7e76cd7a4f65c46cb64dd476ab9433a8d0ea10fa2fb2047f203b7b9ddddf4ea2cb329b3dce9ef37cf651e898dedcd47dafc91580e41d24bc407b284e1f90e793fd20d79fe836ce1ba44b0f0c2287f3ce7214fc432c6b7f9b2fc7ef3105092348f24cd9bb1141bd41fe919041983ec9027319e7c8efcefffc9e7c8ffc8bb29471286f82146203b1f20ca0f62e9d1ff919d37e4498c2fd4f1dc478a1f89035899951f28f8f7a770bf7ec9153a31e16597978798b8e52a5f6fe25f1f2b6154922b632a587206b66577a8dd4b3c546bada1c6300cc342d65a6b6d28cbb22ccb4ab210467ac94bab559b6d9ee7e944477474a1ca31068b70c99681d125869524b634c997f7614236c99757c256923e46d21e7225af50e92a0fa1ef2f78ed4ecd9823478eaccb81455c7328172e70a12a01e7e2e2858b12105cb83851b5c0d1a207390294b698d182064a69b7d3f01970a30f68535a2d405b985a6cc063c08da7bda61ad5a4a294b69b7098606aad983dc1e224cbb2abbd48d9b68deb58b0b090e1795e26c382c665f18259d8e06ce0c61dc206790546482a185ec082129ce0c1ce502181a6692e2c78c85bbe5c5ae880c6064ca34a8b103abce0010428cc1c6680a11204d3084c2b27d5c5d402938ccf2af7fbc94b8eb26a95d78a61d66698b55976afedb27b356ddbb84edb368eeb3a8feb3acfcb9817eb42b574deb9baa4c84720df09d5669bce463959a893ea4457a8a945db2ba6c1f7af4b8abe745fcb22cb01b26c3356c5978ce1cea20ac41a5e3c8927f1249ec41a596cd1c493c8d223b29bab671db769dfa6eba0e4fe2b8c094fc73c4e8933e2903c0e0ae744d8124f9f8c0eca57fa5e3e0f15b242981026dc41189343981e017eb8833087108673223c43180f058a2d1eaaa32bb942212b64852cadf5a97c26c7ec87fa56be93fd5a3e96cf0c599e0d2fc64359f34bf952be0e7c2af94be911e07f1df8527c291fcb67fa5258d66ec4f0ac5fc95a6bad5bd334cdaff495bed257fa4a5fe92bb557c34b39e6b5bc95c7f24e0fc6537da50dc5a6f231bd17efc573f16a64efa54780efb9782ff05e3c9407e3a5bc97cf5a6bedc70c3f9387f26c782beff460bc94f7e281e84aae9087f211cf0ae4a1fce379280fe5a13c9487f2506dadb5d66e27b69163e7666e285be9dc4c5bca46f2507686b5d65a8b9dd65aabc568315a8eed44d6627a04f85a0e8d072d664bd9465acc7972b4d6866243d94c5bca36d262b496d63acff33ccfb3d379a9dc2557e8637e4cad05d25ae7799ee7799ee7799ea7d6d25a5a4b6b692dadd5a7d3e974b2d65a6badb5d65a6badb5d65a6badb5d6dacbbed893d6f2c480a0c0461ed3aa58151b02cb92ad0d819dc1aad817bb62553e276cd4b18dcef33ccff3b4a69d615b6ccabed815ab624d6b8ad86814a22bb9427654e1f33ccff33ccff33ccfd39a3e829d40a635b1915bd39ad6b4a635ad69cdf69aa1501e1c1e966320289e16c808840472e239adf9091cc01c0d21784083ab8101fc0267f97269b1d28309e0aa32710603832f804b58460f300b1b32b0d0010525be412011110d0a7e2fc6b5d32971c2890918fa4b38c6038eb6e6c304ecdbcb0f13ead327a94f2fda8e00ffebe90b8e8512d8f797a8252a6dbf6a86c45f01dc0522eab87c95715c4be7b185c716bea8e644d3ace15a72971a12a81281aaeca541fda8767a615896654426394335a83f7baa4b0d69a421d111a7d1a906fd0a502f59aa47d0a8b5037be1387b0277452bfcbd14c3be84662b1468681c02be8f804bfb4c4391ed6727b27dbb51bb75dbcddded566bad76c3300cc3ec66adb5d6da6d8cc1a2ccc45ad995365b67cb0923d191b59f65b594addd9edb606c65f96182f6d99368992adbcfec9be4047825b2127bff2bd7152aa99b729d5106664025654baf6a6d7d5b5a6bed28032fa092b20af6b5d71e02ad8c91bcee41982ac947c20e8fd0e4b142253d0af6ae92c84d48f291d6bc4729c29aef20e5ae24f2c39f7b93d0467ef873de24a641e288862ecfa3e5e11d5f427b901b1b1b568334aaad927ca4fbf210fc26369a0e8f6483c30502f5773cd79df54a36385c21fd9a1a5c21ee5d863b3cf0375f3b9ec33c7ea3a941b2816950bf47a9e9e8f8cdea12d1df516a542534c479aebb91079c79ea79b43e50a8cff914ea73b6afef650a9ce74a17b8e7f473480db901117a8c44c0fe22aec5f98dca4738df22315327fbbfd7a47c44e523dc37fe284537630ca214392b8bb8ac65ad7d8fb265bfa36c9938a5fd90146d58b9b3c8572029daac3e11d7f2338bb8d6e6ccfd198f566e31fbcede2b551ea291aef290cc66ff3660ffacfa97d09d91f6429b602f5093ce3429f8d1d5fd2bc02b38bd244a3347697dce9d52ae72176daf2d4cdfbd1237b3d0e511ee2af7d575b6ea08453d75b1407b70d5490cef1e234f62f8500cee63546f65a5b750284fd5f0914d2b69a892347bd6d455957acd881ec0a164362041cec0fef54d9078132446a3d3c934356f82c49b781358bbb20f7c8b8880401f29dccfbe44748cefadcd55cf4b10904ea7499ce42a29bd445c6f922f76cbcc84bdb00f12fa2a5cdf4f4b933fc1fd4e925cb9ebabe0e40cec98a47effe69950cb1e32e7fda547726fbf7f5f2f5413ef0c86a33d644e83fd79b25824b4528fa46f7b248edd23a9e40cfc594473468265fb9c86e4ca57f981bd0ad75f2619f348eca5099492a8a411d4d6ceb191000020010317000028180c0a84a23c4b8118c914f514000a557a48686c44980c24a91cc4911043920601430c20060800c0cc88cc182300491f2fb72e5684bc691700b6faa88461da6dd7bd20e836e6704188688f99453b497b23774ddaedee7baea6d8223aaf936b92686f72069eed618d4e7053615fdd41fb991f8e26a333def210448cce7e41e3f3a2f9e9e9433794ddb89de3cc507a4b78272bab93555b3f06de8bbf7b1842e6f9787a8dc1a87425c31023e4f372851c197d2fd9479e85033b93f7bb3a719c2061d115916e79d5783c6eb9c12f1f06b32018662e71f6afcdd97333a7b059e806ce60500cf7cbd0e26a1b143f67dddd1e156bf1eb793a21e31dfe16a2f29fb3173db7d49eb1f654f0c4e8b9bbf6a6cee82b78aa494ba859497b34e220671ad36a6fe8404f8bb2b5528e5099f0bd32446beb8cc4cb7cec56bf4a0f472947f4c77c4ee50fc539dd1922a88687be2a63f7a8a2b83046e0bc1280a8d1f1260adb438708b7e1535fd5d6cd0514bf6e2129636a1c5be7cfc8f88039032f8683ab9952fa063664399416bdbedeb1a9f2cf63990a4c2228e16fdcb18c0dc0cddb51ccf9ad9a124aa8ca6e3dc8a7b7a748f105c531fd0562629b7f373058d3608b4e8bd2c5b1d312692b8f95873b133032cf0932ea606456d5b14cfdf3a0c2a3d11ac87a40cbe3c0faae5798d7b0d80ef4c3bbeeb8a24b547d6ef23ecaedd0d8f916cda27c7f50ea26669f3a1513dfb383a963a0c63f30b25497853b1cf6c130bbd0acdb8a8014fd0638f7df931c8a76147415c50ee8f7cd6ada0d87a25dc318ee7035d16f6d64f073f064c1b49a2585773c3ac5f7861feec4b0bd84da14001e9c967adfaa7fe41bff03a5642c3a3b5c8ddc96fa736e235b522bc7503d27940437bc45138d2d40b0e8e3b63e050f0cf918fb061657960773074fdd6ea5f85260e66ca1e78745dd6f0264c1dca07dbeb0199bc0e98bded622d55e1dc5e7881e101090d284aaa52a51281b60435f5d927b93e8892e3b12242bc4d20d46f434f7175a273824cf2b0144342fc66f5ebd30738208210f10a279a5eed4ee70f31508f1a45c1088ce15f24d75849f9720e12bfa48037f68def8e0fb9896934dc7bc8dafb6f27e305163bb42746021bfb95048184717281e0a25023a002bcc7ffd3fae06f4c0d582266085c24fdae53359287b0cee87dad345a1a3e8cd864feb008fa3a3c65114392d9c13de346a7ba7b36a313e07d3b4f222370d907b654e78593c19df726916ac985273c64f3aeec53e748214bf08cd796d6896dfdf59a78f3c4c8132c923f78401e1659cd95b135e4c16ad8239cb5547512b84547c66228a33ba1f6d7a8ad84a4d94953b004220391352a9bdef9354dd050a4ca60caccc7084e99115a23afbbec05994cb5785f024ad6b835dad3d9329ce24e55851aa7b851ef40ea7e026d9b9c4cad5416d3134ac707a609b954fd84a85a0d800a26b074ea7d0592436b94bfc8fa7e698f610f3018c73aea644fa5e6e930acfd80a704fa449faa4a8d94aea39d470175922cd8175da1403d69f27224b3cc1250122ad40e29ce77620cb64ad7568a5a7068b0e0706bc11ab23be21366490a58c09f173e835c79f4934b9142869a0f1579d21f791f5bc2cc4925a5db000c35ed9d20431f8705386ae934e616b3fb0bd8ceb05ffc35a594599015656c0ac1c04d2abb04b73a01520b0bfdb65357f2a6608c5b8e8b0ff9e7fa92619ff2bc0f13e5a902c81706f377ee2353671577d9ec0b03178a68cb52760236e40a61620b90eb488e383314311a828b85174606566caa71ae321a92e4d9949e2c44c64eb3911636e15611386481eb558cfa4b2576d1d6809e7c654e874601b352279859a12051160604872ac01edb862ca324f9009a388d09dabad9fa96d4cc914aad7381dd67fc6b1d8d41bc111c41f4a10c8751a702ea3ce9360421da2a18fe70482dcda1c41349681e5f4635d1da081a68797c928350c2cef36b16498c6c11b03e959220a3795ebb5bd2b6d6a0989f742750a148d7c700c7e54ba67bcf01041148a3e747062f6e906969642b8fb98a272b8e3235270c13574ba0251ac09405dc78d715b11108eece579f0f147043ae9504eab57af638036b6fd4b3bbfe993ef227120dd15112638ba99f2fd51a73506ba87e4666683b7b3912561573dae09e129b1cfa1cf2b08ce3c8561f598936843e5af019bbad902fe2ec988fe2e08100c4ea451d5f1f951cfa17ea88d63599fd26b7c845ead22dbe4cb77e8dd000494aaa001aaa2eb2d993ba98e580438850563d9355bfcb896a4784b899ab620ddf223d7245a2c459bfc50294213c33ab2995a5acb67b9dd147850a53b06aa22fb3d7d875c135bdcef39c732e66cc42c0fa4f04e93fb36d9a493c669800141f04b7489d632fa887f456c8ae87a93adadf8a1834e89e3316439f50cbb19f39ea071ef2c742cc5f2cba77298b8923ab45d2b6e06c2c9e411976547caf18f67f70b42a18f47fb1d0c562999a5a7b4d80915cb8ffe09fcd7b63a29749ff56666a5c764ff8467efe2c4e90acf8177c99e81cf9e1bb00c7d2622521b2022143d96880cf5485387e03cef74117e0bb1daf78844a2dcc3e9f071a9cd35128634dd151606636cb67f614128d392762015223fdc84f4d886e5615bd593a887ce00e91d8bd8c6ffd2366d8d1da08d18475ff72da5c2c024ae8d71c65a92333570fe51f4c59fc0a3e5849dd72d06b750eb2097f4da78a77004ce92ac2bf600265f08cb777ed873921f6d86257a322ef7e910eef0e2cf4288ab44cb29f2a64bec750a483f441b2c4e6afe6a6e6bf73f3ecf171161df1e1246146f5ab563534d783d80220c5307117597cb31d2119f8488996c4bddb23b915cfc01d43a25ec63b71c4f18905e290f0e33e84b18e3a04efd124ed253cd3ebf991706954276db9a5c16b770db2817f8c61ffde9c72a8293205b64c2dec27f824129b55186b299d6c5cf77228cb63d46c5948e125bccfaf8373b3f7f0d6d9779c1383434793e1412252a6c805f4a831655d48c13c9d205f56383675fcab42e117ae5e950ec8d137633b0808c85480d88597d1c5494b3899a593a6dc5128242a234a197129d90cfd9de143a608dde5515bbc6617908c0cefb7994a11cb1444810bc5d49d90dc9a96cad9a462147f96d690cad42e93109adaa7d4268c3d2bf466411b77c0e8cf3047be80ce948e65411e89f7ff5f91bdc66ab01a3bb59d3f8b7b70c4de04abe066f1142e4dbbfd80c7ad9dbc651a915f5aa122a113e5033a297a2757a4b8875ce109dac1eeab66a5bc6e6835a2ac5a71472247defc2ed56cb28de9fbf560c44bc7a41a3b4742c35f82f0aaa84d1d6aa69a83aff517c250289940811bce467d32be61e20cfad7d581e555bbaaaaa0e0d577191ff15f0e67965c4db10391551d0289b5264f4085e7bf6b3a61361870d78f6e32598a283422d213d1417feab554ff14a8f0f24765f6a242ece08a583a6c30b3c26181af6af02f0de9be553393de5fc9de1f4e5a41ea91e45a57d6dda55fb7823b98b144054428773101402605bb4d9e216a9c605c46e6e0a4f045ab56cdb162d3d8307753a2e52b30c1a3da121df02c305b1558370daf754c40b467602e0ac0e55f34453a9bc3daa16ceb1864801db002daf7ff318eac8ad724a8d1a402c2e0f89fba7b0f47e474df0ac575ac7a37d21a29a18ba4ebfa8f02c61d561bf21e568c62df944a7fb3817d6c8a393662d14b91bfc7c5fe29d4a78daed2d4cd9b713b736d3fe0599544c0a3b9f093d61e7b53e41ba5c516147509e1325c0242a153dda3c11bd8f94a814a53090452911df04f588f08c818c6201ac486e099955481ae263f76ca48de79533e816a71aa0728047e3ecf1443babe31ccabc77612e6d096f645331001f29ef25c3f74f24adaf3d5e2a887ae210878af3f195c1566aab247af3d750a9444c2edeece80f79dc48418385956e020cc4e401ed9e0b675223f15b1a1b083b392954d225ff5ddf3a83ff31cd24c1920a26ea43c52b7721903b78adc9a554334560e59a3bc9e5491950695786744042f43a24f49e668bd320aec1a572fe67fe70696f6a521b101a6737e20b32a87017202c452005930fb43aadf14f32d9de679c528c1647a1bb4b93d6eef0511db3fc30781b280926a5c63e2d5b67f734fb4d01adb6b6f63ecd916cf5960006c2629f6be4294c56acd5e32dd7c925c183a87daa69997e41cee27d8b4f7719bd4ff0a96172136462a56b7beb011554320f9532534ad63c26fc781c174d292316b4083ce57082e05e5822aae63adeefdaae2625c803b6c2f8836522dd490137785cbe46c879f0af02dfa478d1767ed3c78bb6234370e6539c4e6f638d2f1f8ec00066ff63e9f32c78ed03d2e5047990a9d5991606f3393df857ced5f06520904356a00d37809fd9f5a6f8e8f9ad3ca332015374c0ce728342aa0bc64c8f825861d4ba4016b6205b9177a88d398ad4e30053162b8c292b91ebe48480fdc77b89f01264d63a84f6913c12d119f54b3687a6aec9a81ff14ba239f8ba93a5eac0974fe995c2ba94dc4a335c0e0cce8eaecd1cb749489a753dff0f962df5956e9f655225649c3282fafe93aa01c3e9b31bf10b053325aa5627e47f529bef171b67b836317f1d0aa217f27c9b48b04da7f79756e570444f9513eb46dab62c13cc6c9656e713c3a42f0e0352cad188fc2f5cf428527a6208c9fcc52873564815a276921489fcaf5eb62ff1b6712a15327ec2b89157303fbe300ba5c78d8dc7b5da388ebecf47dd0d65fa871e911c42375573cb227fafe9b18901449068e10cb39b6ce7f3e5bdf83b3920844b39eef3c949ae38ac600a94cb3250f29cac4b1b9f07876884a5336439d248d842fc04158835fecb379c2daa2f3a50a066692fe65c9530b498b8511c5b63bc66c981d068d7f646deff11c9e20ed5a9cf0cd4f72642300c653f57bb85ffcc56a8da53342fb99e9e0cacf1b612b4eb6bfce416adbcde62b42fd660fb72d10cb8b681ff1ccd51fdef17081f0d3970d10f3513b2e5929c54c74472ac8a1157c14d08d94d2a36380a8c5c43339e3921f57c3e61c799120fb9468b59e3d341eef7df1ee96aa350440995369a4d6af930314fb458c923562ad0cb013dd36c60c824f41a64784416e782c2f275e6e687086add3551d73c11109a47c512314444d552ea6a26023ae801a97ababc206b6f283f535277aa682c72096c6eec1301c983522772d660226c19c7d4dfc660b3a5983ece6a3573f313efda17c1ed706fe0d992be959db8538a3e8c95bb7d001635ed493fd6014dddfc8191a37f8ba6d24cc4972b0333e551bc493de5e879274e55b4fced792cb59e57e7171029818ee91732ad8bd10604317a71f3f21f084878734e02a3d1f045e68210284a68b32382101f88741205871dfd6de80c5123db11a785b11dcad68e64225c18b1657604c460943e69b2526407ae36ec6d40dabc661c63476297a4a5ba24c2e33f7efc0bb21d896f12da20e988a48dc6787c762cf3d3098bce4a72e525328c1bcd0c423a7f9149411842a15ac8c4b1e2a6767eb57396d54a10aff758f1921d1d43170db942d4ab803a8e5c041aca61abbabac72a2fecc70acffd5d6cd06544068b0128dce0d1341053c8a6fade8be59f8b4958453401271b9b4b0c8fa07c4054df9c95c0235bc48b1a0a7525cd283071c8e5767edb5699edda7df621ebbdcc5024b94e0d1657d1f347479e21abb4af517c62eb792d7bc73fda850f754dcb8315585bccf9aba8f800751abd6896ad41282750b6c229e114d48d742b0677ba112a8d2bdc8961f8d174f8e303717c59a239887ad4e789cbc6f043e8a00a570a150fc5002c342039ec6eb28767987187c12d4b9764e7a1cbd2afc5b9a25f4df07f7e6ded9fd735969bc9000c0ec8fc1a25f8345e1bb207f431e38226c9f9e1e3c197bd06839df6c4b451eedd2798f6e85db4afa76a11804ad19e40a97bfe5999f64089fce9594ea64de9eb8726ed135baa2ac9745695a9bc310ded815d9e92825294d385f4d5abceb40fbe79b891dc21a95e1aa3e3d17ec25f2723322946cb4b643116923108e8f4e52685046c3ad5d6122197ddb2f3da5fc3732560ea79a962c512973a2343a23d075caa409c2971df8362ee06da5ee98be4e115ca682c297264f6120bb77892cc864822b61e68bc53d9be138805a9f557d396653f0457ab116762a48b7e7fd8cc98b6af88a38627332fc0f6af8c21346fa330ab6d61512d1ca5a930bfb189be642e5f5a6a90d454db6fa081aafdc13f37f6d6a6e3190248b40209fe3cf385695fbaef30e593bf7c046633059f1b8219ddb110acec2b8dc2202b3b7485d97032d4a709f1e0dabbd240c1a101836db8dbaabf03c440cc9b811cb80674d41b90917240ab9f7569bec4d587a93c70810b0de12429802654d067853cc52a798786f247d3f28f2fe68fcff181f646d9deadec61b586334c2a944cef1923e0f69750e5d0e0f6f05cd6c03382a316c652ae17522288f0d385ebef0efd48be0c022e4154ebf446ccba89313f4c7e4c379250950ef04021a342ebc2917ced330c264339825b2ac2771c7a1b0699fbfe805a57e9d7196458aa7415c21c27814876cf9c137a4240885a6c1f288d0802ba2ec488702a9b93532121dbbfaf96e601291fc6e97b9df120a37e2d0639439f779ad757ac5ee6091f2a271cdc25c3f23cd146b88e535e2527171da5cc17a9e22357e40b4257c9f1467b1bc0c364c8c50cdde82a8124d744c7270c7ff98b0a8626330701387cebe40d4b3018715bb583be0cbdd7f3cfc5d58944acfe6790a487796012df7c83fb56c663dd0cc356722119170cad25c252321db862c4b405e9262505d6b806d9d3761fcbcb4a4d349d2f5d9b2b55c4fced206c2fb99418316d1147d49fc648a35b317d7beb169175d619ec55d0d8401f988c4dfedc4e8c18abebaf931b2862b5ce516a7aae5705e87bf5875ecad4408e7acee9f107b89ea120ef85fd8567cf518b50ea563c1774f103b13e9007a19770620b683f35b702ee788ef4e7274719eb74394afd63e6364a0a729bd71ed81083281750c7ea9243554a18f45950786853bda34d054b2b4a3dad1c4ed64df9eb0b37a672cec00535895e8b666dda4993e339dcc45a014eaf5b38a572e2b86a8cf36a22e7eba39cc6d780faf7fd25b80362c5687edeeae7d1e51f0e1b08370f779a4bee82f7ca65904bfa236d67f7607451033fda36c47f5a729a2ffbfdd6e7931b734fe53b3a02e9243f78c98a9c370c09719c4c1005db08265db39ae07da68e3dcd26f28d99c4e4e9172d584af35d79b2dfc479c98c4f36d33c879f6783230606c2de340f5545c3d72593cc44a7b9fd88332e39dfffdfe57d69dda5928fed9ed37a7683de37385939fe78109d55506a2cad49b97226eaa21a300589e64d24e5eba95a30d4dbc22d0cdcfcfb2d22d3112827cb49a0d3731edc955e09aba04758ac24b1fa2fd19097eca1c2ecd62be38ad0f7cf15c4f79eab4575b9148e6fa81caac9720cdf5a4ce9bd114c21921533b96437d9342020a57caa471819f545b2825a7b210edd4bf3b1cd946832f13c502a714ea4c9f2d0bbe58cf9507e237aea0c8b4cf71915cbc04d3bb72fd1b728cef875937fabddd8645f1662323745b6ab248ab725e8b8c2c4be7e266b3544dd42d60fefb65550b697cdc25ebb218b1f94f6da7de3645d04d94e3e8a7d0d07ae9f8b78dce8d91f9e5b9af2791cef685b37e603f7de2dce8a79c3f45219b497fc21be54074e65beaaeea3ced981e3ce1db22f4b994a8cb21e577fa0704854eb416bc1b3887ecc84d30507af4bcedb2e31f0bbe8a8f122d7cf3a347feaea4f85817af0776c0bc6c08794a56d0df762caee23e91d5352f69749d12127495750523947dbc4ca9c58614d6e8655c90ef3d240eca521b1972fc58e0f3d38b73f305f5610d2f1621e50b7da66edd26a62139773b2695b2d5ffa30a4a5108c8ce03227bcbded52d715789c627f674cb1ceccbaebdfd5ee6b8e6a87076239b44b81b55dfcadc46ada99327e1a4232f6e462058b15396ac9f36dfbeb91a8b91e2f072e54bd304cc3baccdfa59e730291a36b34f2e430f8e46b4ab1ac8fa7e98be7ac87d52482d3d47e172ef3159c08f2c34035ebfc14f33e4cfc3aef444f001346df70368f3f51eb32a9ad2803db92f0adedab40406aac142f349719384b835cf18f7d771e369f0c5b9bdf2ea590bada213fa3d49f0bcac63f16e449f76cf190ff2fb3f5457329bb4596c4c91bd182749980365ddab015a9b48991a12997995486c9104e3ececc7584301f9b1f44e0fe2614128142d7ca4f8efd32ad84fdc3ac5a92c80f640f8504b5228955fd055bbacc0e4c38ea4d580593ebd9fb41d6daaa5454eddcf190e0a5cc147a361bc8112672487654a95b99c90d94a0143ef4b2bb947e088c5cf1ce6ea0117ef8b8e1813373268e6a3f91a5c4cc148b18a2f2344636ba15f19bb3e651418e9fb1b80eda22f007a6b148ffb43332731a6ef8488d45037c7e6d3789cf8238f79cf847366b134dd61f13cd8272d013bde14035d81b8495297ecefe50be56f60f21cc1211d17e105727e39ffa42e95ef93fc86731a49aed7c30d1ccb05543cb87303a66a8c0e10f360d20242ec7f629df6b04b6a03668b46b6ad2a2b12b9519b58b50955b6a7cc56c574fef63690af4c5058ab597d3aebb7ebb09aaa25ce5bc097443cb09162be0dc655c83c96c1d4d3415c83d7a5e654ddf00bd860bd311c99178ed530b66537f61982caa00d0b460f85d4b4799bc58e2d12818a17693920413c59060db7afafa101e1945f8fa1e210a940438d8120a46771797a25490cb0ebbc0860bc20c1701e66f31bcbc5ca191a1133361389801bd47f7aa4d425966545d1adbc3834ea4a50f7e89b9a129e88dd00ce8a0234af2695b1431ecbcec8e0c54b0d02d4bf2c6bfa785990de447fed50dd7357c168a903b7670023ed50e25dd90ad9d00f456fa5e2fe5a7d9681b13aa512f63b7d239545257b438941fb2a8f3a88faf62d9f3b9ee6ec42d449a9b9d2689c343e1390c77bb373d01a546a4f6ea0693e49d7bbf413a8b7726804a147491bcfc2a4b05e1843733ca6a311e1dfe1ba3e26e0b2bee7ca4e6fa0ed1ceee4f809d355b8e57e4110b4a5fc48444964da2735a86bce039886f996f7617bdebf9b91dce98142da0397c9f71188b5faba09e07564c5160afd8b5f0f1c6f2c4297886a1067dd708202b9867cc38fa868695714ce947aef9ecd4edc55a097fa89a70675458860c09f5a4662922c2220fa94b5ae173353a3012a8e55be44c9b8762bb711317d9e8ab3ac6297949e53891e9ee0a37ab5739d0b2b532c5a49616682158191cd24f3dbdb45561d4716278907b4c953406b40995a13214454e91ed8d02bd5d830416566f43c7f3ef7e861d5fdcd516b9bcc7a34e09eb4843fda0723acc20701f0a8b62fe8051468499847e20ab31c52430ab4cb6293a9665196b9690de3bfb6c4c6a743179874d30d52bd925bc191ca14949edd3fdbaa65893cf5207a793307ff6eb58afb5fbbe86209f4a36555294559c1d89128278611f678e83816c8aaca475f4da3003006445a268f5192f6da2a69b814cdd510209d517c401151df0d29752bcb6784fd51568426950e4413a9ef04c88269e3b3fb2f9cae43a19c6a70b00d22b2a62867d11a55df63e30f66493e28642ae1dea1e3a98e5652d2606e58c2ca1fda0334b2db62011d83c30b33e3b6d76ca6dd13630741507c88d157ad40388c7c8ffc8372cd0da21c914be34b3815c41d1a98ddcd5607a6fc3d100a4f8d0f2dfc05e30d49c8b94f28968c7cb811a838a61ed788a0efffbdc221c8db7f40e7d77e36a6d651e20fd713761dfb9a4bfceef6dd2803e575e65a2630befd08a45db72af045a2d2039076a1623708c418b787470530ea5f56bafc869bb80602cf47d13e12e2ccf8284dd63af9127a29bbdb633797046dcab4982b490e2856f2fa471ced52def36dfc3de42a3471bdf2f1aa8c0f93dec8f6cb25b4ffb195d1b313d8ae14e46d231fa5c6bc84e2cb1f14186c00d48398a3ee1d4ef0cf941edcc593412725c6ff714050ea6b1e7e015f5d1267c1b456e0a6f9d2741ce54115b8fa0645625d4a37554f6d168e243c2211fac56b4c295bb04695601f8b26b3e941be1d991901dbf390d62afbaf62da7158359566207a530071f4a039eda3785c183be8d248de33d243101a5d47ebee8bc372da48a68ed0c30af1c283884aa7654386478fade90dcf926267d63fa193e9a10191e1c17eafa3cc081afd5c418ecc2d77ef3e5666b8b818b36638450e79c8a43201330a216059824831f3c097ba91471ea2cdf9667cd5b8236a65d0fe6cbbb09e5858244a78bc39da6b6cf05063ff73b23d8316a4a83dee7dd221659212dee9124a70aca9eb83bd597f5e048a95ea787c5956a2bf82be0518b918703042e92fbf41b2abaad8680ae6252b3190535b17775ff07fd360dec87ea4fb15c402f592dff478ae6b85c58275d2dfd078f725b4c8ac8857a1194c30f71bf826267e83cbc874825ff01098c2c6e8ecb873ac8d4f21770667e169f25e7a37db442ee47bc981f542cde61ffa00942e013cd911b35f865c310911167a3620d58415c9ceca5d861b0952ebd37a35ddde671a7b68f46f923fe5d7edc306e072858448a9dd18b01da056e3d75bfafbc249daff4b6e0293fd600b0b47d2b3a72c7dde7d63b91b4d5e26b4279c440b7368949d7c46a1b8a78ed7acad3a90ee12bc41b970745d0bf286d8652ef26b15a49af5603b2e96f8dcfa77a1c9f5fef21217ffefdd246ea6954449d829071c90a2e096f2a1e840b8be8da989bb81fcd29037400eaaefc5e60c5f13bbc43f7ab673e75c9918c477736b7b6b3bd3c9591f7177c4fd1fbe4428347713e3b7d15e5546669428ee51f3e9763649f9402b4220a69ccb15068ca72f02e3f3dfc899da8990ba4804f47f104dd648e38f5e4b44ff5f7a4c4d49a749f6c4ca60a86cc33c157f94b8abcb8760f78350a2b71a00e7755f993ec47c5ed0ece673ff4f149bf1138073c6fb0650614ef95e4b0b769fbee3442971d7c559a41dbdeff5971609f462c48385a390d5162d2dd2947446886d35048db861e29283257ab55c80eaaa78555b72cf2b0b73bc0e9c1756a387e8b264190309b6d971f74865a8041ac47346301c9046394275791c9924eecba2aaf731c79f3dfbe7ef637d8505819528dedf0808483c02d59e85ab8daf288bb8e40077591d8e4b10f6486ad781988ddd22e1c5d3985e63c20a90177dc3b3aa64337cb285a9c5bbc70b979e09243d34bc605a2af5ff88f1f16332021dd0a2e9cd5f6c413b2e97c9bd0a3abf84dc839994d4e9eeabc399f6ad88d6c0c1781576e5393b42127bc13e6168ed29d0e5d04d4450b8a97e095cf1c5419813a40ca982b62c8383a4667c6fe082ed84876f7cf2012a3868435bcfabef2d287821af59c445fcee0c90b66ec4ca7edc694e949246e9d8b62d1d67da089263b710024bddca7e36734bbd11855bcc5d5451e77ac6ad545f2379f42de91edcfbc09c77a23f5d43d458023d19c3da4095a354ec79465eb66cf6948a33089bb728aa2acb892517adb983b9087b0afa54065ccd650b32d4aee6225070f2ccec1c087056b5912104d2061fb6dcae34ab209a5b72494154bff72037d50f681129768ccc757ca2f401eaa43b7e18dd4780ffbb76c00070c1b6ad82881527b07dc5db14ad50ab54beb9e3e9c5cc41e01b72aae5cadbaf2a8f013be4034d2a54a905ad63dc6014f201d495249902ca19e335c02c77cf4f0d1b317b40d93c0f549924f4e905e2bb92462c69421133055c95fc6ef9d62cdf555f70c85fc6516bb8a8b868a3dc5f6a5286e28bfcdabe830744e022de5c1e42e9c74081c6eb95f75f3b8f8bf8642d0e225af0b8d7f20d1602e4cfac95066db36a5df0c331bf72cfdda39b3c17ce98785fe1158997e9ae91fa5c8c1dcd8b0334dd094d3a6771f1a3e998dd034ca73d128040672e44bb915ff38d0ac2a1b02acef22025120646ecf207539edb76a5ed234f7b4873293f3189e1846fe907ffc919a96ffebc7ce3b026fcd116a469c7ac437ad74bc88d88531daead137248be07aea5274a80d07ff281b796333b987fc4b2e538de6077c1afff19320398191f92a74c87c22a6d78fdc595690e1c790f68223fa7b3c62bfc0f8afe064dc8325cdf08b467efacebd4910816aad266d2160d4b88a9f6d28400fa03d2c22bb9cb306828961d030d2967e3692a85de4fb25d2351b80f2494e2db8bc258fe5fad910978ce22210d51c1ea15aa1c2a6b35f9d9da89f0d3946a4f5260457ec84dc3f0bf1dc20fe9e951692f845aa9fed7bcd16d585b132d1eb44d8d6cfb622fbd9b1fc63434331269a2dacba2f8896a01499fb87f8c09090ec092abe8c5f8c060972f0fe56d069b9256145b658e50e745b6fc4f6084d753ed6f9315c11da8e935fb8f085693951ff67a00f4454a142b3c62e1fe9d12bcff68e5b123586093209a0a6e3a747e022c192ae84c5ed901be4a5b0a42b984cc5eccd961e3e9dc3b6687987088ada33727ea0f801cf47971883f9d5a3af0697e1cdff67fe4138e5bc71f7be1300e55ee74803707ccb6d3115cc842f27bacb3958c9bc4fa73d8ee31baddb1c905401f7bdc7d37d4e29882cce537cb708064ae7b6995487c7e5b9db82d0dda2a8880f3bda75153f9e3b0409954fc9acdb930212b27bb9a86e97b2de786737ae74de8030091004740ade290594c4d5f9cb8ddbdd7748dad902fa2052c7faa4253aaea80ddbc5e1066391be4267fb92656afe77e34b5e4a0503a499e40a64ee3d766345b603568d477e948b5baa50e86abd91a5650d3a72ce3e2fe168daee4954765e1904206d5b38e2c33c65c6affe8c50a0db5c89ca41119eee295e053b2702723efbf7bd670548c274696606c4b7dbc28d5b574f5c67bd5de3e6aee07b56abd5da2fc48c894b315509e6f16e3db90d0adb9014c24295762ddfb24b17430a92fcb119776fba52d601937be9a7675c3d68ea80d251935461ac15dcd24afdb8a160ad848353dde4340282c8434e730a7a3a590d24c796e672570bf307378ed7b36bd7577836669a3d640d95d474631d23a677256bc5015ab376c1787df1fa80b7945be746e07776ce456f89a9492f0eec4d5440622271a77d5fb83dac406f51c8c20d5e53bdda174deafef9e6992213784cb8b57788d182148f7125fac5ff3797af5e5e7542633753aec77cbde2825a720748d5379af9eb72f046d52f5d46b6bfe813e29f4fe915b8f112578ac4f58adc418b1c9dc620c99b098834d54f100af0a546a5cd8961ad6a0f437fb100da7c778e42752c0a0f6d8eed3a5c83889b7b6e5fdd6d95611b43a5704b46afefeb5fadd05e927c7bc6f057e4959b74c50373f132f88f74f233de00969682d81197de697bd3194a7a2952a640393505ca14a8504685226550c07a2b27a57c5844cfba69e3f128a517f71b301cfeeb0c25a9f04402b3d1e0167f546d116ed984bff529598dd0364d7860e1e2a2a3400738fcca752d8c0ce500111f6d6ad0f72c2932520e7cef999483e332d300832cbe252a265642278b5222fa18250d59ac57fd9241f36ce89b6fe98eb42dde32ce9da8c6e400e9a74c11256a8a9428a64a892a054a1451a2a6488962aa94a852a04411256a52b06f06c742400ec8946427229c2df7edaa4833f44e4771b7660803b6c42334001d805bc05811876230d009073ca790e9c2c9536ccfacf74cd7df59f2108f632f7e7039ff037c4c587848b380a58444d934e3cf7029e8b824a789c47dcbb243562fe2d6bf1dfb5a72e6de1bb47b01cd4bcf0ac9992a421469e2351d0bb6e665f12e9bf29be0b181e75a36958b80bedc2f5e5debbf5b5f4b092342a24c572d71477c092ab0b9738d6ce225a46ce99139e5d877c879101eb524b3d80ab9148d088fbb2e633da0b39367f24f4947209f00bc9d474eec428a0ef94253e7068aaea1fa57682705e24dc5cc19384d03fc4d491979e2633f4e6a6f370926e5688f1477910e7aa6c685458f8f6949b3d4ef012660eca75227eccece818dff86f25a654be8b0a10b213b8f730f244b9e87e700dfce1059e2147bae2c815b8acf95a64ca51bcf91a28a9f69d920012fc61e4007656a44fff8b4151ad10cacd5a9c7a62586e0b950f45f9ddb548b2611cf24774c783d7ea216e51fdd8f4621babd120c685cf948ebfc3d7233c2e655478e72becec80d2c3b8d0d0acae8460c8af7cd60e9c2368bb6128531bc1dbb632897c2c1ca010b0f3c44b11849c3d83f143c2372ccb99fc6d7477887352441d70b27414927950db54467a6d7ff460dcb8fb3a547c7d1ba5d76eb018a22c8958dea888dd1a2d48399e49883cea389a0f141d92a1e3dd218157f6c3c87025b49c3f795cfbe5f7c0bdf039fbf52a008de6ed5d45dfa7e8d6968544e4a0958e633e1dc347ee4626198423b6fe417763a6b5b0bf1d434ab6645b5e8d38ffa1fdf89e1c6b2a447a53f22722b3a3e4659d74078fc33818766ea9506b34b6703ff297351ffbb07ad878864220a9a3edad347cde1bd188b8201627111ffa731bd09f8287895be7287b380816765b1278ab8a53d50ff77fbac9ce672c0495402fe54426994d0945dc6b9506aec2b0db0645c67a73191bbcf10cb1b146b72489b6e31fe6585aaf743a9850e0e5a2f14e00f4b54a43d514b00a240582427f8c5395fab6f4308e2c916abf98c23def4ae370547fd817fd581bd2bea625ec5455bc0896114150e3fc001dcb5c4d16d910bb5b0345a7b8818a799dce566d1a2ddaad56e4190b718d923bfe151d81a8a57a89a4afe8f122a5d2de09c14bc0997a2918f271f704230f0339c6b5db8a65dd85ba8ee2584ad23286fbe887bd0807550c9300cbbfb16045cd450775ba51fe398aeec2055a78df0a29fad1859b1f397db33eb2a0b0ed950c9c8edccf7773818dac126fb163819480794357b8e1baf889bfa587e4e5415a1cf1fa51fb6cbf096920bfa48485ef148ffdb7f603fdd9a6e966d25cdb6a49e395ce6c10e7a5bf37e2500a312e8db6182270fec2e7e9a7512e75c8643e8cd7e82169be154ceda9a89d7cc3bb47777ce199197c4b8a227fb64f494b9606721e6077ec97bf95762068a7bd4e00dea8c642ff76f34214f9d3fc6d68becbed9e55e1e99ef9d43b9c17e1273c8841c3caa217380f055b7f80f21ec75ab833c9bb9351839386aa525f6e94c7b7bad7c50d37ad239e8b01a38cecdf6b53f369b821e4d0593a7270db79804d5f8ae0ec2082e0cfbdb0296c3183b558ec9c22fa6c69ad2d58ada0f20fef014f1dbf3fe3309d2de36f08b5ad784383341ca2644f7758711d4e37fbd9ad5adbea2a55080668071eb1eb778a009d2668dca6a5aed70ad1515c085072490aa3c69887ce2fbd0cef84da9e0955cb2665401d4cb64ad05c42cdfef67fe7c52baa205295c3fb79ee2c7c69e043af0be00aa14bdab5c2393d9ec173f5ef5331b723d344e33c9f2df41aea74c7ac76aacb93a7d75990d0319ca4e4861143effa74952cc12cd8a67b73b316bc5a37de987a6d1af9e1b706ac6431583f3b0ff66c2df85751cf00b41512ad89f6f94f1e7ed1d267419d56eb0b500453f5217726ecf4cad38df46cbf010ae3498e39c9209ff1d3c2c92f74619e642a65e370118d3c2be5b7f70130778e210f8d226606dfd089fa13b6789cd5c48ecd15d2b7d9f6abd10a7766f1fb75258d889643b13e6b85fd60d45c222f2b769a1c2ce181ac370de380a3719ba86533a4b45a713b7b4d7ad8da92db9e2afb39148fa514dc9e2fc6fc94c5276d623e82928f46302aaa81d535e709611a7032c2ae7f0b5820227eb3f3490887691c6527ef6dfe3c287a1d7a73163c443f13a4a31c9fe7ca835b8663085080de18faf363a51b2362a9f40e3cd0eb860fba1701ef29d7ff307d87757637166dd84c8bdb7947b4bb9a54c52ca6f05f404050521285064191f14650782768c4260002cf137d0c8e94e29adb5d6ebbaaecb5a6badb3780b8a66bacc926a255f62585b869a620ad25d3e0805d69e2e73d2a102ff007b52171ce616ea882715c06cef5e70c10e127af560cf23e82519415d689e9ac9f6185350c403b3d7f4679a7e9679b473a1c5df3c22a0b4e97b74b454400769678f82b5e9e7530e15b659eafc2130787ea278ca3dc8530ffcfcf5b446f5f6198bec35ecd10c7fccb82cdbb2aef39ddf9ec349a1395d0aedb9f0190bc4008b23b7ef785d8cdebc16dc67de09f7da3b41d1d10edcb8d73c141f9f7a88b77de681201efd78db4f0d86fc1e8f669dd45ec8722681ad377dedf167f405df387b4d7be0966dde754d290834a516406dbc89b8c0f1c0140fd42c5876e775b73da7cb1dadb507baa024cdc330601b7fc98c15909f9d729876f6f431f60c52d2deb4df364e967d86310658daf61a3fa7d3bf751a97bdcdc0ec71074afc943eee02b004edc2f6da9778c9dcba4835174017949475d80caa6d81f8574f4aa22e1f0e091a63f4a7ee9dfd9839411706384e1d3113c71144f60d00cb09c7134700ad20278e1a27b44ba6d9f3710130ecf3cc2439802c91f42f9c5119ec651e95a1a4ed1de8341bbc32d9944d9987cc28485fa94a6474d925b3caa85426f4073d0167ed13f9996617ffe697ee4b0c484646b527f5b20b3418ba327b7e28a3fce3cc34175b82a3d9d4e55f9ac3f1f4731786965b3f78b7feeb5d8bba935b76d7df0c82362735138ea3d92b7b7ea5a48bc442b3d9f741ba625f7a3724819edbd7d72ace3ed6c7e456bfc41f04651d7837e6dd30bbcd910396545e9a677c5735403f101a741a984aaf4bb3b3ec03a1417d6fa621c8573bfe03a1c19bb528a57c18fde1409ee674a8a7e3e1688ff5783c9eabd2133e20781fde87f781c6fd635c51d235adf022586105d08f0004f281eb20829e81230728c0e1031c291b5a7a09bb94011fd430d5e0356670c38c357ab048afc60f1590fed4b0a911842b871a3f6cc098032f10ff7fd0d1859da12ec389d8d24dbec34b2ec329adf5ba6cbd2e6befc5ecbd18966518cb328c73d670ce9ab66d9c36daf2b770e3f4ca5cc9a982993c4c13357bcc9809335f6ec29be93263ccf086b5c307cab443f5c3b44346ae48195bca971c9245ae4852ec3155d36d505bca1939a73ba572ba535a69bd2e6befb517c3b20c6738674ddb366de338ad391dcfe703021212822276200a1e9004a0a051f9317af4ba4d4f051ae0386394789873ba5f7c2a99aeebbaac2dad94942809e1544a828d1b4e3672b0b103c7715adbd0f139d930d948c2c6115080662824242404050a1b31203b9e6ec038e1868d1b40dc7881c88ea71b35b8a13a61c7d38d2480763ce1c001c70d1c419cb06938f0cb88299d6a944a31427082e44103a000a8e80e10f7964cfbde1bb2efbdf702a00825249458f99484e0292581a57383073839ace81d36c0e9b861338d40b3918408b28d23e0806df840064304d80d1b1db83780f880bdf1821b6ed4a004375420b841021c5afe4607fe842308d209c78e5d773ce1306283fa455470f534829443e8d03560dc50e304354637b2060c177d83de80a6b11a95c02609529668a040d2309d68c4d44a83068ac60a09384e26cc68d1b08146086870603e5ea9e28332cefe856b5f3be26d59b0ce7fd0fab9bb40eeeefb65834ee333d7f3000441fb8afb51a38eba9bc6a75f14091c2885608814c898c18a4ec2460611007033aa9991830966e8d85ac6035e030ecc38a206f9337c8c42afe2b3e369461066d06cf05748c2dd271220d00a2b38cb59734e9f2a54b8cbffc09cd3e54b2470d0a1d63b9e64b4ecb0ba3b3421834465844fe81d5035845ec586c4067f851ba420080ec878690a7a9028b7e36907980dea37c1c5eec5ee8dc00a8c6084086a68820e9868e1be60df0bd29f19fa447edd1b249c241f560a0869925cd6e67303329a24d7a3ff594d92fb51335999217a5936bda44dff77684c4bfed12f991d496fdf9134785f3695cf6386e8cc0c519029a640ff555abeb6b9d199f55989d86cfaba03ad6688e60733ebb32282be3d367dad03413614a0f46f0f1ff3fed8d4894d6d367d2ca3e42b660b2f3cacc4b194992783ef7b5d9266d994521714565905d4f5678ee3e4739ae3ace66ae739adb9ff58fabf1bcd81232b1ce731ceb9c37d6764c4753a57fdce475fe179ce5f5ff1798e07a250cd79a0ecf8d7e158cd7dadaff5b5be16e5a66d2288992d41b0e309082234473ea522189c9c4521e745238e7d94b92fad5af6b8fc1c4e7e0eed7038a250b4c2e17cc9ec500e67f55b8e074aee3597452a2215914aa5a112dcddb95cab565fcb5f2b6b5afe8fa5fd77a38dace42de78f959f1b19c9e05bd638c96d9cdf38ceb6f36750fed7fa5a5feb6bd1e48859d9233b9e82a0a1e1d6e25377f75aeb567f9b22150c4b79b1c9dfb0dfe64c118553b4228373f8e796311109736df3c01952c02e7b2a22951d5e456c1ede6b24b4d6a6bcf858dfcdc88afc58dfcdc828de3b12de7baf7694f6d3b437fc1ac6db7336bc3dd61eb661adcb1ebd5f0ba4674a462f0c20720011e3079b1f7eec01ec78fae1e5ba5ffef252b729db6e304e8fd3e3f4383dbe14c1881d3845a315997dfc282265d9678660f4f5d73b76330f05db9807a6dc6bbd13f9f62f90be6cb091f0fa1d09b39150cf6d628ec2ef7f7feb4233fb62588671e1288ef340cc739486bd08dd36fb7c3d863d178eda36cb4c2ebfd6d7728be995c30f2e302c18d516c08e27181998974d801d4f3edc4c1149ea99afcf3aa788848948d17a0f83826519483d146cdb075130c75ca42252f1b00838aa00b91527453122d2c6598ee18a1585dabe08d6f225a56864b77c7952caa7f6c24a66de5ebe4805abd33ba1bfd9df50b04b62ac77ca0b4c148e30118c3dbb938cd2faa25034922cd09fa215ec647e2652912c6c7fcd5973f69c88b42ffc5e363f9b0bc8ec1485a21128226d1189db1e73f231ae6f2976e1fa56d2178593c4848a62b2ac8b7bce996df64523dbd12ff14c596aadf22ba514777eb3fd3dbf658112db27f435918a5401dbb0b6bf4845b2806157d55ae49b0d629bed9f3b4ca482bd281491442adc4af72063e7fdf9ebc5896d801d4f3ec0ec930fa31ddaf1d4838fed038c8db7fc91709b7127b6afdcc6765a27b5df3aee7127ff6aaf3b17c1309e187f3779bbbe1b7c323d5f4bb2b0fd05eda745be9be7e7753ddec9bc34e5050d1f6b92dc8cac6c50f37cacef6664a479e47f2d0dbc23a1fdebf3edf44eaef7bc7d501b09b736b3ad076a1e2bedc51ea45bf6be969722bf7c0d7be1925a8bebed7facef66241c09c191f0e379ee2331ccbef679af8bd19a83d8ff68da75b1e7eed7fa785feb3fd6c84bb65dddd75b8ff6dd5c717fac19b2df396b92747eab8f42e5cdda5f4c7eadce5f5f81824241144fa483d1bc93ebefcbc76fad0d99b6d4bcafe5a814d8736f335bdaf5bf9664e1be45a1746ba6cd798eb28f9fd3e98ebb9f6d7eabb5c85bd2ad3d98ddeceac2515feb6b7dac91f06b4915ac57bd936d867e4638c61863ac52d27ad9cb62f16258ca0c672de6a86d5c8ebfb1364ec73873ec9099e1315f58362b227accc81041e3438688981a638c3f69a64749a73ba5b55eb45e97b5f762f6625896619c339cb3a66d1ba76d1ca73587d3911d8f27cb8f048920511441f1041110d18e1f120a1ff958881f1b3f48881ebbbe26c48e5dffa3390f44718140fd215f3d10e4afa7f1738f3b5f392db8c7d9ab8fbfa300fd1cac31ee7829385f1fa7e07c7eee3b5d0a8ee702fefcf9f1773e638bb50b575dfab177a29fe39d801ebb8ad3de06faf8d4b51740283ecf3d0e991a0cda7fbcaad5dc655c31070670a31a0743f628c703b98a7deeea510fe919f2ef74d0f5c19bb5056076e65c33c91e8bd4f7400e68667b9ed371dfe9b4f770549b97d5fa51abf2b1103236feca6dcf759b4a57fca2657bdee3812ee2e76ee3f2773ace73dde6aaca7dc6f96bfddcfd0f747da9b9c0edcc85abfe073a63576ded238ae9a565c716fc725598846988180edbfe5534922a5051481fe6c482d2890799af3567e4e47cc074774a29adb5d67a5dd7755dd65a6b6d0bf431f74ad0d0ac563131afc46d81fe7c9f5e0dead363e1b3645e1818c73cbb3843336699e5631a6ecbc24b81b1f7c37fcc90ff7df7314397f4675127d55e2f0bdf59c7e2f22336ae39ebf4736fc3f6da5b2d8503f4731f83e662d8ee6b9e5f8d85dcf831766d60ca6e911f7fe642c69ea3620a99f7287ded6f8bedeaf911db9f069a824d3ac465a1a1a493562b22d92967a52818c6a2919cf3a3d642a422559823d2bee10cd51ce849479474596a0e332a491d053a8dc446c2199232588c5e94d6c7aaf7375285af657798b695e9ec8b7ffe79a81e7abefb709a6b6728ad3db0bfabaab4f8a567d2b46ed37868d057166551beb2285fc9c0a250d687a5b13f26c9e5845d4d128dc5bad1bcef267facaff5b12c0f6bb233d63449e8db9949625f62d5cebc493e56310fab81b61fad69149264a0e55eb98db3fc661492bed6c8c89a2609e82bd09a7ce536a1e56151d687af2cea6b7d37f763adbed6c55e3ec6bc6ba57b37b49e4d80a30af086527aa08fd631c0577af967a0417a4bfef9dfab4b2d7fd2275869ded2cdf1023349ae4bc4959924d864e2714523512852f16e8cdb725d5a26490c9749625f66f5ba4c9218c8cf6a963d0db4fd78ffa4258d415d4872bc8854442bfbd443cb6d9924206db9319304bc2dbb6592c4530f31280f32dbffc69824dbf6bf2bb0d9fe37c72d659e6834315108ce9072a5f5442a7706cf601cb394d66eb5beb5f64be6c792f2ca9707569407baa89c37ba5e76979417d76d9b95527eac6b2494d6bacce337e993fb758377fbfd9728a4ec7b2ff0eed50cb9cd8b962e87ae2e5cb5ef045cb52fefa47eacfa5a875ffcf3cf9d45cd50a7020d5a54a743db07e968fb632902527959d424b91d8cf61ffb7aacbb4057edfb7ee3ac19f2bfff7792f8f6bf3866fb671dd65d17c63cf3f0f863a04fecd77dbd50f75f974752fffafca1d7efd0d7474d86b9634ce1fa9219ced0357a4c69ba1c9a9e5052c783969262b54ae9a2d0babb28148d546ac5a4b5364e125158452a2292bd2cfb9294568fb2743ce8eb62d9f2e9cbe029190942ec488802c5c7fa6e3ed6d71a0943423ed6d7d23a6e1d47c249a23fd6d78abe02447e3c3359266f8f142e26cfccd7f2d078501ed548e8e9e1f1e1f9e199f95a2d1ad080062fc9d3c9ff749c07e93a9e19eea6870745c957749e66b9e49999245d0a16ffe87fb407b99b4ddfd3a1889921fa9d0e45a943f1b27b943c332b0dd216cf8c0653b46c9a0305119e991c3044ece0b1b2c1dbd2f2b57c15925852b8d030b59a9dc038e615c4ecdff1c4831036aef9059d2619e6659d7c5198499999c812c7b26c76f76d773dd75ddce65e148a5444a449c239b6f9b3929eb5f7c6bef450586dfa1fb34fd8f11413230601d35136fa9198f1361afc1e8c8497f427aed63de769a76fe7a5ecfc66b9dbb957da382bd64b87e6d74debf40c7d2c79ef8f84b9cb2a7a249ca114ecaf07a25054fdaceb32ad05ee46dacea721d3d7f24bc34cb9fc3202c715bab457d8f1f4c23262e5d8b3f6efd35034da322ffbab2d20dbd97babb1c88f3db69465861cc60c794bfc5aabd54c72ad57e5748753395d6badb8d3817a83fc883d7fcb2c96bd7cd148449a9a49668316916668bea8329a2b8988675fb31678bb2a2220ebaeed36f873feaa99642eeb9ad8f23123ec79fdc0b73731b737e172fbca57e8cb6e7177234de763ddb59d16a948156ac97c2db10c6e5eef2e5deee82b688b4be92546c6446229bdc4c898502e2a124b8b4be985b552d1a0662e483f28f4a1ae066fa199a5d52a264686d1d4d5a041ad2757433783663be53e3e9eaf04cd7556c63ffc5b67daf845f053806e574d92fc1857cd6ad599882960993b57cd903b13cec475fdbd57d33ad0511a9661d68b157321387fb9b921cb13916688ea105398ef425d76a041aac30a0caa038907fa65a2ea167d057d0c7bfb4ad0229d0d4ddf89b030bbda985d3fff70cd4406d904473d4ae7d9812f4a7a637376ded70ac5dc1fb6f36aa9db00df1bfaae4c9248dafef3c2b82c9b86e1b43ef6b4347b5a544c41092c3cd0e065c9547693bacc21bc8c3377b2b0ccf78a52da40d307433bc5f59f89fd94f6a7fd2da594745e1df50c601affe12a25e899c1944d310cfbf9f653aa7f89c718440f3c76b7e3a987d2c6d21b8929f8eb408376dbc7d577f6503aff44ed4c665f2ff6b84bd9990b47d5cb635122a23043f31f071a54b1e74f187bd2187bbe0ad04fda659aae8606437bdeab3528e41bf81e9c5af0e35404ea9190f137184185af6ebcd7faf8e12bebc357be92736e45d0a0af7c7559bafef558b592f42f185bfeb33496d9414d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d8da4e12499e10c8df6fcfb43d034fad70205e81db51027c99cd9fbdb80fdfda9a57040f6fe31643160533a9df4ba577db10069e847b0a876fead8fb116d7d7ff22e829329fd020cdb1e53fa17fd680c06cc1e57b486d8c31c618638c29984e45c8bc9c8a90b18b80518407404564609300c70904160f882db0885b32c14929250f700a07d8a71f837d6a69249dd7b5bf7cd08fd831fee5a838a7534a69ad955ed775d1c736cfce5a6bed9ddda7b01496c252580a4b61292c856573cea999481626d3c4dd84526a526bad26d7755d9789b5d65a6bf23f686856ab9898ffa1efdd584c0e0e7054e119c334110fd43ec332e7ae7dc440144c9bd79fe38f737e107feccf71c7fff190f7bc7b60e7a377b5cfeeb5d03ecf9061fe597eae03b18faf8090e7be6432207ff6747bcd4bc1bd7ffeecb52e05f7d86b2938ef97d039bf7eac035f38f6357fd47ef3ba18ad791ff2d93b0979ce3b01f98c826dcd43c176889781e477ed05102f7eb2077a3cb0e3fdd460c0cf71ecd8e7c7b9c3b267ceb3c73e634ffbcca333943ff340ed517c67cd3fd24e07ed3fb1bf5abf8b64cf7fd3bec441bdbdd6e9e73abc84d63c1005cb1e965dc7b0f7dcc5683a5fd3b60ab83ff658d3f9759675e0e65d18f63360efc017e12fa1fd354dfbcc311a7e090da260200a9672254a788170c770fec55e0607911b1152a9542a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542aaaa8dce7fcd80550c403f16f9cc75de638d8ab1e583f562eee8dbbdcb32146bb7e9792a8248ed576b5642524080200f315000028140e074442811c4902350a561f14000e8486445e4a9a8a83a2244951108591c610638001000818009919a11945012dd0bcfd5ea963c4cc2993f2900f18e4a1a2a2a928f6b0d873b020fccba105b421bf6d1f6281de02c8880cc938e494e20bffab4a39a7e997a6d2ce5508bec7610992e0261a9dcceffd597ff8bd56180a43edd43ca5ad30caa435de3869ff801762015defd6f5ef1a3b4e1e9b9e72aaa77e5d94155460598e172ec34a17391476648e7f4adf8d37287e30fba15859f9454a459d67bd1159d4b89f1ae688bb6be907e62c6ccab89050d737063e26805f48b4a7e3c11ce98691a20d7bd1275594be8eb3755468a5e7960cc84c54bad093baaf7f5025344673de880b987f4bf484d116d60aae4eb87a60bceea31c1490545800e3052062be929def182b8e929cdfb40950419d3761f9511b139e326d88bd272f4d0ab988bc826567d18c0c08c4b52f15e771f5a814e9850a7f09e4eb7f1a35afe47a6ea641d478a8829128207e89e50992eeae33e428d2328f1479f56e1b5c05d86a0e9be2c82a856d532dfcbd43d87714756bd0087b24d4c2ec1ef3fd258bc7308fb125ea1ff202f0b8f7ac9803e8ceb50f54280bf3b36860169e531e5e6587077059381e3add3553b5f1c4d08c7a5e1a2305a15e309f3e08dbdcd46a0d2e6b02458a725f551f478e8652bd274d94aaa3a51cb3e055421e613fd0f9fa6c8f8422e7e4029c35a2e07b47408b915232cf9bd30d87f895bcf9f3aef73106c6fbe12ec8478d9c1b24494295c8b1a564752db7a93b4d0826b6d715ca9af0b25f00867a90c064991627a098a7928b466d714c5a804c380018b8e5c286f9a70ef0b245e39b24217495f875088329013804e7bf8b10ab156b3da47e7f4c26b2cd74ed0cc04440f05c7862bdef874cf34bb4fd888feb2e95cb5a077a97622458b32cb89f629a47714670203cae5a9d5cad332355e29da2e323c53a55d390207569f8333e55bed3e286b48695b42bbdf07e829527f873eecf6cdc313335b4ee36a40875069dcbb146b6a5a9f6a81de365ba24074a9b822957b2610eff3ead3c0955dda91d7a2e9026d9490c2f7d82d6a7ae500ad22078cb7ce7f961514ededce4d3e2487de17d54d26f222df8fc65f146919af3140cc81a5322f064d099ae30f5fa4a18f3c55e60cee0f96660d8d0c3c30e3726b7e3178e7339f1cb088798b8c8d6ad6eb905c623bd63746b677adc1971041c86936c2c394d9e26204974e24d44809895a8a346fd6ad5ad561d6aa951f7d5605faa96448b98f4aa26df882fbd69c15e7acf30495d54b828f0fa7207e565e9ed2463daa13fc1903a804b3c75597ed87d595328de884c1a11a39395dbeecbe747f87892070580159db512c273c4a624372e8f79dfacdd974987c74beb9bc2416b3f69555c78dc7d19b1493641b4b2b7f795cdde8e2e6006dddc11bad1c8ccd2abd5f42556edce086e75cbc7d1ce7cd8b0d36e810cdd957c84022395789d6a670534acb37103f2110db2a47707260cae0bcd0ce1f78c844973a4ead5b188ec08f7f8a721d1a904d045848ac4e70946324486a5587651a35c8241a721ad137b422681d05d306790d2a6c506332e64828ae2424a1a0c62d1a739fc86d2f1e48f603ea77ce9b723bf1d385aebcc6b931b041d756403633b84a452f2c8d86f49776b1e682ded459cb15e24e63407441f4242aaa8134c62ef7b3205302dffd4dcbd712732893d2baf46e648f2d464bc089c1d7b950115ec3a1c96c82ad95d0cc4bf8bbe5a36c0ffb18fc8eb6c8f09ce3d76014bd9be5aee61e380411c07c37c3fdd265e82b30a24482bb017c5e3f78eac820cd1aef313a754fe7e21fc3aae13c6a9f0a7fc6a6895a6ea178572c249ebb60cadda71c0a2df803404e98d681135de02e363d048095dc933ca38481febd95042b70739680dd4e8cff012f42e27013aa60d7ccd8eea02d417bcb2d067e07d146b250a5df989c5971a7b7adcf8f1ce10b495048cedb8edbe0d459c7dcfbde7eb3ee9fc428afe0d9f119ee2c38a1e1172b585ccb9814927948f7b9607478c30ecda3657c32ddacb4b5f89ef18852ff69c6e3a9746c3177897bf2bf244884f5f67c2b7854086e754a99c78f14c120dd6a4a7008e1f94f228403c4a634ed5600f2a5afe55f35674e30e71645f6ea5906eea81f842cd0e20f9a0901b1d2366091047e887a49dce0561b02b365042802a9d9f5f6ff4f19527ccc47f0097e5b5eb52781cbeea668e089214e73e2d425357e6c2fe145c5767da412f99d72688fdd319f142d9d235ac4d5c248f6e178ce1c71f0f7dd65287ac3d8e4de403ad68a18f2a81ec532a4edab9bbbcdcf3f2b985628cf31bfc803855fef9bf92e7743c9ac3a65b728715e684803801e9d39406a2e0ffcec299a313793009c20a5401c819141eb190589ac2c89d27e50ae766dd4d33563068fa5919bd9f3836b9356a6732289d6f56a39d64b22bd346bbd80f92eccaa05e1f4ab2501b9abde39e22f643690014d5a94fefc7063ef50405f9f9d29d9d9cb939e2e21f8c2e650f0c9bb46486e51c8fb6d0770047751744831d7a5f7eb5de43f90249fd2e8e5fc515471d3a272f445c0b82afafb86bb992a487a05092dc087f6eb8d74b0700584ec0fc4b7115d74aefedcba35009a0a9ee0e9e9606a40ae5b0c5d1410047027d8a989576adde5e0b622392a12c1411cec0871dc1a6a4c5085de5056f5f28aee10d673db3145eb6e1ff99a4969f4218913a771f8ac4b06d6f77151abd4e493e79a02e766a535f0bce8f791411a5b03b12572b332c164c6a740c07a48bcce7e5ed38e97c29597a73f5b42e43c8449717c3e75c49ff851fce6d51b8786a39e187c3c5086df0ae06c66b2cd48b355884d778ef945e0504e9b09dabb2bd813ecd4a9441b4955228e6a352c3f9cb545567c2b5321069793c449c724475eaf5448083e09469a799211c08536b7993bc331cf7b1e55494242a51d73ed010fd8eac233db6bd798c489116966a866197640a501412422c265ea15ffcb85ccdc5fe7b0e3316d7c3304066bd4d35233dfe7c4530ddb1d5b9b8a096390417c3dfb543d99dc949b15b4c5ad61e921b3d43eec152c35a09e43e2cd7f773b8e5ed788b0571c078a8cb0915e7441d5b9e31e38ce5290dc03bb1e3d2ee47045cf1277b526472b00ef0ac39bbc33c49e0c5eb75087384e345c60869ceb58442ad350abfac8bc3b41afd9e43d3ecd494e5575078e1ff8848204120bca6961a5a343e4b352525549428cc5f6841b1c2c58b47718b56150012c21617656cb66a615200011c2f8f71e74a5824fee933e001424e76896ad31b81abf7d49af27ece58bf078d09b5c5f2e1cd021bc6ff032605934cba199101d7173d07f7f5856253795f323d1bb3086f2b7af11d7a7b9c499fbfdf5fd1b01499a56992409a6a931193dd195bb96a7c36bac2885f60be46c7a4051061e0b3664487597db10bb2df47d1f979ded6405d9b57ec9de056f20759941710623de15c2b30ac827b7df3c6db55e75a11d5c6049dbb7e13fc50aa75c4b75e96202581614ce517432e15a7a567860ac7239a0b0f842f01dcffff274d5e9091e025a46608112bdd6798b07b0464acce3c878450dc7dd4736bf7990cc536170041830a66ff36a468c050c461edfeed30d3a045d439c3fdbc29d975049ec13f43be00a3e4e21a3d5fa04e9833c861ea8c91f9f245d620e06fb92d901f36e71638a3a5bac5329d4fcdba91fd74334ae7795a688894db4566edf528a3a6f522e72049fc5e964a4e413faa3c6e844be0f7123050af5aef87a3c1b2a0b7ba9095bc954aa2fab33febf8ef85fef4a514051d1d096f85067073eb13219d3c920bb719bab24572e11b72626338e874317ce0f1828edaf3f497049d4c183b63b3498e8d0c25ef852e0f43ce652e11e81c1aca89cb5d3a546e87c50eb285bc6278a686eda5d6ff282ee094eb7e5c38e51c6263cf7ff9be714a8fab73842b73fa168242d39a02794a95b1e6762bd78b959d4ba4032ffc48e6df2584ce4ba4d32af44820a2530081bb31914eafd291304c2f54e0ea8320f7443af4b83ae7e0c87f28918ee58989e132f990fab49af0d33a224375c0ce8727d2ad214dcd6adfa6dacc3c2d8681faff7a5542040c701a872c116479ea9966a94541ba68acb1e55744de31cd9eda514356342b64f3a8fc790ccda0fa52509143855f4cdac967b6fe2cca59fcb420db02be5e51cb570e8a24a121d8a468c95d01dac6c542742766d0d00deb9e804284c681161dfd4ff850548450b4e60628a000096c28c87010e6600623849f816730b6067135771a8e23a00baa51e64a49edc3ffea5c4119dcfa7248bb85af2671c89a6083d819e2453dd4d9fdf82a392a4b474b2f68bfdf1caf45dd8fc491a4c23cd1d27c18c385ad51090261423ba92b4632929d709c2ce41f9676e2f012a41cb42503840d8f4e3628d4c6b689d1b0e5b0a7e26d94842442ad695d4b84a2c21f0b3e363185f0ebcb7a1197d0414bd7c18d89b771bd6ca176c31e00bdc59ccdd576ed73f6494409789b7a28feb7940fe3c16757a3d2c09aae792f1f1da183596c388275fbf91787c8ca2fa1d4486c10aed52f9131f63059b501d5c16b0a28dc84874198a62cb78c7bb649409f918e442cdef955376adc4c3e00319da7c5d586f1aa61639f7de9925a3aee66de708c44ac61dd05e0117e873d6833346a8580bec2eac7bc7c0529555741ee6a46778abf70a8f5972a069eed68dd05d5de0b0a27c7c600125671a9a861fcdd2e34729389065f06e7ba533fa856bcb3a982fa03c9086206a4baeb545f7525411a1f2411ac9291b4ed9dc2a4c55195ef1d57e8fabf43a919f429d41fff1f75b5e2a7c20dbde3b217c1fabcb6edbeb9df7b8ab4a1f26b5501fa48f20c16a1160ee0a8298724c6214655e171f016bddbba21fc6d1accd4d60d1ec8d0b1bf1a50b054ebc5235037b8ae57aa6f3031f27528d7387e81f67b9a2340911acf2b9d05854337c01d87066261eceea01d845d4d4cf2b7b04ca276f4c66ad612af0703688ddb9d1786d4e66f26c422be0f586a3190ee35108facb5273ff4f768e04dd2c906e4bf33a58082961b3e24a5981fe1e618a3eb533a074c3dc17d497b3ce0abf236ad9a6530c6777a03d135eeb49fe97b033249b74583f0c08c7d54d2626b788a419337f9480f9e9e7ecaade13c0acaf32f5eb4c02f04c811222a484b7bed9a359e418d826aaa1429e329bab0e8c2058a40d12e041418c9e4036a3f94704e470028924f1c1782a7b57e4667cc56d54278bea3fb2ab748e7da0f90a90a405f93c485597799ee0c9a2790b1292bd044d387c2a48cd477f89414a542fbe15715806614907603cf91d6c8b8d27e982bb0ab55b15695f6e3634109dba1c25c926c8a03c5117f6f267c09861d47872098948386683334280ced6d53fb91e1501c0bec2f2215f52647b1d2c4e7001d020f3df08cb4a729166446aa8386ef43e011ad802bccf64249af7eec4a5f1d5a5a07a07b02ec221a2adec003811dd470ddb1ade378f9fbf1149f521d54467c682b107d4340e5031d34cc7d563608fb505c4b249c18da0fb83bee7d16aa1cf9b74e60da8fc2af53a4196e1a854a78597f8773da8f0e3d29ecb76eaa3b827dcc0d03d3c46a3f48a4317994d0b60c9856485dc407e5dc420569da937b5c55de67f14edaccc78be2f92b518e85307c6ae0071d619b4f89301b34ed47f37239081d86bf8c632865315bfed6eb08895795c107c0a60255fb511744df32826e2755d5b8131ffded2be39e5ddd21402cd4f99b3352897a179182b9a4fd7000d5f81e87c75e154a84ace2f0abd1181badc05a41b51f35147c759f30053c4bf12d28460085a4944c7bf654810fe5e585eabf4742e33e106ff3683fe0a4108f94975dd86ef6f01b6b21bf973cdef3aa60ccce3491d0d023330f250ee28a46b96527442dda236331d5d6b2aa6b1bfb1530a9608e36a1a183f102a10e0806693f36f9880a666bbab55c42433bcb53d2be5a0bf223f0385454a676be942796367fa04eed472ac065f8bfec4fad9ed1b20d355920ee133d4365f442e45259c4bf4a026f04ee253a6f0320e254ead53b8fa44460fb98a504b42925288e95bed5434b845a08720ec9ff44de4f03713b5a68bea5427fb58d9056dd4a5274a84cf4fdf7a7a54cf3afc3ca0424a225e436bd4cc627addd1487929435c783ea12be2ceaa575d7ec487cd6ba769a4d40ef75252edc54376cd25133976dd1b2edf6724d8b0c2b945d7d75ed5e55af26c011e6592f5858bc963a18ea73ef478d992a3505e21f4ab954f6d70a514c573b9ea3e2a065a29a6929811b9e5bd4f9771f64d384bbe9879a89e3278d1c7161147bd398314ea6d89bcaf63d14bf2c2ab068259eb6533ba85ccc5af18625f231b70d7820b6dd8ad0dad934409f23df5e6c3410d803e859437c3c16e1dcbe1eb1d32e0e6fe9c91483ef295420ffc8c0d106a46c9807196aa5e7b7b72cd7e090f66367c22656a4efd90e158aa739a2df817e95f470a2e052ac141c5fb9d1c584d57d61d642cf07be12e5c2fd92ae2cb7dfcaac1f517d67f24ca9fc83d76d3b63248d63a49d21835d9b82b35eead01c83c1de9173ca3eca87273dd7f247b6c6bef34302d2ddcd1fce9061c9be8207389a9f24a4630481d55e805321d471641d8e21e4d841c9a1e41716fb4b1b94011b0c53da4fa8f35ad78e8f7888d4b1b66f71cd0c16a6783286277c080adf2aaa5002427d230133aa21587dc6e70fea970b768ea749d36f6bc70949fa6115fae331215a4201cc349a6a581d78c15e71a822919030c9cb2c38ff27a29ce4c0397996d3fab71a2dfc0301c79c4ecb0b411eb05e914058502e2ff35a172a08502b4f345bf384b4c4b172b60f13c959bbf35e04c213921e20362b098b5ba9d65a1f2cdec3ced13820e981c5ee585ac45995c93a6a46e804cea7822891f4e9faec662a7bc4319e5c6a4fd44f5d9181d5e143c49139590161c021cc963ba06e60e23789aa8926457ccfcdc41306580ff88f84a46b65072acc6ea0c8dc3855b5066edc5ab7e03bb57a17a8c04bd2c4ee9e216a452f01d3ba9fe05c132d1144aa1375666602399855c2cd9a1b7c3dd83c49ef80542792e41f7fa4a66a5ee80f6d19889ee769f93f8c860ff062dda417cc97eaa7693d1088845b1b7ce958ffabd0fba62a6f4b76139c020748aabdee5652cd6ab0ee7050d191cc1f002caa87eaa8413632831c24636ec0f22a4866278dfe53427f990a8fa48e267bf41e22c7481a9a3be27ed413a8ca681651ff55a306194199127747e73a985dcff8eab94a77007bd7097d06e5f7c53f4a9f0d5622f3826a83cc2f6e93a8e089d37e9cb60647b957ab8c17e9174071028be76515df026c57bc2728cfaf42a9c5fc670de691479ec72870cea101b280bd5f6183239774c86f4f68f5ab49e81f65c1fd9451b481d66a8355bfc2daedb59f9f9c2c4b012e07131cf247c0d94971b1c027eaf5d4fe5dc9d3c8808c1ac09ebe872af59b8b815939a0b364a61733d589c9e5090ae07ec56843b246d21f924b024fc1daa9135cc639ac527c525f2da544a25c0705f7e866d5e75f102c285e8504eadbdce83c448540b984497ddfdb9e3f146a0f4d82027e37ef61d6427b9797e9aa0b0a5f1420882e87ab98bb3b67e0f068ee539f4e3c42a0f001bca71330a99c232be100ed60a62427e241fbbe9db47aef6d8ac7b2527bfd8620e374d52f2658dd9f3514cf03a8e8f6821b874b60cae3c2e183e9025e90839e274601a34292e09348a0433f4a120b56f25a420137dce78554a386bf49f0817f358b82323a11121c0e8badd8d53d38ed499217b2a4c702d6f797aa1d244177bc4a071c49f1681afb86131a9c5c999c7d354a7b81d66a985429526f893680ca517007e588fb05e5fbb309d5c1e733bce8bc362cd95c82e3296273ac4beddb5cc65cdc096959dce30bb9f46e007ec52b1ab6646d2ad6d31264c24b516781d97d428f6c89330637631961bb7dce823aed7e6bac1aa32038fb08a2420e6096ff267d7ed4098717310cb6c8c64567896c91d02533642d180bf6f6168640db513066a8bf13fef589a013be317d1601526aea5455a799319f0a779391f11b69075bee896b279b0ee701bcf89ed4fdac067ae3b54c1139dbfc3a3c07e9a7158b5a77464a05a19b0201d3e2e9daa9794e6b2c64771132c0f8a700ff5d840814d8d8de5614f8f4a308829931211ff5ddb5ffebe6e7a9b08c992be77c27b5dc89a04ba7b844c9e220381164e721d8826abbb46ab7105df9a8fc4e275688226a1cadda08591586459ab63f22ba66683d7b775f89b10889121c02c6d1497a9c969156cc529f7b0b0c12f56561c7c2cde49b15f4e5d8e9c2c81701c2e889fca18211fbc0009ae28a7db79c0e69a1a14014b638879670d5222d22bbf8ec19f09e33ae7c49727d1df6e9db79a7289f447c80cb932d6302f835e45df71f366b6dc9cab278339977dfaf0f70c05e18c62ca8b5a458b48feb83c0306df4b719c02fa9331b6c074396d4337499f8d24b4e52cdccc79a02acf66a274e30966191f2988db2f3333f6ba00cd366fe1c87a8d51a7e0c5b089b9390759e330e2543232f0345c5eda0b0fba8895fa2bb9433a0e9d02242bd0f6ab96a7d62c1a4a011029d0df7590f8f682211805dda178d85e8b85130fe88c067be639118861a50443dfb0a9dedb1193199b83922a129779eb19b7b041eecf192e2eb803e273b7b59468a42e384a4b55f4bd1e6855a55bd01eb006a22c9fd6e366c91a4588a0ae0c4cc0c0dc24eb7ac312723825a6fd250d2639daf02528b78926566f4d0ac8d4d67751a34332bce99995d3c7600e6ff1aef9e8fd6e560c0c5f2276389f303c620cf140243fe555708dd351b43addfe97903853f5432e4d4eafa7c1543a982f2af356935dc546f4b051d796666d41f682cccb6b5da0792ceb369d0e41f65b485476a5abfb48508655e0bb035ef3bf344b60ab5910ab97176978c5f27cb67fe8320588619b6c41274d4cc84d2db637db40e837c6880fc38db7219cacd349c4ecee379b0f94e9820b5a2e966a1904c611ce34ca9102e32826deb5d98694b58b0ec12c5609606208d4ca538bb3c5d20b7ec9592c5c8ecfc058b811656c66666912fb38609651ff9aab15e4a8333cf290367c8cf8e27f2ce213867d2b55c154052baf8dc69509f1caa66c14c34dad5198547b66d5d6734425a44973b55caafd8996c12f8ebb21a5746ccf1549a376f65210f186614fb1caa75a32e0db9855bca4e48676e224029a06e790e8f9bd96d4b35594dc9f59f66ea79af190698791da1884ac593eec3b094f0ad914c1bf3a8d1d460a05d8cae9be1e34b28c94716960590a52edc022c7ecbf6c1d9dc49e6464b3ff81dd34267128f60790a7f925ffe1de28ea4903ffc0151ec0de8402e0c597703ced46d3199aa5f664b780e42d7827e8fa00c2a953427c006b264d68ee6576b613c563d26f0e02b2ed55e7aca08a76634156fd31450ee4b1b9065e9a1705b30e49cd20cade3018c0cdbf05c7f214294369351d2aab17615e20a03160d1667f1326030f3edf13da2854e633daa40074b131b535ce60fbe2ba5b81b2947b5caf98906d3df6831cceaf3b9fa96f3c4d35716888dbcd397a27a4212dfd65339ac75a1d822b1ab038af35d4b9d1f3a9279d1d9c5fe381ee8b3bbcf9fe82dedec5f21e5ab720d26818f7875e0899519aee1634d0548e13bf3c2479d5a467f0dcdcc74b4dc5d66896007069af7ded94d9ff1e907c5d6e30bfcf48a450c04ab3a938c2ee6155b53b8883821e1342b38440736be5f4de8cbc399f3bd7fc140e33240a690e5016e4288100a219f0ef31e6fea47f0c50ab0a05f2e50f0dd97bc4dccb530149194c21710c682a7921ab8482374a83738a90a9ab0120a0b26217154bce99a44213040f27f7686337af2f3d1b2d0444c59d02645591a727fc952ebadecdbb3571a199c0d5b83c2fb0c9db920826624396869d9c34371817ba259ecb44e11916b2d962c369e181a3f5768846b5dbf6440874210bf328b24cd4ff48a323f8d8369c3e2adcfbc9cc02beb67f1593fc1b9f7661b018032dc20ef4629f7e1377d3ffa27939a2a5d53d67245d5a7d4391a46c76918aac9f845a1b79d0321b149c4df168846709d321b7381fbd801f3375da3caca789ccc3d8c40906ba504f499c9014cd810855e9143b81e3e11b9136e04d764d685a13d6aae879cd0c66b3e8e5d92f7335b99ebca811b045e467d0b7bbc9afe8f8c98b84268e6e0dd06374d68ccdd54685a0851d9dd97b2d06f53664fb8bd4e42d7267cc60a2003f780831d5ac604424cf194631af16008e87b245579455504c5dbd1418b13ff31fa4c381f61a3289a62e5dbc6054384b73bdeb502e8185f9be7c6add121847e6ca1ce7205430077aae0fd5f13c23aeca51ced4b74a5a89dce7bda38a5803b52069fe7fbc6c010f3e6e6ab1a05d4be60eb14513c5d8d035293a14a2ad802433cc3dae652f058c4e68cb4ec173cdc7eb22e5804d010cd965dc63e1777c11b23d15fa8495e3329884447b7a8bbd04de7b4247cb3b24600873d3656dc437dac025633976abda68869994ffe2d1c0e7a7d04308acf05ae051076adb459b95d34cac0c161d398bf59108ce05a0a37cd85d8d10fac0f81481e86d2e6f44984eda2628324fdc0b7230b6011fb62e647256a4b035d6c5552ac208ef925621ea90eb483b1b63bf61402b5f6bda3592bc11a1d7bde912f942eada29e637b11bb39d59e45c4dfdea4c8a3620f90800874a3dd092cd0966cef0d94835f898a02b540a3d1f4c0400d54559cc45b68f65a51515f7e4034a6944bf472afaccdd8d00bc378fdc87f82ee5480dfab0ad7d3bd07decd244eaf210ccb0f616866fa23fb0ed0ebf157636130ad02f17e70015e438402175e8eca0c1b00f39cc297c1b211a4c5a508620738d71061128c019f0778700d31b9dd611338dc298a2a8f30ca33e7e847c7ad2178ff9558b35562a25b43dccb70a1414f43b82c0ffc21d37224f53f234c9ba7891ceb02ea7dc564d103f8e979809a11044350a90a9f6074b5d5a7857e0e31a937ac7460a84860a2ad41b1e3ab0b436eaafc24b2c74d3f03b6872082b9361590012f935d043bfe34e2d17b669098f3cebf8650250d966bb1d25499481d485d17f1c49351ce21da3e938737db5539910cca96ab2e024b118ccac0607c7469794dcefb70af53f35e738875db4e7d0652b0f43bfc21d1560638f14a187a8493f21703645d7aa409604d51d1a984081921a5f7157c697e44c19a1c172f80d4666c84895fc6631946b9301e050be71c89c5848d61ab21f3028b9d36799e51c5ad61c4ad9fd4736cc66ec146c3fceda750604973fa1d6204210f5e7917f40fc70092460780b849fabd02ad486a58439c50e03c8445d69741a7630d256936a51d513ccc932f74c6d2bf7ce842dc21787e84ac42db53cf0f0ee62194857c2c0c1d3fb204783ea6f31903b0c3d03037b89c8b1afd18f483280f510cf8069c1aee5442ee26ec2840bc635ba84e1ec24dcee9c1f40a83ccb87ccf02ea51fa20be8de14f713c28d0a200ee86cb8adc7502299502f2da4384c9ae95e18beab9bfcac6be49a8204195d08d3678003bdf0a501a1b3b2e3216dca8fbae2d9315ae0ee8a0577123df6e8f755a760ca813d5bdab7f1c791a9ad31a6c8d8fca3f0cbf3c83190754046731bacd4cc80c6186d8d2b99fa90fdfb9057bf22ebef016dae2674002b70d97cd746499bae45e0eb47fb0b420cdc9ac798051f076d47a3dc71f769534efbb1ea4111c92cc361268443c130f1b29a42444b0daa73476be821e373a814ba9c7eb0caaa198dfaa0fc94975db6aabb52c62bbc2ba52e43a8b7ea34538ea9971007421be799b84724489d0160886431853148b7b4ff35ee257f3b2c372f074898aac330c4826381b0e034ac453c62fa4cffb7dd15f0531c1193b8349a1a43bde53a8d5097140a99eb7cb14fe124f0a81b6a0808645cb3888cd4dccf44c1627ac538459df98759d611aafeb76997914c02b9a54440a26a2f3fe860e6e13f5b9932fadfde94b4d9e4cb74475ecf78883f180aab3417625aaacfd552f990701af61306e8d82aab49654bac6af7c92a9305f1505eccd4e54365159647cf9c2e563095b464676dfe01c34c143734d5d94bf639b6ab6b72081e3b6f0c7beece3120f2973ac680a94fe04a0e26fe9b32d4cb9634e37a39464f03e2a2eda21858922ec99fdea10698c7dd5023c2d75d89cfb15d07e54fd51ef1b134da341d64d5ed4c3649081f1d6ff14912a78661ead78c88ae9285dbd92c357beaa6375613a50a3954b25a33e041057bedcde74b93cb595af272e6e8b608efce2ddca571debbc509e4bcb9206cb6bc06dad2bfd5ceb6ae54b7950c5e8041240c55163887e57dcd0a48269a82d9685fbf9a802ecef3fc97b3450df05dfaa15b214401e79df3cd0e4fcb895139542eaec0c918148ba1ec589da1a5d28659a12252f8aee10dbc2ab1df395d619aef1977c37e66b78e321d446751b99d7735a2c72982fa657c426f6605522cff7369792f0209cfcd67c7d5abb37780184bced590cd432e60bc20a8eb7196550852049c2433dde282fe62be8fd3cdd47062144e64b0d66433a3c85c9b5f1279c6583388828de424f455f1334660e0977a5bbcb96bf4c3bd38e6705a2e7fad5e992ad455c3b53a5076fde7085b242a06c2af0159e122065dc5e69bb0b8a6dde8e3f14ee68ae50ae0bc3b076a3119cd3fe24a2738029df06def94ad9f8f3c55b5f09a84be748e0c6f5c98f98436de7cb5818f6d736e09ca290c1be3e9cb20bffe774bbecdf6f4a965b821608396161103d0a1abfffed4c23ba66abd3e07bf32d5e65256517a1700bbaef92b67b868017821258816bcbc33de6f98a410699d0aedbd317707250b4429988fd56829061662e0e9c90d3813966132eb89422e439cea8ee238d3ee1ac1e6e151c65eab4c1375bc96039895c1eaf5c6c258bf4a70a51bd23b6c642af5d6ae34a9d0d47a56fb308efa1ae3957163f434ce9c10467f6107d3feca7085a8c8ae2acb5541481734aa06e2a2c4af015ac26bb21c701ba7f4b88d77ec927bddac3ce88c71387b0e210a4878ff791f61c0c23515a63574381627bad64f858f4c598ee86992ff72a0b1823582b5955ca4cb0c84db2c8f07e199d66656a376a21dc71d3752fef316d0c4423fa2611156b2a9f78c22afaec21a0ea097dc4601d54d3412d87a8005a149f265ef83305f56ee340151563af9e8a451bcd78a435e35cc95c3785e84d7df0d2148b1992989d10052f96d76ceac58e69474a37af64f72c3ee1be794f7131c276f1c5427082336875a126b6224309a498f714048849c34ab0fdb1b9735fc97ad714a5586e82efc4e65c7b477447054b76ef93f5c356f842b064173da40c93de2fbc85eff9b83ae286a4f7aba42b1996d9da7c010996ccdd76743338ff0f82e5b5aaf1b41b66aefc3cf57747e0f9f05faba15a28745696a70c0b7c9ef200d7896319fea47b00c692298754dcce779fc0c7a668e7254b7663e5db3691ae268fdf87be5a7fa862259a78ac1379198360beb934a31669c454c4b704e6a1860a5a32d79001e5e6b6c58ce60bf866149df8124b4bb564071e28f51e7da4e495262d958dfe10630146fe6ad226347713f9a8cc26fa6cf2b6c27613c542d9531322bb6837410c8845bc983be35f96691a1bd84679a15a74d8966cdf177fffb525ebbdd67b2e7df24d0aee65c630722487cabcdb3d9f7bc8d007d7821dc4c1c75a8c037fccc4a3fb1959846c6c04ede1b97d590267b5383450ebea04ec359e4cfa772cf16c04d8c3db196c3f4fdacfce0c1adb7e1e27ae1b3f8582198c556f70bf71ae969d49cac62ac0fbad843c229b763da07f2d6948c0e80730d6e16a5ede9f98bdf9f0be6aada37f1484763c0c7308b35cd3932d964ad3a9955edc3960efcfd6c7c24c6d5d79012faebf43b549f21e6becddba5806a8ae78f94ebc8e41666281f61f585dd6adbdcd29cfb6e6df6025c2d4b201c6a10ea6365b702db91c91d8c9d517e27acfea0704149f9a926827096638794ac6c5f5e3cc4947826797fb0ae3d74dede76636c29fb7961adf6b8383d4a3ef1703067e4f9d2b9b18afe012e4e7aa6be62defafbde5341af098fae8fc659889e3539c0a3717555c93442e4e95ba1dd540c5a9e4d3418cb3d3de27de964165b1cc412ce05a540b5731eadf66ce0af01611748eedf7fb24acfd9cc681e48586b5c61aeed9458ecfd9dfebab98b3e9a8e6185419eff94a4ec1f655860a0a54ef57944b4f2cb4aa3896a870edbfa0929c24b6af7e502180caef6a450202405685b980c4d67cf5a56448b2ddaa7605e581dd9ad9de29c6ff23613a16d18e6bd1500ff768a81e287be9d13273ddd55691c0c3de4d94f6fe9329b516d40e453c54e37038ff34753981c495e3b6e3f7c5bf7ffe3e4b4cb6473941798aa8f62b4eeb6d6b8e8ec078ff5ef6efaa4ff84c4866a92640311c9891e191c05475f20a4389f219183d9254f95977e203d04b8835541e0243e7675ce138943e342219dff0d2cd8c47e501e38c3c63a0fdd1ee58541f33c6f83727fa0db467731a67126c792a74632b24661406933e001e5537179b49143a8fc7074b1bb5659f7f6f80c473951e0e01567975aac189e6e4acc6285b0e6ffe8e3b77698f39b8e95b4149d756ec1a4110eb08d69421ee0887107f00c08e22e3984bf071c243c2a3a70871fee8037af4e38bc8438678a0a9a8a8a5c4b097f76b8d50530ce8c9ec8c116992c037d13303353ba63980fed9e3b401c2ab81f2adbdfb7591521e9ac2c5a8600d6adfbce5a883cf2406457df7c43766a6a71d3c2bda58bbc86d9c93041e2d78048f86a3ec572a4b0e012f87b5b5ba45a61c6ae2b72ef2707970c79d22b29cd19610953739b7bc139664bf74892be87a91fba975200e8b7c77309ae7b04e9cc954e125830d25334ad5412c24d96f813b5faeda134a8e0a2651c23b44c4c170cfc21c65292b055d24ee0481df2cfba411f40427461195cf12dfb99c2a6bf3107a9b49fe2f42a1b7974e23877d64aa106f029bdd75069b8a4ec4fcdb02688942ce7c65fa1f44025536a8f02085812009312cf744e47abb3f4a13d4c31560681dc405a15e809a8830c390a0510ddce85a3e64797eab8ad51b6f2270933c0b816e48ada8c6abac5bb19ee284e1c3010f7fa3e87a66835d5b4370f7b1a1d8e5a1176ebf5e9ee0b0a4055c92840af5e8f6056cb10f6d70f4cf8253840a4f67a0ddc2b7de5286a52da91116c39201d74c618389b509269450480056c667f3abc6d78a1afe702af6dd13849d81b50190546d1967113ad2e54fa44e1e56b4d853df88880529455268f83f1c5ae2261c848d00c3377c4011e1d3f0665502fc0b19b3a57513fd90551becfc3d915b39aa422b5f543a61837a389059cddff3d2929655437475cc03a5aa9ab916ad9a936534f0f81ab12fb8d70c80b102c1493c6d0f228edae4450b1d2a9c2299031dd7ba16c9fef8dfa0ea3f37121e58e3aaafbd6bb0643523581351efc88c0428c2219212eba9fc47c3516f007db06f7b08808940513bc5ca285934b978b5f211b071bc3d999efad8a06e272e54f986299335708abf88cb4f651f4941bf285c36235e365121542561aa20f1090a7c6d774c7ca284e56d764a20248090e8daa0a9144a4c962569d35f6b44484b383de088b0b00e8eacaccb28bc1b9015b95b7ada3b4ac9ef125ff40ddcc3aa7f74ba17ab77269776fa0975e515d991f3389fcb38babec56f076c892b054a787dd552308148a4f07e249d6580ccfce65dea1fee44440035e698d6e76ecaf6f923419e3f8329300658eba6f11f95f3cec8a490ad9134c52694891c1d9b7452f0ab32ece6c58977f248eed7ea664bd828039dcddebb92cb8ba3c8dd4f8eb15ab7af01dbe0868ce88c86825f04b7897e864ba253b54a599eac00f58890a7979bbd037d886b27087ddcddbcd874eda425979091ec95ad02d0622823250afaa9756967c453b64bb6632a069c81c84851221e50828a03881b3ce7691650280175c64a384f02dd617f147506cd99a1eed14c9b5d7a99a1acb2e2cb3e60f6f31fe96a307d19a095c4834ad17de28a02e5da90b362ca85a44265aa88bd2c860951e1ee67294699c2155e3996bd3815953c664dd2a2fc0299da238a43025cfc08f807bd98ced21b1d11370f292418bd74ec07d5ae0f85c377d53d71c6bf1778c49538854e09b606c6a4a46028ed4c21d665440208d836da4271dcc22df67c5e3aa0acc6ed17e223240100c4fd3e7c645eebdcf34d693a800ffe586408fe86a490b08f2162f00a1c2543105b7be4b1320449e1b290791d87f55e4d95ee3a86c74742a8bc6af65bfde05fb3752a80de6aa935f2bca3afee617fc4f91b0d27543dba8000687fc16a105b7da27e2ae5f467356db0f671fee70b9775fd8a5850c8f40d7bde45ad2c72154f8f8a987c2aa4c38b2c5b3b96cf7167db0c4265e5785e2abff8ba7289cd54eca91cea2fc55377aa555eadb23288bcbb082fd1808b8674f99219c90c408d8a843444452894e36fcdb51f12a0154f864bfee99f8066753548d12f1ad4fc7a69aea8eba1db1f6d41f301a1a2d2d2f3dc41f3f70155695ef38b105a6c4ab4a3299e0c393af14e920736143db4a9839b590695ba9dfec5486858c10b42116eafe2fcd4fe8cfa5f0fbcaee80b659217b95bd8a6a9789a6c62cdf1e2bde813d20bcce477bc3596f57b8708457ae62cf432fb8d4c01013a247a063f22ab65796951a3d0e2cb7758520cc4dc31b6efa94727da9794e5fce8a994bdeca8390805d0ba28cef9377f7b6de7588906b19e95f08b8b46838074326572ee594d06dde807adec4c01e4f1a0caf47e320e51a94b1d151b2aacc6bd10322dc3ebd7e6995caebf72cd06b89ddabc6fe0d9f6d4388d069913a692b1e66cd6df6670c37c3293a72962ed83cdff6ae1c3f35b70bd6eb797d428f3217c19a7b388a36e5554cfba99553acd464394641f88b8c7c060c6dc6e2837b16e8a52a6948479c37f75aef8052e9a095479b161554f15e97789a5227115e3a51fd46782d4b74b964724aa1ca0080c5d00c38796090bde74437644ce7a0fbfa11576e8c93b02872bb051ef5296dc95cf1e6dfed94180f627418fcfcbc839e34121f004241e63e25bd2746897e19545ba2e09d998c669b1581031cd31a7d136758850060c50774c2bcf1443345a6b64d1088d26b67f322770db3734425d6ec2723789a93591cd1f29dc0136b1ba6d19b5f8d7b5e83c8ef37d80a9eb8505325782e83051fd02244b121477c35a9cb645a508576c4cbaea7fd08fb60d7a891a8756b7d222acb0cf594fe1c64c8dcbf48c219497477f555ca494d9bc35d859450032e9d0c50f20b7d8577e7fb2e80367fd05fda78ae2d36465dfef138628a4c90098545979c18ea8e65aa9198e1d5457d341ad890152327b74be02470d2e75894eabd2255a7afaa95fd2f04119d20b61a0a1ee8cae81b6d8725bc8275194aeaf70bb4c292161e665f6e5ccfa9075807f2559f7d21cac9503453197289355f660a9dec0e031fa93abe89a000414f2a8bc369b5c7940c2c8c1f44c3e27a9b3b6f011e88355d0f555c883f13785879fa3585960c0d43bb7de543d5443dd37640f01e7a9db84f53d6a1eb6830f30dcf37b0266af8c21ff36f27f82ce32ff28d894e55543a276b924e0a2c87a5d75f03792b8422469c5a533bda448bb195e8f2cabd93fc86529c0cfa432c25047b45f619f17e4d975dbe19f93a45dab2e73bfbbbc793685ec91e40fe3ba3052fd0cd2c73af5461182d783a79d5f0a5dac567cf5a5a2db3c988580ff7512cd066094608214827a265f7265d03f67e5c04bbf3c2c369a03f473a7430741d61dc11cf2b0a0f5a54cb586c0ff8a50396a34cf43b235332bc90e3b6f3a253368b48ec810dbf02bae6d4b9d24dc839d810c4723ae2e846171b6a04cf1022825d33bcc5d4dfc7a1763a031b4c57508944ac6bd0d0e26193bbc3958a0a86959863c712e277b7b0cacc326d932dd2d215123523b4fb3780c4a93491f147de3b3a7bc5c0b19108c0968a1c3b02bb52ff94adf21ccd0c3d4b0cba6ba788e6dca49e0c0ca77dd1b395919322c1181aadf5dbd891dfe5717d2e52445eb8a898fe131ff74315292b492654f4321c51f555debc22776972506835636711be5199e44681fdfc2329999e19beec65d9158215c2f4306c3ce097047edab244d646ec3202920c0aabc51f051ab562f87c5e28ba6f5d48d79ef7056ff2fbce650944c374fff131c0353e93e182777e975c8a084db588d6e639a5985e6dd798690a937775cecddc0661124a5e6b1451eb5a5a9589df3c0853f00ae63eb5dacaa0db03f4ff859c334e01746c5ba48ec46e696e2bdf1ff5c92402631dd305a731ae62585b45bffa0b4f600fc48fb3b4ff08679410f5a53f8739592db35323286eebeb3474b72579f1d60f8899617824ed833d6ef0409b04eae144ec416f94f84dcd9448f4f57b00b93f3945b9603e474aeb8846414589078dc3b260c593e2d77fa71bfe9964155b40a3083861f9018e47264d1d527864c9f7e8eaab538a21b840613e6562a1068d0164d1f5cb3b427b4da3b172a9e8acde703e6904f6345079b65c046ae46271121e49c262bae8e462f687c9de1822c5441815024771fbe9b4fc0a0ac6cd426901760ad2cedca51c772f902b01186fbf805165594aad91dfc92a328a46ae11e7df18a5048d5ec0f7e99a314418a061463726023b956803faa31ff4a75519c694c77cdfee1ac2f947af53ccef8affee9cd40c9a42f03f0c4d071097a711ec8de531d9f0f754a187a5008ddaf3912eaa4f95eb2c3ed76800f370fedb8d2fa281b8f1dae826f75d05a7119cd7d80c0cb7b9a1a8228dc04460246ce79585ccda38f7e32044abcbda0bc815323bd50e748ef41966f19fd9aaa15047cc26acc390ef3d21dced16ae0321e0ace96dede528cd6a3805b6abda0c6b111635eeed2a9fcb122dbcf17b80695feb396c6604e4ea20681069720bde54df0f13707fc49b765d74491063e2e91d5d6f8a88d6813186b657e310d2389c879b64718047684ec28809fb3dac651e7f77e22190bab7f9019a002ecfdc35827570cb17c26c701e115df62cb8a23eba8a4e2bc73e2dac5c4846f03758c6e6657d4c2b6911d5b9549e0f090efcb935c318ab894c78378d0a0d8b36fb79b7a31a59300c843412b7e78188a40329b6fef9b8a8bedb86dc0c258c0a28b2d679c45bb64e296bd33d7d557107403bb54239073e9058727cacce5088e220c0c5db28fb4e6a4e87dc7c6d6030f604c81028486262e38407f8a9b27467eabeebc2570ca7b8111a852e9c61c4465336cba65a1215d66cf95e09754c0c8cc9eb21550080e59a06e1b6330f14149804be71a72c2724f5087a59e472cbb2dd7c4502aa0d07b22d9a28d8ad023a25b147620bfc58ab344b09859c339f2a1143847c2ba12573ef1c654097c3b4ed78cb5d2e0064553f5ebd50f687f0472d22b42dbf1dc0a150bdf291ce4a64cbb2f07d0ecd23351c0e3c8eca92386040ae3c4ee9084f70d22f97e0ea5e97613ae9eb55e77c5a0e4ec014351dbcc015c3eaca7322fa0601eb782db4e13135e37f8478406ced3fe08d55d2ecd7f49a0034605f48f21e9c2019aa9b99d68e102283164e164464eb7ff5e0761524c44d19af9a1ef2ff781ed038cc30b499ba5500a84eb7e588d7e6f8e350228b8c37636b2e1cacdd4b20bdd6c89484257566e1abd4d8bd64e32e74553f0069be210b1a5636c952ed50f7b90ac27388f0b23f24485280bac5a98338b09ca1e272e04d1f590878266c02c6e97c3f026290ea47b0380d024045cff6215c19a2e0a7527af21be07115cdc4276d92c590afe53ca7b23b02871057d4aa873c2249eec58df06de54199ba25c1ffe621a90cb51db558c10d6be7887f07dd6078fabfc5a39de515012061375680407ccf104ae1485ec1054107066351df01094f928d5f444d709c218d2c429159e148d205844abcc56499f1f83ec96926c8bece24b379276b7a815985ee11109c96176544a87b20b3c22b19effc28fdc17abb44e7dd55b1916dd4484ecbd534e12ee108b0f11287303f0ddc215ae5c5105153648419323042004104b86847a1002801a66c890c2054d483082238c90d170c35600c8a0842430c1316d31862e7041882066c88029020e6e208318ac400525680003102013c00f4a86846240f8c10d7cf00226861cc10840f8010e6c10031878a0090518a00057b852842a620003294ce084e9c55810cccb952664a1041dd8c0052d40c1071c00e5459900840842492ca8c78b06e605083fd0c1052ae000272f0a20003121413d5e32bc9cba095900e1073bb8810b5a8082127ce0010c70324400623bf478f5e8c8a1790173ea2d9a90451276a0831bd8c0052d28c1071ee000064071b204d91042f0700386010c447c702103126e445980029628c1d9001405e496a0606df18dc113030a0cde1756213881c0fb80e744a7e3e57c381dd862f3e9f0b90c0078373a1baa19be1a1d8dd38c4e060bc68b175febe4e24586d6cb0c2e355a6eb0c0b054ab94ca4ba550a8afebee19ba1b876eada67437bee08fb4992bbde4cd8b36a4b56c92ead68a88ee5e756b75bb3b876ead88d038fe9ca3cdb8bf4871a58ea967ea3d7277de790b7d52ef6e9bee36c2aabed05271a1bb65e896ca4af7cc6d95fe4dc9697c071f3eb3830fafd4f6b4ee66753792aa089513ddddd22d9505ba7be635eb987aced18600413088d890d40caa9ac617acf7739ee4cdcdb84f9fa743b7505040515169c62ffa2dcc13e7d956c76f45a799f9f096568816ca03a8282dd6cfd3b1c75add42cdc4faada3bb01d02d144ee30bdec874eb04861314badb6fd9567ff49af50fe988fddada9d19fbdbeabc8fc759fbf2e6eea6d12d03a66b4277dbe8d68782eee691e33ffcde32ccc183870f8f1e1e3c3c76f0d0c16387870e8f1c1e383c78f8f8f8f4f8f0f8ecf0d1e1b3e3a3e393e383e3c3a3c7a7a7a787a767478f8e9e9d1e9d9e9c1e9c1e1e3c3e3c3d3c3c3c3b7874f0ecf0e8f0e4f0e0f0f0d8e1b3a36707cf8e1d3b74ecd8d9a1b3236707ce0e1e3a7c74f4e8e0d1b143870e1d3b3a7474e4e8c0d1c163c767a767876767c78e8e9d9d1d9d9d9c1d9c1d1e3a3e3a3d3a3c3a3b7474e8ece8e8e8e4e8e0e8f0c8f1c9e9c9e1c9d991a323672747272727072787078e0f4e0f0e0fce0e1c1d383b383a38393838384b38f882b8b2de645cedaf0d870882a5668665c60837c207e05ec352c332007777ef8ee96e18dd7dea86f9487f7d44665f0eddedd2ad6f866fd5dd35bae559a1bbfd359bf98ba56636f357aefde8ce32a3c9371bbdeeb9f6e3cccc5fe28f74d6ee633c77d8610717fe5b9827aee5e920075e830387e7e9e22385b44eb2bb5fc0784abcbe1c6792cfbe5aa1994fafd6673433e4bc4ab57cbdaaa5991c9ab9f8e338432fa8bbbd5b1e0eed98e692e68ee9dfb2bfb0584b4bf39af55cda5c16b9f6de20257baffd6979dd0d824fe86e55b7baa656d744e33e7c78ce8c77f74bb7ca035d9019ddea64dd1da35b9d94eece7424b1cff29cb5ba9fee96d1adaea6bb5f74ab4b5a7ab1521f6792c5fddd015f50b4b89bf093681cd319af3fba0f7f9a8b63696fd869da43d2dd34bad57d8d2f9871b56bef7dafd3c5afb7cc7fbd5a9a67ae8ffb91c451cf74deecb64a739eb86b6b3ebd5477dfe8563fe96e986e7513ddad64c7dafd24ebb94cc349ce105f30fc2499d2bc37e1c537a11dc77993bbf3d2e8d8dda9eeeebcee467da7eef6787052450a52d0036bc61422a059810e8a2042020c8c6a40d00105973168c6e5041f2a309456e017989882d0888026583e323419c8a102a34602c08fc44037f070f4c4001c580d814583265a7a0a2626587fac1b50d1d202837bf30c18ca8f544948287f0940c3982c31313131a96472cc6362620a22d2049692410a40ca918864a49477304f25933b180b2664096f710181ce3b99253aefcf754f4c4c4cb0d34bca3f57464279f7799ef246b5f78b109d77b983793252742e1bd830f279cadb5d70a0f34e66033170f2394942c70fca8b584a3d4979bf20e91f54019a30ad562ea313d306ba3fef5e9610a5fc73a55248528e92f95c4974442aff5c2a37c2f3cf95a41ce5256144cabb1f4fa5f254ca817c2955ca9dac4e491881f2eee784a4c9cfe72857114d7e500ee42bea9f4f2609971fcfbb97259fa76492e87e5c6cd1de2fb4cebb24ba1f4fe6059d1f91f24e156871d10009e527995393af0b404bbb987ca895130220d179ee9dba2e052ded5dd721757ef2cfd5b14ea75390e72c57ad4e2ad6e9fb542ad6e71d6b2583f49d4ea7d3f79dbc228e3a6779972a22c97394cc5111a80f55c46ae52a3fb9905032482af73c05e44379de21a964987c291793226027171e2a8a96f6fc3b72b5b474b1d3cd274fc924799e72948b090d1852aa0818cb3d17131ab0944cf732a483ad3e184b86491130950cd2c93d47a13e4f7d1f0ca9bddb65d0628316d268adbe1e16ef968bcbeb7e5c8c38c2f3940c93e79dbbfaa7a5c5572d2ad6c9599e9393b778e73262e59db77269c2c4b47225c1c3cfe72c979327ddcfe749f060c3c8c95ddce86b711657ffb4b4b40b8bcbc5c5592cfea4fb61396971161926cf498bbb78e73282e5ddaa732358dc6b6171b9d850390f30a4cf9dc8799e7271c2e229971397ce4586e97362c4119fb364983e274ffcc7c5bf17205a9fbbb88c38e2731619a6cf3d23469f3fe97e58be723de97e56cee27292040f3f2c7fd2fdb078e76af1ef25c8869193bb38109fb778cae564a5a4c98f8b8c115018b178e746b0dc0816ef1cc89772f50fcba5f2eec7e5821693de02a692417222e7b913b9939ffcb361e4e49e1b9d883cef5e884edea552d03f9debc993939327279924565f8fe79d04144c7848e2e49d7b2e274fa060c2030c2989930c144c78807dee4d01fb94b4b870d0eadc8610434ce19a41114778fef9119d9f525e849327fe83326239ca8f90292209ff41c9147144ca5964583247ac649ef84f7744aa73944caaab2d366861e7ed9241dfd0ab17b88f161b42b4b7db18a28b7145d179ae11b43c27063080f7f059d1339d7f2ca897239f154dd3f9c7f2e2aa418b85c5bf2baee8e1cbc29b6161f9aac87c555c50b43af7bceb588e4e4c3016ef52aed393d302fce4c4098c65e52c99d3024e4fbc99cebfee099e77252881ab045d099898a64c29c1134f94c055822b57a64c097295a0eb3a1278ad1b41681ddd70294dc03ccf4510833ab94e4b68f5ea89d691bbbbbb47e149a16b69559f6a986a92a87972b43a2dc09be9d3024e4cdca075748aa2eb8ea93b3d79a2bd86a92609cf755ac02a0a27345862064f609f2a0713acbdaebf66a552eda8971e56ceeaee5450b35ced4ac97c5930d9a0e531d15f9528279fc9c1d7d3797e344305d632ae292d54f765a13a59d1626a5de9297c7036d0ea602a1dde4c6ba18795c7939239ea2c80ac56ad160d1aee3a502826d849e68ab7ba9280d691cb952b30efa405d8152dc0aec0645cae787ee47205b66a5d49b9400aacc5851664076349ad567dd3c0d8759d775d8b89ae6ba2936281aec5444b8aaa83a95c28a6a3d66269b56ad1b87d55bc9e54138ca5722105360511c00e807ae9c183a97c0a6fc6638a7912c3e4b94c5103125a4274b0cf9b62e9eb49b97b28a62956553e1a6fe53205938f8f8f8f8fcf8ca6ef63a1564f5a479d1327de4cd3aca765f42d79f23991945613582ce5aa26847c3095774dcc9c78334f6028260eb48ebae968d5755d27e3040a756a02b311ebdc9bc0663e6fa6ab8179352bef07c5e4e240eb68858ac28b80e7569adac6d544cbfbaa50e1f5a8aef0683ccfc2ca14ae68411506a65e02e63d59c2fb6999d3931b605ddfe0cd749fcce98995afc7eb9fef00adaeebae4a7b332e51a2e0751e8ac5cadf4704170664a0850c9e20832a3d2d1868610a26179ebb985a303cc68f7cbe18170c978b1497296af8294abf4e2c2f5a66b8f0187e7240f770e15fb79aa24bada6f87a56543e9aef9be17ae127570ac6f2c24f4ec35b585e826878cb8b1732a8a6f11c86951595afe7bbd2349e7f5ac04eb019aeee9617325f53cf78563ac7fb602f5c1f4bf7cca9dbc6c5116e8e3e2b3ad88b961930aab48d77f2503234ae68bdf8918b94afa7fbf94420031315cc7369e2e47279628a18aea3ef08a91aaea31ad8e79debc5450a8cbb48718902c63f7769e2f35ca4c8b84ce93a1a343acff564c8c9a5c39bf97c783c9efb5153a9f1663e1c6fe6f319b2c400ad4ea2e5793b6a46931f1b1ee346363c26c66dc878324637dc86db9029c286df9069f2e3c207f6c5b80d3ff2394579f11afc5b51f1f10144ca8a8a0bc63bf766be17293e3e80bcbcc8dce0cdd870d9f09c06bfe1312e1b9e8c0d23316ec393dc701adc86c7d0e0ba4163016fe693b262e23485cf29cad763c3bfd56ae55f930dd72ac6759a028837e356b48e4e53b848992123468d19fcf315131f0d77f1d504ba070dff5ca4b0b84f0cd78c1966b8e7356af8cb8c1a33bc18183466a8e122c5454a0c1a33d4903103068c193466a85183c60c9713312e23c663c4c0f08191e1c58b1755bc4aebe4302def17efc5615c4d60decbaa022c9fb3fce8b372bae1fb5aa81994687121a0e5798be7ad1e948c115018817217be923122e532f8ca5b3a171b4650eec28140b90b1920522e830cee602cae45db7c47ee42a2f56921733ab1f86ad5c2e2ac93af4e29d7d77492a2423d69e91b8e685cf1507e14737371717171717171209fe7727a02f364905c5c066f697171cff39537f961f9ca8d58be627d9e8c514c939f9695b3a4f07850a8188e9a01c64f554e314d2e95770ec43b558901e33a55f166ae3835c5782172b222406b1544e424c66b3810cf08288c581ee346ac646c7cbe721a4ec36bc818c192b1f1c9d83042c3579e84864c921867394b8aa0982962a6b40daad51445cbf7bd38558999e221d13a6a3501f162a67c3dac271f0dca61c06891e998a697273247df95a3560c19aeef254886b71cb17c7ed46a72a95433bc5fbc18ae723581793362784b0c07f2c9603d712286e58a917171398c17ae53151758cbc5f5e22e5c9d9317998ec99b41c0aa29e5d2d46ad1a0e1bd3c39ea5e9ec0584f5e9eb0f811eb09ece5c991cb6ad5b4ca62c552ad9a564d2a17025a47314d60681dc53435b99e7c9fab88fc2d9daa58d1c2e351b9486f0675bac2e3f9bc0975e5e6cda85c3daa5a3c57132d957fdd136f06e54cde0c6aca4783ea9511ef6725e362a2d5b1582e178fc65b502eae27ad23d69314cb6ad56a795e4cd3a98ac7a3f2a698a68f0ad851ebb4721db9a864bad03a623d590013ac273c1e1b1e8af5e4886501d61318aa53b9625cae03b4587131b556ceea66a8d204431d91de0cca8b70ada2f86856534e55bc19d4d1a9c9e3f11ce5315978288fc1f439aa09867295e7479f4cd731798e6a2b3dfd83d28286c77284d7e453d1d085ee4765e5a3e95c75c58a953e456997e12997194e2f41368ccce030dc6806191832465fd34783f216944b7730b11b58e00a6fa66beadc8580d689899753142b5a9dab9cc58f4e5182544ea0c82b588c18effcbbc2e3b94cba2d60343caf6035bcf3af4abf3cef66b88b7f56748f19de7527a6cf4a8c4b867bae14cc35a525c33ba74143869f64d09021f34dc19b417da8a64169d134a8132cc6f54da1675c492b980c99cf4acfa0fc85cbc977a573505e8023987e5e7c3019aecf4a0d57d20a4643e6cba267501e8c86ebcba26d503ec3f5310186f20f8bbe413901c363b89c78b2fa81e13130643e2b5f53dba0dcc58016ea040303e39eebe8abe2555a9ea35a27172f2b7f0962a1be23c03e6f71b95051bc262e4e2c1ab89eb842d07281797f2e97cf53ae03b460ee85d651abe5f1b8c7933a398e8e23171f313247332a99cf25e5c2424bdf70d4a2a2c2a47ae26b524d9139fa9aaa74fe79939f542763c3c8c93f373af9275304149d17f1f949a63f23173ff949a68893bbc834f951a9a8c03e3ff991ea0914b48800d612c54995ea01aaa5a5a5c5e5555aa9229e40398bab09ac9b99b2525da1a2c25505a5a2d2e4a2e235e94ea811b4b89e7cdf47c4e3f98e3a07a7eea873005b726b39ad56a9cfe5c150ae86b9185a472e6368e95c4ea796215f4ff7936a226f8649b7851317163f5a792714ea437d37cc7833eecd783cde185c4bb452ee2edee4072563c3488bbbb8518bbbc8140105ca8b50c9a0648c648a689169f27352a295f26fd57247428b2593839694a75229958ac8106fc6bb793cde8d1b125af7043b724fe5603aa9601dcfe74b6eb0212bd4153840fc063f7ddf15cf058aeb01ae07b81ee08ae28ae28ae28ae28ae28ae28ae28ae28ae28ae28ae27280ab0150a0408102050a142850a0408102050a142850a0408102050a142850a0408102c56be9267221a0d5de3bcc686a9102f6b54c01fb5aa6b4cde72e04b48e544db0cfb7681dc168f25c34c198f2f5b898d2d2e4a2a5c9454b938ba69626172e5cd5a252a9541e8ca6a6295f4f5393152b576034c1a841092def08ebc785115a47309a5c34c13e6f82d104a3a9094653125ade118c26d8e7dfe7ea194d1d132f0135ebd7e2795fac74e2fefe9517aee52387adb947f2dc23c9f2d2571f5dab4753fb4bb4214d4dee9166ba7ba7fb3bd2dddfad1e485f7ec9c486c489ddfd80ee76407747917d4893eee379cbf9c2a17f3c6ed6d2078c0aaad08287025c8961f2e9ee5e45e087259dc712ffad65cdbfdabf8fff96797ecd655f837880ddf8665ca9e7eac4b9b5d9de27c273347f12f7394fd4067c96b89f8b184077eb300026bda35b3e31dded12bd4eff708ee45fb7b91b04a16ef588a01b8f93e6fa2593c73f7c78c6f347cf37ac140838ddeaa1e546a222207eec792c67ed45af16d3d28afeb44cbd66de12e6d70a71d006be83348aeb639ffe95e2eee717dd66a46b953c378ef37e7d9b8f235572c725ae8fab0dbd3eb6b7d06f697f7010e332cf3b497296a2bda4e7c851ab51d131754cff4ea5ff7110d77fa5fc34172dbd4f56ca437e9b8b1428f4bf651ccd9eebdf5b06f1719c41c4173fc88e097437f8642e3bbe4f242ecd22208e66fc2e3e2ec50fafad8db64ab1e3719c61cd1601674142312240b0202019d011d890d76be675deaea597748c7fcc55d19fe6b989c39538ba3471487866ff69b3e732cdf545ea60b59efb5bf61af17319fed2fbd3dce6985b2321d90a653c896aec6d771abded8f9c60a7d6dd61b52eb6747ad0a0f8e27ff5a7e1fcf314c9d22bccc132749cbdb53a6fd96f9157eaa263dc67ea7f2dce31bd19f9cb5669bd5389f877fe1844a7088bc56261b1582cef41f8df8c582c164bae9f14d4caa982c562b1d42c8bc562a1c136629d3638d74ffa9b9da41b4b41108756bcb9796132e7dbcc103808c7d98ccb202c168ba59563443798a3fd489b7e9ff45c27bd33c9bf5ac795ce5c6d10a3719c41404c6fd9733417ffda8c1d83f593a8cd67f9b63b89586b04139f080acb5648fc6c85b21512ff48b6422f994c682856742428892ca807d89121a32299ec950003d408b145bbe8ee2fd89cba2bf5c7cdead3f1bcb97f12cde1f4dcfda42009e0f0b4706ef8cb6fe86e02b46eb2c03f92348f25cec55a5a2115b899d2dd515cd7de7239157003a3bbf3d2dbcc5b4e57c66fa3a28ff3b1cf2325acd29a675b83743711b9a5ee565202479b30d860d12db3b1a9b58de2dc563780059690ff8a8f9b75fcb0cef07eae4d99f8d9d65abe6de2e85f5296f1974cfed6d2ca13c620be4893ec25fd699e718913830e48f2cd7b6e9c798aee246e66fc386a8443ce8c713477b74f7737a0bb71ddcaa1011c9e4ae1acddcf95dadc30f11ea4bda257ebf59166f6dc58bf1c67925b786752a5b97e789fe80e7d1dfa3a942bb544f63e10ad1cb0ee7e9c2dfa6a858c6cadc6329e4468a63546041d67a54282722349c21ecf1b9191add29b8b64247edcac399c24ce0679bd927476ca1fb2fbe4d2c4dd71669b654b13f7c3c7d2c48514577af3d2cb1e4fda0f9d9dd2c77da2a589b338a33a2380fb44f8f59211f9213e49d29bf10b87a7928f0e043874740eff5e1b7ab6d5bd465dfc1c3eb9f48ea9ffcdc87bcc64d7ca66e2df30adb4e6f7c591963ff88238531c1d6f88babb1bea16e74f55b215a922f9b114ff16e26bef0d22d23ddd6dd4ad1c9ce00b8af5f3d2f7e86e01742b8798ee8cbfcaee672ac3d95b93854fe29bf093700083f849f7f11ff9bf42424c71af17ae8f64f3eb85cb3c73d187758ef3870674c4d66aecda3cc53a8b8cf33e39344edcb542383789f0ff6085aaa5f87e92ee8e0de91b9eb71b9eb7d7eb060b74e76b6fd8adcd373c6ffe7a7c3fe9afd758778b31a2c7d15ccbdbba81a7bb3d4f77f13359de6b83e00b8a7fc3f3564b7cc171dedc8cf3f57ae56b49b2c4b2c7cd5b93194283208823ff5893e75f9b672be420f671ceb10cc719fa2d5325b7552ad6d2ff4e7f25aff1937e94bdba3ba887f0f11e3e65109fe95512e75f9c9b44ff3519ce4d12e33906c1788ea10c4ba7bb33d2721de0e6fa37e4c47d1928c049484a05198bbec30e4e33537f04c38b9d784ceea23bc76d6ae363df6107bf816f131f5ff045fb83512c088c0816c47df89248ffdab0d2790b4265b25cfffeadc66e780ef9f1e30ef131ce5c2d11f4dadb0f9958f47a3dbd5946e224f14ea5aa64816c18f7c3a7f4117e92d72bfca4d74bcc5846e299a798a72cd7c7334f2071fe1071fe4d67a74cb2a46c69e286646bafec6df3da8c85aa2cd7bf93a4a109a1213a49af972c5b71228d969c7902554b93889f31c5f78992f840ce22ffd7e8671c4b2156c8467fac35ba7fcb4378a4333f90f84548433212172ee566f8a2ecca648f2bf15fd25e5167a714477bc37f6f5926d6277189e7c89353ca32beb4365a4bcb982ebd0c8fb3da28cee550ae4f491afefd4123e4495cb8c46beed370a5105268c79f99a738f3e3648fabb1fb627d6c830891add291468b5e2f5cb854a98dde21317483e2e74c71381bb274b71620523869f6fad3bcced0f3bc659fb8ce9bbd3e69dd0a75b70d53b76a68812f788314da9126fb3c453ace249b1b7c833377cc70078f9b1c9e9c59cbe9d1b1a3a3a6a3b383c70e1b303fa6998eb3decf4bef41b3568d9bd2bc3a39208e4d55b29776c3f35603c8fd86e7109b6e29dd5db3c516dd607713c1e402dd5deb168d27dda20d652fda8a3f89668aa397bcd94113c39e1d3a37393a13a76727d421eeece8f0c1f91e9bcff3664c2bf10dcea5450aff16de646abb3144b768d0e8ee1f69345a6bf8a15b3344409648d6e6803b3a208e0d4db4797ab30edd9d8366a4cd5ce2c4a7794e9c7fc73963c38cd92d1954728f241b6768bb9ba6bb198080ee0ea25b328ed0e8b803e680393663b59726d5af597b895eb4e103e5fa9806c3b448b6569c7f2477730d1aa738ff48b6639138ff06b33dd09bf11f79715e1b89449c3f24645284090ee889a0455f7e69042837c73f526324ee0e092271774877cf348ec6b2cf33e3d70bf719e7b06cde49667bc3e4ac459f672eb2556a9b187f112a7400c61555f0b001283441074f58e1238818a926ab14b0c0a400080e701710e1d52ca8e086019830050717062032015794171d085c000528b0c1028d08d0f841151f003a42084609d82109a9eec6d1dd53ba93747b3c74b7ac5b31639e369a34ebcdffcdb41b5c2dcde18fa30d6f7a7ac2e73177f0e8799e7087f63a78668e0ecf8e5aed75f0883d383c7878f0f4e8a0e9087b6ec28ccb7bd3ddaeeef6eeff411384c4dd21e2db447a6930af1163f34ea2191fe127c1e3d73a6fa10ce3bfb64a6974764aafd1d929679e088a65b7304f1253f186e790d7abd2790b65b939fe15e7df6421139c8c094e84e1a3679e406f9b445f7ec94446e24459fe719ca40c9763892bc39927908dd6aa0db2f4628d0de55ada50a6743fc98af5efe75ada206f9b44e2e352966f36fa4ac6598a34898a95ca9626aebb6be8ee17743710dd7a016b7c4171a4254d07cc01756c6cad529b1f67886f76747cc2e7411379f0d0e109c3cfb1c1d910a495b74c6db99b31b5fdbdb1b63b43f0668ae5bdf3e671f676237eb5518c6f791275f70cd546c7f944509c4b9b9b44fa0ad3ac5538559f76e85ad528984ed52e3a948c4e866ea573eae96f89530d2a6fb5429dbeaeeb191ed85e77464e3c74adea816aafbbaefbbc215da7eabcaefb5244789dd7a93c1947ba2ed5a9daeb5ec0cf4ba56658bc3b79de294a77ea3a8fa5db82d7b11ad59dbcefbbeec8eb3a6f85c4b3e1755eeae47552f0ba2ee57546ba195df7792b1aa03e950c9d8cae8bb1fa3a295dcaeb3aef9375de8985a5c373e97eac3ad40ddf0e9dcaf34e391f8be775342e78ba019c725a26e0f5a9bd0e74a76fe684f2baaf5110e896d0b5d7ad56abbbee4e9dd755a15b7939bace4379ded7753bdd4db7ea5c3ccff352413a1c9e77f23a9c0f6ca9b1caa17b79318327810ee5d5e84eddd7b547e4394b776a8fa6da671d94af5d34e81ac80dbcaf4b752755f7d27d4c78deeaf5753e5fe77927f75c58331daaeb5438a71c00e0741e4b6ae5a9baeed579de11be54c7f24e5f5227e3955df7d974ac16af5ba93a0f885783578347c3d75f772eba94e7752fa7d677f26a789ed7a5ba53ad63ddd0b5a0bc0ed5c9d063c30b40aa85e575b4958bcaeb8c74abaefbbceed40de968f0787837bc164fe5a1baaff33aafc5539dba0ff5755d4ff775331dab73e9baae475783c7f2a9bad5a9f3baeed57529195e4c77f23ad4a9e3e1b5749f5743f77d9e77f24e1d0fcfeb66f0583a56b73a795dd7bd3a1a3c16d5d79d56a7aeeb7abca39163e5e3d301d57d1dab3bd1e858ac574b10366ae86c38759e97f254dfb562e0b40ce93aaff3baaeb3695593ad648bee8a92da9e040b2b5492686009234032b1c029c2a2a98fb88cd046341084373281d0441a90e202442e3b3484c5d11522ae1ab2d003163770786880c60d8f2943087ab078b9a1c7c5d2f160d1898167b60506787c0c0dcec05083cdec09afa6c903b6c67172e820a5c60a0098b90b007cc68b960263889ea11cd07e2a40f7d7dddddd357e74f71125dd3e74f74cb764f861e629ca524e5870e001134bb55aa5585852a8968f0696ea437d315c8c90109259cda458563e271717ddc945f5834bfe5ebe16aa4a0128c09492c153b14e352f34f88c808925898b78aa9101094f870d14925397f23103a61d8800c114c03bb19c88d07481a9c949877ac100000812de6986cfa60a261db06002009193182e7e0cf0f580c401986ab094b8c4508049480c728559b8c0e423b37a983da0a5627d2f28a413021680c4ea04f3d9ec20f1840db07210c1c94a0b09c8e0b5a080c0a8789c7cf820a220000cd40c8b10961c52429c72a8781080051ae881004168c08d93979048026ac0d452d62a5080171d17dd0a986af020c1a2e2916259c9f0f5c47af8686011a24222f652b41a622348080b6b884b91e883054c334e353c2ca9178c97144b4b908c003cc0c4b21a52034d014ca8af85ea5246522ca81ea91c301e5a4a168ed590148baac60b10eb8693106b46cc8d1c669091633523742407245856a06ae765a72746a47239a96640bd3e1e96cb09870351b1542ca71b940f271f201dcac6e742c9c061adc28f47500f1a2b1619ac1e248208b5e858cd9c6e38dd900201530e194e40281d5035b06e38dd7091f3d1400026f0a6fb6a9fcde9430d4046004ad84a82115099220a1280a089043431620923d53e9c094008209624415244442400435e3e3b3339e060839f6e60832dac308527f0f0030799196aa8a4f8a0074e78c048100f2f1a62b8b4a46a20450ba078c2892638a0012917403283e306ac0005b6088316684058a10a3190d9073480d67ef460513de180283d2c2baa7ce089170f9e19312d2c2bd50d1b2b5081102f0e090520262408030c40c0015e34ed780109460082264a92f4f0d0883905814a1692fcd88187a54a952089169860031150420103c8000630d08021a11f3d70b87460f0bee06971bae255f0ac9c9ee061816aea8ce015c12302ab0a172abc207840f0a4f848e0219d8eba1b5634a06ebcd4f0667831ba181818a8171e4cd73ac9e0b5a0583cd66ae5a95428efd47d5d97ea17179f8d0f064c27284c2722a91cdea9b68044cb034c28948b2a07232071d240ce69864b1321482580e944842583e5068d0230b17e3801f1d5d092532e2b212b9f14cbd783060b8a074cab294c314220c1eaf92e8005172530a1b66042b9cc400426972c030326160d193c550fd40d6a8927315a6a488000a70530b970b9707d3630372b1a305b1000a5c3ca47e5e373f1f95835c1f415c9b949b1a444c0f4b5a46638d5b4e47cddc9e554c32204a583ea87d40c2996d4914b8c4b0c8b064b86ea874f0c0448cdf0454100540e9870383ae15c86030da7978b8b14cca9fb6cbe2027a21719294fa544654325848a2143976af9502797effbbc4ff5ad3e16cb8dd3a742a27ae1828805469552759feaa4e37473ea56353e1b48b000800a01930c2240022675b2b10222c04909049091796f3186275851250854749083d256e48028413f3cecd063ab15aa7083a3e562a50a028821a12d7e40851000d0001c26240084024a2802107010831590c0891b3087a44845f16548f395ba23463aa2ee6ec806172edd97e1c2a527a27862034f48e08923badb1f691a15d9fb40582127aa70020a2144b17a4b5aaed4890274778ee6a2d7acd7283ee2403117421413633532562363414bb388ad558a6ded2697e9487329fb249aa70ccf719c323c65b7304f5a8dac91b409197412b4bc65ef619d862b6fe8d3f18bb6ca6cae542622712007383a1cba1bba710ee79a10a69545988ce1dc4f8d8c89b1bcf442b5215c639d85ce85185a0b960d38523869b6dee49a10d2c51dc95f941b67ce4888909110a15cbfc8488890911021f173a545724d488a940c6cb1348be4c738df49f449f3760be73bce779245a3a5e172d8b1911021d0f363ec3afc90b464f2364817379b79b563495ad248885048f39de4dff215477a0b3dd76aae555babd4317ea0980bf9572b3464ab3626c68e88b15c138259a1b7d579a4c6b215ca5f94ad9015ca56e80e8d6329a4367ed11dcaf5ad9158bf88c405e132c4b15c13aa09895f9586aa15cab6d61904bf0522ca56e847daac5688052098970704b0c0105644a004bd946d46f88237af177ebd26c0d4fe7271fe7477367477321d3e59b464f4b7204817c7c416babb243a25402085490f1ca5b446451bf61827bd35eba4cd992ebd928bf6961f6704c696f4dc5831ee4eff244b133ff6a215fa017a7a8d5cacf3f5a2e1ca1b8489046674cffb99e684e2ce0e1e373e3a3b3efc30ccd911ce9e1e5a8e0dd2c5dd5c292ed7aaacde92268af571aed55cabb22bfb5cb548a11d65a238d226b624ce8632519c32519c3f4ed995e532bdf671777fdde9280b5ab06c30a0c2b2d104f3a203e704b42b503a700502333208b874b7ecbfb68416ddb6569768eaee0fabadb21a2cd14477e3dc23c9640be8fb48d72ac96a35dbdd31dd5a825cd278091f8d6f32746b891bba5b4bb8746e24c9a9441894c8a2074a48d1d52af144a74089254a00e96e5196ed8895009580e12fb7d94bb25217e74fbe9f546d4831cd136731bca4db1bce220e2e4ddc0deec3699626ee861b263323fdd06f9cc98e4e05a0bbc76e3d8006beb72cbb4f86343fee96e99d0e78c2013e6210854af3803836629db76b49752cac114429c2b93137471253209fdd1dabbb5b75772a10bf38da59f8497c1c079fd56a25cdef9d79e25cfcc79ec399e3735f9c7f737abfc8418c494a4712376733ebe2e349731257d27cd6d822077f46d2fc7424c9e9b8f457f20f2bc59ea715f21e343a788f7f219ec375f0ff9a8ccef80e4ed22ccb3ff6a021699e09c719ca76c83fdedcf85f5b6db426e3f2ce663307fd6f99a4997a8ee6353424cd332e3e1114dbe4c63b478aabe5b5c9d5deda6c9cb85b2d9d6369fbfbd59234fb14c5e917cf4cb3ff35d92c6936f34bb1b53224cd3ece325f9a24e33f1be7ece94866fa3587f917e5fa452492f933d229a408c445822ca9d831f5bfb591cea4e979e9eb746cf108737036bb364c7a9fcd7cd224177f1c675927ceffce91e65a3a3971b999b1639b58d2dc9726cec3a50f296ed69ce86f31ae8fe9549ad4bfbcd931f5d15a1a6873b3d19b4f17eb634cbdc757eb79ba63bfb606e21d3b3b76f078b5b9adae64afcdf1e34a8ca7bf120767339f210dcde6df3c432ad6fab7ec35e32c99bcff9d5629c71cb49ef11c6b6cf834af599b6aebcd571bf36bb34d77d073918bf571e11271fecc9f56120be8f61ad233c0d70387efc5076380301409b2c486a84890256eab14e30fed256a0f0817c4bfe192f48ccba3c75169e8fe4860801fa0ad523237e6fa23c595fa1341f1ab07a198d011981270f6b58c3fcf114c628972368ba37da55b98a912f657aa9f33bd4ab752a7b770868e6791972516f793ec38da23b9def2e708cc56a9f80558c0d22c028aef35ead5525c3f13d5d2fef8dfb2c5e3fdfcb8792769ab742a814031b7d1bf9f64b1e34cdd566912bd2fd68838ea2d7fc05c6f49a399712cde4962db14eb934520163f8912f99c38bfb636bd1671b1da1ff0f1bfcddd6617aba5611c578883e28b772acd6ceb8754acd41d7c71e2bcfed332be8fb31522f21c89afade1a8ff88a38a636973b5618d8d45374ff28f8848c48c2d918c4b20f195ac58838ef0c111488c10436c6916a9d53af98f8474ad52fe8a03e2803a498f3fe98a8f9b420efedf9a8bd556e72df41af1317e5a11f66a1d8f9eab300731c6337c05190d0939981babc5b3994fc78fcb9ad99d37571b8a14dbaa1da7cf668ebf06d76af6c579337e9c0d7f7c5634b3789ca5fdc167b3991be1fee3878f992790d710bd5e5ef3c3c7eb551bbfc8078ede8ac859c477f0bf3617b9fb00dcfd474ae26c68eb6c360b721b1ccc36e391c4cda577ea38d35a3ace652ad29209adb14fa2238cfcf7c196c456e97c20dc5ada017e6d627f5a2e698ee9b5d5f3e7bce6c3bf7e1f577eae54a904ddf571199747e2749883d873e17d5c3a0c2385968823718c145a22f7692d26e44687cc04203e10754a906020ba0702e8a2d041e82b04e0c1206d6cc69aec932ace8a755e590ccf7039c3a73975229b5c43eeee86750bc7004fe9d9cc7192cf663ee4204d8e1c338ea9e3bf730c5f746fc0142b48a1c012f2d2cbe62d67b554d6dda14e5f77e775775dd75b748fa1bbc5d04c82907d0effe8ef38b125ed25653f4e992c3ffe243a4e19f98f348e5376bf564b59ee96783ea6b15034f4d02d1a88ba45838f6ed100ebee1a6a2ad04317d32989d109e972e8ee25ddaa5af4e4803836d9dadb2f08c14db7e7012f033425b7d86b3ec9d2a6bf120ab4f700f0b11d435fca187f1896f8bfcc75de69f36a439c4b7bcb54098b05ac748658fc7c67c663e8d5e2f9d70a61b180b83e49ce9be3499bd7d66acdc749c327b14fc734d74d9a9feeae6be8ee88bae3d1c1e88e4277f3d0dd451887e00be6a5af94ce9a921dc719b402025211ddade339c4d192332c99bc280b3f890a53904214ba7b1c4ba1fbe2b5af174ed27df10e31691cdd1ed9ddb45b433075cbf005c3a5d78bf6c849729bbdf4b74d5ba5b7147d8eb86b6bf7c96beffd123f9e3ff88fe06cc7a21f69932469c924e869be4fda4b849f12dd2ad0dde04cc9d699ffb5b5a7f92cc775703cf3bf93b419e78bfe4a753eee95fcef2bf9df9438c698e2afdfc3cd4687586b24be588ea1380e75e700210a30a45a8acb31acb11b9e43709f633f861509de4932840e6851f4619d43f98bc43f92bf08f73926fe384e186ebe9128bed2bc19fd887fefd7c42f318e899fb337e307faf05a21e2e7f937888804f1634660ee7d00738f04da54eb62cd7ecefddc2702af751919bf7fcbf4bda65217c569b34faff3f1fcb9a5cdb9cdeeb64a4571e23ec7c09ad76c48f1a47dd2bc2185f366c7e4bf0fb9a4d19b33ccc15ac441d12fadef958a9fe77d5c59bf2a598b3d37951c53db2357e7f8b7af4ad61f6966bf85f4a6e435eb35b93abd46bdc6ad10ce982e05ddaf4a43187fcd5489387f1e23a9b1fa44d82bc456ed55f279da7e7c202b247e92bd24392b925991888f145a2247f2178de3c415596b941b49b22c5a9a45a624a1025fad9068ed1151691eb9c1103044babbd810506892ea48aad4e6464712a1d80d4f0f4dc747ccb9d9993c3a683e3ce2d7429a8e0e1ed106db903650682bf84b26b496f571b949f4b63b6f41487ac3d7deb2103bf08f612d65f9f138f3bc7f333a914134c18116105704810b62866941b8ba3d37c7f78a045f50860b976ec28b5fb44236b7f0c2926aece606e7fab832b4402d2046202d254fb480c03982152d206646e86e2bbabb4a77bfa008b5bbc96e05a0e91bc00f27672853fadae174b02545743711babb0a2aba7b0842a0f283eef641b77e206afd00d483eee681142e3bc84177e3a0bb6fd0ad1fbab5440b36e8ee1aac6830031cd007ccb1093f691c270ecb608a0bc420020d837b83665e8b6035cd4c77bf408ac617bcd149ba092fd649ead64992930427499211d85a8d2559dc1f114558b53fb95048e985941e491548866821692d4d9cd114da5f48cb2802dd5de9b44dc74877e26e617d9ad7f27e2d6dce7b6023ffe1d873e3e749c5c7e1e86c56ffa6c4c1e98fb3a1584b8b9b421c1c62b6348bbc5eb3209ef622ad592007339e441cf46a298df835b94c6b89c3d97046fc255af31a9aabb388b54658e985586b4471f78982642b148b5d3b696831865921f1af6d0f46cb0815b3d99da4e3e9e2e7a7399e4a5e2dc56f133f37c7fb49b6d25b3871369f676e1979819125ba6df03cdd31ee319e468074fbcb5dd552f1e9bdf3c7088ebfa64004851691140dfa0fffe112ff16cebf4e94fde57a126743a220443b4433fef21a7fd5b440072868f940d44da35b434d8686c42121da5f3759cd8dbfc4bf3758e635ddfd84211a8656edafee46825002848e1012bbdb06172edde0c2a59b1dcfb3e3a3a373e3f33af375fc0eb147a7e6b383a3c306172e652afe0d6595ca70e192ec858608ed106a75378dbf64e39c717ff9cd2b75b7554a92f31a61db858de30c82ef571b2dca247dbd7424552ab3515c644aee5adce37c1679324e9a1d6d45967477fe9ce36b495cabc80eb196b6f67ac9484ce408448c406408ddb797e76bc9a520199123f08fb479bf8e6552a5b2fc187f16ff52fca22c3f16aba5c972617e2cd619caf094ddcff573a5b24f9a3f76b70bbabb05dd383a3a3b4af388185b7ab18a13e3bfa208a3792c8bdc1b8434146474e4b1cdb5798ea30daf95892f8a4fc3fd92a58975e204740104b043b702b0c456a9387f14e78f6eb3e34c69486bb5b2466f58492bc64477f3742b1686c6d911804eae4ec78fbb13979626fd25c2170c776c6c7299de493ad1dd1ee8ee0e7477132b0e6c400352c67186195b9c2c4fd9a52593bfdd9d8127735966654b13b73471d7e6eec640ee4e1ad2dad70bdc4fa2365cb8d4dd16c02f7677056414c0ffb5ee9e0013f9914209e0fc18cf1b0191ca72f74b26dd0d812594e85c72a2a5f9f44f9a37c7b9a934ce71d61e4a767c9acb70c6764897c2f82bcd24ee6d95ba8d7f5969ae36f41eb94ce2dec69db476f46a91808314ce8c653d8416fff5ba9fff92f7738df90e3b80b5f151505a414db5963c401c1b8ac3532988dc61a6bb714542a337c4b4b288c4d1390659a2627d9284e52fba3f8a750ef9225c8ee42d8bc45ad6fe48b53457fed82a15473b24dbeabc854b41d7de1b7444ac1fe207baf3c720b64ab11d8364f2c310569f1c527a21127787dcaf3dae96c47f2477bf34227ebe96fcf18d3e897ef847c47fa0fc18c394e6156f992a89e924bd5eb87009172e118b6a90f81997f3b614149444fc8ae427053f3bc0b0e8ee76fcb649fadb7490298e12b99f34341302a6a3fbf11c8b9c0820a75b40aa74f7748a2d99044813445d6e0119bbc119d21abd9f546db4280a2d2038a03f8ddeec465678b892adbdde2da11b47b7788802a833020f403a89b678387583a2d00c27de7ab8fc482a221b0589d7867f64e609646bd5d66a2c97c799b347c40afb912c8d724d28c81d125faca5fd1163212cd7aa0ce9e2aeadd558ae0981b3a7b26a675ea9e7c7dda01d71ae5a8af16357fa1a36b52a52b779cd882e0fc983632444c86d95869367d5dd6d244428f4e9ab86d9a145ae55afb7a4eda8b2634a77ef8040bbcc56a9ecc2ec5829d9fa627d1d3d604f34a88368a439c93acef3a643e98574b41a84d969eaaed99d29e04e94de99656b857676942cc6f123e635303a50748080d1b9d1dd4f73507c989c14e43c20a7498e114c4e0e2a3ac31c7c1cd44d096e7e80b9397283037a010c02e804a804d634f8e11c495a63b3799c8eab011fa4353391ca6636afd9cc5f3420b7c133d80c2652d9eb6534bb6fab7674d0c6099b01d850181b2436ac9a1874379ef98b26676628acd8c53a610ee2b7d94aecd3c53b954aa2fb58ac9656c3d40dd62ca9c1d1e10a11463a3cd160fe9c0e4b6fbb13468799beb9898351c133e35c5ab7d528c7043adbdadd3e344c8e9b1c3317820d31f2a2a02231230f3a3254c467373c6f33171a72a020224460413ce8c78d8684dca80849112f8a0d11272e01343b686834682fa6358fa99283d956a9ad5e233e9e4a3354789d7ee78f41667ea685638a06b158e7cd2f2dad4827e93518e72639ed4896fe34ff41533383653866dd386874d3d85ce65083eece610039cc64b0daf0310c0e56409a192fc2218a6e1087263038e0743788b11d3d97b6269734256c6f4a38acacbd8f613037e4a01ba4c1ff37308134d7d2a4797b1aa638bfb636956e00d2e374981b5a6df397fc81b1a18adb1045dbc0d4fd65b53658181b567d23b3836ed8df9a4ce9ab910c112fc0b8ace0b240836e038a9fe75290cb078c4b0618dfc24500da30e2f20dcc617933f657ae530947330e3c780c11c4e3661100300000230020c40a35300153c37777001aa6061b34e4800615c0d0f0040d42c0d0d0734309372870a3dec861030a3650d00de27e80dcd6dcb5b821b70191dcbde2e9b9a9846533b196e3ccb804fa2332a5afb26a5f2fa517aa43eed96ddc4171a624ab3394cddcc6fd75042cddd6dc386dc02ff2fb35e30c69a63704721bf0dad9ac06c79dcd40181b35cc4065060ccc30a4c6166a64a086124c8d1e606af4d070028d06d0e8819981c50c296d833b98f1a538ee2d5fcfb80c80d37c79f38c7faef3ced296c91ccd0c9e371f47d9ccff361fe62f1b30e317676e03826098df6bb06dde4fb234f22f5943917cd6d0ccbebc79369b717cadd77c9d0efea5b9ced88191a1051819249011cab811438b0667d9da3b734c69661fd619af1927cd985ea5af606e246966339ac791827f85cc668c19c0c4884077834643434782801fd2a6e3ecc547f0dfda7f2dc414170347f78fd7cbc8c792fdc1d347f8496278887118183d8081916160d800f3420b2f3200f3e206ce682596893f672e7e8d4e4e0ea2598e0c4f1a6c432b4792c4d552cf752a895eda5c6ec95e72e6a5cd557bb3553a6936b93a4b9bf35acccb0a8aff17c4e5aa15cbc7240ccc141947b54a78f64874ac48606070b4b8d0aa4137483383a72ca6e4f53292656b8fc0b45a5c50410a276d1ced1ded4d09f721c5d93c5dc8c0c80004198890018479b10248c3bc4c00e6c5f6d2126a189719c0b820b914817101bb1b9c05f1f1c589abf159ec16e6f9331bc719a3d8d6e935460e625c195e1a560a06f1bf4166866642f0fc79bd2699a3e11907efc4b4160369729d99cef86ce6af5c67c6d5869e6dc5af19b6c9d559049cd7e6728ff4e3f532fa217bbd8c709fe90f3186fb1cc37da632962a4a2f04c38201962520ce368f13c682d3cdb26259614d699b28dd0d66d6adbb593eac551328c2ac9ee86eb008ccea494f259895cfb53098150d18d515dcfc6c9b75c2a8a6801f5618151330aa7cf154825119c1a856dd0dce663e73349fd19957586a8a386fb399c3524c455244f9b1d20bc1a0b4e8a6655b776818541430a82898a2864c2518148d7e7cbad2e308833945e156e804739a75832ebaad30a71588e76d69e2603e2add403198ef0925986fd6dd96e66aa3309f4f77834031c77da646309f0bd065ffb726c318f799568a13e77d22fe6fed87d7f8943eea13616f4d86e98feea669186fc8df89a3613c1a40b11a0dd35dc93d124c27a51b9c6e338e3ac691291d73ef4377d368988e09f49ab59784692c609a05307d044c2f81e9982d9a5a5b4c608b598dd72cce3fc119ce3dd218a418c31263f8610c3862a82286138841268655184e10860284c1c8d04b7ce1cff42aa101b9cd6ce635b399d7cc6a4362ecf5329af90b8bf38fd080dc06c4d46f219dc12295e51ee9f5c2b9f7e1f532c219db90cc55ea339a9c206e03d2dcf0ccd83d37e6f02fa599b89cf1e9e30c298e4ae70d28e6f4699ec3afd53ee3b8347826f748e334bae13904676fcd663080810a0886271a040318881a0c388d3fe90b563a09f78529dd367bcd7e2101ad64474cefd770c62fcaee937fc3f3666b35f6447be10939ff7ae1f69a79c1a7bbfb4798175a75480b2b5309a6c59317b5d0c2276eb6ba408356179e743798e4c8b5d706990581399c372f7dab0b40da3f539baa24d29096455cb0e2b3c5051180e2ebe0297fbc68c31fb9f721f748e34869f78972ef0317687483e4fc9b631c34dc2b79d1ad2dc0600bb4b505215b680783e4ea143d97560b39e84c71af8525b2f471a435981688b4b260842c2c200b43ba1bfc5b86e12b39adc49eb3b547fefa2bf11c3972e4009768ed2f398ed3c791fa9005b7cdfc4558a80216a8e89ed1e420dd479a45b00074852b5ce1095728c2155470850f74b7916e5d6149eb0a2e57b2d00d8e6359cbf36f56e260ee7e92635ac1194df8a20d73dc06a4714c67af97a53212cf667c4653343334f397cd396e337bd1caea0c675e5bfa7156349bbd68c399d7ec2cc8ccffd214b90e1e646668e636e08b4a5f8b1ecf1b19f4c3c84798f1bc41af975148f1fcf961c722fc437cb1063f993312290d57de7278b1187b3c7f1e4f9a18b323fe318e578cfdf0716d55fc1f69f3eaec94329c6bf587ce4eb93471322b96f8874c1c6d1566dd1d84100e22599b615558d568897be4c41f4288fb562c711042f8df8ca8a0846eff5b56fafae12d6dd1ebf523a478faeb65e4c3de94a8d043859d295cd160ee919468664a5f67332ee6292899820e5268ea06ef575a7bd131b501736259f4b79c71fd5b968292146ee828e8200a4c44018928d028d0a2b0a415051ca050e5870fb701c4c1c1a9c1c9711dc619cedc6d409a19ff4caf92ff00f9d721b701b138ffba0d48933333e4363f7cb80da04c94610aceb2b5476656ccf56fb984fda0f1117e921f463e4a26931c8202534361d6459f6d8542f38073a596f471e268f8a21151ec69b989f39ac7e1788ee656ac48e91f699f343ec6fd2dbb95274d14b302a4bb6d95669be4d7ba15232b316f3d618ab6d99f20a58828e6419e4076773f61c8136874df778216dd4e682a228a39610a5ce40426272cc136b4122fcd224eb8d1b991de792d89fb8c9d0851cc71782af961e423d7c7dd3255f27a7d9e37c43f8c7cdcf0bcc94692e2711c67101f4bf6671c67f843e9eb8f1f463e6a4322958d24fdf1c3c887d20bdd3255e223fc2438fff01a31362352592669968d24156398a4afd78fe9463eb2f0e9ce62c5042a5d44149b21c54c78c289625e678b09b89ba6882836e3f98b9cc689626ebb30db9df8fe1dada5c982dc1f42671c6778c313e792bce13984ce8e181b0247070b31f0ecd019f2c3c70f9a191fb870092e5c32f47ae1c225588cf994dd2da45b4d50e0d1ada6289a664dab1e4208af995e93c73237664c95e00425a0a07b1e51421325c894b06a5b319d21cd3ccb39711a49c2129230a58710229749c049a8010939683097d6c5bfe56bbd46f45973771e0000dd42c20d093bae98421ecb2084002bec8a085c31802b72a0524396f36936d78874e2b7e211ec116e4778110323d8a26e19e186153918420817a9d7581bcdde59ef27599b177130f7b78c4b7bdf56a748934bfb389a6d7671fe9d0171eee64626412d2b2260c56d08216a82100224e7cd5e8bacd0c18a98fab02a37a84256b9d1e08cc66bc498d7ccb0cf79f352ec311bc71964e6b32c02138aa08222cc7a08211c285624c8925b5ab71977edbd8fa7d27471de604590418429c0dc3896353c6f442000118e10e15424c812af094208b05a9aeb2785344f9ccde5acd36fb6d2de5b9e7f338a0115b18a0bb4aa18d2dd4308e1353522f5208400c771d6297aab8a568362916e5131a5bbc1ffda2dacd3e62f15515a540001698a045972c9a5a7337f33a2824637e8a35b43a0d27d3f299c11990d6189ee068d86b06408ddfde124f1e81393f3769f88c68a6e33f8209d718ba7524b085180e2489b0961e9691887108634783f8fb42604077399c4fddf8c84a06a05218aee0633759b6d95e6d25eaf595b6bf05412ff526cd40a8208e232b462cc2808adee2ad679cbd752b1d2dd345e23c630199b712144b1ee7e758b8a94bf652a4874775ba1d7cb48a4b21a49db68e62976374eb7a8b8cdb9d2224068ead98ca63e9235721f67f9b9c6668410c56470820962ae5082a9450a33d8d104141a08fd832bba53d752c5153eb0f203a1ee0643b7423da4bb071fdc3adcd834333d5afb83c353090e4f257768b4f6e7c99c112663373c873cae1f5222222663b5a11a199b7902d95a8dd5c8582c933132462b8bc491de82bc6d1ef14003dd5de47eee7e920d3105b2c10ebad0e37da2b096b65618c69308d29db8fb792a21717708be36a6b38304ff185624762c2a720486c325b9f7417cd106c95f2452a08ced90da1ff991a4d7c81a8948c4b785759618c7c699ad91f822bd240e282fbdd0cc1308dff01c12a43e113c8e309102e5a5179a493ffe91c7f34694f124f2a20da2f44241dd8da35b3868f50db470032aed2fcf95b4d70b2369dda089d6c16762ecc99c51ee7d98f9df728f34f14c56ed2cbc85773ef6dc9d95d24a57c29ec947fa24d16b36e620c6f118e3dc2385f4f634b755fa34a4385b6df86eab34371a3908e2a4dcfb207e2e8170ee7db04242343881677be7cd4b41e5eb15d2fbf56de2572429e8ba10c39b41052e4842109e6001074e60831594dd22161f47e71864062b199ca03b49a545c0d9ccc77186f7878ff093f88f1dfc0562b7f781400a2d116ba46489e0a5598476bf0a80d8fb44887f4b5c1f17030974637cc1a2a25af4d92601125ffc1750e1053ac88f65b412cb946c92eceb2d69b24cd25c294e96493a3115af4cc4249549b1457737d2c51d1163353226c67215b6348be0fbe378435aa39518b4510c14f3a2a2a222a29817613246c6b215c265b64233a423f947c818ec662b6d0dca56083fbdb622112b92719c4182dccf36092c5b218ce710f13fe77ef01c328e3308198b61322652204c6f469feb0c82c35389bd0f44eea75a8a691205eaee1d5a041e9882a31b5f309314f7dd1d5277d4ddd1ee5ca6e3ccd71679bd46dcb53a92ea0a6c1ebfed96e48d4f288a628e8e9b1d3a78f8e84c1d3a3cff3a767876441b9b1f4bd1e26cea93b6a58297f6d78b36aca58b2f4bc249b26b6b321c9d6368437b0a64b64aef05434c713721a6b8160a86e09b5bf8d9f3f5c7f347d27b887fdf66a337ff2d473a6bf56b2ffa7462a6f3c209721074821a4b7574803836383c9598f0e122c5754a9220e98c8aba1b67af10f1737069848c4db1be0df63ed486ae1532f304420a2d911b9e43ae154294975e08e39092d6088f353286f1db26115268c71ff1f1248273ef435e7aa12fd4742b0a2310573a2f10131bb8400248b004be607ecc62a9d66292b45774b1ce6a87bcc246206504456420167f1c27adc43972142d1440802204dd0de2bffea40db1e7f0935cfc59147e12a4f94a3c9003143788c64f7a22a43512fae9c04a0452744b0403e83b5f0c410dba4b1189bf426ab344b0ccde274216829ac6d92b44a493ac4894ec38c2f0056fae7d100075bf1ce319a2d7a874cf8a16b2a2261d5308cdc80c200000006311003040241a8dc70342c194382a95f51400047fc06a8c4a98685196c49032060062000000000019801108a601043f8b770fc159e0750e7ece2b90f3a8561f165f642a5b843d2093353bf9decceb54aa29be5bae18463ec37924cb11eb325566f74f2c814669c2a002365b22f0def9804e0ba11c90367dc3590be3fc14f1380e81b87c0a34c8c1daeaa97962cc38ec8f38a1ef22b29f9663f81f8bb913223f3d25524a27e82e44d119083c7dc7275454c548060a0050aaa1c97731e40b54db79934ab3f8c984c9045c97944de284f1a6d1a17703e3692895e89728ba32ed3045e53bf397364ccbb684f21c21b7d9abe9affdfa209749cb45aeaec02659691fdf268b19aac3a449d8e26f66cf4357e44a32b806f58f66007d55f309f480b1d3c0a1e333f306475f26fe3ff934503f91086f940ef549a82bd869f9fa2b2c63d39b7c3bd52776ffa98b95f0cb4d7b5799b6150ef9c8d1b7f916b37007974088c507881eb38839cd0f8e352831e35499171eac3165e3b37ef9fc25efe37f39e82ffe992a18e65228260e2e9fe74987e6e04754055789c1b5784efae786fe6b677a288e6b66432edfdd991eb5a1072acc87e43ff46486c07dc43420588ead4c8425d6ff276d0b4b67ba524c9cf5d6cb7123d456ddaea1e246881fd14951d7fd3572a456c3012b7e6cb453772778a34900f14f112c1683b09e91e8e1d116217f0ad537c84f4b53f709cf988ebb9fd3ef151ad0d9943bcce84bc6db049c7210ba08564b6d6f2fd6f8f251ef62d1b1584128407c5aab232a4e91fa371159795d193d6bbfe096475035c21d955f52204422f7c47bbd171034019b6a4cf595210aba115a9831cbc2cd5808cbc94fa05a1098aaeac92af7f1396626cba3b0d3602d073d3adabb84a22ba8290233d7b062109daf2d99be43103b8f203b5960b53bab380c182736e8084e0ec3b1ad4f38d9dd8a1747fcf20df59a2dd3edf51fa58351790d5d87c593edc825313bd9dc94afcb9625403017297f198febde9f4e115aaad2004987ab44af293762cbc32a52ce2c30b7278318550e4e0529a6af673155192ec8e2e42bcebead862a8fd3508b764f4169c7b7d579e6c12b2780efccf1fc8069a10c2b51d889ca56c25d39001666c60dfc16869313dfed03c563848c49ef96a8974baf9346452028745d6a6be404a484edbee4ebf50d7b8a6fdc9abc244a80a9d9ee597ffa4adaffe4ad5541372f7fdc56ee37a5365b36e21d941f1d74950a2518192349a50d5294cb90591b87864f8d2f772b95a3b6d68b810a8813244dfea451d2f6cbdb949dfbe924e490d0de0fffe2dd8437bb831524653d0b3d9e13ab0a147bb85cc94099f5c5e05be4e0ed949ea3c9db04aac48324ccd637596d6a44a544c60a4510654bc5355d39450f914e29b5c820c02e5456d5a5122713f3c9563a931dca1bba98bf48c14fce64803924f758914a3c1dd2df342e388ec0692bbd89ff373a508934d14467de9057e7055004fddd9e22c4207d4e9989090c704c9199bbcc56a77255abecb661b4dac1b9fd4e3a0e37cc3505a4f841173fbf60921f966fe1a097b4c92975f61a5d2fdf375cdfc263e33b50bccea07e11931afd2d83a5ce25317a291a42e3adc299570e8783ff93ff627609c987b8e18f70702c8536f4b4b64c773e7e6861361248d46e8584160cca44c55b9d9fb32a0c21bde5fec0fb7e3b0d78e9be9918e83a1bbd27b2047afdc2350b9a244400485bc883c495504bbe22ff19450830a881459e69e49e3fa97b269d24290f417d53130cd16464154c6e367d34d060a8e49220f89d927390e35b53fd0660c1737efa56ba6008ce14750441abf7a1804ddcf1ccb380604a47ec8b37828092fafc8c6c06847f6a50c9ddbbfadb4a8c1c302a1333efb3d9b9edb16b409892e207d342642a448929f72a6a399846a17ad42f1547669ae91dbf408c1f1d5b0d1fbde76710d87cefeeab6f82fcb2a46bc68a6cb9863109ae73edf7d47707fd526bb904f71eac58e878704decb0e6d9fb01550575216dd41cf3db14c2ca95de3114df266a3a5a6fdec0745dbeab5b80cf359cf9801f4e56fc78eca5c8fccf742a415a82a2f0064f505a958425793b92647822456b96de4c07dc37645cec198cf331fc8c26fd23d63bd6ceb9a88306f16d453f777d188fc0b7e10959a85c121d2c619ba3f38005f7006ad397c1f3efaf3d960acad6b8b27ae870712a4cbe26f1186ee4aa4ecb59eb78f77d46276e4dd40986c2099d092d4d56b7b70139b74f90ed1c38ff493ac684431a73d6d1bff4db3ad42f11b39c28fd1f715c86a17cdea778c5b6116f9903b713f1fca87899c423586d3abfa00a1993cfb6d2bf2dff74cc688f4e0f485b14f05c608c51906ba02a4d69f0b5829e86577f1bd6a55587471b8509ff92b297a95a153b48f1a607c6d2e7440e0c590e20449df3423ce47f2a44dd5d7473db45386d6884bd03905540b307e6a644b0e005ec673dd38da26bb64405b36cec6ad49b6851893b3c141666e6798ffd418a6bd643091b94a04e34a6980c3c398592d7855a3698991d7eee114af1f97ae3c2d205450b2b1fda7fce357df9bcbd7192bc50247f90be8d9ea1b5def0032abf6571f27833514dadd884a9ac591014229e44fd8bc4b04b328f4285248ee03628819210e5d23a750a2d6ef68bd6e479f1132a30cc6027cf9f14d43c52a771a78aeb7e3a088025c2bf7ef0dbb9ea8250ab0b4f4774f984599dfbcfcb7581684597c73101499f5fb3599dfede429b22dcf3eea79fbfcaa3d45538973abf84b34405c103072514a3d785833db2471c8c3b41a15aa732b83058f2bdd89935f29f6770d91cec556e0b50f1ded951f083e9f4813ed31e7e1cbb2a5e89f9ccd63fee20e3a9848127da248703d0125ce2569e45e48c2a8415b5cb292f489b771980961caab7b1fc4c21322a47a39017315140457d0e454db241e14215c97877bc808bbfcc234b9ef046c43cfd78b4f5f5017acb12d8a6c1c3bedbbd60e8960a547a6f5752229ebdb4ab7ad039a3e60c96c15970ee01d9caa4f4c7139846b8ceb94e9ceaf7893781f5feeec17120b8486cfda4a59a7c20b0c584185a05486894e4ba0c0620cb445b8aef7b9bc0ce4ae549758e00372d8452f1abe777e5d7af0530ed7e24dbf21a86937209fc1d11dc11cd39b9d5f9db9946f3340d9151d4d0a987283ed45f3b01ab40388977df7be6a540fa822353cc8b84463be82b97e6dcbd6dd1cd3650e69ebf60b6195da80350ac123c98fcee41e2ee271235678c128a9928d4ebc92f2338def85ac96491559a214239b63c9eb7a3a44284acd4e1391812ed39f63b8ecc2b8954d807c622dbfa69203f35c1e031bdbc8390458837fb3eaccc6a77875343eb82f6d821ab65f047e9e2120b201d9ba383f85e782af155bcebef6c1d7f7bda7b58c2efb6bf5fa5b81362e536bffa92aea9fa239246db1954316b256a332668d2edd26548193ed410c49c1811535f16e791bb5e894cebc25dc8c43e96cfa08479086462844408d13b776f401d8e0cb2cc8d6f19f80f7d792be38eec1536cd5b4c873729384650f92b003cc6d786464221b9523e21eab346feebc86f898a0b5340309f6c0342ca0c9c8af30298edac4c37159755a27e8b1d2475c484a3caafb76694b8fbc0bd0db5448f1686b04b04bea2b958e5c4cffbf0c2e95628db242eaf53fb81f605e5d4300238f1a83e588317421d21e750c453fbe9144ee7d38c5db07e8264938f9bf6b3bb191a5a0d2a1a61c0481aad3cb5a17cdcb31cb4d994b759aa4ef88f3fce7ad20b8f6b9a17a1b3f5e834374401a4d51db09c4b4898412017f8d381542fb3a0fcdc3f4b2b3aa2cf075dff09c913148e3390691f0e01f0cac072f17d602fe80bc752f73cb1c865f14216a3268ba9615dea9b6b34c41b4880ed41d942f72e37213a591c65fffdd506543155149ee90660c5dc04b4296e371d3bc2f65432a751d724532c8c4e6ebc8546c4a4dcfbacb26d5b305598bd11e35e6471fc732731ae00a4b1b645d5756d81f1682c893a02703d0f4ee5785e399c0354b305ab92f80105dcab475920f1f24a427bdba1211a89da1e52a739c283b68f516b0489c7cbd275d1a4f00b4a530c33a3f247007facaea84826473aea9115a15abf41c637e6933b04fd3c6f1e6d9a93376dc934d9ac8b8000dde030509268b412906cff2ae4c0ceba3f3ebb33c464f0e2640a650f9064f2dd64a2d7c6d0bf51ccca9c6d33c66297e253caf2f1dbdc292f9a381c9fa437d8fd363eca70daa93788623df3bb71f19868d4b4a3cc44083fa084a838ea6b675438a34fa28bd9b289f626e5b57108cc7053da5b6b93d2e2624d645de1ff684307a4c80cc98b3d595029e6245ad662fdb851da1bd173434c275dc6b4abd61f6bf0ac876a034c8c8cdd53d0b0209b90445d52f871010333ca0d59c2e3916755a2741dae3e91b355de681d442666e5616c211d47f62cfdccf80dec962e7faf587c16a775b94e0bf791e7d016857eba7c2de657710d9c2ee1f7263d3e99241223123708a38fda0e2a5fb8fa89e09ce2a7077aec553637af692004c10b36d8185a1f83c35846975bc8057a8a0038ff2e0eaefb9eb652e43b61723ec836f9bfeec640ce776ea21aec49bb1a43cb22588558768c6394795cce12326e4b3374b4d589a10888d4b705f2ab3fb55a22133b545ea9cc55504cb29b626feab8472b1df69292de048b6499bdba0f54ccf387f63e8b378fe1d089d849fc6f20828cdcc72cbb5d57046ef3a5de714f4cc36309afc5321a0ef2ba2149a269bb723a9da502cfe648b72b4af1c3088443f7f4bc131964e6c338b95ca1902d8d2527ec3b2864c51e5748262d0a73b84c172184e10165ddc8a18ab37fdd0642a672a3bc9bd0ca39e73641d7128c08ff5f1325d07bbdf9ec737ce1c1a4480f988828fccc81ce0cbde47897f5032ace84521ef56dac211d3b01a29a3d7117c8952651fa458ea8577fe84410a5d190dc377237c3b23ba4e94f9290c1f28ab09567b8dbd6122679f086c935511978e0cf703141f76b36532c12caa11785ece1e8b8496b9c382afd83ae10b67ba3b6c7e5215449153dfef7610dc6295f34abf5e240ea81cfe487ca816f09fee0363f9fe484b86bb5fa2f26adfe7bc0dd862e3a5576a123c6d20b974d305fee3737797133f734be99c9be22d3334061b7948e431bbc10de2a308f8c32d40539a3cbd28b67db8e82da6344d9e53378d0ffc8f24722a0275686e6a3ef243b27902d7aaac3367cdda13032d541370473bd7cf946d12bfda8370c18e62f398c6ff0ff75724e4cb7b8f3f8d701e3356842b9ad183fe71e2a0709c921b23196e7677e03777ecb9026061c7829e0fc61d82e8e92e1c0791fe96409b161de8d3a3b6528dc5d82a1ed4e2479964ed012c5de09a41bf7bb6f6ac4192b42d61f9385b604a1edc1d4919fae4a40d59f51b10fe82e15ec4f8fada398869205aa5c2bf8883c85e9c42615e1e187d20b617c34f9348280b5b31fc8022dbc615f56f558911c7224b31ca559989b478c1a2d62ba5c88eda91855ed3f45e4cbb0122a7da51b62fe4507a588f8dccf51dd468a7f6956183dc9e41772a034207a21cc3759cb497bfe58846b6d42a6100ee474671082c52ac6f869a57aa997e1f47ce8816fe33a971b4350043729912a7e72d22b32af3da40cc7628e1cf2e0f80259cc8bad6cc2994a1eda71937f7c39596140c10ee9a87f404e290340205828b017be9e5128a904629fa572fe25e571745067f61452f611296ff60cdbdb90837c351745d4769be174f7d906976bdf71557e76ca3401b2d42d82947580cad6cba75f5fdd32fff930c67da686ea1361d5c4c22b6bceb756629c1897c57e4cd124b1ecb137b4addb2673dc18e983f26c7e7d30504656d772e8ef8935e0d89783ed87b0f93611b63d048fe76e934e53c48053812367961ba72052cb494226efc0a77164f4eeb59bf70d3c46de0dad2023b65c5aef683fce4381f93fe6ee0974e2108be7941f8b3b13ea31089972a54727323b70d39cebff3c1a9b554e76acca64348e509f16cc4f79dfe7ef7d3dfb5d0e39c39f48078892c6af8e56a8d122f4270e89f213c92a9615791d48d365a113274085031c05749d24727216cb9b1132cba011018e1529accce2244a5c0015cdd1ddbc1eaef4b54ef71ae758ef6668597b5c40f90ae83fde52c43690f1cfce7f2f4abdb23064fb399825846669bca8516ea390295e28b89dc792d48100b6802a17ad379a2f2125d7b30165eef6dca76c3e00c7af329f06e992ff653675ab41ab871ff7be1be670b9855641efc31fd90ae326b33dce7caf1c8380bd9b515c0d7e0347b1c525f72e3601f7a7bf911037e9d28e2fc8580a7d010ce640ac106854025d6d2c4f5b6e248d644097308e834a4f9a449d777c33d8a1f0cd07ea57e8516927ca891f4e133f2388bd197938e135c2f98f0e75279bb40049f4984eb493bd1764ab510ac2d3ac31b88f9da4507cd95b30eb39e99e5550e139fb3e61fc65fad07782f3d960a41ccec803cfc40cf821667772e472de117bee3bbe5a9c909f2c2eb2f859da7a5a396982ab43505e57d20d2569f2a293b87e3c4cdccfd06fa63dc4c234371538c62affaab55ba0c6c2296d05086174fe3f832b227ab0996b4197420a2d130f925ee2cbce1a426995ace3095013c46370e2127d0c0138e526fc8ac766f64dcf43470d252d3ae1b48449b74a74afd231670e265b8818391ff904492aa5ed575946fdd700275091a3c253b4bc14f7900f26aa51a6e715616a438cef7b81219abd47137f72cc5a588d3e54729e4c0a91944e104280b66c417649c034058ed408cd3778099236b3fa2115a32e9ac595cbab68cb38b6843acd9b06f41797cd3a76db6c1ef1d138f621c67e8cf4ebc54e2b51a140877a78da41f06bd497d4e53d83b6500ae52f9fd49e5a64409b73a41ad75a59f7355a9390fbaf6ae817284e581e7c5253151b13764fa15d9bbf23051f4e3e1feef79ce797820f4de6c9145f41a12d9a82017b7aa92cfc5b6ed50ad1ffaa68904f0279121cfc9e5ea8a6405678c21fa1fb83e561d92b7fcaddddb60d09e82757833c9ac924da4a0571191d9a4ac3434800cc71b26bd4173ff543adbb17bcdf606a57e76e8c77676821649f7a79017834b21ad0c30afba3a332076a52a261c2590ada448159eae15a2511bfaafa22978dc0cced8fe315e5f35af98c3b7dacde2d3f9801a258174a769f92bd20037eec7a89a767578eee3c5fed3f413fbc98e7aaf5b9e642a1550f2027b9bd9d8c22ba292ebc8475edf99a6a41dcc61850d54a7f2e6626c549818835c116b41c0f5b7495c7b2e38ad858d62c44ac62b19316e8f892796af1bb1172bb43a7bcfc74036a9183eeea2b0ef66e9eb9733411d226765f010852594b7581dcacf86c658323c0865b563ed1c54a4f388ae4ecde78450ce3b86b854f6843e5381ebadd281847b01074b64baccc34f0148536346e861ba799cd50654fae776629ecaca3097919bfa7fbc14249b031a8d5212bd51a9136f276e60df109ab7914bc9f569423ede14f20ecfd199b9576b698a91bd7468eca55ccc763c79053ba09b812cd5934f3e2cc3e30fa79374cca1d33753263a392ec9ec7be292a86209f465e70208f1df343f28ee59d3f9a66af048e2dd62c6b8f0e6637362f306f7d63067833231c00f3daa975ed5822fe366db5e2509dac5a928f78b28c915243068efd07214738cdb145474fcf2184f7ab99b14ac1fbdf1779bdffbf47951047a67cfef1cfcf5bb91edb712e0173957e8d1dbb0418aa8ceb4c64271ccf17159f3007e3d42e0af991a04726181ed9e147f53b0723452c65355dba4648c6189b74ce8772aa628d319011815f95a4d221963f16759c90b25b7a11c19df2542b315c1886c368816bc692de89184a3d928e2e409629b6e7c4c29175c51a95b326df034ebfa0b9bbdefb768a0fb083063562cebc8b747d8255184d754cac48a0be70f684d8cc437cf89cd5a1ee77eafc0c79357538b88ac767a9c23c4440b914e048002416ac98640bd087be1833a37bd7d2883faea471632782236783ae5849b8c1888af8e71ba3b9cc79898b98ba784b0ae6cc4d76bcdbda51ceba0f76c50d8aa0f90ae4bef7b41c77fdff1261029abfc1fa9faaf46db1719b45fad7b6e3dae52ee3faaac5f508c1d22d0b2bc2c4be4d8d0a805931765a6d7c120d0613d18b203f0ba62470d11a7be72b398f20c74096e99ac9c8ffb0ee3f03a2fc2f83aff9b6af4a0378408e15f7ac36bbef3d95b3d9a570fca3f8ea4d0f2b7467e819359c4df0fb466e456c479fbb38db96f86d274ab4c3a35bb9fabeed70f850f1867013ca40b3fa955a05f18921bb635d5b7bb4e9b30f67d6bd79d92cc8e75db676673f637fa8595ffd67cacc57dd62f7474e38928b6c8653670eb107b65d92bd35c6782975e9ad71552dbfb44f6e072c7191ceeb418f360f81e2ff9a712b0771bc9fc62384477df340dd981799df0cf24b31b5b07f70b089e06fe9084ca12e54e58df61cbbff01e785e1c73474c6ceeb3fd47f5dd95df4f15a0f9ae7abac2b859a4517be1ea6ed858c4e0204dd977c340451ef7fc2355805e11d7f5b3a8e3f73ac25135489a41b15c026bc40fac11ccebf799ef38b9fad61dfc1efb89df9f440aee208b9acd18489443bf7100e30f52e4dfc8f0594d650d5e3cdfea3f01d8addd902b70c25c8c3e0fef3c154a4015b0df733b2639b2d5b818f697482cb91d488fd122e7c433e83109e3e34e45668822d24d61d33a118346e30c25c388510da92f51e9e8cb69f68987488d5b1649996fc7a358a67449d233c6323081c3f752f69eb4c430f4f3c869a2f37fcaf4799ae24d4ad76745d3c790dcdd26f8573185155247dc9ffe1cfdd790a929828b8cbac62cd3ee4d73e1a745061e58b7153a1f29e6d4aea9c3032e3ab46ad881ac4836889aa14539b705d1329d738812153de29b0f2fde7f982af0ece9ae4f84afaffed0d159b4c6a0d57e9fd4c7d51038f3c514358e049abc7b426122169c081bcea71ede8b759e385bcb12fb7bf2d77a6ff0aa848e58b3081c1062ae68abf72f9d1a6611a21017c4fedc1b1fdc47ecbfebf9df1ef9327f04bd320e3ad04b3ad6239a3cb880723cb0717b317b7cf613cbad4d8175c3611891b9edbc0924582841ebe8efecc44c4bf48f5a6f75b6df6217dd860a740671c16f02ba98d25e85ef8e8f8122703c2ce70c61c40f107876430acc681f0b8bf051014e626fb639db6dc0e9bc02b1da0f89da00a002479b223acf10a4ee544b16e4a9d060ab6f9d742f41cdcb789cffee1051b0744b0348b16ddaa3a0797232259563909832b46af9398fa3ac97385b19ad7466ef3905cb7461a83f3211a4811a8659c5a77371f46c8dbaf243d240d983c4e4197c0a8bd944f889f46c255137042a6ad4ad1e1e23bdc18eababb720c35b7142c6c5b7a6f579c6766512c9c7100bc7c37ab6c935beb873b021f7d1c321692f92e9502432a87d1ce2382da71bcc7d85fc55dbac26cc03d269b046b5e22cdc26d8002737c76e628dfd9e0251c042c1943a2ee35509869e9dc91e81d08255e443cd9deb071d638083462e0e36856b0c10054b7eb2c5e7a76e935f977157776589e066c0c708a50384966a7209bb2636548de9bf85aabf10ceb02e75b5dd0390a83307191966ba812b142a8ac6f0cc2070200ab415a82580ef200c183a27a29df36ac8585ac35bba8777e401bd1e7a9e606292319356801a41f9be47137ee047b10cafb6b40f5c8a0c838642f12193551624dbc2bcb79ae629c4dcd8c5dc2b2189ec164da5fc94f4bb61c062df07ce3662de5f50a9f3b61dbd0aa849282493dd6be0ff9f316f521195ce8ae05bd124343c5b11a4ef560a42839d8f394cee18795f969fce3c0f8fb87d0ef5f53e6f0a437a5582de7863de5a156e0e7d7018f4f86377136a139514e10059af3da97b5a47458c942d52c6778700c5841ecb7fe6438b5110180beae0d3583e008c355d1974e8d5e4b28178f58bd0aececb121623550669fe1be6ca1cdc2f8bd4c8e402cfb5093159b78e2660671426c178acc28fb11316d0922180dffad66c042a5e54d59b6025eaa26d8525fe194cc6561c3e992f965782687ac2c27cd06c805a105b1b663cd7548a6b474bf05d1d13f27a3a3470b1350c8064537729d43362bcc5bd64d24cedb953dd09364b9dbee73901798cb2525229270419830c75e1370498f85f9cf62722806d0dc82bac184c2a3be93ee8a87c949f517b1943d4a0fa2afa2c21a824be47380a8ea4fb67ce38e4055c87bf37f5956b2a7788a5ce69665acd749231acc581c076bb2a2728462879e3b2e9cc90312db22ea5b6b5e943df12428fd4b4734d81853fb4b3e8abba45a092a1349b17a806b9d368d2a848887c3c825b4c53760d87b790d827f13e21f29259202efc889a512c296d6db28506d2568466320335a6663b88fb99b367b1a28426ffd0ca5bd128db2e35d9947ea6d894b9ef9a5a9ae439d15dbde70c840713d51b3a7729d61ebf6a920ff8e6b82ac28e5ddefdf6ba430f7e0e57ed1c56fc86a77d7e2a27179d59b644d0780d18c66b9c30c9986482952c165c079943602151123924b9a1c80a1171540e422b84c7a94c7dbb2e45c34030cd303a22e740abe8234fa94f6615c94c71d19b6063ec248e5021cc1a40c1cb589c12acac5610f8457136345b5ff18b886f2898373e490c69d789ecce4c0272a99350c4889ab98e6bd5209c7f093f845c69775f9f05fd7bdf2f8c031e86f9e8102f2ee987acd328521eaed231c592760ac8e2aa73dd0548488c6735c3f7fc8518e90111505e740dcad2e79cf21615984c7a3bb09b222d1e7e05c9bef8d69435e319e7a1d0164733e7fb2f66f19638e40c8c9b1633e38d6b75d3e603d6150a65943c0ea5f807bcc9fb9717161aa5ef00bbea0f6d10eabf3edd44b29574193f8cbd11edda939ab1bbc820e56df5f3ade9f2e6f594906bb30d8da4e15d83506d59b7d3220771020ce0119fda410120db723651b835db64d7687ecc7c4195a6425c30f5ce7d26dc819731afd48a51ba37ef757f0142dee7a84ae5389bbb35cbba38fe71fcd483a5c34fb194e12914991a59c19d7bc5c1d0084ee3525623f5ff1f79b2cede5947590e51c69cc0da3de1f06ad3f9aa5d58c6567272a7aaff3799e57c8f37a08ebdd590670a4989b1c9d64cc6e6cba262fc2a90f767c53fe72def9af245f9d7c7aa1e01bf42fa9c3ba305c62d199f256c05b9ba25d8aae3d263a8986c77c1f6e5ff5671ba13fd1d06a04636d341aa14d033befbaee667be8e89f39eca03792c2ddfedca2a9edf69878c2537bafbe26c6c05d8bc7feb44322e24984e4128dd0e2086e9468f49708fd2dc1bd32415e897c67a42141a9f4f81976989e55b1b1f7399143b1c773d873b8d181e164fdbeb037409a18379e8bae523dc156bc650148a62cb894208f0c585a6a8c7164854ec8d17c118654e359cc587885d266100a0833cef9a2ec42e631fc670a3adcff3833a7c7a1b91d368a673c8d0cfc49f55380737044aa93759502030dcd944c21da64a46e2e1928e89a366f53225629426c1f55abf800e84702a797de8d84571e178996e3b3bdbe97d8161eb321203809b72f152dddfea037e95516fa8887fc292ec56ddd5bd493e80f665e00a60065551f5f3bd0bc05769b05c84e3df9d0da21aca4811ae13d09ee48389eaf008a6e938fd43b88e4ebf1026fe8678f86337d1b45cc5ded3d91a8a9af44d64903f5b3560b24fca2295530ff729fce50f288c7504b3c4683eb85a05dce4d091c073ffe7644a7e308d0280a20a3bf805b0a5a164ffebb0b59bbede25e2b90ca8556068f80efa08a5f429a0f21bec894e232cd07181cf4bf0c3cfd70f8283cd9379263ca9340b8fb58379e6a4a65a2cd7d8b83706b012b937d1b82710d0dc9eb765c1456b6474e30ee490cc868315b16d8073beb20aeee93cf5cad2c4fde9b8e01a069b710e95442091d54831d2fff71ca515ef8d94c19ef2bd8a0eccbef11a9a7224e3a582cd8133a3dbac445fd471c8a2eaba4f95b30d1e17ee615a40c880e21658d5c48ba5cbb8de1e95c758e19536395a9375f39dcedde5d9b18b127c47890469b42826a02406f254966fc9cbd618154bd1ba111b71643ca289ba40426d039ab699ec2b43a423ecac4c38a53502030d90e69f898018d4bf8bd752ceb8dab3a79749730774d150028e8ca789c6c93c2957c4103243a153ff555aa12ef0497723b3529667ceea10b14c75ea50fd373724fffd6da484d3ee079bb6c86dc83481f160f7f5f475015f6bf4e8cf419b0cb98c33ccf0b41ee2c41143254e894b32a5b25c9ab9541ff2cb87993ad2e87b8ce49837d4488fd170589d06c5cda0e05184b5a8643d8aa5509e490f6de177a7aa75177265b865b72b1a48c97861bdee236faf2cc7de0bf2627f9dd420447744564e328326f8ddece01d24ec041a6af8ab633650292550a993b8d7070a524c11bdf404d30c19e1fb66b190d1ec42ece237882299b3c844a6335698701d558ddc8e80ba05c9ccd804e014c0e1b857e27e42819bf5119df2c09371cd67bf531420e133f7a85135a05a12adb3043bb8ad90f547f8f92f88998fea017f85ee4c1dd16ebd5bfae1c91fd7346a1600105353e88864e99da2160ac38ee159385eaae05e42183765a602283e2dfd15dcc5f35982b90b7928ca8fee0ebf10a1b7d8c85af2758d12f18e93bdc2d9797f451e5a9bc2dd8a4117128e5617ccd51d0b3fc1f6f4b59d240d453d2aecd36bbc4a5a13dc003d6db15e329eb04f4b438f81c96c4b28534281e4f3894c8116eac3366f2647afd61cfc3faf9724ffc8434c29d6778ebedcc4bf6c2647c9110aba3afd77f803694d6b58523b4671797869650faee8be3358ae4be1535ec6f688cbd83addaf8143302136592fce77813619891610033edc31d70e3f8f8987ab98ea6f054465ebcf38d4f950756453f7b477a9c672b64a9df684dce30e7c5bb58ed02487fbb83e609aa7d2f7887b2d4844a4240cf95e862432d4d4c7a51781eeaa045371c0c5b807dbacd541c73df820a27c76f3742a90ebb819b63f46b7ce3e2778a2a82b7c028bd410704f6d6102ff408ee47de83413dad3aabe430c01217cfe5494074e40428f6aa5aba4476373c4f6d3b476414c5b6b73d5dc83223a6ec32758742e49ad1b0108a2cd900641c173b2423ed1584bf767bf58ceb724db76983e189b5449d153602eda94c2af1c5c5a0ca3d7385607699c96de4c7f860958010f3178a1611851c41cfbecbaf92873e0ca1dc797045339210f182754afe501c1b2ca20d7a08044fe37447100c63ce3603155260c37a25153e45f026ea1c32d6544c3b8519632920d0f23718c33d743a37425914e608d579aa48b9e695a065058e1de1d957e80dd290fb60c21de197172e136d8846beaa3cf79b5a3568ead9dc0f84ec2294ca80fb60c29364b8e1de8d9ec5b4084bb2c897b084cd50fb7002efa0d7306dc4ce4d7c8c6b3716e2a699aa1f2f33a9d2947d58d3f803a72c0e089d92db5c2fec9dc4d6dc9b6c01a31be6f4c95da8e9bb6015b8304cf9527e9b8f1d71cf9550a30f12c47db2d1c509f4754391f1f344ffce23c87f1c98bd33083f5806cbd9fbcbab0d09a042049a014b4696a40bee93a3c83f20665f29639433036e6390a071f016b68ae3a7b1f82f906c23a180add8ef1742a01f432eb6881c945c49142b0e23af6dedb231f570aae658fa82eef4777581687a454151c2d41db73f0e50f24aa7689620f9f1a84dfb6a63ace5ad83b54893f9c795b00b096387c00b42a1ee113d4602bfa6b8481a0fc0f7f2ec4f2dc8c646c78143ea271725030b528f1cd85fa54128b248c34c14d1b275e1d27878702c762a2c6aef3b6b98c7cd42960c879e852adcdcb69d538c7dafb1c457670ebec3de19b7c405e153bc4bc8edf1d969c8abd12f07997b617ba1058d05a65557e97fe98c84d0f5c6c04c70cc57781b3a389eb6d6345cd5b87fa4a0ca1ab43b351d5c5201eabc339c01b35260957b162253d0f4e480cded4dadd63fb84be0695690fae9abeeac7bc9417fb7dd5f590b6e6fba3ea8b07c652c0424778240cfe8bd0f3a3105e5673d7984c121e75131100334288cc54ec883c325b8e1227871e4c0161f30c7e8041887d98ed30bf7956edf60a53f991fcd063bdab8f2491e76a4cc12e9d3b76f15479fed7029fcfbf8f395f119efacec5e0e347fb7f57b5dc54db67547b914135f9467f4c83cd353f9c3167f1b91b6d513a7da600da117c4ad1b809739677574aa31097a4b28d38d63462d5f0097740c59a03cbb625ee55aa5f82cf66b769c9d3b52d3e1823e16d2ad60e9c51997f28b98e3c88c3b268d2f69e58745249b446c47f1096339895d56381b4ecce7cc73aae0a14dd777427683212fb9ad74943dd429621431de535e4a7defafaf56673446cc31ae1f1a845c008054a7074fa7da4be38915aa554544ed00b4e24531fdaca058c91a5e43b5629923344c79a081c1c5ad32045925249a58b7124d882585c7de2804f991aec932d435061785faf6a1f1caf989fdbbd50c0363a85871ee2e93820a853b7e1a518883110d0ba803405c326b372aa6eff6b6f9f06ba424da85f56e9a3c489c4482b93248f9ace2947ae30bb874d6c08aa45b28482a4987b90311d7971fb6321ebbda8a06724142f9583427cb05113fa327b69c00059bc124c5222b8af7cad9823ab1d1eb10903a855bc992542350ae529035d33e2799d78ab4daeb868eed6c0885b2d868963443e345fb003c5ab7ca5d2bf8ee133f0f39238e209d60b9fc7c45e5ccd02eb171c3ab53935e068aad9158218a60ebeda3d2d86f8083fd283f5548c3b7e1b78b96861beea9e30a2e69f746cdec73baa0382128c5e6d8d019023caf5df817155f765e9f1b4b4b28ff7f182c1e33d08512ade5bb31425661a668b52aabe7978846e62b2e1446303399fecef988fec4deb636f85c4c33bcbaeb420f1ad78f48133f4543347c8d23ef5254184dc427e7a74c177b9506bd7b9bc28305a136cc6f05640268f63136752294996bfe99e7bc9b4f465fae003ba6d2ffeb4622a1166661034c57d15ab0355c9cd36890398a5dad79cd1d1de6d188eb930996bfb515861132bed7369ef0446e20ac5ac6e70fa754dfae0bfcbbe87563be8cb06e8a0f69276f93263721553246f625a1b38bbe9bd9f34ff33f81be43bb53d61a2d6fc026a52215658e9aedfd7748a71655fb5476172ace3ba42f7135990f22a6e823137d1e3ce90a6308834598973209984ba35f859effeaf2d60c4325057c27e91c3bf34a73876250ca75289c8f0e72cac989cef2fbc933f0d291ca58c7c9aba76fe868876fc66616838fbfd04b20bf7e67ac0d12f32fee70aa3b4f460a54d177a97ec60529530b01a637b33f5ee272c13066ffa1a0b780503ddde1a383124af6525e8ee57601dea90163afa4c5c4454f0cd692b6fb38bc9b441b7a8a46b15713e13d1b7eee6be14b9dbc8125401903bfd09f340187d1c4afffe595995410f1b0b9eaf87408cb098d3e95301a62adf241e562e8024f7aedef83d0062836a5f98f24b78c18255f3910de0d21608207ab9011339275b822bcbe1feb715fc83a1ba89d2782df4e5b102a14b028852a68a45487c8aff013b4837d0313c76f6182bd171cef59f0e322410190c3958c5ac55964675405b7d61c5c76b9aa65499ed4a3100087e05a31d13ebcd123ae5bdb82e6dafe52c4955959877cabfa8ebb0136339ca062be063ba77a656e70ee05cb6a1064f0f493ed2e5cb3192746a7a01f64b239dd0f1be003810845f78727f6629dae367c8a032c020215eb4de5cd096d0d50733aa27a36c0dc0f76d4b3785fd19b56f8b80f87c64785b6987b31ab559586d7a632f6127d395d8d42b28a09433d020ad07e13c873500cf667007d2f38ccb1e83341f5d097deedc23753b2d0d969e7662caa62aa41d37bb3a6196d5363cf6a999f7b575c30e2bf9fe341e0f01f202269a420a2e3ed099320115fbb545f673892b3e13f1d0fddb10329dd16aa5cca74d4376d92f83d29364a1f0cc8e397d90dc01cf2b92f0073eba88db7322539b455dc59bcd8c08bf6f82b022deccba2cb8033fba0ea18122f8ed876e0f5047c626a5ce51502879492d91d82ff8884d157035b81715da12e140e1b0403b59e053a153781d5bc5c114132463d3b7277ba4f90d901c18435d651889e6b992293ca86665548b433d144efe0018010679d8e6e0a1ce4e56034ff41a4191437a8851bc80dfa2f0e72e5f79065f2bf21892644b3ba21b769a2b81e84e06ce2728940c0f3911363083a01493270232c5c61b6cde7d9061e2b03c0764058257a36b2c2f3e099211b884ed36d84cb025f04961f085ee72e12269df8a5b8cfe3fee943fd297905d2b883e009640213063958c2728f846dca1ac2938b5e1c3f67cecedef1e5e7184ca2ea62a3d2ed65102f000a14d78451ad8bdb449d7e6531a540043878827f5ca066943e62215875c4b1ef92faaeae90b44add0a41f9e1a070a7f39d99d3c754f01395354be4ff091052ffb9ad0044e487991a2ec919531025822855dbe8fd33325dc6042b8a32ccf05874c89491880a7088d45282e7ec5925f6b0b2ca28fd52378e15f783c7feca3c72311d57e59ff79bbb0fe738178b44b2cf0a9b3c5be3a32814da43a0281bd2f85df6bda22631daf8088c6f627d530a3c3dc57c5a8a38e2ee0d070183d35be1a4f167d43326e1b8e0d84db0bd86edd86c3884cbbd960c383e02fda3b2343828e1660bb0ede0fce0ea047ff4f4fd54cae69d17b7c5c955bb4fcd067c39059b85717807a02006daf074a18ab1c252f7c26f207a46876bc3083771dad7eae15f00d9d11197e2ceb478e2ed868532323d2db5ba5ec061f5d4f85e46227536b16e605ebb4ca0c3882bd19637ccead0315281b101b07c8a9c27bab19f42f2c34c28da34885a98b9ad663226a9e5a614cd99995e44870a0540a28e4c5b748789d740e5e652cb558365db89377c3157158dd740a4a49e11cab189d2ab0c1edca9e6837c153bcf3938e22cf9bcbf76fc26478238544cf1b4ddef076491855159d6aa3d16af013a337f30115b914cc1d94f885a7251ad6a8ead8190cc58880e26d0ef41735185013700d502740c7e4787cbccc614a1ca0ed2147a94ca3eb0bf38077c53b1637ccc5cfe9ac4369b9348aff6784f30454c60fa63a7b0ce0ce4c2124d1d5623e4beb1e0d3a5d11eebd179080dc1f958c8830f4fe7c9d4976afa0408887a6a4fee4fe1eefa14848fb887a68e262b746dc4b9765ac1413160739ff4066070adb8b5eab1745fdb3b4e9490fb392220684d0c4aff25381d40a223b86743b3dad79811a3eac22e477ca42ef0ab35b028f6af85edfdb7aa2c2a081bae48f6d86f9b869a8e820d26ec8471e8b82442b2c68b681ffc58cbd619abdf5d2420df9a4919048f0060d31d4a33ba9096770e45de1d2b0bfd8caea652158c644a1357a5b68808102b02c54d54065c9cacf3fef2632744a791f2f194588a1796104652833e9980dcff13093cd90b3429b70917bb7eeb8c12ede41c99508e904cea8f504cf999bf6d42f79512c53ff90ee7f5eb5a50f04be02d1f0af78f246b5a123b1492c4af11ffb873326b522f662741565872579f7bad96cc51a475503646a204d90ab0a13c0e1b3fa64681952eebe9fc5154736e1361e69713ecafdc2fb6f55cfa2bc461d1926fdb22e0f100d495a8c986077f07e8498b6ef777d3b299b89d6c645694f1ac5805d0e87a9893951790d2872724b80c5bc0cd8949ff6844f65d033138f94edec54cfdfdb2d4d7a67f476234c147e0e1430cbac2d87717e1d89579dab70139a4c5f34716b6e82ec55d277d0a3167101dcb37e878b90a70b4cb480851473cc9cb5bf9a045e37f80f634b673ce7fd28a06f1f42d150764244f12396851601ac0aa45e6cd6ae014ce9a14844fa3fc30fee870bfd91d1414361dd0d1c69080e919c5841a55d202e74b64062ba1c700204d4765526801b1ef147ccf0d87e088b7a3023e44f4def4fc099e5292022088cf109595ac42ec9b90d6ec652a953ea809b1878cae8ea472446ad845825e287d291da7d876b0dc55a733398e815f3494e70a527b43826411a25114454680cdc368fbbf4046833a836722aeb6405852ee860935e147a59223fcd2632887da7f6fa4759b33b6b702d9649c7f86c7909a9ce0095e1c0d6a2ceaa0b9c11f333a32a5238abde51b333610c13ba85732bf7358fc0aa0e58bd08b1c5b3a031e0ec3ed761e0a6bef9407d0cf953b5e372592976c581bef744759481242eebbe66983207bce642654e30471b4134d518d5bd2f5e4b72a6c9ec03f8b7c35500cf8837acc59c855f44ac107a0ff60234364287d7e81ac049d06579fb1a60921ddc1e18263353cb32c93e53c681a7f1d9666e7fa5be0b72ec5d82c930c00ecff88562b6798d6db1647ed5303ec841bead2707342cf8c37a0428393900299faf865b0cdc6613c0cf5fc66b3ef016a5f799e31ce03782309304509f0cc1e28641eb440d4559f0d0400e92026b381e3eb3f61f40c5045926e61a0eededa5ffb86738befcb33c99804aa03a32ee0413e6b8c86a310884f9c3478eab196711edfd30f7b823246ee76540a89bc62a880a99c3cec19830426c36978d0818f7f32ab9843c6062d6455ed0152fc3614672aad4505c4e92072bf152751bff62a4ba3713799ac45a0e1d494777da0e2e7bde29adaa5584d476c26b379aeb61894e7503db743a0a7f9eaaccff5d4c40f63e42c62f968bfe864d19fedb54e3ab9bded45fbdb3cbb67d9b10905a4da1289357f905a306d517d86ad49807758001332105208a44c8d02158f44ff3e24fca5ae137b5666f867c8329dc74f79d2dc04f46642e2ee30464e57769efc3f2668e1f0f7910fa72e57aed1533f2015bb63eaf483995dc7f225f031c7782482c5c82b1def7604ebaf293d25824e7d489a8d14a2dc91ef9cd3d6c428800e4f8ab5e563c758f5ca5c3dc5620a492920fe4c05962da126833921cd16ba7828f15b98fcde564e12bda3e381a936732f8c124a1ecd055938e8bd8c9638daddf92771941eb3757da712e40a728b32b66660a94e9b0e5e92182947ac592165765b021f40e012ed7f7da350dbe851408c43ab949f097c98fa266a6becda2eec77edf018c1160f83a160b31662b97104402f87c7c8ef5de04b84450854140f1de50dc430a49ada89fcbd97f0712edfb5c7f4ca9afb075675b02355b61a3125fc7e6fa48f3bdbf54d4dc060ad2ad0a99cb6555d882e7f676047b1eb7a016a87ddc26d77972adfd256330e1d3265fa3b3728dad3f9ad7d35e66b9cfcf19891e9464d09f3cdabc2ba9d4a17de54fc97bd00d1cafa8dff9009691778f5041f3a7edf00e356435fdbcec5d07f3d0073cf8547f6e85b6b22feb4cfb9dbe210a72c000778efa5c2415ae4728c1e13f31daec5858e421ce66148051078b280c0465884058021b67a3d8847fd1855d1248e86e74d73882c4fad3fe81214ca336a08e4ecc5d750a568cb3911f88d1594a9fa4b4494e61e8be5b318feab7a7f3b4623eece961ab5e6eb032dfbd05d0791f4f73741a1b7d041f870eb16546dfede6a62fec89970f71b03ca8d71dabe41a7ae87867cb24e7954fc582ed54206c54b9e23cd414fb02ca7d2d2ec05b29275e6968c571bc008ecd0074d0277e962e176beb4684f0d9e1fd7bc4d5aaa5337be384dd5ee45eef9607c965127f22fd4450f278c092fb7e0c1298df4a267f586b906ec8d670044836e731156bfa9845060be6179a15047f604829d818d787ae2ca57c8b99a621d27abe3de3e745cfdf33e5c0d13eecfea26eedf806e4675836f119c3dff46cd6fb0c7d66c2490f8b18c9dbc2f9144bac17e1e29bc075d916dc81fc2691b7b62181bd9c607dcfc412f617630683aceccda0f5287f19fb784d4a882fc5eb736c83324945d22bcf7cb7d56ea1b605ae385f1c6204bad77d65014d14be6ba4ef685940258c27c84fa78b488ceaab66bae6c4e66ede690b6e4134267527ba1ce5933cd242787870461ff712076dd3d7e2f80bce175ad8aa28d044a6a1a3cb2062a7e909619dd36b3b5a067575aba5f98ecda211c2d62fcc0e410584ed8d8b54d451244faee6415c9b91e258f50af6476c7dcb3293ae27468fe12ab01413829f715f24eb4dd930f944b525ed051792632ef9e3211fa7b6cabdfcadd3cd44e23101a6100a0fd89b2e39f962a52493f86b23ddcfaf856b9fe149db5b46b0c949e79f4506c12a1ab6b4cf2c83715c3cc0f4998b2d35028301bf6fa0070078e2964a877ee9da977e40d370eeb493663abc6fd8f9b5fee4f8abfca4e1fad824b0d49cb6594d94918deef5e4cdb351dd775763991165788b8d918ee5338e5b67560d22bbdcbddce51cdd7ba605944820b5082ae8cb2b3b56d7a2f4faab702e02861e5b605dc66956839800c0e01d9e8ff2f94514f0c5ccfe6b4b710957d8b5ec7048c2587ed050313149df9dfd37f3d65251e818d166135a42bb563fdb4411f751b51a9a35557f21441e97b6ae14467428ddf413cd425adfc414c17fbeebfd1912db7b9d7189f2c147d932eaaa4b5aa784db92f6ff3e68879fb16946822a45a3d1091740e8e4b914ca215aa8c6101423fb229989cdb5ec2859780d01055c58f2aa511104f898a8dca649d774788b4141dccb6927e0f9e7f3a0d5027d0b8eabda3f17fe90744fbafaa14bb4c5502d0e88d90c037eb1c6692f771f8600593b39e28adcbab8c5ec1bd56afd9a5803787dae55f4a7f8bda9be94ee8a87a2bfe818837ae1430287bb4ba867695cb4fb71a0c79466cb933dea1c97693b91bb8db74acc89e6a60b79a2a08f44cc17e3d26d649acb3902dc8fc5c7a870507c7592e4c0e52c078dc6058b6025cacc28dd9766efc7eff4a5a003c4223e55e638aff1325a3fec04b0e5f9b6e72407c9e9cc24f250374e7cf1ae726d28489ff51fcfcfd34acf043ce5fa945d16cf03c0066165d236ed2b2b4e9d661678722b50e4ecc96f474efd08bc2d8f5fee1765cf676e120e6c78edf538d5daa30a8490af72f19cd20f903211c1be1a2789496d22961d0078e2fe2f66bea641f8b47ff753bac0ee47d2e8ce8358ac28b7a63fdd793fe4bd91928b0e8d8d3e44929f47d5507e53a9662f6dbc26b5d3b7b1c32bc61626dd6354be2e00ac5ed48bd5d928651acb25ff424fd6c8d252412187b2ad48d7b813e58480876b7288fec84677b0db60dad3f670e25d170040a059a3b31daedf696f25d243f99ddb4ad06e3529dc23f81f12982d229a659dda9a349c40a9ba5da18c25f5c34cb3505fcaa4fff95a87a462f84ee2f9a340722e1f15be9d7cfe63702f0c8ed35100d12a0afa98a4a3c7ca29e14f4b2d010492d39584bec945657b5cf2045713b0e2b9aa136fb186058aea13b1b1fe9676adfd2cbdd7c09ea3d2305bf0f8869b9cb08b66ced7c5459e211a058a635252141e77911ffcaa023e26b9a4c3d834fba09f01f41d128ab858009db9a36265822ead54b3afc5705c6d255065f8f22ef0e71170a1bc319ac5c1e9c953f66b18784d9551992a35f090614be5551385912fa5ffbb4e8a7c3e51b7ddf41c18f5e78b2f44ed29b241529fa314e16e95ee6e61f3e977efeb416086518263e7aa83df652d9652cca30701afd8392fc2cebb5ff133c7d651f67eb19600bc51a2dc25112a39211e3de72ba01975aab95b306dae2ef6b008179084e3f46b4531a70bef42e1437a9715986b53d181a01c096ffee08522c573a77ecf9066aba13cf991dca285a84b0c5505b84034e8e0461fcff60f33dea03a85e5d10622e3b46b27e87204802569c5c885ffbc8c4747f9bb5ece3573c35597244e5c7376b3c565d34397ad4ca3214d41f563f74d6b87d300048db234aab130adaec373ad16c34217dcbbf4c30dd1fdfefc53221f85d51b4841eb1b06c8987812e99b1d718a647fcf7d853adda7ad3d67e3180050d2c64b4bf456d81fa542e696c2e7e9bf1ea3633470ea9077bc6b645d1eb53000206d71292f21ce9e8ccdeff1f6c3d75a0cb44eddbd5d9f1c89a831a10720a6801ad7788ba7a126cfed3429cbddf5ecbd4e41df01f64d5e1e9190735bd94848cb9d3d36a02a63b3368ef2652c59a787be0b82fc5596d7c58f5ef0a43a8b9a9a473bf43fdb8c31c85a21eae1eec156176dfe693735ad426dedd004d44a4bc8796ef7f4c4dcadc26d857a04d4e260f48bba2387760cea79f9e8230fb9a97fed8a789269a7b63932624a1a33a565ee2346b807d6933e1204304afbfee8a4aaf281a2c6c66fd32754d704d39314e77e252c7c9f858417228b2d926f1b9532dae65430772684e00fdecfb1f30fd05817a817362ab3675280a12ba04807f79adc80e1d2a2ea41a4ae39b5f0782a1d2a8251aa08210190431412f93fb94ba8dadc1192854d99e59edf07e64987f4237c54ffd05c1d5f07cb8fbe3e6e00f58c5c156a2835449667a9f885554ecfe73d14cfe1cbe3930fb14ae3219b7456fb765df4ffaee1fa8213e7a2264f5dbbe7f959cf94bc5f50304bd2fd0fe6d5952fc30eaf477f8fc6f077eafd44b4f231bf7942be1f77ca37bcea613533c799e069c352c30b20769def605352ad8ef0470fc91e4c5def86997f91bfff243f4848dacceca1163549dcb7eb38b0bc62be192a777bdbf43cc91c191b46bb4905d500d3658b28e1dab003ba24f13fc2fce7b56331ccfb8e8e7f6ba2c4e9e04e03a7cfe6cbb05cd2d3298fe5e24e27013bd70e017ee7299775cf4effcab5142448e3dcf1b7a8263c03564d7612c44d20ca4d33c3cadd5471b0843d954ab946fce3fe57015faa6de03773c3562bb4d27bf28626b44f3dd8f61ffd4561fbb34e1830ed9fb96c342ef9e436c321edd5a1db6e43c37bea2dd20aef929c05d147e5342fd04f11b93d8cb836574bedcf6b713b5642207535415670329a1a569d2a919a3ba73a24f84eb6b76428746e30fdc4d22d9d524dd4e48e941f7771ebddef117fdca1690514ee67d895cff56f9c360761d194947c409ff3bf8be89460e215e70135c96ac39d00810bf90bc17b97574b8099a67c3aa3711e4f40d37122d3eff661c1c13a1c887d04efa8d5ba9f1eb88bc18e52cd271a8e9c1bd8fa85050062dad3acf2662db6119ce3548b90ab93297cf633f6e5126526ce9ac65fe3199c0dfc49c452caf3235859f12832852588d571582094e23f74189e1c2ea7515829745fc6f7ab0c2c3652f3c65a897607fa9d06db69096f37813e1e699a6cc054c294ce72798060e12e10c4b99dd674df11056c2ba45fba0b36ad41df502c5acca814a96d548d8cdcd90d79b049ab529fd1e40fdf5304eb7b8a6fca49d40bb96fd66f696d7e71508ce95c57de9bb65681062c2f73bf40443cb3b389d67ab5a1087f0bea451ecdb82a145212645d04906bc7847df4dfd8ed12372e36b4e15af39b8a77ce7506013d64e3b0d3841895aa06b79e1f546fcdbbc91b9f79a9fad352ac258209467ae66aabe832f0dd41082f7cb773cbbe4fbae84d7a94e83e2d5abaf2862a8991d053d4da2becca01a81fa6cce62f262a15aab4f9f03c6aff852c6f2ef9fcb08f221a654712470eac982712b1fb7a0783fc6cb7d540924452327bf12bedfcf73b20a0b12faf0b634c2adc631a32c1d1b26a0b3c0ee9c753698794018138147d84b40d179e0d1fd571464f5b02948bb3f86ed6f82dec4d33d8971d3a52587790e19701679bcb9d87c25d5df524dd208543e6870f356c300eed3312378fb92fdae099e0ae3e6a63467100aa547d57401512921eca942572dd50bc98a1f9aabc09bd6022b8116b49a016efa475c4139c5295c75f2550d50427aaf1dd9983748ef884da39309eb7499868496458adf145bf9eca38c2dd003d17c40a43d8e101f7bde2e8dcbbc5e33f6a0f17abe2d66e31b567951b389a88c45b7d9491238a49bf0dc09ca738c2908a9ed6acdc0a4e950200db02907a0d4d6ba3028163f1954eb6c4bb4a3bdcadd52fbbb7fd720bb5310a80c527b29863b07261697b5b21bc1c8298a641b5491a797c5e7f517ad726df9ed85cd36d78aa77318e4fe51e0c55ed1e7a4bd7f5ec491ea320358ab29e9abc0c8602c2fd25096741ab4aa7bc48f2163190221f09b57e968c35c0681b491b00fc5df02d8aaef3e690d8c567e7c73af8ad18cf4abf7aacfc984bae4b05c8c77a4e49abab3ab99ec7b23f0aed69218e8796dc0bd755ace90587466325eb582b93196041910c428e029636635775def30a7e14591e8833e3a4abf244b76f10d301c18c1029da8de528f2f3642584ac6b0ba5d48649f932e42afa3b263de7f9f7a8b9f821c9c40839f96f09d50551123423fa73054ae9d75dd8eafb97fb7399dd824efbff3c071374fd387611e0433c80dbff4e72bf2cb512eb4d31c67750732341b802f81996817e31a0acd7210d20bbf00eac31d56fdd49d881d9c5e5c44e48789faf2a371829570998c43daa214d42b1d8619a760f1b7ae6b2bc162ee790aaf5b94b3325c7f7a5c5148e73d778411c21c6e92ae53064c30733d5d8d1e0003ea4c3494eb7c5ee28e8205437695e51b55bbc0f9fb71c6340c9f0e87e171d2c67c2310b15d25769375f03c95e24c3a3009b410abbb8033b15ba2a6fd4e60f1a657d87acdd8a1566445478c265a7ec38cd7cc5a0d70590b6a9a797dc79cbb415a1667d88a0002b176a5c9780aa7dc548188187c27a02ac766ac6d7b593f7f04d370d43c2d126ef30fe1b6081d02f592c49754381ebdbe7eadf597cc7cf2713d46a6ec9bae9832464fdb24f013afc720f64538a5cb9243b6b2c555034fe6440a4ae43c5b702d34ca99abc0ebaf654e06028ad64c5c863ad62793ee130ace7757433b5312894e7e01fa92fab170cdffb7a4b3ab91791f2fdfd1c424738166ff1d50e77a28d0acd0c6b35ee79ed8716a1506a0eef40290791bf8d6fed66438f0a829c6f97f50f824f8c908962e2e32652b78cb8794ef2ccaf5ac1684c7410bbc23ab641cdaf8b37ba12a30aa8c0f69831ba2ef160a78d4be24322501af238251bee4c31e0864789f0d90785f14c5c106efe7d8720ee6829532596548c0c0fbf99ebf526e26f0baff39e7838453df20ef10d32553f9a0026be627ea435fcd25d29e58276ae606206d124532d63926c91a40df71ac6ae771cd02356986b48af4b3aad8431f9ad8333f352fd52300101bb7ce101fa94fcfc4813840065a215de79805aa69c8cd9a103527809edf98f9e30ad9af143c68fed9eb10f10290c9a757dde8657a330a8588d5218036b501b87655228af2d3a2cb8ad2dd38eedfab6a344631fdc9cc5a2a5b6261fbbdef1b7da9f11ae2b646fbbacaa325650bdf8651751058ee932d37cf32a1434d5c905b33b7001b034e1eeb385a5fb1698b24570fd6a9852a9c4755a156b5c9dc6c21db0160863487789e5bb7f7dd2ce36519749cc4eb324e28801b12eb121704761501a9bfb4d942a1c0a932d297af3c3fb093f40d06c0080172950474b16efbaef5e049cda8df502ddb70e034396312ceaa54ae7c3d0b0692977d58d43d421de328a87408119d5ac0498937bf8f0b8df003023a056c7717a815a5a5a13ce65ab29b2ba408c964b6449f143d8018ec6b7cdbc2a3d432000a83d4073427ff90459767d2a9d16af9e83a4a5588fae4beb8484d2cf64b241497285367b9c42b68717d6d91a921dc2af1f3f1b893603e9df1e9c0e0927db0a049c2b19764a08889d5dcaefc1c87104bffc1e2a0e61990717f06597455ae53ec9c57aba604cd93b29ae24383d610f0cd22417285765f8a935b1fca54980d6ccec78a200c3c2e8b1e347dde3323abbed4779876aeb0c7feda70e645de7e972896e64bdcb612a23f9dc36a0ecc890f46a5a5ff39150b4750fbfe3b429e2ace402a1562b2193152703e91df9e61cb70e209efc0d1882feb067d18a0bc2af4c32da13468c7670f01e702db298e7127f277e1912597d0a80402f0d318f123c2fad05c2b912a2575d4f1ca67f056376358ccf85d44e2e1d05271823826cbc491cdece0b4ec3b162bcfb3b3ed768586f862f676d8619c63017442ca9cfec0c02596550641a9bd5d055e98bc1ea8bcbec5afc5982cb13a96a2e3df24528f11cd441b0190c9f2a023f9845ef4bbfea9558629fa01f98a892d82c57e686e01e721c20ad905fbcd03869fc9a490b22bb96fe56e81519d4b6c4f804aa68293ac6f0ace51425ddcb97e2f299064cd9e9da80baed5ca8a5cd934158d91ba2997c9aa3834a6fe385f5ed0ac83d24dd61baa78c304b6981dbf09a82bad703f3ea2b9960d304d6fd4086932770fa21d26c4350929cb1769271752e3eab2885dfe5be1ac8c87df32466768ff20294d3f5269cb930ce20c8d2cd75f128f2f081681101c2fea05d4c81b52a65bbe319b161a1cd92dd73d275bb0a9351c8c19bf2d1adca077044b0412bae873a73cf1dbc37fb863a38de994c074a4d8bae6a07e10253c1792e0d7e0f8db53a43ae6a8a54eaeb439931e885a5bbb6b06d91ef7485e5d6b29e38c1c280369118200ed7244e94d688fc25aad58a70e935c2c5cbf4f76e0368fd56c0e198506f12469aeb149c0eb279a0b0c36bc49e2fd7eb3b9b588576007ffb3c03335b8558926d7efaa686a3d5949b14f63053364db658455913c44e7a7a89ff5e323ebedd142c0d8b7fa0e71322828a6d3dee2605bb1584aebe102a44f7566485130302cbe2c529b5bfdc04f024218804a4a0216772e9d732031a6a720844e95e01a7d39549c642b9d5133d5ef6241cd99515caf14e46d4f08d57f4b9d3590446ed622bc8f8469c7fb12d7fd5e473433d3fc7bd3ede588d3461f20a1eaac3902a16d2edc09c1b3f748abcbd9be7d535c3a42c484a56c16a469f4a35ff96b3e36629926a8babde49ca51af88e52dbea3fddf897e4ea4ef2a80a86864fdf3a8347c4467921c08a3264ae5cb253563da93282eb803bce229fb655188f6e48d0f723a4079c001b131c85fb4940f93812b647ae860cc128810cd058432597d4f43a4ea19bbc13b836105ea2281f0e84c447d7e106b17a5b778bf4498da2e921179dc0bdcaecb4e2eb60eb0ea8a789c93c2ea790a61ac257373d9fb68e5e8d2de84cb49f8f8692cbe31a18cc4343169f1f24f5f92763b729cfc9f602cff165a1ed884a564e2d4195e71fc4457783d104dca4050262070bb8683d0262a4f0447cec8d342510fc57a325075f9a821f36bff80f2d702b8af309e94240fb1a66b90384b465dc3f0bbe7a3c44df066fafeca13a312acd03448b1607ec35cb27737d9b82b694e76aa90982ab19fb969a4987ac418ef3a065156bf5a682b8409653eed4334744bbe28ca662620e8318a41d17b89202305acab80aab00d286e007a759fe5f3189b76b4b46bd245ca897632b2f3b3a1606215e156561f82ece718a514100454dc03452f8dbe6918f9caef4603b37962abc434f6eba809cc8b2da121b80b70b5d50894f96065d0cc5b502d2995e87fdb5d92c3fa87a0777180629ef416efd13e221973ba391917e3de9061047f896ce7af71b18dc6e0da1c912a67cfcbd864bb4d0055918ddfd128f768c1ee101dc02c92474d6d7b34f979277aa8ce2b5c09812c757b862640a850ed62110634f6866167ab610990e2ee57ed0d415fde80964262addaf628b7c9257107fdfa01a3503c250eb60b0ae0350c68266b5b37d16030a893fd1c247017efc64ffaab11a3e0f6060c05580f7dcb0ad4d3c31ace8aab31d77336cde30794a6f90e1ed94cef0b790e2b0a4e5ecdaa272da4760ef12231faa10927f0e060617c3a3396287e5f363de8949c0a687ea1124d9214bc934d3e1a20d94b446cf9988723f67a8200902913639ed23d99a5a989700b5f14a7d901830a60c48f41a04434ffdcb66022a7baca1e3fb3525501eb8caee07e47809745ed32333aa295b4b68d4305471274de4a1ea16ad26985364a6d041bb8b0d2ef6df40b6860fd6d80a423f741c2735f48b4450e55b2fdd85e177dffcb4107a1bf6cedebe4d9cf4334d6d88984004e62cf34fc195e3cd0c94583cfdd4fac8d09bdd545998641e4e62a18284c30b4e0c234b1319128e512d5a74100c1673e165c0215c6e4f8a84634cd870c264b4dd7b6414cd4257ecd428025d30e651c44dba7b7d24e314fa0248830e1253183b6ffa01e5213b5ba24eef464ae1499d55f307da8c28ce12d00a0f4b324821e1581668cc6eb803af7a9e055f5b3bf2cae2a67f1e038d7c389e86a2d883c3d180918c795444c263c5406e4c06ffd408a2948673023312029500cc14eb4730f90e74a8090c8438c01023b614a4270834bab12568bad086977ab0b0bb02fc2d2c5231e11ed76f016691527bc8a39b94bba8e2871b16520041d334252a058310a38bb8773f638c6542d301579ca1e9abb19e38432d8f7c15e72e8afbdba0f98ccef4d4b612f734541d2f1ad017e6cf934538df22b8a639572618b15cb2629cefa024f790c1de9aa80f9691d159fe90b4df637ecb063f3df4f9f466fb5eaebd131e36e4df2861852a1a4bcebf7a2661fd480597643b99ed4bb29ccba8af74ace065c4b3ea708fbed2acb8421695addecd41c66384bb039ed338825dd4f22a21b953e6e447055531bf558e534ed28341474e296572c041e6cb5671c7421e0275cef17065b2240eb2e15ee673424adc33f7356ee170da381b81bf86bbc4e40e56c54a9f62a40fc9394bf97653e570336a748bbe6bc23dfbeb04d1c1029c401634c524bb9ebd8d7bd3acf61c530096f6672de7afdcfcc4174f8e89d579a0a42f393153d8781e74c6e5f4222c50bcbf3eea2251024870d4df53eee18d38d503be40e54d506ed0f336132817cc66b777008f7012dae2d459382567b01318e1c0100598d941a50e98fa2e1732d0a7b6c8aa5ea2f60bf52fbc0acba7cb00545586964072a1f80151195ef63d1dc6b9a8a4cf7a320b29564bb5c532b319b64b333b75f4840a56c6fec502435cf8ed2f9e8576b352a81cd9a413dc42f8e40822d5a8f9e1791bb47e3b3f870d40a0c64fb288f09a8d3ba07bd9875a6077e92b13eb2d7855de0827a1a3461eb82565bdee2a43c05449a96058ec861bed5ea69a12244b8e9a099ba6bef08b3db99ce2bc1913340cc20541e5d255734a7ea2fcb6d15a43e089665c7745eb1011c8bea0db30bb74316c770ca2614fab2842280436b303ebc68f9cf0320780797d27f547052c83e5ff404612577b6884a2857b6bab78090ab1edeab1bad9c41fe6160b6d14662781a3913e054cd8a070cc1a25fa0048ed185535d3376f9dc15a7aab77da12835b39c1a04fb1039edb98be691d14d32d3e3722a23dd79057d2d358c36ccde6e078a72e022efd7aa4cab12b98c9c35237017f0bb8d45f82487b4dc0d963f0e54b2931ddca88f237e5aa2c9450ae320f4384eafa70e50ad7b491abe42e901099712f363e19a7e98d52434a921f1ae573f8ace5086b7aa6250115ea6ed1883f59c274cd7504491ba4c80392078c0f825187305976a3c020286a42d8c0ea0bda3bf44fa736a021e95f2ab1a8e0b00678062117919f88c6577b45d64ab1c356ef27018472c642882f1edf3e96219f788398d129e77652664a1e8c8cee4bf419c517b5d5082465c81e8ae96519d42f85ab1ea676737bc46fb2c65ece6754221fd85fab86d684acfd65f074ba0209c0cb3994c086d836b52d5043d717cfa75b5fbc746b59392a6b0f80136e75b03d5dde107943e5c91dbafa908666f3ce288ce5f6f37834acd72e2a998900ee19a3cbcd04eae29b1e782f0c43a3d6a0f1f03f61dd82dace249bfce9965d5332909bea3d4070067e86bab050ef8015e63357ddfe1253deccc60699a13eb826326b50a9c9f9e21f3953d990e593dcd453e42fedb475af4a4fb1514dd6e922a07a0ea0dd5c4372f10040269b8ecc45323a0cf43c9df58d9b516fa17baec81240772b3af5e094516464ff6d8d5fc7f06d7b3894e8e644255756395cbae3bedd5f3081784c94a3085ca244164c5fcccfb4ccd45d5617847c2c4881a24c3a5171de4b1223d0ab334aeb0c2f0d5bf23f750c97ca91842e8154af52bdcb2b0cc13e9e7dac8313fa7562123a16f5db3a3e37e0bce162870dd1ecc66399f2419ca08ede347eb8cf5090febc50b0030f7587648abdf27c18f9f3299766780b509146b16e3406e5cad4279d057d85f8b307d071e2e3da7dfa4668e42476616cada331a82c291532804051c41821506f9571399401827db840d1a5ac5461f99f8e20a3a159958084e6a662ac4207ab0a0a315203c678caf0d5652bbb45fc2f7df2f78287ee92e383f4cdf43d01e0248bf05f685ef159f3851ed5290935c5d1eaf5cf63b79f13804a20346cbe1762e64a245da64eaa6fe60683ab3bada818a0a8f73f8621ba95726ee6b7add57277cb86a3ce9d751e0397554138e1fee56dbe9886e5a60c434602224d385aeca0f9be65e56f70b9084e457754844d59f463541a298006c26e1a1ab512386f19c885369ee29653d390cf0a8c6b61bd1396912b44fafdd890f3b99f9fa7f39007a196fed26721976a9f438cfbc8f94a9c6c343837e8a26d02d093ae2630a4e10ba813273c59744cc275c201c55270090f822c091e9f2681bc13b368be4eafcd06c19c648fc4230cf920d0f3cdd7868de6a603e4b80db52bc50a30b70bf7364459071b99aa1dea67698f07a78bfe5bb745162d58ec8f8a48133a060598505763de81722577a001694eb1c8d96981f5ad699c4cc08b73b17849812164d010e2833dcddb11242f018ff77060d80b5bb856c5ede79a4dcdcee2ea7f058ca604ede069b44f72b5f14344cb8e14a98eb6605b88d05d72a793df108e1e576fb3a1c2670b034b514692d787f780acb532e780b134177d07e48da442ba146cac9eac792beed3d77e00b89cdb9d173f6022fc5e30730d50760013052cdb7056ee2f516a6909005b6c7268ca6a23e7611747252550bb35a153e530d9277be4eed3aca3dd4ce1e841893eeb09987a004a55614aa0dc79da0d1a636dc2603b5c8e3679e533100b2405e380ba3f7a6328e595d3d33fe6467a7e2c6276c410032a126760f04bed811e19a02605aca434db83abd4c64e1b72d145a6e572a7a0ac194ac90a371df124064ecc3d281c6a191521b6bc012f00e413a126a4bbc3f0f5c2a23714ccdc176a947f4f1ec274a308a9bd3304e2202ce74da3e43c020ec8bb487da3396eecf1e9fdf4f3c96581e6cc322266ca5ae21f641701a83bd4aa2a14051c9e55f18a079b5b58701397ff517f93f649864678938e406954bb9cd3ebba94f11726424a819ec42c323fd2bbb3663e68d03435163c598a8459a6828e7a0476f6eab36cdba678a85ce91a97ee21f0dd0babd7a26661bdba28e26c0beafa43b938f4a362f754e8275ef184f110cce17fd628e83820232a6bf467e5472f1bc90749282458292b8c30b3e67757ddd8b9c8205d15cad2dbc386e8ba11f2bc4d4b9e48ea0fee8f2d35a2900ce006c1c4c556e4d719396056ea0226a4b8887fbcf89c667e352feee2c9b1650cfd9559906ad0e4294f8fcf3548411006fe1076d0d56411e880d01ad6d3a983a211204aedaef1d2c23e71b455d2b959f922487aa50b2ea5b610083326fbae35683225a90902b13046cda2f20911bcbb37e9c2197ac37f5904d29fe9fed0546ec11551a5cc16297a7500311ce76958d1d4286e229bf3f695d51e4971f0c30606c29d90da6a66986099cb72596d411a7211d70768d110561b92086b628ad7516fc19f3dfc5879c3e016a0aae2888547e0e67e2b47c7c60a7dc151583bb228460dca61b6e8674fff45c58458961df658d47a544c0f17c29cc3dff668a58cb43e984aaaaba38caa9c40c8d63eae66098237c2dffdd80f591b3a208579af648540ce80099d2d7c500685a00ed078e1c0392db55e836b20a40fa24c0f43d7d26aa910892ca8127a020b1b46c13c12d20741a687f84ccca430f40815a882b90695c121c88625153521c961abd42d4d2541210c1a290e06c5b66c52d40d89fabfd552197cd374b97c61032c108e1893b85beaaf8c3beeb52e97c7136e222c263a5eb8efc66f561a14595c64791121132855bdfce456046a0c402a64521c04c27659a4a01b32f5ff8706200a1fb7e25eb5c2c1de3f7d7d3f2ec326c397f01ff4c6d6a4fd690a36a4c1e1319b9b0217128539697118cce516cd87f2802fbf5d5df1e7fce1d06f429ccc7b0be2cf399e5841b233f1766cf7ef5637dd2e2821f615e4a80d659647ba971e75222002630ad6253f203b64ad839488dc33b335145d9edaae5839ad46f7504b57947cbbfea843f629dece14a9698c7789e89aba0f32a74c43a6201a5b5c79657b3e3d0d6fe33c94bb5eda307675dd974c502db5348c33426824cfd1273c690f27de1bb4b8035e82cae6b63ba7bd9df6634546fc0dd9e4f02eee8a408b3f9bcd6c8f75bb63b32b857d0440badbef59367267369e2a9940a597ae27b8afb21283ca0cc72637940ac034bb364da2aab24ad1886cd017462ada0ff1c4252ebb8e70fb74f801ec70042e0605c90f4c108847933600425121141502405101ce3300a89798b399025ada60903f906e04021b358b56b7955cd9bdfa168068708a97b3055ef1fa6df84322bbbbbbdbff6f6922225060eb9e1e6e7f6b292012e610020ea3878933e6b22c524c9c313119f6d7fd993863b26b0a9a3863b47e8933069f68e28c219d88c419c364f423ce98d288489c314e2e9138634a37232cc764bad7130f3e48238304084d0c129a386390e4d2e9aa8953e67f3c18f3a00c8d0c129a38659064d7332959309f5938d66524ce98076364e28c9179f0c19838658ec41903839395b87baec72604e2421d202e54c1059717fd389fc9e07c26b3859b2d28e0450b6e68c189b35c11755fb4d084bbb3605af0b8eb074f5968230b963b0b89f44db04bad64d83572f239d8fb7849b2d28f72e9c52569f2335868c3b190040b2b332dd4422f490bb5904b82fd1112e925632322ff3100a8575080bbdb60a55388c9121bd2e87a9393bfac1e39bfc49d3a96c8d27adc58248f14ee9e28dc3d5038c80a7470e0650f2970d01e7ce0a03dc4e10804dc2d9000ab87361ca4873138a88e1e0eaa43e4a03a48e0a03a86e0a03ac0e0a03af2e0a03d0cc0417b880eda038e27450f4190c126889b2056e02c3725eb6a4265a56f423d8e4543b1e01326caa57bf908220a3f329d72b6a8ad1f3bf5e0b123848d22400615fcd0e4675e2c204305ab0a55ee9e0db87b94d85891c4435585939d64d81da26566843c26554562792315c8a93c60943c06b8d00839e2c46b0b460a41b84106901b58b8bb912a69684ad988da96952da158f29b308a92404c951826015969684a37140b124128969b314b845d2119768d4e9769078643612c58855980a25844367f59bb9459256a8f281e3ba8c748378662b179f0646363936116c972f2561e9548d81ed9f058d961835d11f6d767bfb785838d4a57944bcfe4493d32d1cd889447193622915e5a9cbcbe7feda0a84b8462c9b01189b271a969b1c1795156b21ec7c2b6d5e386caac9213cb07c5f2548c7a94465412cb08366aa24927eb71a64b278ae5fa158a85c5c686cac12c3c302430d3c5d941512cd88baccc748950d9c944ba3c4aa31d59c9aaa1587ec898ee8baa25b4c7b933f94d342519ab06d3ff33d9aa81f951b266aceb39d0a20613117645da9a59e3016b08f1640fa0277a789286275f788285275078a2c693344cd60e2a098a4705a8950a5095c9a2562a40eda0a84a0a28404f52f004a32a1e3b6e9559241a774f8d1a2ba334d8c02e96ec8483358934da21138685b293f55888441a2d09f9e7086ff8e70867f0cf11f6e01f2408e1ee4318010325f807066df8070663f00f0cdee01f18ecc13f5e08c03f5e44c03f5e40ff78e1c33f5eccf8c78bed1f2f4cfef1820aff7861857fbce8c23f5e80e11f2f76e0ee4518015251800ae88911fcf3840cff3cf1c23f4faef0cf13cc3f4fb27f9e40e19f2734fe7902e39f27d33f4f9a7f9e5cc03f4f28022040080058118783ac088383ac68c34156b0e1ee0138c025f2cf5502ff5c3af0cfa5867f2e2ef8e792c33f98fb0733807f301e4724400107184201ff0c69fe1902c43f439ef0cf101c772f42650a22fc330503fc33c505fc33857577234c6af8c74405ff98c0e01fd31bfc63aac33f53a0b8bb11052062e508ffacb0f867c5c53f2b443e9f1534fcb37205ffacc0e19f1539fcb39207ffacf8c1dd0d5004004060040781a00a0e0201191c04023cb8bb0214a003927f74d0c43f3ac0c23f3a38817f740006110348c38883d2b80e4a83e4a0349c38288d1138280d1938288d1b38280d2138280d2410418000fc600d2702f0f4a8e38355310601d6e0031746f868428e9195e4fad1cd8809102431c98ccc36c958fa44631a91629ec9119cac0406272bc99c00b9d7e9e55ea7976b976464dc3d4282b87b62dc3d403c2f3fdc3d301e1ffe5e94afe9e531196224c80b6432c44890213532446068641e93214688382643687c9490b8508381893f5e6862e8c74c086626b4011f2118181772a12131455e2854133303e3ee9d23649d236c3c5ac2a2431a5cf00677ef9871831d1829401a6e5077ef30d102288a74518219a8e1ee9d13c001023cae205a7ae0ee9e21409858c3099038811edc1de5002bc8821cbe00438d2db83b006400833a3a5da800d184bb77d480071654e1872fd240dd3d250c9b00c44044050f98c1dd3b5dc0ef0951a4600a32b8fbf54b4aa32ce79df840109811baf044e085082af0e0202a4ee0202aae0000488b381ca4c51c0ed2e20f0eda6208076d6101076dd18483b68871d0161c4880003e47c4f0cf1122f8e78814fc73040eff1c91c33f47eaf00f8dc73f3443f8876601ee6e0400b668c33f5b70c13f5bacc13f5bc0c13f5be8c1417d88c2417d3839a80f3ee883151cc4873e38a80f1270501f5ae8019070ca00457c3e3742fc7363c43f37da3f3726ffdc54e19f9b12f8e72606eeae2204f4817fe01afe815ef00f2483bb1b9100220ee0081862001f0224c0dd884f1857f8278c15f8270c1bf8270c23f8270c2af8270c34f8278c38f8270c40f8470c22fc2306e51f315afc23c611ff88a1fd23068e7fc4c8f18f1826f08f185ff8470c1bf8478c21f8470c36fc23c615fc23461afc23061ffc33838e7f66f02922046bf04f08eaf0cf1542f8e70a03b87b114214d1e8e09ff607ff3800f8c711c03fae01fe7148b8bb1109503980131ff8c7491afe710205ff3821837f9cb0c13f4eeaf04f0e11fec9a1dc1df41140100200858af04fc801fe0935ff849af04f28c63f2123fe0971c03f21ed9fd014fe0935f14fa80aff84b6f04fa80bff8466e09f101000900027bcc13f4eb0837f9cb007ffb40100ffb4e100776f400210f061e305fe612308fe614309fe61030bfe61430effb00108772f8033600d351cb4861b0e5a030c0e5ae30d0e5a42001cb4840838a0000620807f3e43808c0031c03f4510a10439fca3843cf8e78c02f8e78c1dfe394309ff9c71c43f676cff9ce1c43f676ce19f3366e09f337ee09f339ae09f33b6e09f33cae09f33dae01f3482f00f1a08f00f1ad13f6800f10f1a4ff8078ded1f3430ffa091857fd070817fd0f8817fd040827fd080827fd008837fd058837fd0a0837fd0f0837fd20880bb1780083260e01f32ccf00f1946f00f194ba8230847982e8e57000865107117d204083fa8c28faeac746518f5a32bfb01189e5282142e52b048098102dc53ac4839a5dcf8208a17f8800c77107878780f7a60060aa8078d076cf8143c30e23c68665401c48322dc7700871da461076dac50d50ec470f71d68b18329a8ca1235a156aecf4c57df504ea6aa1590195198b1c3ef28094d1977f032b2b85c1945b893f186fb832c64149161174bc91a613aa0d14175aad2a5d1126a65067be92cc08d1c3ce1488e74bc00c281109c063868c2dd3b1cb88116703e93218d6e86840de870779a2422ec0aa911f238c70536f8b8bba733460eb08b051b894010a03152dc1b508314b85331c29e033468c34140839824b037e5e4bc1337d78b13a67f27ae3799eef54408bb21efcc74a090c05f268acac154070c4fca1b62f8c13d5ef04c00bb8214a0a0462e9d7636da3fe898f1e028bb27d265f28fed6d51384f7a1dfc8573f318764d66c0b408410e143636de61c2c96bfd4ae8273dbea41717ec475476595360609cc0b001e30736a2de94d309c0172477c74c39d98f2fccf00515be68823be9320961170be88b225f24f1c511a69c8cf24cc0230177bf80158e014f04882002c80b1c1e3b4c96e55a5e6209ea3a65140af0d8b1c40a6123161e1855058f10b582edb04015d44a280787422c2843bce1823adcb2ae2eb8400d77f764c1052710e5ece2e8fb463236faf1128343a5110780b0a00b4ead58333e28eba6a34467070b62dcfd07cb48df1755950d143636d4b6a8178ae54bd6ca0fca1add7c1396ec8aa818919a9048a30ca3feba4d58284c670ad3cfe4620bbb4dac0cc7a27e8489327c290b23dd6ce5ba8f43fa3d12511912254c9447d7e3bcc874597984438daccb24858d0d1438168d0d858d307d5925198ae562238b2abd504c64d7e8ca3216296c6ca068f2a56d3d2651268caaa8d7566ef22512692405901f456096844224d23781420a2856f47dd1ed61dd60cf647453b22c8cc25e28164dfad1be3248727ce8379259333ab366ac195d42e2eea1dc3d1070f73cc0dde30077cf11ee9e067816e0ee5180bb2701ee1e04b87b0ee0ee318047c5dd0372f77cdc3d46b87b08e0ee1980bba708770f11ee1e01b87b8670f708e1ee09802708774f8abb07c5dde371f774dc3dde01847be70fee1d3fb87b8a77f8a005125aa4b80d356a41165c80a9aaaa2241086c6c848c600e678119011b2ec26e8bbe6f4158ccc1b1e0c2dd23c0844df637be022c5a044ad85f26fd5feaf0a1d3872edc3dc74122a8c23f971ec33e14fad19575d4e0711d39787ab8bb6721d01559b8934021a8e38fc48042f0025008b8e0434b07babb140e62528601809acc7cc9fa81bd58fa44a373de093dd2271a2bda80dd90a54f99a54f98151eb0f489e648287b2c14d24fc528df927b9ea8820efd53504a9446144237c272b03dd4e1dec9431e3a7910a2ef8b48a31ba3694abfe4d63c76bdfe91b347397b3493a36f567a9a970fb0681a6bc61af2e349f89690e8ffeb547a9a1212775fe2202a02e0354e42baf458ce17dc1d000ecac982bb67d86b7dc27a8098f000c4040520264e8098fce8203951014b02039d28f74e2040d9189d5010a2255ca8d29342d97e524893ac2caec0405719dc1d272b21e15c45fe8a4966b649c6d2279a1f269cac848606c63412613517126aa5e5b26248a40b43ba305525003db2925455c8caa150e9b51e894223d30d9930ccd2272c74b988b02bc4c5255e6aa59eaaca258f48f864c4647aa9a100855dea5ea797967b9deece825b19145150bb08db89ef97edee2cd90953d4a7e1c7707796d28d95ffc23856a65c5a9c583e7e62f797e451e632baac11f6bb648532d2153d93d14dfe2438d949865f97464e0079123e593f5c5c78ec7071697162f9a82afd4e2c5c55ee3171c1c94aaaaa31094d81a3311d3d405808ba061bf98b77bc5c3958ee182c4f1a899a50d7e60c365d78e97461a30b5b246cb2a97eba46a1373c1b89accb64243446c864cd845846d6cc6b2b77a0051dc800a803080049710729720092220bff15fd52b26e1c24050a288a1c4461e3ce92e5dc2656e9fa1bfd54765f58fe3add8cf67d5c3a5dd808cb76502328de8002065034e12c36586944c486c24a16f53f38d0060e8cc101236e634359998d0d09f3c03b9ec915f1b83bb2cbcaeecd38a00067c12e6b07456dd206e2e05448972ceca2471bb8c23760c47d03cd37208453a58b2151f2862b61438919eeae840b25226ff29bb2ac9a279e3c417ae20049b690640649aa70161baa079543b2a17ab0982e0e55d91081514204460996c483a40bee9e9dac2432cb1110920daaf9438d0f965c1ccabd5c37d665a2aecfb0bbaf6f6291a8171651be26ac2608a8a60788c60d779b7cbd28bb4edb645d9a46d3cc808ec8e16e6365942659d911131ca96e8399ac0ca39ed20017401a0003a48168936d1c1cebe264f78efe846d8b325287230e323286c390f4756ffea25688c028c18c34230500154942111c161b969bdd1f954d93cf2165a33c22999c3ca575e95a2c3917c745845d214566e898010334e3c4679a60a130ea1e1142955e6684706721128745118151c206762262863b112ef4f541c4747d10d96184882ebd96d1327a3444088b1375b863d70933dc4599a26e4a23279c8080bb67c08a0c34c9c0cb400064d890d9422689cc7377965211aab261c14e3da8ca66c9cd6ca81e2c9495d9bc8d90191e22ec0aa15676b4bc29270b61a6918b9631c9502ba69bdd1f45a4a841e0602102a30414e48c205cb8154488b310815112e4e3592943a21423873b8b06c5b021ba198962c06029c55cc182c51871f718522eb95cafef0ba9aa9a96fc499a7c09481edc5930232e59e9712c225555d3c42a01a9009003fc78f2638a1f2d3f5660e0802903e608cc12ee2c4428169becb1d02fb95955d950dbda41391c1e8f6db2a72915b1d941d9d8508f6d6c72307591286157f4d8159936f5228b49cd655dd7bbb42cc16ecd12ec663ee4f0d185bb852fc887c98711771f3bdcaf0ff71737dcaf691404f4320267799cd1a8f4a226555523c2ae90ab088974615a9c583e5e3eee2ca0268cd044173ba4b06942d444bd5489093e3091056791c2060a969c4ba22e9543c24e164e4ec92abd308103d75a8f5c5c5aaa2a0472a183898b199a229db689f42217126974b78b29a7067331b9b808805ad132d9758db4e44fe2e2320ae95128d422046f5951620e25a0a0440b94804289a84411ee4e136344865ab95476b2f01de1eb85aa6c6ca81e2452656343f5a02a9b9d6d964bc2b2a7c9a5111150c5840aa76aee564661b7c98bb21e3f642a1b7b07bfd79aec8b4d015536bc266626db95cde5e3e5857ab91456c7f02af2ecb13a84ce811e813af16c976ca81efa33534dcc0ca52d6a936a62662835cf30d500cd21cc2e1c4382aa6c9a7cc9860a55c58303d4c2985fbb93ba78f3c70d60eb2eb674db6875dc799a7046334a30fd5d9d8bef7fd62c9fc82ddf77f3d64c6b6bf02dd0f292bcf77b4ae7668cd95669ab2ac3d97954ba46462d4790e8fa1adc90dedffae1cd7954baa6aaba298d96e451a9474d6cadd60ab3dc71b6a72d0b4d6cf9da1d73c5b2e2d7a0a8aade110a67a52d5be83ec79bb5a8aaaaea5e3755a5010ab3ccfbc947b3c68f365155654e3e7473c2af436fba19fbaa72b9ae08036204c77b73d54dc207e3b42fa448d6cd51e8a8aedb3e84b3aa48a4cf40666a75fad297af45f8f2435155e951c825a7f4525539a55bd3e28844279fb316c2fc6e8b5a8baa6a02435edaac6fc4373669dfa50f9e48269c514b55e19c4a419c80b4362daf952fcff6f013b9dc9cf0ff7071a2655aaaea6f4af76ac940061a9479b768e1bbd76adb32564ef8bb5267e7cb1ae51472ffa7fb6de15bd9e68e33888d0f53a8ebd3873b621893b1fc1b619b6dee969f1655958b8b4b3db55c9fc9b4c05495fe91a9aaaecf4616106de57b3a637c11ded9da8f1f17daea6a73b5d99aa5b33016cf862b9ed64dfa54ca267cb847db93eeb64cafd4cdbed40765bbafeaeda07c2f5f996bc2d54baf75f935c6adb9ca84d67be3d9a8bed9e1dc9ca8aab22b547a922e7da8aa7cb8d4089d9d52ef6ce7cd792e51b3decd422cb77358b7d6f2ae7411d3179f743bcfb6b715ca462413f6a284d6b2ba67a5d68d3e2d9da8aa4255f54c2c9c8a5e1add74946a376bd32faaaa0a581ccb0add5ca1901035ce8f14c217a77e1ce51655552852f9f3d68a636e55dbb9b708cefb2abe77d2fc79bbcf4d54554daceb8645d6585bb5ad5e78df366c45557565587493c6f962def7edb8dd155570d7fdb6560977bd32d327aaaa902eddd033b9beaa661ecd34b6ebe29c15d726ada8aa44d8c914baac1daa2a97979526f7485535e176c3524a1c5fdc90da5b4555755d510e7d36ba9a54954b556538fb092a3be158a04589f6d655296b9b2f2ba4ee89aacaa59e2cd0122a8daaeaca4c2d890937cc79e6b7793718a7a8aab2abaaaa6a0996eada9db4d259337e6ab7c80a559f4b454a3155555598c9b23d2694f75dfba8ccf2dea8455545ba4c3e5455a5d15c9951db89757eecdad4f88aaaeafa12065e7650cedd76bdd2e19d455585e97f2c94fd4d55b95455e8aa2a117645b705bb40083b5da1100378b890938b03811d2e64914237a5d1cd8d455a001230d42c804405765060c70456248044042e403508f07800120e78133822548106bcbf4221b764ca67ca8f51068444d8a834da3b1690130a4d40015402248000fda129df019c040cb0b353015ce845a123549000610bf83ccbba1860c40508a0ef5f0c18c0038ac8fe6601441c2180110e8eb563882701211a1080230080f380202e2bbb47a4c4e90014275693ec019e295fc785ea73a1f74b2e09876e4aa3ccc9531e013716700240741ee79652168002126023d32da2a3451144b814a0e083175fe3891a69a07186129280842318a1084418c20f7cd0031eecc08c32c8d0410e7070031b8c51031acc408c3064100330bef0c20303cf0b5c90020759c10f0eba022909142e8850b95008d7dd734cee8e5dc586ca2e16225dec62c16cdc5d089450e805638450503a802245280a283c0929cc90e205d54d146fa8442144891f94b8a18408771996246348e2c68b3b8a92275490f4a124a3ffca4a4848a4538c559359339a6409792a4634494cd655428233ba2418abc6c92582fdc764d60c10cbaa31ddab467f09893583d2e2ed7aec74bde944839395b8a320714771a969d14f229d66dc5134e0180d8acb734f226960ff0f7714239a347a8254641721915edc5166301422a5d3764719a2474e8c6e66b43b4a063efb2bbf5877149928c46b90e996f00773ee75c5608be4e33453959461a60dd73f05362a594dbe24c24e26aa74957851f61835d3e37148df84ba9bf4984da8c1f8701e3b5a1297c41de5c51dc5014d3ca83f8fac244f24c3ee0fc95e4a5754f3974544cb8c5c1c08e9e6514994bf86848d6e7e08e98ef2489f325099b838173b39e1017714174759e241dd12a71228557b39ef048a03dc1dc5baa3d49c778274af2f7d901c52a9883b0acdae6b724799d2f5e83a918c602e2df993382655d598b8f068495255d79b4e188669d2e8094c93464f8c6e4aa798d2696b1929a6ab79945dd7488eb67c64d73569991c6df9a8cf9dea29e797c4791a6999191cabf41ac72ac9d4e19e81bf5e8853f294402551895432955025ee2810a84aaaca31a92a94075cd608c501476059e92f9a99223235303348321052f242e4b2462115214448c231c14eee280d70772150182024889027e4e38e2d208812dc7d260890d28874b27290941835b8534fc528bb7f13d3464c0eb2d03135ee1f13df9453a312f3713a1c481680b0e1280940009093679f430101e2805c208835f34625991f48f8d145141df71f4dfc38c21d260f3072c0bce154a5029305473980016890a0025303d3e2d40a0c027c0482caac2014cbb64a160b16d384183e12992e0b2787649942262b0bfd928be30353f1d14255a10b53a5d1101f948f01a8bcd09161160e955d6a07d58167592f6ca8bcb440e5a5042a2f973bf5a61c8d8d88a8bcf85069a20f9e9d7c502c6fcac930d2a314e049d843078a11ee280470471940112a4d749808840a137450158f267650d9cb0c154c3496cc492e9db68a0b1dbe0215974cc565082a2e2870a77248252c309ccf0e80c4555c8a50592207ee4b44f7dc4108940000c09300233a7370e3096140418000500050831028b182cbc2549498515162876f4b8900547aa8f00087142c2c0d0a4a0a161628a89205011ca854269850cae9873ae830c714a0c004db054a10ee4ef4289b3c74a0a438cdc49e575db856237c94a1a004c21dc583ed22d9a9c80bce9380642519aba6648d30940e8a97464b4cf7aa51996c986f50530d9509c6124e2e8e938ba3329d4c238fb4048b235138a30c0534a2500c70999c3c9561253c2a8d1c6508cf0d240a54a45689cd0b5ab082149ec08427671c610811c74ba79827e1ab1261542275771050d40728d24d42659785810b04c2dd01100815f8010f20dc3d7f70f7f8a10fae023fae020be02a1001ae0217e0d183bb270f78f0973d74b87bee600715270715f7858a4b817b1237a5d104a807652867801b953607557dbe268c52695a707f29a0a05c7a505240a1852785424b2c710595244ca1904a1273a8247105a7b06d3d69848de820cdc44125898f3b360626240b6b438a18524e80a53011624002520ef0d7280753d848a5c718eebec3557a38a17248256c0976557a48a1d2a352e951843b8f1d54e9494d78ec1055fab34c83852fbee02a2b458c289b3f5d355bc62664b2b22d537a93c9ca58a005f73548fbaf901af0d0798023e1de7140667abd8334badbc6f4bfc4262733e150025002cb4c9f611609158c1e3bb97be6e091431c5490a03c73c02108120481454a1df4eb143be89fc2c967250b86c24ea21a4a09ec6ae04795008a107538c3a5ac3260c1338316688175363001272c36baf43625ec88e7c60394cec2b35c1aa948c00c6c2487bb0f118002a848e0080bf8702bb81840082210850cc270128c3ca04219c121c00409280a98e11018e22a0f80636606628064e0820d40e44354b2ab38a005ee7e4b234a894755802a3da9514b44802a3d298e25d010460c8c781226548e30b97b4d130bc684d553fe24d8c8f4828d4cf7a634229970460db86aca60401bb2a7d15649850137888bca02a4a0b2801f0ae082bb8a021ee0212c01295041c01a3e03304eb005d6c95131c01cee9f614b9ed2357198238e236f2a62cd7486b05c39bf84ba2c6c945d2b430c31c41002f041b1648fe564d7e85216f5a252802ab450515143059485af61060ab0e0a38608aea8c21ff0f96437c3ca50810fa818a1dd550820c7182a04b8f105a80c408d92ca004c3e5219804a116cb83b29dd143b34f952101604a528565696705982e2e1448f7664fb875447ae22d9fe21144551a5283e4039d1a3d0dfe80fe180a10c3282f8e26689160a0331294b5019620ccadd2fe02a43905c458820b8ab0831c41db384e4e0e09c7ef894cf6a52f34b2ec907e93ecd65e45e7f2f20524a29a58c31c618638c114208218410c2f7de7befbdf79c73ce39e79c6bafbdf6da6bafbdf6da6baf3d6badb5d65a6b6badb5d65a6ba594524a29a574ce39e79c734e29a594524a29638c31c61863841042082184f0bdf7de7bef3de79c73ceb9d65a6badb5d69cb5d65a6badb5b5d65a6badb5524a29a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8de7befbdf79e73ce39e79c6bce563a6584cf11c191f10d80002172f7eb93c82324d6cc8f7e68d2c97aa289457a1f8f612f1e296456a9e481e388116b061b83bb7bc4e0ee0943ce1df286070c5fb898ce4080c0945eae53ce56e9c5ba9e8a1f697cb1bf6272b0fe52936bc2aecfb9248a745f48f73485a70b5ce083c9ddb305778f16407c108205778f15dc3d5570f750610aee4fe2f138f89664fe3a65a77d3125caae11a658348905c394c0465fb266dc3d5270e3712c1a298070408626f403c88f2230334042478a1c390224046408921f45888494bc10a9aa1722d505e733991b8be4524f325f1add9480c0e40104f8856279501e14e0ee09825b0104771e3b9cf457c70c3c44ec62c9c1210cbba6ac744b239cd195b191a6704ea5c7acccd30216b8bb7bbaf0ac4005eefe3ff45fd6750121ddecc6e8919544ff5f5666cab9f2833aca19cb70779a8be9fc71da4125b34858c864ba55659d94efc2ea30918c810e51b8d3410af5b9d3c53a97073aa30f941103123071820e214e3723ecee1720c11c8ccc819248551532610f9eeaa93e77928317f5b913b57780e2a0866726234d6d0be72fec62c946b83e17c2ae37915ee4d9420b18774f162370cf4e56ce255d17906c91482f71306202d71c73cc3107080e7d7038ccb863342322ee1e2caec879830fdce0077f4313d8c522caae29899c2cc34e472851f65255ee1e1178aef094232210041841a0c00d24901c7380da5003291e04b1e10c2e84072505c40691bb634eda16a035c8115a431ba035d880d440871aba60a4e506cbb9a4d74d2c4db2ac1cba44219c53e9c19313dc1f3c81d0a084bb638be4e3b39b4b168c4c55851a700617c72e9691e986acf8c0cdee8fab665b406e767f80e24001280e210e8ac30907c531e3a03834e0b9748ac929bdb87b70a8f024d68c4c1cb14812327118c0b393c90c6a186d6a5bd9cda39b8b630636dc9dc2c16e13ca0c6680b132863acc20f2cb32c30f37c30a46d51e3135487a94ac193314518639dc295d1a2d294317dc6495c1074e558e8b32e89607cb6000f7384b27aa74077727c31b54a5474a70771a3274e164d0ee3bc850dd7d0745868ffb0e0a8e40c8c163071c6d50d5f5379fe11e949a81a30a772c475b9882230aa72aece69236088e1f8ec1710436863ade9493e113e6d127774fe6d8f5a69c1a77cf1438279c914763247ca918617fc4dd6372f758384ffa37e5d4b87b4a216ce4eec179538ebb472f791c8bc6dde381ec66f787c99a3159d61077cf68cb3c4602a24b402e1f5be6f2e1ee11d55c3e48a40b539221912e8cc9ba7e04c99e86746b8204c99e262686a6569a5a69904c4783e4417dad2171cac4c4d40765ea7471cab87b6e9c4813eb0ae2eed92fe3eed1195672f764ec1946c514401e94f9992143b220599021431e94a141f2411e94a1620a2071cafccc902159902cc8902171cad020f92071ca4c01e4c1986cc88331599007637ec883311fe4c1982980c4193324ce982c489c313f24ce980f12670c152498071f7c504646468606890c0d121c5d7a7950e62af2a0cc652979508644f3a00ce941192a483071ca5091c1c4299395b2c93212a78c8c8c0c0d12191a2438baf412a7cc55244e99cb5212a70c8906c925a28953867465d691386530fcf2e0830f3e18f3e0830f3ef8e0830f3e88e19738636e4801bbcab6e37ed9d67bb9f05e474af1bc2ee3ade9cbc2b305f8f2ce6eba9f0d6be7b4a8aa48279c16dca2c4a385eae8ccf9ee4bffd6076d16b0cdd4c178f77ed6c2d7b090a7d473c2f6ea9312b77d857710b7a6b38b36430aa3c70a7652d7a6bc71ba8fd836279e2a5479a593fb35fa5acd51e678a890afd334c2eaa0d3f637adc23385f64d5a1bf3a69f69b3b2c62385d6647e76ebb933d41843271e376296314f38e39c735a1b453ea220e195d1b9f754e36c9f80027df1777bfa6dee98271655950b668d301acf13de551d296c79eb3c336e633768e1acef3dec846823ce73be7d89bf66dc041cb56bb1e5ad5f4b4b3113e07bcf4e589f46e9f0b34121d56dc33aab95aedead02cf12f6b3ed5f4e4da77e7a6a99ec59c3c54ae3b61367eda6c5f9c99b527fb6323797e184550dfdd751a8ef8dda45f8f294dd0c0c4f1a51eeacdfbdcf54cada6ee70a0f1a10662da38c5bc686b376d62ec980c0738684f09bd34ddf0c9dc3cd0a8f1264cc336fda5cb4d6d28cb19c6ba4c9c993841adfbb9af7ce0fe2666b8b141e24c4f69cb58dde985d7cad89aaca653acf11a0c6703e892d9c9562a98df0f6b37be2faf2421a65f614a1d647a3ab31c34a27d4cd4384169b8415d68ce5bbfa6e3c4378797f6b3af3437b7385a2aabaac5005e31182de385f9debd398b3a4d3c7ca4b4b55913c41b8faed6a6f9e36e6dd22f500c1e67d69ddf8db84d8da3c43295103c5139e1fbcdc775f97f39df365ad7d405f5689e9ad3866f710f7e0377cd6ce0adfe127f19df1f060baadf34feaacc4f0fddc41c5b2617de5db53ebfba4c78c4d9dc336d73bffc2bfcd5386a4136eda347c5cf79d370a0f193abeebde86b4b5f6acdc56569229797470e3d327dd969bd27c6d0e28a5f935ccae619aeddc38b0314ef852c266f3cc99dea0d2466974ed611d3fea28aa2a4db27655b95455cc8a4c8be9126911796c50636defa7fd0ca596709f3c63d087ffd0464763d531c337e5d4e46435c8f75a6de98e71d25bf154e2a181bdf7edb7ffcfd23cddecc2338357f3b339c716b7ad77bb8e093c6240693376164ef8edb68798270cb9e9c4195aeb6a86d114b232cb480b8e470672d35663ce2fbbe8ecdbe89230e189019650da9f164b5975ad25f08091e1ebfdde7b166a689f94a2068a16219e2f5acb6eea86f7ddb9ea5d59e0f1424bf755df36ebe338a78d8e4955e1dc6b7756e0818176124aedf26cbff1ff7cc1ce31538a5fdbb4462aa3108f0ba6be2d6e6af7d5f735a59af4a3186c0b4f0b26add04d8973d337666973b28e093c2cd06de22ca77eb8db430dbbf88aeb762d3f5de5cff6f61f99c2b3824caffb08af9d3a4b19a3a8aaaa0a0a8f0a76be53d72ddfe7dbb0aca2aaca4a37df24473c29a06de64af14b29ab6ded45557553ba4aa3aa72f91b0d64df1f9264c58995ec44a4aaae5f725d9cfd475e5b3355f5da2a79b2f0a020663ce795395e2869c6b9aa5c489e13b8b6f3c5184bf9a073bb82e131c1c3f62ea4f01fac94e2f6024f09b6a6555f891fc5baba46b980773aa72ddcb23a57b51bc34382a8afb6355f8cf5dbeee6500e3c5b58682975ff78cb8b69cea2aaaaaaaacaaf613c5acce7e4deb7d9dc74d516cfac0869794caaaab3024f16bad9ad29d495b69a1b7c9e116099319c7a621cede71a0f163a6bf93bba985fc69cb5151e1168091ddef9ce2c2d8d0f7bae88f74608e9be7abafc6c0b446d5a620bf17d77ce873720ee8b36b7f677435d2fc67f9051e34b2394576edd72f303a4f7c19921de33620a771fa075fbabadcee2bcddbe7ca8f0718d18e25b9bc5d8edc1d9d9bebdfd2eaec3bd67ef5b2b29bdd939b845470fbb46d99eb53967f7b4c51474f280a5a595ca361b8d55b78d820e1e20ac507f8c3b5b49318d5974eea0e7beefff56f8155f38828e1d666c91e20c6fb44d524beba06dde32c606f7a6d25a4907fb2e665cb7b5d9ee8d1d1df34517ed7bf236faf7e539ec9f3b532c6fa6543f7d72687b3e9de5aef7ed08b78bc3bbf970cbf75178dfe63d47a3794e27e1deff68cb120e0f6bfcdbf6dbad524beb1bae8b1a5e499b9bad65fa6e68f85efc793e8639eba6e5683bd7ddecae6fe1b331b7015e97f7d7fcead73af5b361bb99b374f0ea27757b770dafe2974e678d776e3596aa0a4b5255b4a386f6aafebd9dc536be2c711aecaeef2f9c0ed7fd747b34c04a5f3efef97ebeb7a4738638657df7eec5bce5c4b949278e6825bd75c6d7fff4836f069a33de35df79b18db8ca32386adfe2ff3bffc19f930c6fb1b457373b7fbaf9810e1ccd6199e5fdfa30eb8c21ca36e763f8f7416cebc6c430259518cfbb5fb34dc71686cf0f3ee86c9eafafd3ed8d07b7b415eb483feb2dafa8aab00e189ec2f9b8391b65ce974651559d3a5fc0f731d459bf8c31c2abe3056dddc7d71addba4a3cea7421bf579fa336c27addfc2caa2a2e54dbe48e97c2b6ef94b4e174b630e585edbdb5f8d2fcae6569a1c6cf35cffcdcbf77bb9385579dd36fb7cf30d6faaaa8aa6e3a58708e3ed67337dbb08d70de5c6167ecfedf6f7877beb461ba6305fcdb3657b1be12c2da9ea8aaf4fdabaa3a5578fbe19b76d2ac6796a1aa1af2e2a3c890205575a443858ff0c2e9ec6e7bdff79ce8af26f76aa23305ec26bd935ebb6d7c5bb7d7d60cee48a1490cadfbfc32e3a765165515063a6ec02af37bb8dddb39d7d88902d512e25c2784355b4ca5a8aa5c5656aacaa345070a34d6f971e21cb5731a6a5155b90869c9792744d815e2d282635d3155d54142e709ed1bdcf34a8bf7d76db3a8aab2bfa15949b2e2448be91211615748edb4f1debaf9628cdbe9862914d212e3c48a90161f3f5a3a5c749ce0ec9dd0bdf71547296fd6d64c55d94e13e29dd36af7cee688a1aba2aa329d424b2c8b543b4c7889b1cdb75a1be59d566a6065480bd6b4c346a6f435bbef7e3466875f54552e3f3a4bc8ce4647efde5837aae75e436f5a5dcbf261b72bd6ff64eb09319df0c5d79ede57234349a1adf8d1d79b669d06a51a3f7c3d2fc451538d86b69ff19d704eadb58ef98c4a2dfd2ae574efe6a658099a3aeaf0d631da24d44c2996ae457b2dbc100937ff63b8e17dec266cf508f24d0b21bd30b78a69a346783bedbc7163fca08bbb08d9dd57a17b4f5b1d1f268273f5ee6ba9c33ac2098710698bfb757576ce46db144294d74589e5db17e26883201fd6afddf81943dda604c2fb4ae59b30ef17e17ef0079b527cdfbffb17435c9d0f9c83f8f1b3d8e656e36ca2aa1265a32655e552d392f34e5455ce2f0955954ba70772c73d75fecfaf677edde2810e0fdacd184f3ce3bb2d9fae449ed0d941adf331adf956f81abf2caaaa90194dc67f595b98ed8b534351558542d64da88a4e19784bdb20ad1aca9b4319668942f78a0e1933535adbb707ad6c333e5155854220e8e8a0fdb49b6ee87e575775ce9d1c689d63a6bb566b637e4ee3e07d6b2fe3969dad6e6f5a55359d1becab6f7d4ddb7df962d632556501231d1bc047257e953e0b37c6118e71e98ed3be6be9c631435903a869dcf625de373f8c8f061f9daedbb56d5d6c70cedc9941c37fa7ae16d26c31fe17b998aceb475599ac4b275971c27471aaaaaa6e470cf768ccf675cb2dc359a1a8aa5c9074c27018ce266d8c76c6fdff6470318475c6e6e2a435422aaa2aec049d18b8acb7ac74c3ad35c5ad8aaa4a48cbfe233e7e601d126157246485a605888f1f5d35555555a1cf6e4b678b0e18365a5861fef93747f9da173567999d953f71732d471e3e565e76904c38a3241d2fe093f6ef74ffaed6cd5618d026f7d6f2e9f764acd689aacae547cb92ce0bb4d3cfc6479fc29877cca2aa2a3d29949f49e8ab2a57a1d04bc7055a3f8829a48e6a6a6fcb2d984f75ddf842baebc43bb2603e9c3656375f9b0ed3dbc5cd54c7281d75f7e99c740534e28db58d5f9d7c5c5510dfce3ae5bc51bf29f34d4194d83e8c39ce8719bf27aaaad228a4440705563b5ab3befbe5c535db136c68b3beee399aedb47076b0e898c0452869d655639db5ab5a64edd2936ec64221e89420e27b65b532bafb68cb950b0ddfbc8ededc70d6bb529195954256561aadd4e058574c7e134d55b574b2e890e0baeadccc12666da1965bd0eade7e785fb47f5b6b1d2d9ed690d6fc2275fb621b3b59648de5bd1b7f94f4e5ae9d1164f9195328bffe85afe9aa92e96091f1cbe82a7cd38a006b88e39596ce5cdd6fd8b9a2ee2da5a5efb9fb73dae912823aef6b1837d7648defe99315995a1bb79556b7b7ef7675440404b4e14d31fc8b9dab33ce24aa7858c24d377d18dd840d23a92aeb7a2a4a5669e6036fdaabe97d3d5dd5154e515535f952555d4f5332512ab0d6f6b9f7e2d30ec2874555557776aa2a2ccba9f0abb4f63da961b5108baa0a27547a528ec9ca55e522450d14334e5ecdd5bd9c5d831aea3c4555b54493a756369b9d9df9657b5b54554c30d919d6afb0b6df74cf872deff46edef1594bdd6b54db0c6b7199b339c75c9fcc985ea7b1a8aa5630fd4f360ce5db5a569ab7a8aa602e88f3ce54c6da20750d56515561708a7adda3efbdb6edcf164d8d6ad862ad30d35c739bd68672d7ad277ebc2bb5b0f4f6b3dabe88ebbcee6ecb8243257ed15dba5d86f9711224d8ec8e10c6082bacf65a515591ee75f3d754553897152397e40aa19eaf756b774fdc4455559f3b85329c8d010f54676373f5ee1a337ef944556565a55128ce53e8b1eb9adce8b90df78d2dc2dc1aac53545532a2b78ed67de7de19673ddda854dd6417b19cefe5bd8d4af9ecb62fe7965fe7cf953eb4a2aaaa2a9aeaa59e163b1c6b94d73eaea2aa62d1f54dfa2ee6d9dcbc71425155bd64f80e6bf79a6b11dfb7b7e8455f235585d160fbfee9397fbeb4b3c67a5d2c35752edbf66e6cade697961f3634efec9e8bb14a472b752df4decfa9b5b5724efaec1455558876c0daf652b6965f8d11ce0f61530aaa2b7d564299f39d5b425155e5e8908b02beb9277ef8e108b3865104c575725b2ba36eb33e78a9287690f9c6f6b57e6b11e61beb405bdd36ee7d67c538d64707ba9f9bcebeb5343b0b1f1dfab547dfd4b9ce41da0cf1cf6b376d2e4b39b8d776d5164a595f4fe7e250dd8b1446aadd9ef4ed1c51be7dbaa1b3713b4b1b1cf0dc3acbb7a37b53dabcdf60f7d633e6f7b67e50df778395514e07df4e3aed745a498a1cf1e2edf06ed0ed699fcc6da04d4a371da6d6399b2d66c38c0f4f5ceb94f8fead780d9bc2091bcd575bf87b62355c396794f3339eceba86d340e5cb26ed7333a341c6a75862ecdaaed9657b86e82094793f4b1fd2976b1cb8be36238cd6520d3536c3bded4118e1d6503fe86819b68c6d4608f39b784b0cc9f0567e939bd2e8de5e0dc78353bad7689def1dcd6f0c19c68af3860d664c2716038c5062f8da6eb1513c5d18f0d3185d85f5256d7942f7869b2db76ca79dfa51671d9114307cacf8ff695df7bb72ca942f54a76bc66fbb6b29cead89a4a881a2c526c50b4fdb38e1378abb40f7db8ba3735a52eadce642cc3a622d6b9cf94e99f5161ac5ae525cedd574b779b5009bb6f93d7dd749fbb266a1c20de9ac33ca383f5a2c589d639cd25a8c63de345ee1ea6d1f6799b16c536768056c6b9433627821c60e5781eab86db53f31a69b3a2713ea9020850a9be2d7b6ee87dadef9684cca142086bbd2f66dbabb5bad5290564af87275da6aa8257563dea9e193edde29cafe4a22250ab7c5fdf7ab9d9562bab7c8c2219b0285af5bb79d378613e7ab539e205bacf9da56efdbfb591c93d2469ecee57a23a634bf97b113eca596426c757c75c6b74d88ede1e91a6d76defce4640276edb9f91ec659afbc1126858d38eb6c7f21b58fb7de4bc8fbcd38b375ede1d6e85e03ff761956f7d63617e37d121b6d4e7fa557de2de34c51234627a7b318e38764a6a401297c6e4689297e0aa7539282466d2eca4675bc6f560bf50652ced8f9676c525fe7627ce99c12f4d65842a75b75b66a7d93e0f0fb3a63add43928274c414283ef2e8c753778ed7d567424e5088dca397f6efc9ff3efed8c602984d86a792b7e14435855312945b8b66aaca7a4f4ee1deb1511492142bbf44d2b25adb6c61677ca10b0bc4edf2cafd438eead9d105cab8ecad7dffe4a5a97480902d5523e58eb96593a08f38eaa7a4052805029ac134afaf4caf97ef0b2ce8f7a532af1b519a7f8c0e19d5f94fa6576f1ce941e5cec32756ddafdb2b68899b026527810358e90eae6647554c6c883477deeb4f2e08e1597aa5a79f0d45255d88e375276806ba32ecfea2a8eb6d52b9af209a9aa95aaeac420c58c4c23cd5ac38673c3d7d232628d733efca6cb92ca38c968df6a9e4f65a4aec20775f0b93e7be143672fc4fae5a0ba28f1dcd7a5e0e0d6e9f2c5f0b54bffb97c03dc74ced0ed1bad96fa6e1be0b86f961ab7fa13c6af63409bdbe79c358cb9ee896bb0dfda98e3cbade52daf0b410a0de4ab10c30beddc58a4cc00da7871d33257faa8de5ca48821a1763bbaf8f0be275f0c43db5925a5f4d1096da64f066f75de2fd36bf14fea72152931b0f24508ed9332465dabeb68910206950dba1a1db56fbf16ed173bdf8cb1a313c2ad3f3e20a478b1eb6caf31a59a36aa312d591a48818173d4e22d9d8c124a19b31c1c1261275355652753762ac244ca0bf0cc2fe27cf78df752f8292ef829f1b473d2c713bf6e21486941cbcedaa8f75f28a1a6980559bb286fd474ea4b29853cda9195a6811d2413ce28f424d3290b5591d245ccaebe865bdb51e346df0a68b46f75b51bd788ebcc2ac08fdffdbf34e25ce59441525270b37e8da173ae6e6be5649282824b71a69ada282575725b13a49c8042d72eb6b66e17ddcbb7042926683bdb8b2dc5ff257836525a7f6f78a1b6346e91c245c378beff1b3f621a482181adcf369a737316433a9f90942df4b64e6e1bdbb4af1ddd598a16f23979e1ccf861b99bcd5ca4641169acb16ee71ec6e8702341ca08e474b5dd781fbd18d2bab188b6628d9bae6ddf481dcc224504af61f8a66b98cedc76a6a2aa0a9272c5d3cfdebda3bd395b6d7f978ab82029b202d3929361aaaa0c9440ec7790dadae0e7fceed680687047a873beb345bb2b44f9438cef6a3b5b9c174bb8af0f143f3c1ce994efc9f94455f5322b352d9d11a0f4e129c67543aa1dcefa4a27bae92801850f0d4b9733ae5bcbcfd9455155c95481b287a70f4349ada4aeba87505455548cea78795e393596b65118a7d683b5b1cd97b8ee175555280fd7bd696bde78da9cdddca2aab274142878b839e6fb64ad504fba1d1555950f943be4ade79ecd3dfc442e5fb2483055f5258b949f40b1c3cc583fbb739e795e8c630950ea205fbeef51fc2ac4f7751469143a6c696fb439da3a6bb30e8baa0aa3d091e7cd4e3bd82a8d16bb26aaaa2b7459a11b9439e04ce57b6fd77759d6694555150a95905415172872a0d7b64df5cb706f1d7145925d524c55953ecb2e695f2871b8176f3bef7cda52f73f477c575aabeb472d5f630d07076f8c75eea7dddbb255978e0c50def0f92b9ef6c527e951a86491b48c09c50dfaede6ac854f6b17a9d372fcdbb9d267e9eb1c9f9620406943fd4a9dbd596f9875d3ef99b001434ae9745abf83f3bdbe2e201f4059838671e60c9dacf252837cd4d2f7b63a7c6b8c8d0a9434504bb1ded74107eb3fb9ab4041c3d519b6fd5c95f3e62cf71928d64f56dcdc9e964efa71d0bc6f7458deb877bbefcd20dfde97c2cf8f36f7a82e4383957e8632eaaff8da4c862c31ddb04a2af7df49311c2f468869cbf5e936adc463c0d7dd389f84d8d5ec1e1603cd5836dab2c4b7d9396f18a0beee56b8a98db9de6cdf98f036971d967f357d67c180eb378767d432eeac75fdc2bdaf736c18572fbcbce36e54e68a1bddaf0b0f6d9333ef67f7ceef28171abccf62eda4a39fed6f21b67ab5b379da269bd582930f636e126f5c9bc359706f5f6a6f7c51c7dc20165eb4f64a975bbcf2bd7785fcb5ca5aefaeee3aeaa61536deedb69be1d55357c1befc368c8fee96636d910ada35076d9dfa35ebf04f21629d67c311bb081fbd500a5fb7c40ddfada3c412bbf1a66c0dcba81b7e94c61705fa536bac73cb70dbaca1d0309defc5261bd5adcd27601da1cead6167dd75ceb551db733aba47f176125627bc7cfa569b638eb259d89a70e17bd3b9df7a3381d689e5cb0b658bef6f4561834ad8747defebc371db88b284ba2375ef45499facd27d55cda0ac6161c65b3fed76a3f15d2ea13cc9f867dc99deace36db8aab1279cf0d297751355954b91aac296589688875b693b5a9ca0a4e1a8c51a6a6d5feb4a1f35a1a041e37d32624d69a4f3a33c4363fdb339f9f9ed9d65fb008a12f2c350eaeadabe72d3134a12a6d332cf59b3842297960c05096fc268a1c430b79be58ed511eaab31be97699ef0b99c2f931320d9a824836284dcae6d32cfdfefdbfb01a4aaaa0aab2a1cec3661825204e9b48c30bb07eda3f4610c0a11aade974ef8287d7be3d44398d3d2dcdefe6d565b9d85a03fbb46f5cfff67a3934198b965aba3c4efd1082110aaa3f4e268dd7b1940f941cefbca8d9d8eeeb39c9809141f6cf7dad6b79f469b610b4a0fb0b60d3e6961fefaee661e5c07f36b8de3a377b76b7770f17e8a9fc4536bbd6d35833a7c63ded1d54af19bb48c9963cb155699f1be9a4214321cd5cfbd9b29ae3aa8f6d6d7a47631e6e07e6ccdea5677d51a5e8883fcf4eb6c7a4637699bce2a856e80e53b39a383163608b50db485eeee78e57d1f3f8f51df511da18eb9dd5c670d9ede6dc39975b63bbeb669d036bcb34e299fdc57cec0e1ecdc8efae578abab62b447a1d6eee35fea320cc3b93def9c4dbfb39b3e19bc099db455e79de174ed6340eda58de69829dc916230348e34effdbbda0bff8b8d3f7ffddf78ee96bdb06fbe5cb58d573afba286c1c3bc9f9c33d62d6fcc2fc88f56672f865b3f3ba70bb66e1ace6c1d86f43e6c8173eee18e534668ed6b9905f3420ae16e1bbf7bfbbba8724a47addcd9ee59eb0a9ad4184efc76cbf9b9a982cf5067fcd77d7ef7a66063fcaccbb3eed8a08428784ddee9fee1c329f1c327d0d9b6fcb0be38e337b709b48ef9e5d3efe2a935bc25b8ee5d8458d3b7285cd4f8addaa79bde385f5b14123ce8b2d311df29dbbdd6a26ce1a085196bdadc95904e8ba20594353667279daf591b2d4a16166a88f175eebf7db6156504d8c1e674b50e426a27ac2858cc88dfa37ad7df394a4c5144406da3ed71a4dbe67f92a25c811f575aa3b531b7faf60c84fcaaf76c16ebb8ebfb09084aa38b39d6ed2294face3fc03d61c49aee1a27946dfa01c6fab6bed3d958ebccb20f51db6f783fdc12d339251fa07cd1d2fc227ed720947bb01466fdf0bebb4d6c77ac23e74cb7d3da41f730d4510f584319f395356f0adfc63c405befdb35db589d8433e2a17ecc7f71d5d841fc32de41b61d658ed2de77b795d10eb36a076bb491e289e78b759879ba39e3c36fdbd71ed2e1a9b5f0ef534bc7dc76dfe6a4d58fde37e11caec538cf98e7d619ca2d8737f5cbedb693f7adc471c03963bb6fc5ed36ebee1c9f63c3fa777df9df3d38dc6f3ac386f77c31e6f6deb09db40ecbdf554e59b71b3e4b1a5f73f541ad6f964367276b7e1a670ae9bb6dc8914e0b9f3e88a37ec9060a7fde8ab59bd3d2f9dc1a1e756f1ba6d5d2d76c56c375516be9f29b3ad67cd3d0768ed5b5cf516aeb261aecce74ce1637a5f8673c437d7aebadb97eb676c6b11f9eb7befcdec3b5b5e631838ddf9e95f84ed7b28bb20cf8edfa5bc3b7164ffa9e0cbac9fbb2c15aed73d0c191afb6175e1c35841367390699e973584e4cb59651563164dd24963552baafc5749e3c61b0355af7f2ef0a63fc876fc8cfd562f9b2edf92694220f185ab312efdb22ce354e583d5fa0f7b9fad46adc22bd0e3f764546b0c70b74d3fdcd352733dd705e5155296981f174a1bd0d9e83a8f4f0c9959994a320c818000830b1a201004312003040301c8ec6a3d178583a6f3700140002509272b644984a84b130476110045110620c010400428c01c41846559d01c1fb2b004fe4f8978f59f498eb14ec4063c7bd712f9c0b85170b02b9491ebbecc4d4d37fa8f134df58f655e7dddcb06caffbcafbd20b2aa59d6dc4d8db59b9aa87d2d3f6ebfbe069e4d01052253b9ab19aaec0f0ea5f9f060b143d3e253ce8feeaedd540937742163884157e2589a998e54e39d35ff0c62094537da511845c83d840fcdbdfe8df4b2fbcbaa54bfd88dda3ef6f7753ff62477be87dd717446d859ff1df062c6a774726a8f0addc0c9e9e8a8c98823aa203d24c09d497d8ff96df50774c86495ae225575f7cf6f216b861effd5f5ddd31ca097e088c1127338f32f940c00c6779d0ed32d0b0cd995e690745d85849ab6c5f19a42957688099461c888d7d08eb6fad240ac29560c19259e917f3359189046f27cdcdfefd81febec3b6396f6ba1489d8f0dbd1f3fb6cbb4d7b002cc9ba364dc184d1bf26e70f4b9e50a3c692713ff0cbb4dc61a72f773295312101d92aa5bcce8ad143bde73eca53a186121c3fe42aaa51fb442c8128b2279bdcfbb8c89cdd08b16772c52424498bc6193a532636e7f1b9c1e2fb2c94a4cf39a64a3498254527c90b8655e5609ce2fdc3ef6f613d5df38ef51872fc465b2626fbbcae46d5544f3bdadd686ab997821df82ebd0d7bbc65d6742d55f3b29f448a02d54bb4429350c94afe23b5b247f333bbeab02573ee6f05d343b5d284d97e3b5d24e2de88b428b6459345ad5f77b35f84467aa1099a1c83a9aa9f2e3b4e0114aaa97dd82f5895d44cacf577c380bf1f80442f2eb8253733da1f82d2ff1a3be92c007a48a5f7afd4d0b7b2e9895c793f857bbf1ba80bab712e1f8bbdcaa6e2cce0a1e9434b7d5153f5a8935da514c9f0626db028e418837a2f4d46e5f05dfc19632b82e76b94f22d81e759fec71d30defcd7bfc6d7e58b785bacbc39ca7c0bbdd049b5938f78c9ac6101f17337f094a71ec7f31c355a8369ba78c440a1d3a4375f5f6c57f8e1ce33bf54f34a097f238f189fa83b6cfa1740b11b9b4278d49e9dfff78c0483b240608bade6239ba583cd9786dc83f19a1b6417a84162de3740b0a1d11a68bbeb9d427273b7d015a67555e4603c7cd517eec18d32d0cf591b8064af84235ac409d4cac189f4cf38c111fd0e36a40e9504b7b166f29473049c977fb1c37a09f2e4e60712779eb08925d5740c861a0beb6867e1cf74e0f72b24813dc0d286014446b90fd79278b61507fb6d3e2f52d5ea5d1bc220e03a08795265407a4d46ebfeaca3241dbc1d7ec8e3f8a90cb4b17eb81a641c75b2b2375892634927096ed9ef0649154a1ac31d3671d42e4c176066c85856effdc4a2c91479b969a768dde39b50a6ec4ab62ccff92f7b468aa1f2571ee2e8bdb28837d54e8de0be478549f2c2e7e47a01b5fee3488e8fa26f77db061d2a6acede5e1c57003273719e893a5cad1bcb8b17f6c4c393ee2c5f888054b0b52cb3767e44d91dff9579ea1e5ed1a4f4a4892f59f5d638b6be90fada04d281e0ddd3ddfb0285c1ad953aff1a39fe908a9383be2d79471729bf485e814acda88366260a46dcdbeb550627ea069855edb7c79cbc2751a7c921854f878dbc7a611be52106e0f64b6079406c7bf21a449d35f18ebc702a9709f115f8153667e611f8880a51847d013c33f3eb6409224b02b563f4539a1a05cf0e1e3d82706bba9195bba0f013e3c02e7889a5dfc5ff3a061acf22154141ec5dd9fbdb322f98d721a066c8b6db062032259fcfc406882cfdd619e509d52e08be0e4fb9ea03352fcc122075a1734d66f690a38654c97ecddf05f7d805d3d7b438b3408086593d36a272d26772d61981474cebf5995eb17f9eec19c4bc4b2ec1ba5252d177bc1f7ca652812cbc26f1497b45cec25bfb754fe9e1ca5e2312df7b998927c3e86b2238983e1278dcb712ea624f9d6a2ac44623bfc2e7199cec59ae46386b21f899d900f9cb4ca28422a4b1217102ee1739a881e8efe4825b0502cae58431a2e082f798f8d741f8bd38937eb61cc9abbc4f199c17bfa161c86a310cbe1cf23fc092fe29ee57ee63c6ee97ae2bfd7749cc106b630b55f8bf97ba3e359057c65b315ac1dfd7d46edcbe4b7a509ebe3ef45cf2347e151cebcb6e3f1ce50acc5e013f40b9c127a2f57ac8a29ed1495a2c67787d3ae4dffce087c61ba1098c4b543457d741fdbf14699b55638962eb8bf494faea1946ac6b59a7129574b98f2ca686083df93cedf08765c9dfb502cfaab04e91778ffc74da20c89f3389b178f63dc9f24d9dc24f250ecdcf05103086944096abb5871d42003086a466c8c2573554a0b502afd6b98d12a0ba9d95aaaad88bf95f44d1b90bbd8971426b030bf78a5a68e7f3f06abbf2e47aa86d9de141e7d26fb304f5242cb5936a8bb60df496f1006522c8f394121ac8f50f7977c2fbe011c48b93c24041d5807d54fe883f89599079d2287819020760ca909472d34ed3ce2c65834a6b5d28ad9591ba4f863eb988a495bab5341bfc32f8d071e915f4084102b83f5087b1a7f3d12bc400e214206d9115613878ca4b729463eca0622ae904de25acb3d9bbc1d085c24032111c5ec9ed714e25d789f28084259668ce875002bb0f783a9ad0ef7d2176d5f78a3e5931105f48054f7ed4c2a9f41e5bee5db63e056950ac63879132379d2b485e9887030fb6fd35d410733a05d426b70ce67675553a8b39b37131c278fcc5ee8c8d80bcf6b50ba702fd2d1f55c41b87dd62756d7c45624c972955ef386cbf6b2aa41040176a1df21a839c8db25dcc661f1af5309812e09967451774fedb47a5e6754d02715c77022f94904f1044e361d38c3d943e8a68ae200472c50f93f597bd12d8a26ad623ff3db29ba75c9219af9702edb9e492d1b3001ce08dc60c08e6293e8809fb2ca20e28c2cd69cc9a1ded441df489dbed49b19148a3f510d033ca41135adbc03b305dbc6e1dfb02309246a2da24f72439544235c28d9e9ba25687f12fd9d72fa58889351f588f09682a47746e4cd744b708f2a9a7d48131018c35dba203d489912fb484273b0231a51a90d5cdfd51fa823181850540f4d2d0d54a778be40706560623e280824743d7e13e93ce3efce1eaa9b6eb33e6ace6f2d1f026eb345cb6545aefd710e82ffa02846fa4930a20a669f8375ebb79186b99d40d97e7f66c27f5023b50590a6d24e933a4f5d798b278047b2a24037ae689b4807a102e4eeb44a83afbb49977cc45efad5bc4fdc9790f7c3c9fa1f472da96804fe1c0c055bb10fd54b0d1a1455387321f20d8c65dac4470cac1ed3a850f30c6b8b34656d92760cd4e838412234ade114113752a3767ee60e416f938b3c425c9f7e269fbbd4f8125d8f98e82c3f3686ceb413ace0c311c5dc31b3d5ddb902a1327ca10a96ccf2fbc2f108f168f5b0ef33c6cecec3fc39f7b22126bcad49222d40eebb6c2a5f043b05503f388ac74a71e3cac379c98c73837ad619fc656d429d711e1c903549a9208009c659b5925d38bbb9a3981138afe36014719d7ff2f8e2e32ddba53d16973893b58f18ff3d3c11f76b385455993e8b9758b8a60af87b837b22471c8e390471802eda9bdae9ef60dd9fd79e858167959c22da77700d49c56930a4b3f1dff88d78fe124fe080cc4c7b5f982af88b1dcc370404c69660d1c0d6c7dd50878a0c47ef8c111b9216c2d50244592eabefa1bb6e22298713d124ea8ac612e4449b8890c2cc26ed2eca65ee099e0ad9686561684ca1bb6393597bab9fe944e814ec34fccdf5d9f4fa863905c4f7c781e9a62954882e1b8d8efd70c4444ff5b7cb87fabf6fcbdf277e4a1f1c907743a8390529cb9d239d24edfae7bd31291113496d96ecba41f9ab92642778b73692e69e6e75ba38a5e61de04a9c7d32e570846fd5423df64ea30c89ad8a639867e664592fea7bcadeb43d106b4d658d040150de64bdb4c844f34a6c8afadc8ae60a8a4ccca706ebc4791ae537e2044e71af20de20484e69aaa1fe9e6fc5ac50e936ed0d6e2f56829246712c49e9672f4507ba51d9c3e77695881da63ba6cb3bbe11f8de1a49465baf28efa6d0487be354dc60356176f31835811b7c8b4593fd30bc0e8c31857f7c9dd0e9a2f626c787b90b04da4f3c476c75f3d3d2716a772c77fea5bd66deb974f1c31abe6ebcc70c87b4f242f96373d02fed8707d3e57d0dc607f44825c2a236078bff8b6a9c8762698ff7f5d03a8af2f0bc1da80d48f512113128a69bd7a3e80662db59afaac19ad4c9253b28e5d41cdaa05941a7599b4af19ced8ac38c6d6e1e3a25d37b9c2a03caa8b6c24a8b2c7215f5edf81204bf8e3c36d989a8aefb0a34e8c7d1662cf73117c0e0467d235366c505857fedb43bad6cfb0166ec6eb8f82c5d387e984d8edfd7250a3979e6c79e6c4b66b79f81dbd52c05fca4fae9b1eb667172f1449d013c1b301b2b3d142d55972f96872f4878d2ad92deb7e4d6941b51e02338876d933b53f0295e700b4b886329a3f4ed67934282c8906b13f1903924128aef7a33e47cc5fb4844cb17bb7459a1b496033ed7e05f3ad2979f2c06053a441ecf95ad276020662d43fe1ad4d2e049f69a38b94e300f7f7c5760a9a70cbb160be5d05e8c63c3f5900fc4c5e5e380751f6fb17a770c9c9fa4409750e6a1f32c7ba81aa970d9780ed9f682024a10a897f512493339354c78b6473b15bd51e72df55cdb3095b3f497e467b31312d79311a5ee05dffe1b7f522b3ae885bc4dccefeac9c2bb11967d3201e29ec3dd7a7a90c9f0dcdcf2315dc7ce66d0ddc76931f520cdeae1b30f954c9330eeddf4290dc42ed2a0cd8f6963ba48bfaa0b2348cec6e31001ee3d0d746206aaf58fc3aa040158a4f1e9bdbdced7289eba5e8080e9f79cb60ed30f45cceee2ac6f15781e1430d70f7254c98deb6b4e1ce745fd01db3a3c2df4aef4f59d962c02d917333b0416248cf6978078c667b688afd43698400e910b7f1de6932e63c112f67734a5bff8b62cf446c6e97c8c89aca3a14c61ecb0e672ceea1494162320d6379aa1de6acfc2d305c75eba7ed3952d152f3be6ff196f63c42b85653c2fad0bcb83c3cd0dd4230e1169aea2ae67676972c0db575adc852aae2cc3e9cf357a37ac135ce50fd997a9793d044a30a02282d1723abe2563084c70ee19aaec871c2b28833ea1a35cb71c946569072329fc20f09e95c6b63e8151b3e6a5fb48ae912d7c5e8087471c717d3a326643c6f9dc70c3ea5b6a35d3c42e751bbee26b805333dab07447ebdba73490026fac91e79c76ccc1275c22eb72710caa915da9150808dc3d896e28ff4fab0e02d4ba596a720e12fec70303d8dfe4b717872ebc0f1bde97eea290735f249dd263f3854fcf223e237538b757069a1d87c06f69aa941d9986940a9746ba581012fd111ec2c46ca44791b25f689eab78c839e555b65ac4c8bdfdced80813b4f7234021c5df892c762ea08cd25f556e3177d71d0457707439f3c21f51c263bd3fed0511f934efff17125bc531b45b3171ccbebe3ca942bb2bf872757719a7c61c45d08131a30586632ef4ab1c5c7ce0b59084519ca37f62e0fad9e31d1064967b9e233387ea94a0bb00f201a217191d16ac6058a5b0baa72353bc75d6e4994bb10d99dc9903871ff578e34f0b345eebe8b45fff446bd23cc12e55161003ea634fa9ae3259e49c1008422eff593ebd277c6bb135f04eb580875c1f7392752129a89f2f77533ef2278c198f5bddb06a87aa921d3ed00a20c574ee804b35bbdb008ec1de78ff43a00dd84544502d804e8fe95b0e807c23365afa70436344a08c9969efab4e9e82c5f50399c6db997b5a8755750a06de280b3dcf04caa82a4a652fe7a59df076ba24718340a71f72cb3a421fa3daf5f2c69619eecc2544bcee26c52aeac1d2a567f0e3fc18f7bf2347b24076375dec1d634baf45724aa0abcd2efcb51bbcf867d38afa222e27624cd18698c31a3d5033bd3fb7efbc993c3e1b3da613633b93d928d3d4233e91d231d05633e0260bd518a3460f7638dddc2848bfbeb3040d835e0a0b87561a38dec3800ab42f6a97b4811d3103a2038011bbcfce6cf28f32d844f1fa63e22491533d19b61ed7ef3ab0e160f6c8a498440fb1a210f41a15442d8a25836be7daa3038fdb8de77305d11b05336c1ac0c7144f86d8cdc79282beb7c24b95fcc8406312beac957b9e4df35970a13f7f62a0a0d8f101e0141142cc7dee398a5d14a35d43e3b9033662f46ea51c4de952443d29555414c4fc56bb012bb5078dd873534f267aa73e5ab7e6ce2c4b96d072e70b95430d66a9035d83a26a1f8cdeebc2e35d0f58804662c1af35c46352e1f699b63e399318c973e4de518354adfb997bca51d24f118970249152b0ac2d80991bf174d93a0b0d788b2b9c0054d5a5ad8d4ab895b379cddd5a3677fc052ef77a70caa0497a47de5085149f094606ab59629dd499c5175085ec4a030935ad698780055a23173b971c69367d7c33f8ca84cb87e1e18c4cde1e6017ff67a319e8b9fcf6903490765c44495b87b7623cfb463d683af29f2a51c34fb4a8c7ea066e1d103bfd4b014d84ce72ee9b0fc06403c6aed2852dacb28d42ff0c0d5ff4a5e92098df6a9b00f6928cb3e83dea379f0b0098f2eab3497ab92a2c68708ef1b054414d142dbf1c60596234c3ffe5277e44e080060a7d54235d79cb10b57ddd88345666f24241f08396fc1129598a4130a3a5b913be8c403876970745ebd2d8865204cc6084bd556e7a7911a585dcc3ead0902451ac3a6d23e4cb8e74639e528ad3d6eebecf24c962cfc9a0206a12d86db63e2821f76c1b5329146cf06db516d1dcb068a70a998cb66366b0c480198c4072de205a8e1b5e0e226f0d3d6b10c5a86b3c986c89475c1ea4e52f81d3b3e8adc902c78d969ba5c654e026f8bb544c7dde852514c4cbe57d44bc3af4cc7e4645a4c3ded4a3017c6a592dfa95832f8ab48ec2722dbe159793967df9a38fad2da2f054193b57cfbffe2027898658786ea2871ff0ff4cd3a748cfa151595c4baf1304782fe70e5eb5d69a77bbee0d332e787f6b0639e0f0fa1abb076bf06646d0ac845f51cc4d2d583f43187f853c14946188ec76ae184c7b3a540bdcd9faeec2a1e7c6f36507ff4e70e661ae437a06aa6a7e9f47362ed70f246cbc91e09539a3d3fd6dc304d822aad5c8e5c676fbb3328ca308682936a16d148c2919ea628ca7f205da62ca74678e68fed65227b88a4fe707038ea81ea6c83dfdab6780efd9072b20a72891713386e6cdeb400715b38a1ac19e44a3830a195948d52f25992ae99e76e38d82f0c6804087cc323a82d1403edcd75365f306ab47c4c96bd9d6eac1f8c1280030773337869778193bd3cc617de48f800a19165736fa3f1c98541d1ab959e2a774f54b799659f8bccfb2ff9cc49d08453acb7c85946099a707588da47e9ecb6cfe8883d5e57f1bc68fea068db3c08430815287fe7e8b8eace6dfead0bdedf6eb87434684f01c702ff787046ded12a35a6977f48478751b07b7a21ecdc48085c594fdd5d0bc145cc1c41bb10cc668dbb317592d6c7fc28cd6a12cb1a8411bda979695ff82d1fb17dae1a50b0cd488d8e26ffa07cafe0814057157862c3aab0f4e5e576c6fc472824222b4682e083992c90ba0f52c094715de5bcd0b7aa1e8f97b9718f11bdce7042fcf60785d3de6f39e0f474109280fcc748759b7f53ce82cbd8bed17acf80ae30cc2d6325cb7e6e0f7fed3d72162dfaa4294cb6c467ed01a671f53e8fdcbaa89a5b8c33b1238e0f9c6f3b78689361f9038653820f698e1096233c464abfc168bdde3d5510ebc1cc68eca13f8d4f48814853b1583c18383d8e7a9f50ff8d0fb7cf4be93422f8585385fef7596cb8e06ffdb3c477ca4de68643e1b92b74439a87e39f1f08ac73734841cb2a6eda9f1206f6a54e93d147301ff871917f5926de2ff0f3a3c7c3c019487422cb97d96d72e3eea7c0d33c8a84abc3dae2b2291006fc397d52a9a24f141e1006ff2cddb19aabc2f7caf84357dae81d2ebae013f805bc41f4df235d0000071f2678c60567df80435d1164726cc9f8536edb84209dc8a8fdc681ca596028b55d4e9f866253c64a9eda9d219e32ba6b2ee940b17f2b1b8c83c85f8e62d06c94567e761ea4623d855cc92b8daa11a928ce69d46c620ca703fd23373062b9d7b7bcc54b6a5580f65c437f87ea7a0f6c3b0ab384e6272dd25b4376c297459be55b6d6f97d6dd72c63a94b91dfdb39fac312d163db241237bdf6675f592b7ea80ea011d0ba91b90c7f283ac032ed741f76a37b0f736f15f72890fc974aebdccf39c2a43d3944307f68529c305926b4a6d8dbe9903eed0d5ae41c317fbc898372f03f4080aac4229bb9342fd31a80540b9266bede12d1de3aa8f98b0e70f339fb4880dc798ae764a07bc147ec0e6f61302797a887dcefa0996703d40b6872552cf4b119ceefbb7e4fb761d19d0a25ba90699528d25f223dafe0bd09a08f6f81dfc47aff79e3653aeef2363b16febe5c4a1f0d9ca4418c1808e29d53d672aed3b76c1ca0c53bacb09f7981bb53ff2273790905fc91e592566a2161f3f995430e2ac099919e5ad89ee4bf9f6e2fabf4022e9905a4ce12c28c197b0bb5e54f410ffe1fd7529c66335ac02c68a943ff24b0e2ff7cbb032f4272f7c330afb058cd60f02e4872b30cfa7ff1ff4decc1e4c9ce258a2b5b7385810f9e1656dd4f2674a6e41b916852ef8df6ab937a41df42d77c7cac31129d937c13f285ff9c85e28ff591c458adb896eeb619b3f3f4bb5b1d238cb8df50e9c546529a198df338d9b2943db52078af3201b266d4d9bfff786ee3026fb6f853b1bfbfe2e8569910446171f35a84997ac9ed0fb58dad0cb7db6fa67dc56ce9d7a28658ae4311a31222f8981e4981137053dea64499c4170bbdcc2a42d575efede32d73f15c4fee56847c1bbde61765ed4c7580c0390ac55e571a6c3fd0288c7087d6ed715fb476a5af9380eca6ef130570cebc0249c4fdcaf8d61805a3715696e4bc8c9518e4e7ec5e8a2eca6fcfccf9171da24e3a1e8635713d2020cf70f73eac4dba30adb75387ae650749ab8d0bb495bba144b1b289efdfeec5b3d3b4fa83f6dd1f02f71d3e5177702ea78c0a155807e3ccb8ff1d57f96f4bff91bb4f58916305978326df93ff47897df1397bf8b03190536fcfa35a05f85549597fd1825882f3fe6031a174c565d9a14b94149f1cfbdf3ff98db4dd828d1d741281e5c929a7bc5de8e3ba8dcbc3e06c86ccbc1f1791797072ca630a7c17816a34d84e189c2d1a2fd946c6c4975e09fef6facbd996ae9ae2afb4d445fdc1ed803c564e55705da184699e121f1ab38ff478b2bd0ce4ff5ca01ff09b1dccc439327cbbdea41018aebcf39d792fc4459a317a534894c9ed81503e101f3e9dac1b7670222c933d8cba905406dafa53ef9889bb4c6ba8e7e4e58990b709fc71f9cd5f4f236d28f778119cd875f689a95682eee3576cd001464974efb046af28809499c7f70c5f545a5227c6c51821aa5a5c0a1b0efdfecbf174f6815f31aba2b1eb50642c3d42bbd7e676e272d66ebf340397b3c37fece4e661c5ec0b06dfeee7b5b68e9b454ef3832269729dc94d3e097ebc2d465549094b68119a7767d682a6b4f8058211ca507a31eabe67a3b32dfc22321df60b3b00d5421b1c00318ed257f823428e11a489475c32ced6fa28986d99568712826564c8e13935b6008ee09ca508334116cfc38d9db21ef28a3698386afc7a184b76ca4fcae48136919068c42bce8cb85e10b237a97d981aace788b814c55161a87159c77f777e58857ec76a794d2a4f7523f5555ce2f641b0c772185f3df273c7a9685fe241f031a510e218db378076408d7bce86d94349e99f82d40a3895106a8228911c366d302a2731c10d4caebf6bf9e65d8dbca7a7dd1445a444dbd371db72d12c8f01571f147e37b9c01dbacefbdb42ce59676d1cd07a72edfe5c9d08aa2f1c62bcf80c4ffb8dba1e5ae3306599927e38b6d5b868e05e2ce47aa04a96e2dc1f3a4f7ddff92c116c48b159f9768f0f20dd0bd4de4a2e0174833b795e7aca1662c4fd013c99a95e6e38abb835efff7307c3793e7fea7f6f830c575db01a8794e737854787b2abfd597a5b6d4bb7314d673519681e49f10f10ea63e0e3e55653ffbe01bed57d9dcbb87ebddab0ef34824e1ca4fb9b0190bad5243e6534360dc6527cb2418cf8d84b14f0fc9a96533d59315bfb648370c4e35f900779b0328ab7f8c1355c96acfe684586de76fee6b372ab814db2d5bdc4bcb3c8e27f249bcfeeec82715dfe5cc477408246b6ab5671bb0d25473a8758823ee938227511c0a27f1bd240c064785123bc502f83b9673dfd24e1d73197bc9d7f2d325bd48c64598c53581afcb969c97cb28c76bab99af68bca73d043b61cff6aab21aabf91c60239c7742735d23d6a84536eec03217b72c0684bfc5c7282ffe1cde7cbc48465b408fc1138ddfa372822d838e2d9da17d1da338f4856155081f8449b9ac157e4c2ad98d89d74e72c94410b4f50fdbfcc42c1099092dbe0bdff5b6e2cce5fcde4e403dda87f0f57622b73b068a375b9a6239bd15f0cfc36a96f25e0c078c33168c7f6e56e88a4b37820ecdef0bac309a211b40a90a642caac4190e7512abf23ef71a2f44953476b84b1b8b6d957feaf01c8b1530c836227c88bf9ed3d154b66114a686f80dd5edbf849bcef7c085d26308bbcacf0b786b0b0105eedfe2dfac40deb89562fd33dcab20bc73da215b46bd313661eef691221e2da140ad0b9708c391ec0f5167ff4c61aed83add674bc162cbd69f91a0c7f418a21c1fc1808584567f8b5e4bdccf3d57ca093a3fd836a9322ea3e085a1304bdcb683e2bf500efd6e2f037caaf2fa24a0d320513999bce5d3dc1462cd431c35b7ca7cfb5a4cc96463d4a757eb3937678f20d8e5e033edb9c0cccd8fbab7f898b47d89b0d5b5877a547b2761bfa0530f2f5c84cc75b75ea5d6b25785910884cf8c28a5cd7377b103a7bab029564193f84dc53e1fa16aa5d00a9f8ef26ee1a8fb065ebd859c8fd23f843c2a43b8a58be8fb1aa006ef02ffa1e71b04af79ff840d277ff3277e09c66f0a67a158bab7ab549c65fb90fc119f2a44a4dc97b31dfdba80c5f06df24fccc0bebc260f79fc903ed2de39b664ad837e8f631973f51dc9efa2bb2149ff002a0eb9a5ea02a848a7effa8b0734a248bb0eeb12343d052d7bd775d37d2b35030e4e94b96bdde96b26cace14b03f6c2bfbfd1f22707ce96e30c3764ae53959367c3194f2deedfe13833220af8fef259a2d816b66b4bbfe067c4a2d9ae37e2a78938e55a42eca72c124ef1f78b5433904db82c541ad988174a96d434a96565a96c61a900ac7af0c4c28838ab1480b83acedcbeb2ed90ddc84fbed9bd963a55ff097a98896f4ed6571feb9f93809d75f6d89d947673e2eed296c35e510c434b490122baef4346f60006cf423afc2c04424f53eec78523cfc2273b91e6cb6c12602dee7a667dca5e2666cd798c38b59a87bbcaaa776cfcd8c3668cfe26962bcac676ded3b9774167d38b006e930238cdd8a678240fe0678936634bd8a3dbdff948f8c0387f3837303167a5f3f0d518badddc767c6e307358eeb63493d218feb1810b4113677e3e24891ec1f22ebdc5fb838dc77c9e69a975c7c51a8f1c8fe62d1f4f86302dbee006664f7da01d9da1991b5046776ef5ac44b88721aa1befe306bb6c77a15e36ffb4335ed8105590215ba21d7deae9de63c9c0b106cb03e43affd0f23360736cbb2b6426030f16a2444810211cefba518311cd9661692409f0cd703c3fbe020b9d2da702ebdaa5bc3f1892f9d53c5d8e2d25537e66f24faa45dd26de2944c12960ec490b7a2f88edbc88b79009e8acb9acecbec38e7d0717a6f391f1371066744d311d4c1a910351001a996b4a379bb3e076b799bef64bebcf9bd0a94352f61560ca136aee0fbb650951af2535fdb01784868c08c538f93446f257b0e92c451d74e3d2e0d2bd385f8a6b4cc8c234c363457663e502ae0584894d618e2c43670fdc9b7fc2e1832fe64879223089ce01b2e69a60560ce6e50560b9f5e0bd6f8c47f5c5701d00ebc30d9d07f5295b66fdbd8bf62a07c4b814dc1f5377b3552650bf497c26076a786df21e097ac6b193cf3b67ad6e818e955c4c0f667d80ad539c2688053fd44161d402a18f863b35edd663d68bf6418153c2421c006263ef46936ab94c5091500fcc86e8b9542c9836235f12cd59e99358800171448d8a28921d7c2e4b2b639414bf33c6e616c67806ef2c0afd9bfccad867604ec0a313746704177e5bc86d7b463c3ac92e8f881984c816e700d178343664b9aa6c19347fe6a2d78e394c248ec3ebf891ff676cc85ac073e9d03a1680aeecd6a19901541b7cbffe2b5c8363515b63ebb9d51c069ef53d394e8a47fd073ed828b8f1f3e76310a60f8714a77e190e63ae5ded96ed5a9f7d561911396e9a0c49fceeb79f3afe2210e992d0170404c4b33c6b66762468b9df8872346ddbd1b4aa0df6eb2550ccfeb9e8d6664da36d54818f13424fcbd65efb404350ff5fef6fba8489a9e41987d0e6360353fbfcd04b34269d5b93dcfc3971b034d5cdc07f2ff003d6d9f9eeff31b0cbddfb677ae69b8bb4f598c33b87d4cf6d917436b73cffec6775d5122ccd598c5ec6f4b17ac933cb15cd029f94dd34db72a832fe830191db28cf2cc2f2ad65f5fe639536acd2991468f85cfdc9b1c6135414d8ddd7b37c985e0c625352f7541562a4c181b544d3953ce289e07ab8647ab0db328d52297ca30eba80773811bab7992ebfd7f7431f24ea0fcf27d10a41d0e11b8a008b2050e6612dc4bc1065513b6c29a345cefb269052cccaf02d8052ccdee86d804e94d5e855805e88ade15d28558895e17d10ad809de96b1095803d03a746415400ad263e8d824887a7f954204c80a4f97c10ac809ce969109480bcd1d9009c28a9d1a900bc1059c3b950a81029c3f920580139d3d320280179a3b301385152a353017821b28673a150215286f341b00272a6a7415002f246670370a2a446475d60975a6999c9ed8c6d96b495cfa613b6f4ae5d5a33a75a45d46435317a139e495a067f6f430909e271ff2a528e3ebaa69fa222e86765f641305e555616fde4c712cb61ddd35c2a510c8cff4a4b918cafefad500ce919f97d0947549097ab97c8b9f4d298fb1a9548178bf9878272d4b1357102976457440652fe019363da8602a3df02dac16d16abcfb1a84c59a4243e1d3fee5dfc4cf82c27e5b98cf378f1a2356aecf69e54f0a34c865db3a306a307b149a81e45268fe44f81505524dbc26ac251d330ff0f9f43cb155d6f3584fed57586096b2feee74f0844852ca8ce342d441a2273e018ba076f416ef6b7fc8f165281b5c170aba647c17c807521473f732951c0cc6eada9ddd91790ddd8470de3eb0a56923b3f2105f993fed726f431cb58657d132cc5ffdf4632623f9c124cb51287208b4366262200772d791d46c91244a3e9a728a73e68ae5b1859234dfa1650c5726eb1043350d0dc868811d10ae512eb0e2713806c13b82aa9f34a17aecec43b5577c327cb2d71ccb0d309adea333514a14929af8ca4dd23f68368b57ca5e42901f175851f29439c877bcfa232d28ec718fcb61f8e4d1bdb02f0d74390339bcc1630db1e76d189672e86e713eb06a546a72ebc752a65bc0e7f5d411a4bff618b2366cd4e3b23d9a748eb07390ed4f010d3a710c8c17ed27a24a6d125ba50a678bd9a83f78381f0392ce857d9f69380436aaaa334643e1c4d79e1336d0daa3619eb28aa582f78a53c89991c9306bcfe74d26322da342743b85162402be16e35d47e7466fb42bbe28d11900cc56722e9207dbc0c435264b62e6dc6727331a3f266c4cf909459e1ebf85a3b835e5afd6b99cf036b69f652fb98751179ac699264e3a39118c656c0203b68ca586ae33653238569e3d9a10b710ee209e3521fbf4647d8c62f363c6c24c3d8316d8017afe69d87f841d4022e973aae149906d9fe998c2bcdbb9c40142d350b547c24f2928ba1f656ff5890a85e991cba0ab03cf2764752b66c17ace8b3bf2fabe039bcafa356e296dd36c6a8c517e163780079238a4de865110b1faa314551ebcd92042a37594f0137a85e791866698a5a2a13203f6baf325af45c659259776efc14b6cfada8fe554ab256c32de2f16073dc0868331b2e035d0e1144d110ac4b0edd07aed3a8fe4e7c8691f537b3a6e4965e1172681c811b8dbdc4d6f124231c241b92238a3859b646e183d7e3f883d458d206a65c3c3b115284b569b0e2df6102afcd60bd477418c483f42d4ce8805da3f78832ad2f7e0dee76d43cda1a87d4c5cebd98c316c0519eecbe9b22e115b9329f855742a6d48a2dcccc328f733858c2d29ef8b9dba635fa3e77376139ebf3f2fa35ee23c0b346bebe7f1070f79d7bf12183a21129a4d90eee17763d6f84e8d9b6169a212333fc23918f31e1ad999a538c97d92c0b5ee59aeadea018e5b2cdcbdb9b33418a5f7e8f450e0b77c335fb87725bf659a2d3dc24063d5657cd644569acd9edd7df7776f913eaa45b461c7691b3f172eb49edf5caf18130f8065edb10bef44ef94e475337e43026d2c42eabfe172c735e98b6d872643dd24f0bdfe9da2daa51c5a655163ce76a7ce6a19da1690b04e4146af520baf5810cc5923677ad5701ec90c06d16157146d8ea0eddef54e1c76666dbeeab4393eaae5412bce7a74408d97f1d1397e9f7fd8328c69cf8b6c0343b1d8ce9667aa24b3973b8313e9d5ba55842f9ff55e412a442838111067628211c4806de98c963d8975947f9dcec5dc528ed9c60fd1751ce99688f459b852b6d98c7ba4936107299aab6464b609c9866cd9dd6cf5541d0f75030b8383db51daf5faba195d40eb4ecd5de8957a9cee65f5dd0fff6adb778b1620d9da196f5c6171603dd899366a0e1650a3d97af13e9ed6884662337a5c5e54747179c8a8aba3846b1422f9b1f2b5c32737d6c0b0773ecefd7e5d55200b33d910e6102520993be5951bf45c10d0f71dcf1490004a62bd6b5386f119083f2690aa5cb5a296bb912ec42169148be34ad744e3349690a8c8bfb674a06609bf5cf0937c0294ce0b98ee6ba584af83c5c0f8fbc9e394c9b389419421f39ac9c956826ccb42fa3de8ba9e41519917cba2a186ddb25ab71ba959cd599163180042fee0c1027190ebb9ed2cb1cc66ac069c8192f86f735d6f26cc42a4278268a6afb7314dc63b2f9f294c58c9b15b4fd6c6134a4fe01ee58b1ed6e09f0630c76911a89e6674ebe3bf78a3143e24d0758ff6c5a543e5078bf2327e1af26b1db8f6fe3e69021af0ee13a4ab6fac24511d50d191e8a74729dc7b7cf499f0ee60fbc6ecaaf985842090e1434e56268c771f5fdee48766e8c4caabaf943bd1bc236bd2b49e226288e0e981838467fb1e809ad5dd80fbc0980d70fdfaa7278e5b6564ba7feea63d5a16bb9bcac92d3df05a72fa1eb1239169ca4c62aa05b86bc9fbb82f09bd6dfd13e3e3bffab5a44152b1b928f211a22ab418061240b572ed91785ad609cf9a5046add9bfcc1adc360b4c01061ab7a773a1fceaa00737f1e07e8e110db4ee4f4589618fb806084c7d83c18fc7f974de7347f198891016cd71a16fedd76f03bd0d9333c70d1fbc2c7cd45130cf4e790d346244e8806604f0d367f9d3f19e9c2ebcfdbc913b9e36b7bba9bab0c87cdf5977c46a6e232e93b888d0cdcedf81b453135dad740b46157ffa11013fb0b42fd07092349c98558f54a6b7813e47c0f9262bae69bb6394027c738009d42b6493b7fe569d1c378f15c4ecc681caedc0eb4155edd661c93c489c084600b65287bbcfae0224988290cb619c9fa4b762d49941e4b6fa9ec4e60261bc9f36391d202c6a459d616c5a0e76208c786f43e2f2e2d8d61667463a0a928639c36dc1375db15f4e8d1437bb538052686d620c53c5ba0b0f15d2661551240b4ed7a4f962689a25a56bd4cfeb9809df3dce4d5c1069499c1aa16cb0612ce2e19b9c1955392a7021676bf6795d85c6211eb5b81a4afa5812bd27f7e9bcc8b79469c95050dec211cc03180219660da5f91523284de9f8fac7c5d86cedf8a5467019a9a0e064037c56bf40165e912c8d578323550399645f1e77550131c65ade51e4da3c02d02dffe0b5f5aa8d10ed7b895d6a2a745ec9bd03631b9e9ec34f2ce258c78f7b9f1e96b97b8c6ba1a3f726ce4c6223b9ac8039e262e61e789c65167e57aa01dad2831e5c27768ce0778cbce86fb87a29820f4d136c230187b582330e2e0a3c06b70ddb2f063ca3d11c73f5e9e43b38cb29d4872d0d49ed20adffa6fd33e9b768575ad18614d2149a404e61e41fefb20c4f9cd28086cddd8ec560cce3951920b37ead08ac7c5c1292c1a20bef57eea8c31bc56abf4ca64248ef78979d555ef88e477c2d0c0cc7c394f9a9c0553f250c8a81fb37a8d0dd3438419b70c69c7ced141448999903b232404905ea7dde86a9c8dade1a7ca20ed8e00cf26db5c87afb56dfa089019022c56453073bb1955b6002240ff1065277015b59f746451bbb8f3756e3c50c85dc25a7ddb32448d9955aa0c4fb9797f3c16e0d2254854a27268939093155db26400756d776af5c30f09930270179723c80362c596248e95ee871793613e697ef57f68bc97cbf9794937a148da99079fe5ca3a0a3a177ab20853b4accf2defa1eb9dcde63dbdff106adfe56d13f3f023e207b77fe3b8afa49f429342deca1b7f08e0839d3f670c7285bc1a04576af26daf9e4efe853cfa76a25ace74f5c013ac87ab21b9a69f7c5c1d1bd0db20f2d7e5800e69793ad3f90acd524364bf0d4f89f7a9dde1df7ff6fb5f50e0aa270863e7785f4c6ef6c5ad366f91131388e9dde2f227e8db6cb670890e1b5e7cae3f9975e29c82cb97aa9dd51cdf28238004e10358e6056a768634611e80a4cab1873321b0c3a661d47cab42e796f2e198b9c41f3f861e16d062a05906baa8794b94d58381381e1112a7c90706bb97539ad6e11be640128736f60d097b7057b1c4adc9554c310c56de038724245885a0c3e375eb7c798c18a91e2d9a16bdcd9b54cd4f5682854b8e37c2e54c9362ccf948c25c0f0d3c2068557023f9c3ec230b14128b5a185f8cea4bd6b0270dda2f46e5840207ce4e86134ec5fa610a554acd1893ce699503c8cac751f0b50d07505fb9b66d9e4272b4389dd76bf98885025cf90b4ab830c1ee62f2d7d01d3007d6af7db2a0b53820674df1f5b9cfdd3546e55e14c6608534d90a37428e2719a140c2a2b430769a09d4d707bb68d453741e36a7a5843adc315a4849615016fbce58cfea5d11733ce08a02b4649cd3f955bb48bbeeafce4f52f0aaf9ae9e61cd52f363e9ee777370a7bf1b1b4f4f621167ada96fde1e7dec31a74ccc2dede51a0db72304a8aeb8e6d8b9d4e244d1703d40a37137283f37c350d73e772a1964b5894b66f73a9aa69cf2d308117eb693b96ee33cf6d957e3d696782308eed59d20e20412ed1d160bdcca92e4ab8a5f416be2cc290a87623f220e528e2f8c335a13808dadb603af790606502b828137387e0a45e0cf246b5abf4ac445df6cf1534a4ccd1af6168ca9a482d3372c43cbc2bf00558255fb3af64f68bf4f54213c637d51123e7a9d836469598debe6e346f474dc12471f76fcdbde830023202500ab403e41ef69e593c99a585500f211e9ce8c12474791fbaee238e64b6f6943679c887258fd48edb574611306509d426f0e422c8f53f034db2ecd469a0a3091076cc3fa92d185a971f5e64df21c270daa30720a4efbe748c2fb81179e24088e7ded1555c062c0682ccfc773d253a76b85f7fcd0273bb6fff072922297fb62c8d7ac5b056f1977d5e157b461b9af37428f146dd89bc81c7e29592daa11bb7e2526e9c6452d3ba369753330fc0c5864e384164fc6e8c5230b41cb7bde891e73d4781b391e82b98b13f3de6a078282e4ef76188a2f692eba82f06b4a2f93db530a79da947d8c38cea102a6ee86f17be2eb2df698009a1f209285562cd973834ab90b6a32805e0130088e88cf1e6dc62e1c832168c6d99e25f34d813b3725cea3fd485d404c77fc90cb7156c5a9a4ff1a9a89f9f69a05271de91f7c54ba52ed6e40178ffccbad8c77877e58f599803fb685a728bdfd929ec572d37f74cb9121f67b335f07f559c53928492452d7d6cdd7e06e86ae6a0c4c582493000c5ad4511cb440226434cdd2fa892f1ca4286a775e7ed725ac73c0c2d05988b8adad11a3569ac16a3bd4945a511acd54a099daee4f2ddcff5940530dee33bcfc0bded30f7dbbbb3fc790f85f2994832731a2f4ffc371d7a1dc0a1f7b607bec84ce39504e336c7d6c6f456bc336ee52a99f451accde2843a4259f6d66e0e69909c5011b1b27d8b95bce44e4bb42958cb1b4e2188c3640bf7395b7286e3277aee6fa84e6842cd92c4b5ecfdfc36d678eec2d6e8b11d47d111dd73333707f4e68d9fcdef7bf239e47412f492a64160a1a9dd4bd70064ba379eafb1dc6d1e86fe8dce53943b1e6d8ba6eaa75ff7c5966ddd9718d05a13da7b50e1caec5f75b2176432480a501d9772935a4ba4bf107ff8b2039ed17e6aaacf8b267ad7d631f6d901d0be17cf1c0321c119eb315a9c3308428d37c5c132976d16250a603113b05b4dc883328599a262214a8e5e7277fbd9425b30da27e6736963a80cbbe7c11555b4e0efecfccddcc6793247fd0c9c47828fa5299b772aa656730cc586fe3ec0102c6464f0b0e082963db2b20e5e7e8499e4026bec9bae30ce751fd63d2d6bbe76a81f88d88dedb9eb57e6210a8fb843dc9523d2880fc11bd1eb8058a9f6cbe7966d866034c2a9dc463cd8f220e8897807d6d85dfc3c01e6eb3b296bd08c75c3299573fc1f2d1caf1f4e26d711adfcddda0f52a6c9f131fc3bbbce1e8920181ef99b7ce919ba14386c9ffeffdc1fd1a10638799fb49ad6d89b78d4967e5c723978fa4db7bea13820e673ad48763b17b44de53af436756e2ea3521fff7f9f9371eb7e282d01de4e4ea3ab7c52ea8adce66f3f26962eb349070b23387347a8a2762b3fc337ba1563a51f2fe34bd46269199fc885c0cc4b0b9b83a2147e1c3a8259e46e11f6d8ed19ab37cc2ee4a737823abbaaa629c8df3d7bd12ae302fae23fb3e66da17f6960bb54b706a01f9975531f37836efca72c63ccb42a6dc78e42444e549a142e745967de328a6be3f4ab3f84e15825c1a32966dde933c71dea5a31b9c5ec7d821ab10f1ba57d9eb90e9864e5344432f7d5ba904e7179711c85a82b7e0d7a5716edb83ec788f6b07bc5ecfe62730439b4a26e25f6084b97838cc4af2a0f64f300616689613f32f9cdb245e3051d922dd3d984371adfbcf7c016f1907425683d59940e61c6a7e32460b26361bb917eba3b5fd52c209a2addd8531feb5b9346c853151feb24e9f89b3984d25e29c3d309f95fee8ed80223b1cb529eb109b8b0adaa08fa32679acf8f4f29385acf66f2b3235022d599dfa7a21c74754452da3b3d14d85f0851e0047aad48b8105312f71d8275f16806a5d56b1cd904f134f41eceb06d1e10a5ef1b0b47b5fcb8b008e06b53ada98bbb55f61a3e02d9628b7ceaa70fb358380666f4694a9a997a08f11b84f90779a482e14b5f0f041b43b74283dac93664cff35d0b5a455605e1267973f2287b625bce10591b9912ea3fd9841fa76aa90eae965b2438d2df866f7ce289d9eb36b77bb477922fe14bbe2d97be43d3c840580ffceb2c974f2bdb9c58ef86f95405866bee5680ee56f1528f616915e80a1f2bb5c27e8c5aafd1b9407a20733c71d03f385453ae7d9ac94557754f28d9c195183966aee2c69fbd9daa26869c7c0e43f5ee48b8bfc69798fd9d1f10e0c5e2367f042f6b786751b1d3face1221f4432a1482a495dda6f251f1699133d5b3afba7080e19c86e3e5704d33638bd03d0d853f17194c0c6592b5dace40e34a2be34aabddf57fac5d68a2d475800b9b918313fb0806d7e50286a2e2fe94dabe752eb4a72b368c546c8fc4148dae7f2ac53fe4a916f5c8437f280e252be37e30545376ee4a2df60e323173dabb945bc0d345912b3a5453022ec6e26b98ad99f8e4fb06e8e4e26a120c84357536d14cbfb7a3b72a3f9e3379fb340cdce2a00d575ccb41f62a1060f9718bbdedad9cc70ace94d058809932104dfe76beb36694b837046c0128d8b4036c6680fe8ba5ec110df67a137a18a1120beecce872726430a8efe3ea59e99d59f04fcbfe15837c25871cbe79bbcea36d95340e8bdbb26e215e276b3df8945b4be93f0784d685c9bb589f14e620f8080cc1edae293f9677f6bc7336af18145f755ff47ab68c713aaf90a58da1d5a4a60117a562ba08b559a3d168e89f0f011410d718ee043e61f065467322a2f45b0bfa03ef02cd688bb29676c931dfe60c597f9cb313bead8ef7def9272ba714166a0563ed1e86fa63fd0e89ed9e96c1f937e93e04701240729d1627174e147dd63e7dd73e65c609085614aa0d3e7761f6da588a18b03002f71d4bb851e86069c61bd0f4e2688d5276e89c5ee49010e30e988499862f3a96079a45c40434cc6ef14ebf59662bf0ca69e1e139e8eee9ee1523d35febb7fc53ba32608a1098a4a71b5c835effb790856b3142abd9221e2da398bb5b335b01dce089f206de47e5b38e1edcf92a3bcce1906f8e5d0e710ea77512e91a2c7286ee6ee14159b45a15bc5ad0c4eaa1a649c947f1e4a8aaa33a34ca27bda21683c475ede8741a6c7df18c767a9ea3343d2c34f09243fab20bc0efa4768a18365e192caca0eb90af6639f34b80b5b9d7cd1a1c7020a56983cc627b64b51592e28b9bf3c653ce587ea865659f55f2a58d04e723ba06ee09cee76053530ac872c3a3b570748cb7b05c9cf64e081efecd5ee27185e32d4f5e100ff54bbcec6c8496936a27dd89a00933be26c77ad52c00e5297f2836870064657ba12ed2c9c3a30e022d35b7526ce35bf4b1bc4a864cb323653050445a6d74a9e7c6b337d983e581224dee453cdd392d0f8f0b5a006ee875d00abed7307ff9a1a50ee98a336bf658cf8d7d0eef2cc1bcc69117f91db1c475046bf67bce0e82ed1c51e7c29d684f19624cf22549ec20a60c8b0b6608d491ff9708bbcba70430b74142ee0d399afac7cc0520c5cdcdba7c2eb67c3a6470d290318c95475dd0c7fc2104b95c4b364c687f3d1992043c1fa88eab87fe0fdf29c9b6d5c359c763c9837b6f559ad422985ac83ac0902dc5dcb24450aec12f946b733b18e12719de52240e1142166abba82de0698954f961a77e90ab046fc5c5450ca8851524827a3d2b1fae04d1415875f2dd347b389525cfdb952317eadf94221f524642a56d023416acb845e018af701f984f574c576bf18b45de0a82b0e5c57dc1a5f35761e87235c841c2738cd01f09be3e2a35754c0eda1be08e064b51b094607d53074a7764ac0de21c2d5835afb994d2705641c7305945f9252e0498f6354ae75207d309adfbe82858d8390c940bb9d644031e666f1e47a05f470bb1fadf21f65cc908b9ea21e8d3af07f99eae49b5d5a405c3da2498ecd10f403b010616733c5fc02fe7ca5544d187dc0732ee2756358a4492279cbda5cacc2e0053695f0ca82c70522137a6cb79c02bd17720ecba5a4ce2feedefa04c20f76c5dc6117dcff69a380cf73fc215987166577b0f61156eb0721ea4d11562c11981363c3daf3b719e8584f3c9452e942834a7d60e81d329c7c98b7b39708245af5cd1c84f465a5c3a8d2d1183cf66191f7317f5282bb5e03a9ff05eb911973878a53feefcac047988d259dc8535c7e2e205573bf7b45fc860b6ba7cd7c682ff2e8a8769c3d7e71fab7c6aff3127f0a2b00e7f95b2119b6c2659e586f588bbd38fa44d85b78dd242b47644bf2300293168f17099100258bd321d05a4310b2c68b020f44d55f2746fc98d24e03d36005bb1dcce51f4a2dbe231918facf03ab21f7e6476d87eafb13a85f686b9b20cd6a5231bd2c40c3692dcb34dc0af93438477c0ca014108c80f6e7f1368009563802ae925d507ec1a8656a15fccd1bd77d9a46b9399d8023262c72242ea4bb08bf9710e577636c75b05d3cda5f22ddcc5e83bd1d49a8d099365816c97add6c118278fca965809ccb508649c2410c54988d4d4ded23f42da10b8edbe042622aab4038963d9a13761f996b26b6cd99592726fc16d174432f7172888bbd0e4a5413c2100e5c35e8e21bf94972f874edebf03f060c5a2174c580bfe2c0cbc405d2d0dd53dd5e48a9dd3fbebe38419f675c5d16a8bb2321738559300355cfa67017db1f0f8bbe57c2e58d21807b9e6679e7417e3d67e5d2e022b56140a70350baff5c8c76796fd84923367d0bdd033c878088328d17388efd29f01a6cb8bd827d1ec0fb2b95af61f6084acd038a3f9faab7d7cc49c0994dd6e330907d366730a8ca04e330adb54f6ee3e918dfac518c0f75adf1c3f8f3d185cb8786b1bd48137b2fa83185125af98084fa68b3ce868fb89b914d4069643745c8d68237e10e087640cc8c4c28b64ba2ba09052b7c75e1fd4bf526c167f653a7401de79937559961b92028da07d265bf43b1fc369a55762689fc1acf6b64dfcd5a8f12b99c2d1a31ba8b4774644f90d2304c26cb80f7d15ca612e9cc8d6849a64bd2e936ad46f368ef24a9fd9013e59ca6a1909ae61232b3dd0e46266a47b4611fb5f9c81b3f9e4b13e21cf26702f5cf3dcbeeb1aa9947e05ff09271cf35ef8ffd4f1117da12bb5c3735864614a6e940dcad9dd720a2115e0a089ffa2948b90d57827667a67e6dc66b0a8c3c753bcaad9228c18e0c920a331c004325d8a901fb0a933d57b3df6fc5be92795ca14ad5f2e6d5595b2d641dead6f30f32e698c84a0b4bb31e54440a7f234aa00e3c7a89cf1b56c0c11f43930aa56d25ab624e16c3c4e3c55c2d3620c12534d4b0c92da7cf2605c4f8763b7d7a6cece78209015ccb74e7781217ee0d39928d8b59d2cba88b6b5b9e134385c8707c82278e6e067308890599d9fc926668262b692199e471e330d20cf9f773a1fe84c3fd630ec63555f8442208017d7670548a5a4029cbf74818f6e37acd230b9ae86a13262ac777c1e61db8fdfdc41b8d03f558f5aa518a98dcd7421ef2cc603e8a4843535bea5d0f068da42f3d02d0f142517258927bbdfc1298eb16d103825d81d2dc3feb16787ecccd3b2ffeea6dbc2caf05b31033788b4dd58fe299fa14c12a8f02fdd7e2e6d9c51bacd019de9692c1e52d2abc57e358d0aa607d4e81bfd0ca128a80e6814694f25bddc0137aaf670c74eb46dff764d77b34c8cec9e7383760ea6cbc774e4f2ace7ab98549d66307571ac62bb4f8564f58e26f014c2f4786110676a8c6a56075d29d3e9341078a512e957e9147a35296e6916bf0465aea77f212bb86773094f14816050f2730f13afd09b8054c0b9a041b3137564717225b3709563d1183e6a7e799784906a4cc883cb51f83d923f21221a35ea16604b6839d53a4f3f1e41230f830c01a445c85a8a817e547c4332168fce82c835cbc381fef33742da4e1318b051c6bc1bf4e57a6ea6a0f539a84284def0e9b206bbb737f3970318d00194f10963968aaea2cf44547af2ce114301e225453521940e5a037fe7e04830c44d14bbfa20099b49aa645cc9ce0288fb1dc74a2b83097d20418b735ece5f02881bf6ff461683732b4646322747300c36c56c12f39604507c5c18847e61e308c469512cc21d6fd81de2d69fd5215063b1342cd80136cb75e6956aa4b94af7c9eca9a12093d4e5c096cecec479889788cf61348e961848c7f0b0242493dc3b4deb507e890c343066a63ce6dc05b40b8fd5894d48770559ee816cb13ec268cd7df192f8dd677930840882b2e85328b895001daf731ffc3013fd84de0f795d98ffaa61894389d9d8a47e77a24cb1ec2cebb0b0142edc4642dc4288ce1ef1cc67c54f5b0ca47f1e956b7b2e519f84feb86a0b7b8d5d9577f19c7bbe6ff7e0ba11959a3af90e2240106c45071dcf8e4050b220b03b33916ba9c1783152c675b12a67aab682ab0abbd50a8383934e26d98a5aa6c38668c82988d7092d0da29abbe38407369331b1deaf4287fc0414bc2708fae118247d0c69f4308583072472a7c14080b27f1b3cd11a5034202e1fe0ea9f91b0b25a7ec99a623fc3df5fcadec6f8150c03c11fbd617037e16bf4d59601d8622fc0e5d140cc6e8d4f0aa1a3c42ecf2664189c200dd30e2f2978520c53d605f776dca58d09db3b6cbd29671d31573b44e2a525b8e8939d9276316d14772b41436544e8565517dcd5854d6db3e90416eb65ebc7ab3427c6bb22d4d38c1a8723742d9693a67c3c8cdb048455a7aa1d63172559d5432d0eacbe0df0250300b540907881d60ab60932aaa2f94f16fdc4915d4c104304b463f2a003aa4f16adebc889f5004bc72ad9fdd449ee49f87b74e382774be55adecd66a22a9a8a7e9a7eed5f1a13f18945426e6a61462c57328ce61426c588c745e57739468cdc286b16e69be8cf1619cab87db99bdae6c2332f72b4ea19744819fa1d3ba995b27be95b88f742e6e0cb7fe7218332a18e732caf487f1c882d4bd847b6551dced5c94710442a7a7d18d1faadf16abb26fed6ded1fc0e73a0405aee10e7a53b1375d8d2b4362e150c8e593a1eecc52528cd61e5a4d3a37cc2183d2b3d6133897ff738b3d51d2daeaed04e7f58136678737887cd505b89cea76f688a9b8d26b728b7f3c0926d845f6c92a6a449bcbc0e528b12b55fc08173b8c57d0903ab6d25bd66f8b74db6047295b0a35abd3be7cb09796b0c03d8d5862f0cf7ee31b2674b825cc231f035c9d80fbb981c03f36c973178936f635fd9fc5c735917d284139c20272bb4072a16a7a945e07449b34f53b02a86a732eddf52bcd0b67953948d0a19699da995b57150f504baa296d72d63fc81978d50ed54fbb72ba47995a2e253a22e601c70a61f6896ee25244cc0afa4df785af3d59b3e4833fa7ebd63f275e4d286713547af1f160f7b8ef449661b7ae6c8316fc067be444adc475727a5f181515f7005e7d645f1b28664d4d1c9dfd452e941d80c614607513c7826ad8e6206da78325d877c2a484e37cf0e842c6e1022fb6d417e0f802b10e03a47e11d76597c4094644243d645d7355f58b1229f8018b9f8ab052cf8a7e4e53c57494c60088a77c4e0676ce3682873aec1d0b25e1bf20db9f14b07a946bb01bc86367ddd26eb3895d1ae9f752ff8ee36fd1578a6e1801be1a60da05be7ed4856cf7bc7a50164ab61cadbafff4c40a0a60fef343ed0c7b25a8e32934429719afca92c9c3b487be8d5a7d8d7049a490a0d715d181a8fc7955945eb168b863356a1c71aa06fd9c968acfa8790c2f61d334aa63479497e5c98c9e84852b5faecc163fd539a018a9994d2ccf72ca985e35afe4a9ff52a9b4a5f964d61f148c95a99c9eac1ab7d9b04713b6f654cdfe8719bd193353980c41b588bbc294177110f65925b81e8b5b0c10610b3ff6a355ea3168a0b28fe0e375e5328c4437948d9ce1bda09957be0d46358be3afd324123daf452dd5e218fa93fe3b4889aecc665018d65245a0b5fe03bf09bbf0fefa9f8e700b626c0b4673d9b5d765647199663df25564426f79948838c8fcec88f3da6503f82054f79e5d3b7f07d2f8d2487ebd909e89377ffd3dc678078fce6e6393e84e684171515ae1e7bb53359d1a35de517d8ff53935b6845f2fd3073bf4a24c8d3ef37fff16bb8334460d18b149ea57c036ed3232e793485b09560d9bc5014079ad6e3ef2fe5031e7d4e714e4e78773144791104e4b495ea06260d6a2ede6707e97e8d415702887097f808b668deb37cc4e0271be59ca3de0bb9c830feb1f11eb4583da935f134a558589cc8903fb57c9d95310ade582e598bbff65c14184415d4e58b145c1b8d6b5a2bfbacec3ceb3588db089e7766f75d2070cf604a45a0437b38368e0f75dc6efe36d3913abae70abc81bcf349a6903f95b1f3244e60000d65b4ccceb2c0b1f01e7b6cc1a758a00f99d04ca8f6905c519dbe64c5432e85ea7b677b7a9bf1903a09c8b6786857c4e168e6d630b7189cb63c648b14f9b0ce20505b96a6bf0b2bb1bb4e35d21afbc9398b239d333f4e5b20dd6b944e45862b6c4ad79e4504ea4a5b86180181a626bb61934889ac1882b1f069aa71e074f543e92f657c1d163a949fd6782776b81db732940a9a9a971ece8c5f467593752fbe2ce696f3f49a4a631ccc946498f5870c34ec311f410c4943332b5f1a52747ef05ceca9db3466f4e2c7d9057733437cc0cf7038e27487445170f4786245da215cec28a9428dbaaa38b4fc802e1bdb395d87dc27314709433d3b219ed10b09b267feee7ae511232cfe49ef989017fe0559c0cec0150c533fdaf490997447bde472f0d29894fabacf6f1c088f2580be2dbe1df4121614a655afdc6de9a2204c3c13208d1e2e1d117e82e4588a9c90966170ca33f0a773fbac08d6b0d69487c9bfb533b902d5206ce8ef70da140c0aa22ad6ab18eb0156e7215bc33f46bff4bdad0a5235b962aab7c1d8c8402cac0fc4f920e303c3e1c34c8a453d2eb5a1eca47880abd6db66041acdd0c158f5d15321f931da5a9845691aaaa624964f14e9b1cb2f96926f88715dd22bfb3767bcc3b7111719a7bbf8ac7c65078611ffc8187589fda7d08bd0bdb3dc1479441d96b299d0f0b7c14d59f8d8dd7e20e24e7faacba37fa9e364def4bd55fa80c7230d28679f0ec365d7649b3e2b304e1ac1e0032fd2e139e8c6edc260c17a2f30556b645462c0ad5d0ec0d13beede6791ca3820bfdcee3870389b93ec785ec8764e237f6160f9a1cefba6770cceab2d0e8b1afe062daa70d6dff981ca91fd3bc975741457c25e662f7b239a4f016a859bc8dced7ed868ff59fe0a15d7b00b0dd49e029af7c1a24b31d5bac0385c2f21ddc229cac033fa37a9ee62c30591ebccab4779cbf2f0a704774315f9a7ba18cf86afd6d1930af421f769bf8e5a294e3b95b7a73642d2f0690a9aecc31ce22c18ae32a4c1f26474e277736441038f20c3866cf9d71df9ce8b0c86c5c378c402194ac7b7a6dce427286aff8302f068534c25aea8f0dffb87a75a54e3fb6058b67eaed86313664d93997d4ebf47bd074a19de6312571668cfc5636ef8d8831ab2e590cb5438ec50aaa838a1079bf0fce0d4b3e6df3b7cc6a59399406b43471ecb4da5060f5d1acfb8bdde63a0ff54452ec3fe527da553150f34c0e69367173970c0de0514c4d85c8a1040adce682b21f84618cdde3a3950006c982d220683bc04420f91a1958c0a30a74e70bf3ef6cc6418071c7e29f4d072d98b980d906cf1d9eb8b84122d08d0493316bb6dd1b4073a20667d7b590b88c56c9aedd10aaf2837f4271003bfe797213ee7b1b6d86e5e3bd71e004deabd2850dc6c544b2cc40f571f40c4763983db1d6e93d2eefb7fe1e8da9d3e8f96fda1948013e6ebff50a23eba58b6c09e9e74fbb6cb2d06f011790b2648c894838fdf36657735495ad215a00b277c8b73c0c3a01c62856435007fbc948b079a92e5f6370a9225035ff48271c602cb2ecc31064271521986d94cd0fef49c86a7b91eada943716c6678d75b191e5324ea870f09900e41f4de31c0d5be98e65c94c08b26eba4d08458f6f3f724edb682291cd040261fd40a0b7f593f10574857ee3ff427078b9d4d1f1f7c2f087e70add944dc321dfe45353240f16e33032c46d9ef4a8b961c35170d27e3764c1390baf90db43829129f01cc729ea19854922390152e1145b145a841a42f08468ac0cf0ca9bd6464c3bc4f9c661854bad104862b66c1a718ce0aede5c2e5d63cb193f81cd63482eb3b3fb21b912770d2481dff7b16531ccbbeb59b144a9a422a03cd05196c750f7d184b9393b41b692c3d927dcd09f3146a15c57a7f3667ae497484d24dcc991004c5792b9d9b5940902871750717534a7cc4b01a3825c4f736c45e94c4b741e4c5261247a79b66ee3fe717b4d2c0a17e04cccee1b53eca5767487c0b3f4dfcf04d2ee0b722d14c07f7cd691e5af78c7ab3ce178d17ceb852a3783ef32f560fee466ed85df1aa7be3966a9175c43c67cbcee9f5265ed181fceda515b93c9a2a1f20d16f46e293ff27b140ae2e586b4d0c79c6f11305643bb54b35cb55c7d1efa52561f35325974fe9b41f90ad16063421e0be21eeb6a755a977bc919583dce8aa670a7723d63de8c37acc374f77a2fc677536ee70166662627e0a88711d1ba6b953b35fe7a5a32b053354ed50afeca5d4a0fae5a0ab4ba5920767697ac1a4773a46ea1b0eeab783315680617c1cba56aca5c7d47a46f4d26a5c4fbb78aac19570695ab1d14acca027ee684c80c3540b026c3013c0c3c0c3c0c3c0cbcc6f05bbb6f766649482925d97c18dcfcb1934c492629933bfb3800a5310ed4b8689f10423440107b0c3a0dce0c1600b98239746e30954e4fcd4805102b741e27ecdcde37fb2f805401958394b3d7da54cae2a3063d2e70638c313603377cf4a80208158ca39ba3316c34b94fc964720490291c44c54db379dfc51d668cc1a3470f1e6590f181c9c4c70e1e3a00500410295c2b4a07eb8eedd1d80c2051c8ca74a5cc5ad962d420507063cc868f418788bc204f402ea924a478c6f88a8138019d45c7189a6773409a908eecb06fe2f231060813b01451931bf774b609b20437da8c6c588cea1742038812d84d6944fe63be689e84627db61c2d1d15a4a90c204828dbb2e5e5144c3e8e00d802c811fe1f15fbe3a6bb958dc0b546cbe5d91a72f522e4a93a5d5e53da833489606eec8f11bbb76e31204358542d877ace6de0860ac4b0018810dad055b19cc733c5e434d408460d60a4824a15cdbd5c5e4b357e81a95756f877ec8f1aade10b3d7e864ca9317e7fe34881f38e15e36bf422b1a6ffd982109da3e74559bb3ceb6da6478d5dec293d69873c619557c964a28bdae28f8e9749b7872517c691659df457e7d60d0e6ae0e2f71aa5634eda2a9d7007356eb16d0c1e6dc794ecd67ff0d83199e0c041021d356c91b6fe91b65ab21723119ce121984cc4b0418d5a242a9de5e5c928993a2d5072938c9cee3f3f0f151ba3c62c0e5bbade164e65cebe2cf03cb72e9e641a931fc602a17b3c7ca9132c3825b2654cc55c4aaef10a746f18a1ed841a95546ab8a20afd76396be217dc920b88110119d468450d56e016a35f325bf2532511d45885d93de87dd808253293c964a2830c1fab031c3554814e53bf974c4d053a6fccf8d855ba8e8a369bfc6eac58de674e81cc3e9eab4d7d4cda32453ef264c3c5ad518a4aaf7db490bf557199a00629f224ac3d54772eac82ab318a53c81cf31794bfeb688728d036d1663526f584b264323923e570deb139e89d4c36502314560314baabcae6f020f6e75252e313353c41811a9da8c1891a9b40c74ab3f541d687d7378a0980106a680219cdbb3d5792a16a62438d4c3cf22c47d3f9974c266ba881891a9770bc53d034a1739249b6849ac34895db531a3b5a09f7d44a9397caad9ca48449cb53103af979a893306ccca42c78f7c7cda9210937ac3d956b2ea5468fc41e2ee74ea78b4e2a82c4a1551af652501eb614418d47d470849df3d92597134b562ac151a31196693dd5d0b91d3518b195ee56ece6899b7a11659efcb89a26735c0a0e6a28a218c4acfc884b6fe727e2ad20aba63b836dfe20a28cdfbad96672fd355fe31055b4fffe996fb1cc0d61afb8855d8cae649a42204275434cec94d2494294939abc73f5e8492caf310893a67b8bfb41644a2919d41004f3c9af6d4e3708fd05a2242b897597d1ea99e4510310a85bace65bf9e92cfd21755b1b2fd5eeb4d83aa8e18772085d5efd99d3ffc8851a7dc0447ffcf46c5fa5ad2dd4e0436a2d791e9979af2e6e811a7b68ec920ec24293a3861eb8b47519bb6235f270a78da376162a796d35f0e069ce612e6fb47c1554e30e6bc928234a74b04d593b302a998f86d815374d8d3a98596455f9e84a7d6e490d3ab497a1c182ec9039cf1a73d03df8560c4bd2776e336ac8a1f5f4eea9c2d2a620ac11871a7048e556c967abcca8daa950e30d574c1f1edef14f3754f1b486b531512afe4ea8d1862f2f2c4e56e667bbd460034a8fefc8cea1957f428d35a4e43dc7519557477c2535d4b086107ad9e663418a3270a3e4878e16f818638c0bdc58c18d1b9e031d4da89106fb7395fc5a7e96dd68b82bad832e193b597b83fda135ce508a97930aa1b1992f6f864cd4e7e624e53a67bc0cde8b2e75a9c374ba4c865286bbd29cd54f2f1ac339d8a98a59f4a5ce1c319466da571faf199f9584a15ca9ee2bed6c32f98301192e6baa58b92a86ff0b9ba84b422d7b2f60aa1a336ed26d3b7a17baf5a0544ed936a2732e18c3d857f8c5f7b0f7164c7afb1942d3559ead0543e4f3d3747bb2126721d5a7d964bb95103a8c854dcf66074fca943cd315d0bcd9fdeb638c36262bd8e1f378754eaa8295f35df95d64aea6c2156498b20e2ad765a7601cdfd2b1d7b5ce49a193be1dbf31446e66a3f08cf44e4f11f2df8642a7a19ee92f37064d9f90fd65f3d8a6d244ec047eaf643cc6143ec8a0267ceaa51d3f7ee6f061c2262f5abc98fd3d667209c7f76bce76a22b57025246eef7a7dbd0f1249ce23d2895729ec920249c9ad67ddcc31a47f056ddbb6b7e53d8600d236c9db25ee274297d9e1a4528ec86d8c7184489e7d420c29af28c4a5aa36fd09c1a43406d3f25abd9f4b29c1a42f0aac34c83ca9a73e782d167caaeaae5adf21d309c0bf9d096ee2fca9c65de34c7eb94f785712d26fd6d425fbfbd38e9a4417c2e348dc7f0c2144a8929154dc82fed22cbfa4f426bd852415d203b989d8a9b2c9b4a2e0c5fe1af3ddf3997e1a2d5cca8b1d4cbe87b0b4dc5cee6dbdd9639b650dc92de9882c88a6aa19f9ad3549ed13755b44883c87bfff8a1fbdc0cd09845a773c5bd2c9fc2585e1625197b4f99fdd6e21e0b4408f18f6a9596595814ab3685c924739d7905b6aa59374c9cd5d5aed8846aebe8e81ba7ea567c9f1fdff7532b466605daf268bbd05d422dbc0a9399e565c6d9cd2aa9223d2554050fe22cc63715b766fae9dca047a51615c8783917a335ba59768a3ac9946f4258bd79d414cc895e88f7a836394b9155ce0891dd9c4d94a4307fbdacc3c8dc877014666cdd11daa783aca230880bfd4fa14f68d00905d22f93a57c3ae23d28de9c39554b62e21ef30944584c69967ddb4ec5470a6878028d716236c9eb78325532998cb120a0d10933dbea7e92393394bc043438a18a5aeced161df63ba4b109535ebcee1c3f956bbab10131c8a0a109e3bcf68b0c6a9aab72430c1ebfa307343291caa0c4284d63c964420313a6bada1acf41cde912a928ba5aca74bcd1a1921d399c86255e8d3a72ab4a897daa127a0a4f25e4abc830d1146850e20d322a5eaaf732b30734265155db2725bb948cc1e3020d4914a4cb5b6cded2943312ee97704f6a767244cc020d48687dd9f239757a262d15683c227dea79ecd637e6f709341c717cd3d4f24f9ed5ba1b3f7e07008e40a311daa76adfae14e7c455922303341861ccaffeb973ba84ca59044a7d2c85eb8d1ee2543299f40e1d3f99e0d0c181c9848622d6fd33519aa5f2a64ec9e48c1e3f52402311a7bc7d13f95eea31010d44b0b1caa45ea72d99c54314338ee77f515f1a5fc964a281c98409340cd1659dd2abd11c2c598883dcd494265f317fae64324134089190cb972b6a98ac6cd118449ff63cc798aa25bc134497b77c732a994054322d43b90d88fc4f45794a41c89acb1f4eea3ddc5ecd78b8b6a30437fc70bbed9c5afe9dc9be0f34f8e0e809f598417a7a2b4b26133278f4f8337aa8408c3268ece1db9ce729cd2c84304b2639cee85102317ef0e081021a7a40ce99dfc7d1ec4fbb8e921cce031d3e7840230fec47ef6015d5ae62dc0c1a78c8940e6bd23bc60e2f2a038d3b744aad8e126bdde93476c82a6b94909ec2028d3a2c3a09efd3b39af36e34e8e057f6bfa7e7f4385b8ca63187e7d7332d6643430e04a01107a36ed0306132caecccf1c36bf0c33b40030e5766b05895838ac9f6c76ac0078d375823ba721e95c36eeb8692dacdb539f433966de0ad2e6b5b69aacbb1c128c29255a6d4152bbf86fb4c7e8a15741215773598a72dba564c32db9d065c4c6cce60399b661b0d87f00d9be2d746f9f80c6f0c4a6b5491a16d33fce3e1699551738c29836a62e3a87fff4ea925031e476477aa3a86ad359dce0a2231a0ce4779f8fbfaedc380d21baf62e5dffc9a04c3213a77bd494793ff8564f96d79906ddb9117ca9925acf46ca80cbb80ccadbd7d41b85976b87056f12073165525f32d9ca2232b68673b138b16d229573f88ce55da6259b8932ced17ef9a27c3c2571b16faf3a8ceaa685ce119599f7a37fb75584a70b097918244c30a464f694b65b04c6264caa0518536d777b4f8d3166d4385744ac9fd5e756fcfbc01f31803035330fc87ddedf11c65621e34a450e7a45e2e9ceed065b1018d2814a6e42fe7cbad499e5030970c7b69bffe5d1d0df848349ea026f998a3ac7aaca43ba18f222a73ec943455b609dc6e969efbd7d213138c172e89866bb0589750ccc5ea5911e65f414a30091d234289aa2d65128c7b59327a522b3d24e0b17474cdbf16f90825fdd94c959f5a55d20857b2fb14f9358b2945a8ea4559a5cdd7af8e085dfa3399376d4e2a1c42eae49b9fc7e7a43b434308c58a6922cfb7b27b82d1e5253d575e23535780e108a1a2eb57a3aaff85a3f7b29ccabea743e68be2b7cd5b66ed58aa5430805eb81934dffa9afc8a3e2f1ee5319a3f97a2f7de457b25a3924a1e7643ad0b73ba19f7ddec72b373918aa633ce8d798dbdb87844cf4db5c44e477b0b6447dd69f0b698bbdae212faff2b73a9cef04d0229255a65e2a3031138143d37a9fc1e475b2b2c10798397f5cfcee4289d29480c113720347d0c42cf8869bc7f20d28682be3073e5e95194ce869292415f30d39cc48a226bd0920eb5e13ae557d0cc1051c329ec6afafafc415f74f4f80101913498fd2aa5f816c653b592c92487081aac4e636a539affd2cad0a18319889c012537ec92c54b5621ef40c40ce5b5c86c1fa2d35bcc0c913224662e88c96dbfb1ca870819728f1d45a77c73aae918daca49e8d67b92497a4a261331bc39a31d52dd53e74c89ffd8b135e821120683d60bbd29a9e5a94e0e30a436df7deb55e9b8c543e40b98a5d26395db77f2771f5e403ddf56ccf7a4e4c7c810e9c27f329bb7ea8cb26cc710e1c2e53aefc1aa53b85bd8752cde6465ed1c8f161a159356ed8ca59a56c964c263478e13c94221c35b8f9ffc18fc2da1810816dcb8f67e153f5a92eb15505f395da8e82e79971b8858e18ea254684ad90d6234834715366ddb0bf5b7f73148870815baaf24feb6f3e5d1e929fc9a29f329af5195fc1a884801a5ec53ac39938f28d8d16744663253d2f7a1630cffa1a34407397e780da0b057305b8de58b3c01f9712fe9904b31422758da829bef7d567fbfa409e61ca6f527648b50a908139241ae85ce203bc9bfcf83470f165942a9c3ee7bd0ac39134b26131c64b00b7a87a7c005224a10490257aeddf193100922472811237462e4b897fc58ab9c92c9847798c1811329c2c94a73e88cdf39cc773370e01ad88008117a931f3795799121880821241821c02041c82f427c11d28b105e84ec224417a785978ca22b4445ce452a4ad444e8a7202d2641082eb08bff1fb4069529589c7794c00621b7f052f4d74d1aa3a58a87d8e2a8157731675549ed905aa429f3e8a7a4624a29954c26384268b1e56f133a1ff6b342b3e0af446ca513d7a079592452e43c4cc6fecdca0821b14028a1f5d9925ecdfd86c002a1e386cbc69cafd7fd41c82b0e7b1b6489a5798fe68a43d5f8665e96dfcaf141482b0e3a89d0a053901742ce8a3e6694145d963b5d691527bdb21559395bdc5f157794d31cae63cc79d33f7aac0952a156de24cb932879e1f3200415c6a09b2c99d0bf99dd53a43c779eb1749d11620a466d8338a996c73b5f0a2b45699a111e7d46861421a3484188281c79973183b709bbe4202414e5b0d3997f3933c32ac9c1e3470e07410828ae9c69cbef3c5b5b5c3299dc984c7e8ce0060b6ea4e0860ac4b8803b07da016088904fa0191bfc3b7c45bd2809219ee834e43d89a8e7127627d67427ae93d0d55b991345d3b6bf24e3994cd24d7c5f7b1eef4963a651138f265362b1d34a9b050700061192893dfa299deb4d697aed032198f03f9ad235d78210720937d4a58fb5797a730d84104bfcd9e39f9caad3b0604825123a3d8ea91cbf633c259349074228715291b5f992d3a39225930d844ce2dbcd53db2897be823dd6c7e00b8448c220a6ffa99a964c2693098e4838b6a63e58ca964c261508810406421ed195ecf8232efe2ea9cc10e288edcc3ef35585adb3dc302c48c164c2859046f86123ca543c196ca4643022f53225ada2a9b877f43023852ce2282a5cc7d653595b4b26931d218a2855aa8dde7232c4f79044b4f9269625ccd2051111eadce6f7143a284d9e12420ed185c9c55cb77591412186c0b42ee8db8c33faf192c90404218528c853959567f6d43a383e7023841076a728a3ef3e88c51b3288ffe387c58c1f519a5a2144106cc9b03975e3485b5112420251ae1c4fb17feedd3980c84f7c8f68c5b3ca963f98432561a3e2a993ccfda049d1e4efe1796385fbd0487b95d9b02e3a68ca583272ecc8d183c78fa541081fbecbf535979a3d55740fa8b7e8293ec67ca6480f6d10264f5ecc509fc53c6c5942df69ae43f0b045ed7c6de2fe169483903ba8b9e42de71ccd333e76305b89cddf72b1bc4c1d4ae3b1b6545b979faac70f2384d0a1b0e7ab1a3463d44673a83ab36befc98ef5460e78906fa93f4f88c745082171c862d4986fa3c201f7e85fbac2a57ea794f8d8c18ee0c6193fca2063033b4a70a377e808c1193ddc8c13dcb8718687e0861865ec0848b02308216f28c6dd53fcf63431a3c904c70b42dcc085958bb6a87b8e86b4e1b03d9ab2c93b2d3a27840d8b8897cfa3426853fa92c9e407216be04c7493dccd29e583071142d4709ecb705156a2aa9992c9c47b943199e0e82184a4c11139b1adb8de1e52345c229a3ab4f334d70e3943156b455f8fa98d8a092166b0944eb2c3a88c8c511452063c9ad2ba71f718afe485103298649a87eac7848c41f3287ae7b9a28d6a022b8488610d5f72c4252d7d2574a3c4c77ae0061442c2d0a5d4556123e57dae3142c0d09b77a8fc6994fdc85f50bf2f7a101b1dae9339fa08215e282ce96895da4164dacf483976f0d0e163033e5cc70f1d39caf0e101317eec60033c08e9c299354aa6dad2636b8770217559e9fb71e62feb2d14cf93e617a5f7357d4a0b5bb8a45eaa195ae25716da8a3184aa2f19533243b0a058c585bc3ab7d9b28447c815b0b8ed16911a9afd8243062156503756ace8699bc6c70dd84b42aa808fa6deeca49f2fff92c9c44708154c152ea769e852fb9e92c96432c13199fcf0c1a3c4c70f1f6e460726133242a650a6c86fb4ae51e7315240abf826a5c252329990e13f3e3099e8088902527653ff8fac6432b981bb08c4d0d143052f0881c279aa4f2b5bb96fcc214f385ae7b8def18c9d2b49c71863ecefd0f1801027989599db640e6a94e56510d28483cea592d0696ccf2a25397cac8f0bb820840928253c357d5fa9dd92872ca10ecaba2da9494bfa944294808a8e51ea62e8e4a54ec2415bbbaebc7a5f64780a4290906ceb6cb2272a39022abc986a66935fc1434188116c53d9538c59ff61c6088ae07bfa65ec5851bd5e05214450c43778cc3f2e7e251560400362604003edbc65a4e00c0f41094286c009ddf974ef6a5bcc870821edde179d371d0c94bdbd9cba55b29c8171a5305b1fcdcbab6274c023032d00f9855f41ac74bdee260d2a994cda3900e28b2a7c8ebed04925397af0c8a183ed914304625800a4179bdc68f1993c97e5205ee4514e9e4af1cd73a977e155bfaa66d2204ec6ba3054f7b4b33f4337978b944a31e64a62643b2f03c1459e73484f8d3e6266b945725d3565badbb5b628548379a6a0d91f637883d4a2f554cdf2b7ccc93f20b448e8b0a3ff3aeb9fc86751bee0793abb78ceac3f00220b3d68d43c22f6ff4967b130ea95c60cfab3f6e941606120afc84dab68d2f949c9a8611057983d2fec9ef814e99f921c397280b4c20d99354e796bbc1f95e028f1b11ed000082b98d39a645e39536be255d8a57a63ac46cddd265598ea974b2fea7a4c4a9054203b76ffefa4a7f88c0a4cf957a6fbf49c82e88c1e3fcee8a1020a809c828d6a61ab3f9de5b44de1d86ff0d49229dd924a813c913fbda9f3e5bca44877dc53ff9cd72acb519cbb4f6a50361f63d296e4e8f1a38cc9c40b8828ccdb9f2ee6188414bfd40024147edd5ffaae5a6c4a550c4040810625affaafab1764ec13560c1e375b2ccb18e32593098e19e088000462e001104f58274c00c209904d80688202209900c14429a7d02237a9df94472520974056fa887a89cb5917c412209500a104c8244024e16c8ef5d1593e76b5090124126a4e5659a96267abd620c19e5e72739dc52816fc306304400079044ae91db5d8d411c7c760d9466aa777868303382e20c60f3346b0830325208df034c5502923a367b62593498230c2d6ec1f5d415e68f04a2613ee91e38c1d2b06c822aab4ce972c732ab19091e38c1d9bc3c74e2638343099f8e891e3878fe51d3ae0d1130051049a6137796e130bca94885446dbb00e9aa4fc0882886d477456bd6d93db6c00720854387d318f29356b4a86283bbda497d21836c61a8014e2d86df9b729594a0dee0021c4176a2fd6bdae15373a4006e19b52193e688f17f3f92082a8d46fcb3d7b0c6ab4330009845951c63fa8f83fb94100f155c6182be740fe6088b0ce3149f151af1740fcb0e952a24ed59757aaba00d287cbdf7ff43ce78c376b01840fc89469ae1bd32ba5f41eaa94e9bcfe92da8bfc04207a48052dfbf2731372f62880e4a15171e4cf68535f490d05103ca493284f4a83480d15bda1023176e04d068f1e1ce003c81d7a51c183bed870976307c335a9f9789f397d580784d8f71aab940b53a28341a58e55599b848eef1cba5042ee8cdc6da8ac1cf6cb192c4dd53814ffff5e29c8b68e0d1c1a753e17ad5379293300f28684d4f5cdd7bddfe2bb21139e831653a54ac678a34c0081361c64ab65f25223458a206c005983b1445a0e753109b714881ade5c5f4a8ca5319935dd3b99e0c071630e2069306c12fa737a9325652ce11c3b746c8fce018286e405cd16346be72ced63326101c819ca7bc23e9ed8d6ddd808c4006206cdc2a54ff33b6acf8f0004c428903290c1bd0eaba5c566458b627400640c669a9daa4a9d4c8d5f3299e0a8818e17830c768137c0c736400c007801440ce776c7b2d4e83907240c8d3619db97e3c8160719382e208618ec2c984cc4d0010818b8aeb08a5d2a08a54f2593090e7c32c181830d8cb13aca208305205f00f102bba143b3faeef43f902efc513c4d3e43a9942203840b2e00d9420b40b4e05a6727d5fa1f8264e15ad14133554a6b9b2d994c9c0c76010540b0802555a33cd69492f39951c664f281b5c9bb941e27ceb5dab9dc9da7a9b289ef2e53a8d49b0d5369220feda46f7496be2a6522a12245896bd4d431e302124cec7749a8e6e89a64ed97307d5afb5bfc6dda6c8957b3af6e3419b55d56a2cf4eae5762a484dd497eb48990e174ce243eb7aea03b9734cf8d248cffcc219792544f6324d26bf9fea3462b7d4e09092432d9f762a1e7f96a798429dd99e8141d72f34606248e703645c598d2933cf19ca4116bcc131d3af85aa59c84116758f64c57418ae5248b40e4dae2673f8ece971f902862b978ae317509bbe027e2d197bde53306d97c932022add6380fa61f358c8730ffd35c3a0d1917641b9018a2961ffb929149a6a497204921ee78fd24baaeece2c4000921ce41d8e9776d4f622c8328c3a6ca6866950f99441097903fba53eef4511719900402adb418c5c406937229020920dc4d262f55fa7fe0d34a28d5ee9aaa743f9ca6314b85d48b57a62490f4e1db5827a4fc077379f950583f656aee39886f6fe08800047e90ecc1cad38dbd949f7cc53248f480bad2f9b64499cea548f280de51b16c53b0ccd675f8e061023c6072336ce385bacff5076ae024984c7cd480e40e7bec6bcc2d75a5b3476287830ecdbe99fc642e35491d4a41ccf39eb26480840e799de671efb42b95239903163be977abbc9df3e2011239a44a9316ad41545e59247148f6e856954bff1b7238947aeb49a89f8fd992e40dc8db8d731937cb4b4be2069236e87ac1dafd3c4f6f0a091b0adaff6250a6245903ab9699626f6f383512246a50ff635f84fc6940eacdb7f59a4ecb3c1a5635d7aedc9c41d3617429f7b06d973683793e63caf561d4f46570934a35d7c9af2c46c970a95376a741c78e7f0c6ba798f66df6d6f4148316aed3e64e6be614864557a89cede32de90a18acaa3c62bcaf763c450a922f3c263746cb197a3f733148bc60cf86e760194cf8c95d40d39dbe687c6cca1e122e70eafe4ce9094bea4f922d70bbf32142ad5cf4245a284333fc484f172b844c409285f73e7f3664ce7aca1b010916b6285f41e90dcbe97f33de032457b82b7486cc9d3def7f0748ace075e8cd1fe167d73a0626930b905441133732bf7ff2b2b6944c266820a1425a3694d851569e57fc02c914b67c2e9fed1d4ca53e9948414fd3b65f29550a728a02491438d3348b79eaf682aa643281020914489e40e2049226a032d2727636954aeacd518c134898c068898bce69df73b64b72dcc081c3049389009040b204ce3659d8588fcbb49028e14b1faaad979024217997955caff25fb6e4c001091278116247c6d58ef4ec701f47605594c64cb967aa744628e55d854cdb2d974d2445e8f469e7344bb3f9f815488850c550a15a2bbca7cd6e03ef4132845263c765ee0e8f1f397efc0e122120b3870f7af7d37bf62593c919399e478eceb1831c3e749431120c4b3df7eb33336614954c2623c050455eaa5c47ebf94719cebc397efc8ec904c70d74e3c7936032f9f13b029085915f1c7bd9a32d36466ede179c1072b3c9ca8df4c251364a2f9ccefd55467871feca184dc594645b5dc2c82ed8b1d41c15d37a5456176c94d3919a7f6529662417a8fcc9f3d757c38c7a0417a6207437c753a7835019b9852bda32480d172d6f6ec416058febf319c7c26276a416d5470d6beae132bc4c0b7cdc5216d3e89ec49e4595af55d2744eb9884b261359946141bb9fd2df3a6e2cd0794aa7eb6879b4132c32a1f2c60c0d333aee2bd04eb1e9a4b8aea87eb37ed835ff50d2569c3eeca5ba8a8a0f1f2bcefbd596dd3f8c8db98a4f5de632aca5a4c254c597c94f08f72ad9591a4905a25d3ea87e08159bd09ee526e4a45c780ad7fd5b637889909b3145f93e7dbc10524e4b2bc5551eb3b97b8a0b23a4f87b9479c5e92695fe28f891973de998ad44258922a19e729c0fd2f2e91c8a4ac713b39be35ab61e14e88da2ef5aa64f68fa1ed3830e79a2e8aa26435ebe2075ed841e3be6a5104a27f5971375fb9c27a57414194b1646366174d7a06c5fd544d9d1936fed89893ed0309289675c2ddcd66e4cdd6382cb5179e9a3d4afba6718b9c4a34fcb8450fe3bb78d61c4128e558dfe9ce8ae185602535fd969f72fc5ac5202d9cefe4945cf24f4cbb6af26d4786c47129532713f1117cb5b1b89845ddf3942e63891bdc43002896288d3f9b7abd0617ac4fda744c61cfa6465ed084eae4a579be8dccb35e294c2a65ca562be67cb8835bb4dc90f0bd22ec6d10116dc2821b8612148818f91ae30b2084b7b78d89f2865d155c4ffa782126d7ea2d5e728632411b6a54c31b74dc964528a9de121b8613d7c8c64060f0d80610411699dd694b4c867d9fa108c9039ef65e9babc0b12460c6110da52123225470ac1f52661fa5ec7b3ee431821c49ee729cefc07839141a4dfd3ee6d774a460471723f5199d23db4d6238130f585d7ec4b49cff32e8c00c2ab6a53d34cd70e47fe50ede7a0561d62e4b77218f183bb692c942eb7d49b9361a40fbd69cbb4a4a6bae9b261840f57ab8f65ee585b49f31186913d98315d3fbe962e18d183a5de46cf7c0e9a92380f656716a1e2a296c18287fe2a57ccb1c3ec5c66e40e57d52519539476e570c40e6578c764a6b2648cd481c7eff84006322081113a3c60640e3974947181068cc84147191770dec16301237160c0081c7c9ce13770c0c81b749471811694c001236ed8c143477b0d6ab02a90c0481b7cb0a101236b48c0881a72604001236928c0081a103072861b308f31920146cc10c648190e3042061d652060640ce7973991d12f7b2777440ce6781b3c738fee8efa4818cc9e323736a54bf9c944c708188a6aa2649edb58679a92c9a4c70f1f1f18f942caf2b5a268ddfb908360c40b235de8847a4c7aa3de4ac985e3f378b8cc2463934e8f1f3e46b630a2854797ac6b0a665983a646b260f8543a58ba1f0b2357e85c3ba90d16ac46bd0580218c58e14ead4a259bbe376e3d46aae0e7b64edd987ae9590c46a870c7e86dfe1c4a6aa72353189102e71ddff12a7f3e75b03d72b87f8e1f2351407ef81c4746b3db27131c3c46a0d069a574eaf3925dc7234f30bc87cb9b93c60b234ed82a7dfed41eeac24813fef1dc943ea6a7cb1f26943f76bf98fe249a295a185942d982d84dcb95124e1ea71af62b6f1a1c4982e1bd52d614a6299e138511249cfc3ec85998a94ef99123f4995bf235bacbb33f62844de5506e157450f26423454825910b7e193f77473d3c3042044c6fd4d1a92e6aaca686912190604408150c1301c6d1bf538aef771b32480922bf2888bbeff82af23f2510f145b71acddaf32593a623d20b3b379958e66f54096e14096ed4086e94086e54082000802988f0c224353ba84f324e10d9053adc8739e92906d1902efecaabcf9dd1e6578182482ed4e8feeed192e65a730822b828d8e98598534b6e718d5016e567f4cdb6b640b505e1f6d9b52ea35ab8f2a534ef4ae9a8165af89fbbf2c6f499abda2cb8eb4c49e80f1b6f9464817fd07983573259322616f9a954a75fc7c2680d2cb68a3f15dbf3678cf71588f666f865ca152971efaed7165443a715f6074d2a05e56145ead1b45ab3a774d689acc2d2b4417574261dad1151c5b39acce26b67fb97525166aadfe09f54d6b2518112e2824c2737e55a8a0491532447cad625f74ab1250a444c8197d84fcda164ca0f7f40a414a758bed9e3cdc63cdd0f4448e17f1679a272faa91c1f888ca24de675162df7057f45f1caf9a9a045bf788966b44828eea44b752bcc49b17b8842041487adc7fc3986cc08d50ff73109914fd81bd654b2f6924d9b3199e098818827787977aff4a6f48b98430437601e637482ff115f9ff7c37d7239715ad99c2a63c1e7c54d78162c7bc6a0f9730c1b414413afa92ecd1d4384ea70c964e208914c70fae2fe78c6a5182182895374d0252a84c825fe53efa6bf644be89674ec5c34a70a912b915b5c9c5f47b9ca18ab01114a2c9a4d3485890eb26ac90a76946032214387c824f437afcefdd1f3fa891091846b3fe23a5787052291285737972c91c9b3572cb81182f61f3d78a4a00c33da359023471966b4f7124420c1e6e64f551d3473e94a261332780738441e9109fbf6bc9b7d1f722a8838227516ddcd3ac5271bf1999c76abdb6c779008237a0fa7928d664ba7b5254416b15fa612ee71716d9e2210752aec687dd7574dc9648282c58448220cbbb9dee3561493084410c1a68b97b3bc41639a03217288465e946a0da2be52b33e46067ef83043032b1031441d7fea5455668fd92f2052882ceb45e44bef8d9008213435426fbafc204e333a673515b6e2cf82486885e5ffdc6b96a7402c23baf3fc2eb7bc6c061140607931364be5fee05d4a997312327df8183f2464d2141d73dde64be9c331f888d2b9b53ead26c2872d8a5aa51c5bacd2f505913d14748bf4994b5a53c844f4700e1e9e46a4a6761c6de086066e64e006066e5c00023210c943194be9f014e4845e050f55294db9ccff62787587b3c7fe5c9e7b9d2995811b2e10b1835916af2d4ccb5f28eb9065bdeb70e2820731d3410d39163c63d8029139f8b16157342da5bd530ec6528be9d51287f33d5801046042e23d9a25cd1be4cd4d8025644a747c9886552006019480ce8e9ef4ac2606008e40802468ea223fc535df11234133191732ddc2c8f847482c283d577f9b611b21293232b7e7114a5f5d04b467fc65b5a4c3724c04f5b45efaaf558a780825f96ae983502280105479133ae5bc49568382b1a7b590bfffa16c43c0b0cbb327fbd3f905625ad3da070fca32bee0fff26edfbfe8b05c2f0e4f59b784751aad8bf9b143c70a7a2c0b7ed8e0857f9da4a6a8cd203bc6870e11f419367681011bbac044cc9a5219345a2eb0918bbe33748dd0972e5da96432f1b12530b0818b6a335d8aca889e76f0d061e31624b0618b16d8a8453a5bf796688dabc70836686106a1271bb3704fa6dc7de88e5dbd1936646138211edbaeb2db52c4d86106156cc4e22446c9bb8fdde80f94f1811b3ee260031677a65ccc26e4848bd28dfdb11a80828d573c27a6a388fb8ffd8f0d57a047dec91c363cc7a264f8d8168871868d569c77ae524cf14b7af31b0068820d561c6eae63f33a8bed37fa035fc6076ef4077c94f101316caca2ec69e3261df696bf5245256ba5e2b6060043b0910a93ca4bf6a37f9dd36d0315cbd9de8b69a7b845fd636958364ca1f8a6d3eb562693946d94c296ed5361ae3d07f593e292ff79418850a5752bb3310a34a5a9d50aaa9228530f1ba2e86c542e2da53e88d78422ad6bdea6f31b984cb687e7b0018a72c770d9847f6cd5fc27d2ccc984f89d3dc1cecb46f13077e22c42c7cb534966df9013469396d39dbbdf4737f1c8978cff5b6e5f4e138ddc932545ae583065c2bad161d15218a5b49838efa397ed06d5d2994be0413c57a3a938162a96b04f6b43f475a5fa4c06362ae18ab7e6f4415634f529a1b8aeec8e7eac74fb243c6d2aa51836fd794912be65d9d0312d853b12a9c811667b723da83424b66031da095d72b9931e71a98f4c7b237544b11763739a8d38df86e652f925c307310251e9a9e694a7b5205c84a7ba196fe37e3ca98835eb6dc59852b28a398940f54443786ed6be0d22960f3a8e66da8cfa87b83a464bd96c79810d4314174b8c89d7baffa0920dd8288433e22d64d448cda1ed7514f8e0a183043608613606d1c6a84fa1bed910c4e123322a69d0719bd5808d40b0a1928ea5cbd3887e0161d6b7e8d47919a5417f402937fd92419b4c5dfa61f3ce553d4ab4095de9c39b634c7c521b2f89c6873a7cd8581dd71e4c60430f9687b281071b77e05386a89d67cd49bdb261071b75b8467f35892fb52e371dbe1bf51eb6bb921c649881430562fcd0b143c70e332613329c0c11d898836e6aff3c5ef4b36836e45092bd1984ac32959ff7818d38a4f47fd82037ba7683e0c08dc5185ee3c8eee60c1b6f306d2e1963502959e7ea8692f09599d793a12cd361a30dc9c7df3acb14ec83cc86949df686d0cc61e2b486e5620a3279e513b3bb1a4e3ae9943229d1fa1aa5a1353369d9344c881665c0061a52f6baa1d38a26cbe2db384322fe6eff3c58129797d830031f347b3de95aa7169521a9174dc5283799b332b741867b4e77e3a9781efa7b828d3164223e86f094ffae54312ca7b32b93b6b0f8391b61d07fddc45db586ca1d26d8008316cae2648a9ac52f85830a36bec0feddc92bfdbd6018f19956fab454b80b77ac7a8aa88ad0a373e1916a19333cbe0584b693a6f3a273b65b0b6d36251f54b8b3d068fc58ba8356535163e1cc54ca5e6c669488afc0295577f5a7640a9764854d8b3eaf7ca563e55b85d2594e5b6fdefedf52e178427d8de89884683b8564f4e8cfed17b2a22a852b88853cad60ba3419857458873e19d352394281db330b253547e58c4f60b3c655a78cfa5ca2133adbd00fcf92a6fdd304f746a74d1d639e750f13ce31255596bd379e7b9690da1862f4cc4a504797a96aded1a34d429ac547de266db931870446ccc84f96d277f0086cec690c7d319a4a1a23ec1dfb6643d7c99c16e1207b725473d0f3b210210dde97213578de3c84d386d73d7791370d11368480ea6c6ebd49df287e30b44bfaf45cc0b85fe3e554a239267f812ebd24df93a57ae57da195dc18e244c6a5bcf782d19515b3f847cf20e545594f9a2e9564f464b70bc3d35fbb29cf73d9a28b9308ad7a295c2e45264618b9e073f8d5b1168de2322e9a8f4de965bc5be8f62673e7f253c14a5b94ccdb2cd9f977b04f2dcad952fa069132df155a384a05b5dd41db52c66671d68b16579bc2a57405210c59bc5fdd417f2625e6a658dcab5b9dde63d48fd70761c0e2a8395c7670b1f2180ee31587d1b15c736d25396a1ec27045b2992cecc357ca9d1e63239078ce08228c56f8e1e71684ca17322e2593c919af03078e1b3890193b020060210c5698b249b9536552647b4508631561a8c2609dc5fa4ca94718a9684496d4fbb04198c91c210c546cd5ff41e7dc9e820f1d17bcc325951f254218a6287e8c753c1bd77feb8c304a8112ae497333880a59da4118a438aeefaac64e32ef6d7e84310a3798d8d62caf1c84a2e8746ed6b72d9ccc7c28ccddfba53d6746eca04809e91df32cade9af3f516c07f11664b2b35cf2c4b3994b56676eac0875a2e03f3ac88d6b78fb38918f96c89cd6648efb9bf073c9fcac8f6b22ffecb5a5b4f7fec864029dfebb32ca7277a830d1a9cd6b6ed2cd1bfd25125e49e6f4fc2527f39668beaa649658ff66bd1296291d3b9d946a0a264a381bcf5b93c7ed53a349ec41295d27d4a62c9e4aa274da3e6a465124c2804442d7ca84caa0dee57cc47daaa208ed0ea163479c72f97fe73da54c648d6094c696d159b9d4c80864bb767e25357e23b3886aa4497f0d253cdd0b4311e69326ec73e7cba72e8c4478db1e3f864a22e2f5ee767fcf9fe339611c02af9e9955db0db1c66c9d2e2d639afd8538bc9a7851d266344b842849ab20da2df39af407e19ae5f9ba0ef6716241ec599b9e54e77be30e043ad4556e93413f591e10ce56cce199de449af00f5c32cb59d3c6a0b65e3f7cbaa46e90699977ea437d49ffbbaac5c5cd07848eefdba2abd44a7b489eec296d32661aa1d483392cfefe5cede58f79f8e44286d072b94e773c7041ca062b7d17e1df1d2c19964cdda5f758253b98729dca675da943a6b749ece851523344873cfb5d87092f3972eb411873d0626ccabdfd5ea9cb010f2af4474da593a61d87be4f53fa4c150e7d501f3a5e45a7e4bfc1ca4faf322346e512b9e1b4e9156e74b68505b54199db8f1ea6e6c64b3674d2bed6dac63554f9848749f520a3786a2849b90c63da843c0ba74191cdb20e974283952ddf9ad06e42e6e60c7e5a3399dba33eacc50c95454bd7908d23545e862da52bd9cb0aaac3b68430c8607fc7a870315d8ada11c218c329e4ba7827fddcdfc4b06591623a277a34140657bc84d0290c06349aeeb7b20ad5fc173a1d5b74544d31c5507a818fbf499305d19643de05846be8a99cec35970b9ed4f049df07f3bd378c2d5842269d4d9e5f2ca1d642f3ee23ae2bccbd5a5928b6cf5e6f546eb1140bcd95a88a13a29485770537c9fb20add47a2e8b150c26c4a227fdd329945528572c295931a6c26b62348e7ecee9933885b4e8f4244da6d32f2229bcbaf932a629bf891885c3648c7a797a9239070a69f774c9727d27d3992714e22a339bae5015649c5052fa92c78ca13fa84a13b493f315dfb8a6824c4889d9491f9d4be9c7cee8f1630989890fa3b9292568d2ff7ee74d53874a843092e0980aabcca552fcec95fca8c10e1781370ff63090e0e94eea9fd463289d3e02276322b36bd8da5ed5108611cadc4184f8cffc792b67fcd091238c22987a63a6858a1c3f1d0a6110419b8be623da76b2a3610ca1be932593a709f19e4b269333c628a38c0b6c8f1f3bd840184230a7eb0c2afbddfaf8c1c0f2ed438752dbcb6c490e1e3f26131c3c54d004126090fc02fd18324b660cf3415982c3c7308347490a269302802490f8c2d219d53479aec9ac7b7194d1202ba6c50a0ba6e0860ac4984c8240c20bf5644b66aded0e24bbe062d62474edc2b8757420d1059f377fe7cdbb1695ca801a487241820b925b90d8a2925edd22734c02492ddc2045cf2a6ab85259125a54fa3e0793a92acb68486651b6e4fb1b3cab43285d8144168767d2b2a6b652d28b2416a5d41c54a8e57887193d7ea480041689e95f26db205ee2ea81e4157cbebafacf9549b6efbcc30b24aef8a2c70eaf6166abd21eb8d1811b1cb891485ae175dce5944dce8a47898fb05c597e5e5e053a2591cf3de3226ba48a5483b8083126bee74cc549c7d3391bf52c981015ba05a59783ee4ee1e7d23d23e63bee3705eb152ca86fef4dd9530a7452b173a5dc8a262fa448e9d471ab3a2a373e8adcee54cce6abb628cef10a5f79ba23350b056af2ccf346b9fce1074529a3974df3b7294ffac4a14229f931ea553e7a22195ad36cc985abdf09365356398d73a844b1020249200c0543814018000083657e04e31208003048248f0543f1a8685bd6071400013932265256302a2c1a12121a8905e25028180e8742a130180c0a85028230482c0e27f12aeb007e4a08e33f599a4fa8c3f4d41121a18e95d67afce92025465da9b195b2bbcd4a2fde18c9d6e914c4de046cd400b48e493fd02508a20e4722f38bf616933e61516823d37f3e640fa53a8292679efae37339111179275c16d7b43af91c431c6993e4cc41446ae35606062328e63e748e5a7eab05d74ca80a2900ec1d0c72f43a22d1b34a3a6e483bb711787a3350223902ec6447a41adb0e68c8e2e6c8b9696f34115df9bf4795b2884e3e5577795a180e8ece21dec279ae1788f7c267d65f616fd46931d51f04123a5a0222f548edacd728bed59ebea3f782ad6c1b1b0e4ac375a15ec5be0adf5031e3883affdc3d8145d06c1aea80392ae8f3f429ed8ce2a703ceefdaf27ee40fe35cdaf66d58815aafc2ff9c6b7ce1589c3f19ca1116940bae157e2c30251fc30b7077f3504d173a8f8431a8858027ac4cd833ac1ff68f29fb16cd5c8417de4ad5da7df50ef0c407e015054bb068b3d242864352e3591f2686f9a88dc79c04fc31555a0d9d070aa1ab68bd8fb6a1ed374a47b5f38c2bac48a46d6c8737e237475295155b191d798ea9b43a16b4f124d2a83647de467ae2f7f9b93049d1e3834e4a0a21d6f84acc7896115c2fc6c668af6083d94b0cb2c25409cdd43de301f1797537134eecf078d844f692d8f8a3cc7ec1e0a18277938c2568a4ad08f5ea889838ec3ed635aabef50e603532fb2c74dc244f7013b962efe5a6003cd1c7b670799e6155c7680de1572e344bd029f1102497c9539f22239d21a5d910b7849955f915210f97bcd0139ae0d2c0a3c1b151d0efe763176814cd5594567490f632f95b664dd12bb156c95d7a5a0a632397005e8e216b12e8c5d085a80e9bf83ea90a950acaad29966f41f15fab332679159213ee996155cae892b7aaa4cdb61705f3fd847597836a72e9b8787d942c88227b694bc2be0b2d5f2c2217eab5828e8fa81ceb9c494f439565d816b7fb9562e5dfc02cb1e7a41adca418c66e193a3fa94f9bece53f5767c505c8310a2cd53c07372b1658fd0f85405d27b5be73be15731e10a8fbd26920e8d7fea5425d10410b41b705b1501531cf2bbe17e123cce43da6bb2a8ba4b5f6cae4257353fc0c786e6c5afae3eab36a547fe5e37b26a6d0da8aa655bc9a6685592cbad42f5cc92a1a6d43c543d899eb224dabb94e6480ee0833aa5812549d7ed78b14f1d23074186432fe586f4e3b422481e72688a228927ed8aff6ba16b096ffbbda8842168da38b5f0455699e7dc71abb6d65fdc1696421d972bd316dda2e2559cef4716db7c06cd98bae004e6b6dd3a1ad9436b3b5f1be8d9eb644b4edd356599bc4b7f9d3e6823644dafad7a6e5659bd2b411b035b8d9fd2d1a6c232b6e976c75bc490c9b7db8355d96875681338db208dc889a140affc0211ee70d440b6ab92d8297ad0bfb2adfe40f672e303acda61a5023f7a325eba77fefca1615639530bdaa14ba740555ee8adfeeb154ef4e9720c5c25265c8d574fedf309d6dd6a202909825a268c16dcd911a82772c10b76dbf0b8181b108d43da4578723fb3369869528a7eef968e8166c2c5d29a474890dcd8a3fd9aea2cb256ba02855346ba125320034e267475eeb5e6ab8ca11bbde1a0d920439e58822f48c0e838add65c39010f773832c9980a6fe149410fdc430e25226c677e508080d3c12b9ba2c0230a9a1e23c467e2f5ae292fbbb34d1568ee86c3896528790cc3593aca0eecc8be7cbe371b31402202c5425e8a12f50323278ed906bed76066c64d9f884c74b0a6e1161951360ff560047e48ef8db2861234c2d8309949c6bb3d5bda5bc81f65d40e2e6db8f00d708eeb70c2aba68dc6211149751b4b376b96b849f666f0f12a1925e71dfb48503d70e0e3a1c611870e7b82f65c19919a3fef2ed0053042d981ae21acd7d96841c84ee8569a66e97573fd95f3fdcfe6eadb4c5bd8e5fce374c565c1d7c33a255aa5780d42b8c6154a62eb05598d382bb7315b7af4af7057f58c6e5b474c255e2f06565743159158f1c6b272693504763ee206cc6d1cc9698d97a83cd7b9861b536815c7591cddc843324adf37be4f77a1ec1d753b07d830d87e044d8a17f90496beb1707e94debeb22186759ece5fdc8d964624ce7539282efde6c250b6fd7d312caf7888a8b0990cd77eba701f017bd4889be4b7ff33251d0adcc4f53724a575ef42cd1240e090f196dd6b436a37d41afd10babfebc813d4e90c66a6ca3d2e87c1abf01f631c143bacfb79d7d8de668b3a0bd682580af0c5ecc0bbb6c906728fdf488c6c72047b841dce4b80bafa1dc2a71c0c75b2d45c7333e9b647fdfb559aa2415e704680e6a8c2754eb2e3b81bc389f60dbcfff189219d18696606b99a6fb30d5c4d9063b76f5ceb2631b3102d96c0734a2cd96046dad0cffd03028566283592c2a8aa1b0b4680d683f3bea50ace52bf60251ecd02254c5e7f2851be8f2ac11ec508080858e7217e33574265da1873d30dcf3ef2405746984026a2b22a15a7022831c8bbaf01dc668855fae48ab9239afbf3e2988df6b9fa9cc71cf30a0b4938bed23d77fec470d26ab6e8d6fe9540f74330434ddb331476b5601f9e53259f83e29441c552e908b1c4c5c6c0884fec102cad870ebae62e6c7ebf2c2299b89b256dad8949c0f0044b30ea7fdca13dab4857f34d60e7ab028be64142d8db2850b756a9edd2f8b5524a0704bbfa5865ae412ad80fef4886b12f564320c01ad99a0c8df3ea0979dfa300ba66523dcc60267c727aa0a60c673ac81d9340b23bca3be141e94b7fcd41572984c923814a3a84f7fe7b00681babaec7c123a3e3191d8225057ea69c969055ea918089ec75b04d6ddb7bf30afed065543865b8aadd5a2c50572c9ccfd737161a2b559605dbfd23572655d6d48bd81e7c6a40f993a30f69c0e21c9980f0b55fc294805941568f1d40cb2cc3e447570875f7b56171bffecf08c72e33601aa796cea1c2ec32ec7a1407f4adc82544ed6096c168da2c5a0739157b12801ba54d464c565fb87066036de2af2c6463c2def09544c351abfcf0ad63dead5e486f3c01e6664691eb7f6671d44d977fe15d2a173cc46d5300b3da6288e83bf87d382b196fe2af4a412f005c2e7d038ca06582ae5f8059961013052b1e8e8a7f3eb4f1980afa1ec0cdd4ca99a0ee7ddb87ecd21fc6f675c81ccac94790ce3972a81f601ff5ecab2619371c7f264a47862cb75b6ca7a5582e496382eef6da9a0972f02236102681c8493a45b0678bd346a024b8e89cd161184e945d39c2e4d67ce8b3237d1044052b3b3957d2e1f99a81f686cc7daed4713f83e34b3a5d66f2a943f689086fdbd65983429cd00de003b8754b2750e40fa45497bba9bab5a4587a0b4e630dd3f3968ab285712742681660864c6543ae148da4132939f5b30c70352defb88303f529e5af0eb58e92db774662917d7a0f1741752d29d9a41caeb53ba49137fbadfd23496e9efa4e88bf05ae7f88372e76a51cf7f702393de2cd29754027b31adfbbab56a292d53079710ce9ed24e9d9ec6c5b6ebdf1dfc32c4e8dddaac3ddd9813add7371f44560686d7f9594b835e46f46e3e4f92d246849b943da4f8adf06736646f9aa7f8a84e9d4d24c5b46d7e7494143fc461a64fdd518445b32d7d5ed93b6100f65baad03854bd2070cd697d495952676b746df18b85a17178ef18a27e1096def28f97844921186b95fe962e08f4f530efb426dfff43c5e6eddaff94535277c8a85b400348244c0256abdfc592aae27225f42ab25254fddb795496f59b0bb171acea57e079f6440536fa2963eda203e41c63eae0b67affb2cf99849988a0d273ae5f83c8af1ab453f6879f59d66b81d0946bf2eb43387738ffb57803d284f60e1fd8ab5650371b14439e8bfcf5d2940e335260687e6aa1c0e237a30c940d29225795fdb47e0ebaaf8f3dd18ff5fdccd081be8eb380cf186e7be0fd387f9156d1af139d65ebc717dd33c3f583b09b8273871774989123ea99128db5a8620186b407d2b80e80c44fac0b9b2bf47ef84f3225ba9690521f327b7b64c45106bc9e5c5cc01c8c1a006be13b3c0b39e9a09eadaf7f1f5450ca2324a145a48ccd94a7a7557d37d9bc392f6fa51471b6798030624917cdb4412548d249aa83252d036e2b980b3324a40961db783c8b86fa5578795b10a9532eeae0582dc1192a32c621d34e22f76a21bf07308698809e8dab6401b811da14e0e768e4e4b43b4b4b132c16308d8c8adfd7c6b9abb4a700e2f4b8fa00d07c77255620b5287e9e145867445768a142f6047f7e5cad08fd15c6e4277356a7b5efa4885957fe032958d1ee0a4454d45f15a1a9f776d87a54c0ffbf9a82bf8a3ff46f5f9ffa0fce857959a47288f8157ab89a3eb83f4440f9bf77eb09384cf3d3f2c7bf6d2802352e3b17505f0b99ccb41cf04fca9c5f29c5a1c41192add4232de581e506cafce391242f64ec0711756c94a9878cbfbf5eec84ee8759068d27f6c12504809d3e5e1e5969a99e94b31254d1fcfe9d7e13fe76337eec6d54be18181a528279ae48eec5b641a24b1941a7433868dbcb782c97cea203035480edd297a6a9fd8a4288afd15d14b2eaacb2da939907b390183a02fc6e99178880b753b58c28f69de57cdf6c73512c816e2477b2e96d6352f16a05461e3dca2ccaaed51e9141c52b925040ac80d77f4d88fb9f0a121cb715f4fb5dd90b305cd70915b3c1df03286f67919201a2f64f98bfaf5a9e37079f0ad207c6151c4381f4bcaa44b6d7f951cc268ace1c2231a2ef1754d18b8a6e224c0e74cb88d9694e3ac4f4c901f20eb673b7228271d76fea17ae83fd844250d4460a69076e1c0768b814f72716040221567bf076bdcb40c464a88ec5d7beb29aaef17024b0d09bca8ba71ab477e19913425c423134fda4132f94b6b1d032911f320e190657eec9fcb9581c8ecf5bb768b13865907088d4e73efd76958c490ed1006cf74449e0a71ca02222dcee16bebddb05776e76dcbc6e7017d16926184d5897809b9e351672a1193c782e47d0907f1e08dcbedb5ad9db675c4a9ff28af21b19eb12bc706b9ac5fb70e96c95199fadd04faced9f76859c72e8accf737f34f02fded8e889e9abaafb59ca412b6fabc7b8500c08afaed290ba45c3b1c8a52ef5d1460aed75f356480b25fac534019588cf083bd54c1f244af19691afef0edc961886a53565270903249114b7ebc1e85727764b744768c24a85b954802eebd6016d91cebbb0bf702fa2e9d104661c3e0491da0134c02763646ab6a3f8103cba12409f11f6c9886e8511535e3673ac00592482c4f48bfc5ada4c14073c267392f561daa20998f0a317b10bbf09054bfdb54cd4ed67917c39e2d4253869af5a72a95aa17395761c034c47e60a60494f032ebb794c36776953081047d07b68f68f2698034680a5edf9223932ba72fbbada88e9a6ed8016be136d79bf56810e1cb166af4c6f6b39cc38e68de7f88f190c1a6b569af1a8bda8187d6f8e2c5ff30fd460b464318bb2b3e583936f29e364bd072b5ebcd2556c111f623a812d07ac0a23974ccc15b0ed48b48c64da64f54fb2d9935a52afed273d42d148242d9195b040753ead14f32f09e8bff40684d9ec6ae0208c92727a51ae6214fc07b2260b94db55e94a6bceb03c424f35964d029fcf77e5980822e5f92a1b113bcf1e6780bc97a6024da11cf038cb82d0ee64f5ea42c859939d46babc05ca6468b913a9d46cc6609b916a5a8768e1b55886df58c8ecc90114701bae6d37d86af523de92587c1cced376ddd1af2e50915c1a0e96823e824582db99fe962c507c4c0268263372ebb3999ba76280e11c69c47ddc4111782297bf421213b9931887d297b02f289110bd7f35b83ab5d4a3e2685438919a3be6e1143162461142b98c5a09ffd191dcbf61fe0710fee05115ba9b3e8252e30693f2ef5221bddf8f53d5417baf209d5f43f51151cd066bd99fe8c80fe22ed5a26d72165f54e7f725ea9052a4bed0ed16f8163ae37c5dd9ed79a14e1e2031e465543b25ef1f80fb2ba8e1885ef6ea7b1ce0f0655613cbd07dc3a86f4f7ef24acc4fa302be4560136fc259017d83f8d7078277640fd4227421181d29c0fa40e279dc462ac862f831ecd4aee8b691fd58058815af0d7a31c7ca4b069328c13c73773e2b8a687a221b57774abbff056ac0d619db293883c0f151550c3646da2719865fa11eac2e319b6caf4347bcac36ca5df9b0f3fc7e848d00565bbb462d4c1a846d396c5cc0f6a68d73732b74232aa11b39aedd79ffba9d8d8531719e116de7a521092dea0e566995e2c188cb351b3f62c4ac0ac6fc6c180d84dfc16d682efab906b7120c0a726c03fe9c7d1de212a1014ac5ff584064023309d3ed0fcb710c4d558a22dc1b0f9a452494a937389782eb4c5434e211458b4251427853610a55a44cc4ef7e452a6c8b048025fd891a8441e1fcedeb6abde29d23ed2ae16cc1d19e164233d26f139c2bb15ad66623832b5d7130f7070721946f437c52db15c69a3893c13286202fd295fc8a9b63229cc339df806560401a02b815cf1040e083a8a2c6cdae9301382687f83d9a47eb9b0f400d3be9d5fa889b2745e718fd22194373207d8701d7c826ee3201c3fc1bc61fc96933eebb60531e91b12423ca030d93a8bb9c2241d44943af716be8e38dbbcab2be8cd8ec88550f2b7ca0ffa2bae935d4bedbba62b8af9aff05b02931bf2fd26e8f0bed2886d39d4e0e77be96b0159a25083a58b737d12886e5e2f0d44444968a7801df532886454efb9cfaf666952ae2998e921f70aa90d40822e05cc81cd18e8c41db26e1d38da3f80d050dacf35b53783345d019f929e177fc456c776e910e79560b077374c3a3ff4d3ef7be3d3a5f9d2083812bb0d35d357268b995afcbadd5bb4ee21fc3d11c0bfff908ad7b555b0b49ff22b5f132b5dc4ed92c39bcb4c2352a807ccc5a9ce49216da6b56fd8a207a55350f18ebac94815effba63cbfc36f97d9e68da5ff42e67b4b400946b26e839b8780994ef4698bc0b4f7283e49258125850bc04ff7a7c6c31bf00a0f127223f00e1fda22c86fb339142ffaff3a44c8b06c02764af1353c778658fed62ea462602785c1532b7fd60e0ae3d7937c4d9dc966eceac3c39505f5c0ff1725d318d9b005d455f4b1242674d0acff1518794157e04f82cf7849511d1fdb777cc55d72bc8ffc364f9f073aaa2f7aadac795a819141c183a54c92f4b41294ebc9ec442803d0e4a548756cce28103e54fb702e4906c41a418de35e16f19f9e2738f133c60182fdb13e7053c18758b39ef631a03edb19df6398327af975cf02092b170670b715a278bb66d3c01acd6950a3d07012d077dd8211c2e79e435c52e7e4966b593c5829feacc609e5d7192e040a01353f48aba8040532521586b003bcaea046ddd126c6f414d91db560bd1a9acde60d1483360802f4c9bad345728151e61b8f4464528689379ad81a5d472af64910a68cba9853fd8f55e26b7ae93fdcfc232d133dd6aa1246fffad69ed89d64dac172669318d78a1cf8da7bd5bc0558c8885c8bb284ae01ce11a27a8b13c856d39c69888087f6398ea3d50ea8619305a7406bbdc828555f4a13407e3c2f0b5be721ead246951b5e630539a635925db69a1c6aff503e99a0f5c7c0f31de02f195d337c717221672cbed71686b247d144608e918fff8bb1bfc120e8b4138ae71d9b159e751d6d4ea1d7012545b2bedf9478443bbdc2862a361e1a549dce83fecb027bd26c9b8500324e49524dfa7a5a1548095aaa237ff5b7fe8dcb904c932a33fbac885dec04a959c7f1797cf6a163e022e22c37493ed621e2dcb2c50b7506ac8c23a679ce2d9afd55147cd5a55021fe9064614bdfde1b00b955ee9be9ccedc50f3d86b0ee22bcdbd4c00755301b0a8aa23cf6476e536a3a06212e8a6cdf43658783e298f49963161fdf2b8dbfe408fb7e21e7fee5c547430232f13aacac0b1b38df132a6dd63c80bab9560383772a3afe1f97c26293cb18b06eed8d1f326041bd3ce2441278d8406e82317830fccee20945f588095dff0a9b29c43bea543f707d5e630c0748db7f20b4c91cdfdb8fafd50e8509679b5861c3c44a9fed8a07580bffd3b38e8740ff755a861ee5fe49f70b4830502d7afb925f59b87e96d050aa7ebe28120eaafa2a6a2f1b211a312e5c48b848bb0ae190f906c5032d031650db50eaa57ee5cecc7b9c2f0afb3838343df817b48b34064ff73aa2159572a48dc74b22a46aa39462248aecca1c219152800e7b2b170cfeb5d4e91f21c59378ac5e9a43b1a3f2e5caa624555e6eb806ca11f42ee98fee380a47cee79cb7a8bf39c555fb619969ec075257f3ebfbd252e2b392ae49d80bc6e7fc56a065a65b5df4d75fea6cfdfbb6d72c8dd5cdfd18e63c04bfe6adbd183790c981f26005f08561074023a4e444fb81df2aeea24dc2a29ea4bc842acca2df3bf9db4e967722daf2036a40f5e950372f45dcc91b88255d819dfe40e9f13dc995edd789f93f90de8df410e49fd9f36916d236deeea14b783642fd8362110d3a33182bf85452445b466f45fb5c3b162d4ebf342ce2ea4c64bfcce165493adf9616ac4743166b1a73a9953ee178a498f10326878180d08eab28e4c2e04cbe5492c0afb05c627c617e20ad2a64ce59d22ec20827befa80c984d7c6899dba228cd45c034c3ecbb7f944020d35876ecdd6d04d09dcecf241d598baa8370ba332e760dc098dda0959ea25679815f1610841ed1c20f5628ffc6dfd7310d6a5131d4399b5979a94156ef39f100d0862672cdc562d6f9da0203dc0df8069da533806847ba68c4a0f6252546938576749644f0c61185b81f61222655c96c0b461d39add7f1d0ac477a30a6efb7a54217717daa86cb277cb5a5abf158d84c5b42ddc1f8312a09e088fbaa0b20ad03cf019f09755f68551720b6c2330890153b9af128f190ccf8e9144691de417e0328bf03d3f6f8d75105ef9309e300e9e35390802027664a9cfb6f327fd36880e0be89db530da60a318a3f3a7728d7e39b575b8a6ac8915f8b4af0612596dc53a2a3dbebe8a0bd41b1bc47acbdfdc1047a031122dc53d83fbc8d41ec1fd8c6434cc63bb6901f67a95f183e6b5ef9153918960df753c49336b345ee1ab7487d2d0a6ac2a29771a23cacaef333a40c293a3fd9003726d88eb9cf628a4ca3d103030e011224f055ba14113dffaad8d9b9e81a9ae2a79ed84f9e628d57f1ed937dd5ec7cc3f4dca2a86a3435a16708b55e58a53f33d0658fa804fbf7d3c37ad14bc4f347c4a25df7a4985b51c09f2c56e4e7aead68bb08188afabfe1e53493655c515b056813ab5164d1116abdcaac8dd5894a27b5e04a65812dea53d44bba82d40afcccc7e4d7fecaa20c2054405d81dbb133025251123af071515d642e250f2678fbcfc3fac3239c21aa0dc29418b119f63edfeb25c31e3912bfda06687071ebf6ec6458e69589c5085a525a9b829758d8c1806d0e542d4bafd63d74325e5b57857f85025c0e1c29a88dd001969d3de2bc5d9e65e2a153da7237f184cc9fa16610007d03d3b1a70054bab6ed4fb792d69d8494a2a9210b6f028abc6a52a828e1a715b9df6e97a52c7e5437139bfcc2c08bee66e2d98532815f98640af800efa9baf24e3438ed5151e3ff78f86e5969e781f816e06d123f03d9131f41023638493c0687dec5a5847377a239666b6cf929ccf2b5ffef047ec6e62f386ed1d71a1c77dac46308b7caea701293a327d987ad08cb01b88a3d987a3f9d43c606d52227aeac1ebfd5a47a9df1dc08a759b7764d49bac83364ee04e91b5de9e78e077558d928095fca80f3911dd3914aecf01ff148f52d4a4a61c2a5c4f6890848a7e69daa46868284119f8811143f762378ad5808fce0aeac2948d897f82243988c062721397edc522d23af459f1656935594dc519b953c17d1f3a880b1d425de111786f4fd2aaacf7c58d09588224264a4007e4884d0f42fcb3902b28f02d1b60dc117ef8422510b50b6f9e6d476c8072d3fe6626b07281161bb69f012a84d341acccec31d836bfe7514934de4b32a7eb1b92c8b75fc5e087f86dffed6b11284a995f22d8898a46a387a256d7e31dc9e7a7e1aca4603f7f2a9e4391e0ceb6613e5abdfb0a5add92e32de3f55b553d4dda730767ca922e8fab8a23c3d1cbcac67f1ed2528a738554baa66483127f592e44a1ce58fc8d521cee1a85f4d05ce77b784249f1cf96335bed5eb44a38d8d2c9a9ac2d5b4057d09070a668ed3671fe42153b3984a59b327f2982df7ca9e1145108bf270a4da1eb5cf4249a1b4c947d085dffd4e8a5dcac6ae87632723cba851a6e4b47ac144b1dd8a15d31538def215db8173b45d5057ed8db2fb19045099d39ccdf909291c71abd455f4e2a7a3173062e4a75ab961d61cb8acaa978e6a0c57e15a14bda8a2330a252a8de4045b0b0a6dd847b63d613d58c9577045f64d4008919fe1a71a7ac13ec0883a07aa499e54f9413b8f3d621b65c86fc4c65a674fa704308d6da644f801e71daa82b2dcf1b4d4a6182e51cdb49a3a8eaace5331f9369294a043d765b521aad9ebb007086713d187e990b1d4d7b4f79b4f0b1c33c5cdc49b5f231eaad45cde3650f359ef143da3ae92e9186821cfcdfeb9bbe48babcf1fef4c944e285384a7f6ba9d9315d9c5209a55d9d6cd972d02f1595f44784a27cd89633f826b882267ddefa3a14e44a1a2f353e88d5bcbf3496e2c5f49d6b4b1125c03ebd6dba15a353fbb82774da2bd9016a285c939ea3d75e9bcd1f5fb24d91a09dc947f8401a2fe0678375d20d29a0dc4310f00ad94237c29002757bab4020cc8d5350e8ccbb4a4baaf024c3b13a3cab05ca16016b58b52441cfc05d75d95898ab6d55b8acf2288a752b82c86b2d1c3606b320fc88e37b101b40b1be66adeb084d2f4880f134b8ca5b4b71527b889365369ee06b78fbb3af68db503b84893f3777857e752bd06ee351aab7b937cbd1e82dea5943e43c4cf0449325bd3a7f5b936f335fdfe91c7c367f1e5dbfd9681137c7917990efaa42da166aeee44f56eeb46eb96bf6e6e0be225038394cbe87da46e106a78aab822a6a634cb1f417f12ab3335e9eb013a45591f087dfcb19bf94efa15c1f6cf823deeabe2fa3e2ed639515003b75f49aae11b1d5ce7a0f9731827d2b52b88e2f141423b43ed943ba9c555cd70a2a06d08d8e1e8d0ca52a889e91c3e41ecd9fc66591b8f72cff78ee62deaad542757a5f3f799e81cbd7429d68182d111cb755479d57535cc878e1239ef4f6d1dc46f61774381ebe6ee19f7a4e968921e12bc88969f99f84e5057bc3b9730c3a7fe99fb09821ae90fd5d30d6c4df826edf00f3d361f226b37720b9fdf6c570e19e6b864b3d0a1ca18c60a71276b58ea8cc6a353513f4913064a932adfd405756275e602ffdb4bc7e3fb3afb03acc79f8fd00662cceb715e30bc5988c1f12166df24cb6691188503e634ca9a4213e02c3ca9fe1848b344d4c2f9a068811da2a3fa30c1b815fd4c646b45eb38482b0e0ed0292a0a050510dd208fc121f8b0bd087b07efd5ab6e11f02095491bdb5ee5cd724912b5cb83ba6846659d7d8ecc310112d437fa3a8214c3869657db994d89065a3ce657de3b3ac5588856eda8aa65f38548190a5b141afbff76328960c6fe17b4489ff2904c30e97ddc27a5b32ec99d0c1f8acbd52bd9ff4eb210782940f12218c1339f2783ca849121bb0fd99ad5b8e9617716d9f9853fb139c9c0910a4860091e0c1c50e63dbffcea3917a47699df6b77e2e0fe008d79e1cd236fd48a5935d98ac0622fa922aad0831ab1cf2d71fe4a1ead64c7a8c46925d2eac6728cc54f81ddc1ef18f662d1440e7f8f947b06343cc71d3f4739068a1393d13a58c3f90b09ebb5e9c906e3cf1d865d705ab434a2d8ca06cfa11dec26c1b948f604ddcd1350344ddc287f401a888182a82f3382aaa0975c0a77943c74e76ddda1d739e4510960ba9f85f3752430a936987e9632c86867a50b699646a5600b99a179256adcbb42904df508a9918fd8ad502efe15af4ad051a28967da7de618b23cbf4d2b3b0842c7390cc8079136d5ee93b45e883049cf76c8130d63e3c92f102b780ebe244936b7f8013ec8aea8529ae5ea5f961c086c92ce244354b2779b5265c015d1b82aa0fede07ab4cce1a0f008944b4dfe28312ee233465fb4a85f5c0caf6e684ac51f47bb67ffef0c3c319d6b667ff3405ee4624911c6b6e2d9979a124249f4058854e48892040027f024255935f19ee6634dc3e744aad25c974941b072b03c15e319ad569a65d0f186154fc55d43d39fc4f1e86c7f8182fb11e54481337dea6bec58f61db428725002fdd4b58924e7a495d095bca48bb4864cfab394133684b013781e784d90148aa943cb6d515029cba4052110c8982d78f72df4da922ac06d5a812ab8eaa96d570466e145a097438ea216249a0401991c84ed813149a3166cf8fa7a78b613e02ac1560d5b70d72657b29e22584a613e209a2c340044622236213c148c2cb21798af874201c262a584c1ee8b6167e5510e08c49836e2ffd464f39a8780df66725460406235013e92b2a5f468f4137921abe5dddc7e37bbf5a3035e396656eede5550390e73eb6192cb026e49c0b50d1d11ac19930e49cce55dd408a86454f7dd603b0cc8d135f92b54266be09c7e9f3402cce93fec943a05401ac86187d30efe9d31b0dc325d94f9adbe5d2cb44e0156ba1c9e12b816247141f95d955b2502b5c41155d7780617ade38dbd983679f30881d3763bb9e7ff39499eedd6e8d54ceae767478218e32148f30b7e691a7866aa366676254714dd81fa538691a6f14fc46317255c37a4ccefdc019945a53c2a466dfd8c0beca8e19e918ac92e2a9655d80a53a6bca45b3cb79a34aa0189ffacdd13d9cbe298b95e086ea8d2d114c61e3fab9b522d2a09b065db47007f4c8164d1a657a2099617b908510e6a33a884cba9b9c46444959a755723a8194200c8aa45ab1d55664e0b59d9cb8ce2b7764d43a332e8f1f2d36102b94279f63f9a85aa2a93fbec65ae5eabbf2e21439fa4643127b09cd41c134a28e198f69afed7c7f64d4880d457571bc9f24691bcee8d7c2af284fe79387cdc3434be93a96eea01f80da8433d805689f4307a53b1ed7564a02c7698680329d6f533398807049efddcb3d349d5533a1f4db545e261c42e4c390a1e1a07510b1ff63a24eea78bf30d01fc2d7d7412d80cdf8adc0a90d57ecaeef176714619f06e766c4e76e7ca5c87d1655773ad12c0bef8ca9ffe184d343f022191e4f7ef3ef6d93d478755300f9cbd3f9e9233fd7bb354b11f6700e1dc4ee0df65e97f36af088cbded005389cd475eb21062143ee6057ca25a338398aa29038436e1e40284959bb819702a50c9ac496b627e71e2c4819665493f7289e387ddc2a2048299e54d491ae8b9e11d074f1826f66f37fef1c7ecdfde4640367b822bb3d95693d62e27d9616bf0a7fed16e67c6d054261d58ab19aabd6b1bc5f7d445b190b6af6ff4f122b18255cf2a1543bdb4acde64063099265c900b54be4d5139d80d9f0ae02a4c72cd31cb14e4b9910a4a3269b97598639756dcc27620a8754c38c97727eb46e6569a965cf13d040df9537fabc7e287f1a3fa4cfbc2ea4530614cb023e32c5360d3850b0a49003f3ffffffffffff3f56fd3f42dfb6f0db1f541b5292948cfeffa8fdb537c92549899e6f0800044601c0b7cdda85b86f1d80312eef0ce50c530de7f80ad9d14970a5295d7488d53825f1c952b55e13de391909f3e2a4f8c9d11293906842e736dbcbe7cb476cb2d249d858e729e808633fc6a09b3f62c3465431bac4d04b1a2cc7887eba3c67b6cd9fe41661ca5c615c8368e84e11baad7f30f172476f89c0376e0c2e5722e224c99929ab6c754ce521ce259a68a67a259595862857122b4f9570bf5516e2d84f79d153ba63280981a65421da1c04b79763f8f60d9fc405f17a87d81e959138108d7552758f563d20a8b4998aa35d61f287dc3c55fc9cef98b51f6c7fb7d8b08eb2fb704ea7aeb9a4f44ee14361d237c6f8588e780f6cf4899342945679f44064d6a49fe2865af270dc94937a433432830736c6dd9d7cd247cd1db00a17e422b543ad9e26db9a7560cb2bb5a4e03925091d4ee2a5cb33c9d285c91cbc13931263ca2631cac158266d974d6dae17876b6eafd43a3814eea412cd9693966fd0b2feb87ee606df4a8327b936d86be1aba22504600379c298b5a59c93fc0901d670a6bd934fbd655e4f08a006cd726e069dd3906dae4b4930efbb190d5d4774b45794cfe70c6576e5886f862d252ac6e867e1b36538c46d923e6d6ae90c19d6cecc3c254e499d31209745dfa22a86538dc5f538c360c8182cc2824bd7050c664cca5afd59bce017488deb924b0ccf95f3c2f795cba42e6bc8d605e6e53fbe3f45632ce102aa993aeeaf3a9558b205325fcce265845e9568a12fad50d3a1240bc5c664ccca5f9e6081bf1472593f969cfb2b246a48d3f6b45caa1532794a0efd7915b050e299d854404bda88abdc7cc23c0553dad915cdab95e333909ba8e431864aeb48c1becbd9f6b25f771b85c6d3de9ec919dd5728d8492cced4347a9e4fc0caf792e5f61453d209879d540b9325aa944db03c344c164d267e0a132a494e61b917bcc49425bc17bf2f9a891298126de324346e30490215ac3ff4cff4e3888452d09c8bd1b32e8a4728d72f5ba89c72ce9e115edd24996dae087895b47512dbce1d11ae2c0f3513cdbfb621e429e43b46b66cd88470dc5e8abb2d089dbc69ada92c436740b004a928216d82f83fe87f373d78f47461a10fb89ca4bcaa15f6a0e465d13da5db8b350178500926f11b2549e96302ecc03c69d1e69ba4df4f2eacf1c9c8cf28f31c5cb0f7e9ff4cf693796f71ddcec74f9a11b62d363996945d53e5dd985a1cccd25ef8fa7c628616ea2759c38d6ada5567e148e54f5ec1d2c294c5a13345f3736fd7925810fb652987abcf2d2cec92eecffef2d2e65eb15bf2dcef0b7ad173c53937e7afd5566c57172db5415b67c56b96a45e936e158929592c8fe8549149723ad7898dd6bea5424f7246c578ae2c6943859ab652e5ff92c3d4768aa6cba494da557eb399c2947447e4e6a542c74ab1aa254df9b8b7e21a291aaf28d739acdc6e6c149c9ce737cf75c7943151a49fdf49925c6b2fb5503c6da7fe1bdba25203c5632abf49a8705ba57dc2549772d04b82a57c314f5052da9dd4d209a32be58d4e99c409279a4e222d7f3a99de842596672e59bc8a69428f27458dcf9937849978d353be2c73a81913949099f347a27dbc4b689efb52c4a424614b1c4c4c94bb5c27c5aa12fce7926a3656faa64427e77c2eeeaaf3219b047e9f1593b8a17f4be2d41527bfe70ce246028d66d61d7a36b687c4ee96d75bf95ff723b873bff8a32726614750dd65771b32dce28d48e5e5c495348f1f23be90fed1f1b8fd22108fedd2e659bd6a4564ae5ba2c6e0154b4e842aead966b1f6f983082d49ee9da4118d7f0f81a6949ec5909be38668c6abf3ff073b132d04d6d7b1cb54c52a84686dce84d6983f263988fa4a3669eb7e54058194de5bbca6ee4a203c316ad6c4f2e02580382e74c8e4767286ca1f58c9eccffe784bf1437da295982a273195247db804b7247ece93e6e543f625ba96144eff3db8d91e536dc82a13f56067855bbd2d0fb6c7cd4a29567820c3ac7b54dd77b4ea0e8465ce9a52b0acd12a3be8bdb729645f0773e66eeac4b654391d8c1e9f25eee5fc17cfc18c3593ee9a72ccae1c963913a7752ca673e3b085e9fc95628e135b38d0e9e24eebb78915f3063bacc49a94aeaa55371845c4f258ee5fa96d40d22b5ab65e673cd980c5cd4fffe41a4cda65e2dd75a6966ae852104beb9c315f250de7aa66dbb051974ed040856c4ba206cf606f895f317487d798a15a4b0fa9aa1fd72b03d659257688ef3c29327c62f64d6ab0cce931b8965d396494983662283fe9ca6cdcfc15a22ec24007f9687163922d24ea020c699dec9e9e72d2dd32e9e20b7b549aafdf4d0b3ff1029929bb9e70f2a7cae6480e3276f0e82eba6069c79c3fcf3fd6da5d7021b9bf93ae7b7a74b185fa4a2abdf3b2b48cd5638c3048a005765a2cc444e7a555b2909ca8ea5a096180c796a08c2eb050558a2651358fe50a8b759ea49b244b6cba0b2bbc96dda911b7f618230c1290d145154cf271e692af5e32313bbaa0c2953a9ac8e868822ea67089e8dca45b5e8a2567e031b65c3021c23e9fbfae83bb90c226d94c7eccc8888aa370e8f6f9ec138542e9a37a3358deaaf813d292a33f937fceb1934e48d66882aaa9c9888848e710a38b26b46239da6556e5b96fa40b269cd5d1bb3587d7576c24c7123031a7d47382c92ea71141174a50665e6473b2eafb3a045d24e1ace6e1a39b54d962f5401748f0eae4cf38d2e1e5c2233838f0c50848d0c511bc9833dd414527dfd541460e30ba304217457046fd45c4d3cf42c35d104199fc7eb954eb3179be703268308216743104a7d3c53c05e99cd8858064bcb47976ad9ac34148c874829eaf0608a4c9b16312375ea74d92812e7ed0850fbae84103bae00109bad8018d5cd0c085256292c849a129e9c92dacb07b35310383862d48cd26bb76b4dca587462d56d1b41bb9e43662f780062db04c175a4dd4ec406316e559c90a97d737f6660e3464d126e9a9d2bc1faa6719d088c52769c474c8bce5109f410316c50eb31acf9224548ebee22f61b3eb662a493a795724f6e2dd9677b1fa69057571a727465f6e7c59417b758c5694854cc9556c31b99ca8490c256e4515cff6dfb6dbaa660ea6e2bddca5b975438525975ae162dcfe7b8ae4cc69564d2aabed0d344c518a92685b7fec0c65de8f8888f4f218018e2fbef8c2bd023b46000600c44083145b97fc1732cc6f7d387080e13ace6681c628b03ecde5eaa92b258a24f9efb52c4db849c1506039a7f7ee4efbb56c4444c40a3440b1f4ea9b599e9c5b5c1a9f48e74b12724cd232d415a0e189939ce4d41bbfa4d10973b4f658a5a333264e8313ab07af24a5a80f269ea38c304444701482c6262831af944baa6968421332e3cb565d95a7d0c8c42197b9935eefdd614c60927f8e1ff26234f17389360996bbcfa4bc7f594bac9db5b42daca45969440719342a51f89ab4f9ef04b1ce5362579393a413ddf13f3e095fc2cb3ec5b59ebc24f4248b783a41936fd691f8b3b43ca9a5b7ee191266d5fed03096c289318ff8a39f666b6a6a925547987f4dc3f96abd97d988f22d67dfedfa77b930e2d87699e9fb6411d4e7d9764989222c29b3ff54dffdc61341fb8ac66aa6b618444454a9be29fb9f959c3e04bab92354d7932c1743f01e6c4eb460a7195e21ecdc96a1d3a7d96e09a1f569d5af7fee4e3508d7d2bce724c7ca793682a01188a438ef1b3d75b62d2131680022a93675be92349f4de60534fe5047cb17c633f683b771768267b60fc9a9641b375d77f5f990e6a7f71c3b9b9a367b48f8ceb70d9fa5ec543dbc3977ca5377822735c983df27c5ec4d5a789bcc20030fb985cf31ec470b713977287a8cce31636eb72fb183d161cdca27c62d8c753086fbf6e79596143f3a9c243c4a6c85485f35876356ff5c929524788a5c40430e092649b1a45e3b0e94a5503efd29455e0c87529af4fcdf9e37f867714296cf6c2697861b3e712fc4e648c7fcd986b75ddb76c3f6a5dad8905be949975aafa11793b35612574331d9d104d751afabb8193a160634d2608ca12f6f6ea59e3634d0b07f122ba77a6ff551cf600aa6f3fb153dbe247340c30c54f4bb95132aea26af0734ca9086db8fff0c52394c6890618f5c9bd6a97ad01883413a4dbefea4243f268186183e29a162c5d8e4a99b1111111bd0084357356a9286489b8b232222ef3c7244e00b08e8800618769fabf824382400061836a0f10546b3e279ec8c3109630f6878e1122cc593452b46a0d1054574fbe2a86cd6790ea0c185b7a27ffd8869ffcf2234b660f4a9e45792f02227392222b2a38c317648800634b450493b1ee38926c507bd4719638481021a59f8632a613c89e6080e0e7c21812f4600860868602141a3e4ec961e836e6c0734aef057458d4e6dd2b04295be92c91bfddc724ca30a7ba7b59c730aa9907862aab5d913fc323f853457c45f88bbd1cc3923a1d6ac5fe2839f667d40430a769d943c997baecb910e6844c194c4392b593534a0e06cc7d4117b92588ac6a0f1043345ebbe92be111d349c500e3bd5394c3596948a814613ce514d5eb9b86830a14d75e2c9f3c1525424011a4bd8327e7a3bea9c285a193494e049b9f23c4ee73079d248020d243cdf216253c7dc265b348ed0699e3e351f4f52e5348c9090275a122b4abaca7bf4e7c70bcfe7123b7eb6f89e5e902e98f22a78eac405a4a48cf1a64cce51d61340b690f75d49915976f53e138068812fc94a96d3f4b22e01c9026d276b99c5b4b269b140c6e7de201b536ebf2307e40a59f2d3cb2e312e8236805801bdcafe99be04cde91f111129e30c2055d82e3e85a6e554ce60c5e8e11620030815d6f98bcc12ff33299fc225192e8eed05867b05c60072062b1f6142ed48e5fc48c1ce1b39f7d346e1a0e19de7d7af69493040a0504a3162a9f2ef29469f70ce3c7952e2436bd88038e1ec10268592c326bc399d2b9673ee274c48cb3e5aaa89e17919c81232d9ab767eb6cef457c2793c9c674fe2eb8485801e8024819975cdeef515ff0a12ce299fa4934fad49f711d8cff11ea5a323222238c081f330a38c1d3ad80636a081bfa0078811b6b6086f8dd9966d182332c8b1a3478e168014c19bb4d7d13debfc26118ef1b404f39382daf6204338cb8e59dc199188710c1021d4d7a77fdedb1a271c59902054759dfee96511f18f8888b0000408fa4627315b1273855622222b00f98117c327c924e5897134203ed072c94d46f5497679901e34d3f593a5ee173602e1012d922dfe59b3cf27070d78f4f800c80ec8b8df7db341364d492eac0ab25195b2041f1117e79b10d5395a2ac4758b2ab747f3bc2f460e217cd8c2e89fdeb724aea7671f7cd48289b4abca29a4dd6574f0410b539c4992aa49c9c1c72cd41a8d6ad7398f9e2c0b93e6cf1d2e7da72ae3e02316a5cbfa79f7aad52953a0061fb0e824caa6ec24c1f1f18a6299846feeb8e349fe7085799b73a7c8903f9bcff86885e92be59c43d584d6c60a7d7312779ff04a5fad87404484021fab20aaa73ba67aadd5f9a18a673aa58a26411d7ca4e2f049c24246ffeefb51c1f7de8a5c9a4bc9eb0d3e4ea1feb7746d95fc1a7e53687b515447b2b54d1df13176e890c18660478f3130e0818f52ac2b1d5dc673ba1e57c7072912d954576617f27b7e8cc25cf19ecbbd42edc60f5164a926cd5bfcbaf79cc74728a8da0c7ede1d55d30b8a5de672aac91627f81f9ff8f0045921735e8a74d7657ef0d189aaa45c82857bbe3012278ae2696230b93f7ea73771d024f4d7aebd78e77c68e2d33359b353a4fb723e32e19c5628494c29a9eeea840f4cb425584cb768c9c4607d5ca2d2cca35e4992a3a4f0581e1f96487673fe65b589a9fe8f4a309f32c44bb5a44a4b153e28a1598a779b0f13f3c793286dc4784eb977c13b677c48e28b93ac24b34a24182d41e3aef826f9d08888480ec7d1830f4824da7fd00fbae69a2d4e818f4720eaede143a50ebb3a1849f870445154ede6e3a3828f4610e63215b2a593fb583a3e1871ca954732a34c482bf95884ea27c57f2cb1287b7d28a20e72699fbd3bb34b89e044f5cffc25b9a8c6081f88489631f9ed6f37774d3e0ef161888f42fc1ac2be357b9664c9830f42f47b5bd3256cec996a10c7cd18e7c30e830f417cb26d30dfc8cc2f7120dcab7427c90f884227f94564eb3554fff1872f8e64858cb35cc2c60f496ec1b36a5a920e938f3ed8f1f2e2c959ae65cb071fcc2655c728f94b7dfe088f8f3d7ce8818875bbb64df57ef38888088e047c81c58c2fd48c2fd40c0464e0230f1f78484c3d29a368bcac6a2322223e461921f8b8c3871d3eea40ce9b2569ffab3e962338c6d841878f39d0a13f931473c5e028a38c1e5e46194bc6871c280d791cf2ab4e824976f161c321db5c61772954ed7cde904ea5995e58ceef8c1bbe5a8b1adae66ed63698349d7cba2f771f4cd8902426a90a6596186260400d1f6b705aed539ef90f8dbb1ab6f4abe5d39d3428e1e296a4241afecd937c7b425308f70cae9a6fcbc6b08957cd60595ecc49d193965a8644f1143ef2e9a2e7920cadc6bfe718f524711903a61a22e3a61894d69c2e9ae4c2e06b5ea815bdc0b05a6a8a11776b21f38593498c6d5cd238914644445a3046183498c01d3ebcb0dd4f9da586bbe0aa7ef294738929d5c20533abace2666de60af1e891e38b11e6b15e061d3eb6700c8dd93319d37e7db4c0eaaec56c29ce021f4a923f86ca96ad58e0e4135b2bc7bc27c5cc15eec8cbade15762ffe5053acc3800b0c48715f032e9525ad6be3555d07d3d9ca464b2b8980a7cbd769be4f2bff914fe35132b985ce29cc69cf1c6a84b929432b762450ae68b1ad36ee6b7fae9230ac56eba8ad1c4743945759091e377e43833e0e181f63164e0811984f17c8a0f2864e9e984f3985dc3ff84e4cd24b907df0946b1937b3e26c9726fc22ab62f65a6336733c198e6c604f3f4d2f212ce588d3e49f0b831ac84ae3ba752ca4902bb174c4e522ef97307097bae5093de3902a366f1f1b9c3b76304badee4ea9373686f8af067adbe89ae39ea86087778505b4d92acad43a836a7e64dcb0d1a1582494ef13ebc869324c920dc9abe499252beac294050d62ec3b4f99f9afc60d5ee0e3d39a1a2c407d9549cdb5c4cd2f7e0d9bc0aa960a2cef7c103e37cc38774e8cbde7fec60c96ca2eec79cf6b3cf8536a7a7194b7ccf1f17bcad9458326e99fe2d2a8992a744254eb745e27f8a279feea8bb1646cd3926e9a45a136e5af4996bd777cda49867919a5849ca5255397364d179bca8dd5f2c3a334b5289b7bba181857fb225f943afc8fde4048db1efda740573fa51dcaf3426c956189fdfdd5fccbca4b0e20e6799dd4d56f1270d9aec3f772e5445c2a7fc4cdd2c5949852b6dbf612757d40e15c95cf668acf7f14ff16810092f49363131535452e4cd66bc5c7b9582a9bc769f2327c5e9f3e710968f0213355534df8dfea26035bd55d28fa17687623b31e5e8edb3eb342898ba3541cbed4fa03195c972513e85b63d710c31f3e431dd894f0c5db3b46d5e6a7382d34e4d7763efe9a437515f2c4975cda09da4354195a6f0314b4fac249d8962f4170fdb9a43e61a13785497ac860aa75a5f22fbce7b95d3397baa2dc1e798bd59e6f44e5d892ca567cdd45f290935250a96934f86af94f127518c9f3c39e637855c125867e6548225399f23d1e48e9c5c6f69f640a2f3da0f2b79c4d36d29e996a4cb8e230e2555d0ceab6fc16d849735666a7f5e3f0d238ad9b336fbec47135d84a115342e89baf7518439fc78ae7f8ae94d84e91a6df3b36b1a11514cb7a67e6a1773082cbcc5fedca792a52112d634754a9f7e5392429c4f27c69245764d08fae4e8992d27694338084b43449526a13e768260ddad562be2409c32bb74a5bc018216d724dbcbc728fb1ff88c7f1b4da913e37eb8ba53f4d13839c7bc0fa55195f08a1a556d3e243fa15d82bc07936efcb35cf2c5f9e8a1ca9b2944bcbccacd8333e1539693b8dd2d1ed6f4db2749939d3be6dca1b6e49b84d2d821ffb87f6bb992e6d42129df8c5bf09c6b4d3a28977ad249528972c939b495d1fb55cb4e4c91432957c91af3f3659dc4a1cd2d1d2dc9266f221c36b1aaa2dd7a49e3bde1b913377fc6f46b9b1bf61d1d4f1e2fa46c6d68e346cb6e1ab7c73a6c78738f9920aea12e9d359079fa42e77c2af6ab81ff8b6ff1f934947c4fcf835a69ced1808f6886bacf4076f8f88e8ee9b76386a2348a7b4926efb70c5b886e8b9f9888970c5d6d5bf28fe226b66370cb237c2eabe4356238a9ee98907533ad09c32933349b895fc81830f4752575ce51f155fdc2b529fd79be6cd9492ff87b927ca1d13c53b20b45bfd6c89233ca975cb8f2579cbe9ce99db20532de9f249f9a8931450ba793575336491734250b85123f32a392c73ec142b26be8c8975c81bd92e443fdb6ea68053c56f6f8b2f94fc72a1cc35fbaff994ce9a3822ae931896632277c5328df4a87b62449b97267701dba4b34e52befa490949b3133225d2bb651e8e25c8cecbe30972d14feffeace1661e25ffb844499f4b9da097f9a8955eff14e4e138eb6ed9fc364e9b2989098f262f4132ec75f42319c7dc67c9224510985fd9abbc8f7c96893e05aeeacc992ece94602159e824e55dc68ff086698f892b452f0dd08f5dd25e1635d84f54ec8b9aa8970f09829de5274d643a04bde24850ba2a9150216745d2d53dcce71104a42bef9a79c949c0182b95a3a091aeb3ff603c4c582c790fa802e13f72ecf1e381a7756a94205adf0e09c7a7ff1329f770176505a5c8e5a494c2e68cfeb1e2548787e06174ad864d4666e9168c8fc14a3e28b666c81c6f1e8eb737b4d995a9417a32479f6c4b0c9d0a26cc93ee79c5ae3edb348bc51f1aa12d5c965f1798995bdc279ea4f2c1273aa702d39b0389885c94aa99a765e715e59987acc2bd77145f152eaf416d5fcb615a758a9b4927c62aa0c2b4c9dded3c8ac623d0b21bded1e67aac2d0eb9d316d984b622acc6c17de596adb212ae8123a6a0c9e72faef147bdcb1f0d4a929ca5a192cff86b824a6a560d372ff4ceeb49552525872866a4b928ea2133d4962ec74f1d22f0ad6b6337cd37f4a7d28125badd0c92e93d083a2fcf0952f07fd9afd136877e838dfa59fc43d6187d5adc8dfcc9dee04ad494ced4b4df430278c9f4bfe9c7a6a4e7813a58f713c98ab6a6a3551b88b8d96dca4ff4d26125e436b7b3ddd3798b0f5df62de58176a73095b36a5a69cb3aa359648f4e27e6e5f0f25a612ba7afc7c9aa1c4313a2d016a9e2f51d37cc2649573ed84cc8cd67bc254d26757cd54cd6627ca8b37ef149d132629b8c5c8d737417cc749ab97b6166d4d281933f7e9a5fb689b89e4f39cc144f1d363496a92319ce82528b9e2c88ca5d26ca29638a7f8e88a6d56a2d0397c7afec9ec98a4c4668287899dd27ca56512250db9946c7fd38a451227cdf7f7a79f33df91300971dd3967b35e0d093ee458477d9347245695e71059f1ed4d1ca145d54cde596cc41b597ec1443f5b96115ad02b29a662329bdc224e373d17ecc28f253145509bd75a5b39c9e527c29638d9a36468775a8820338f9d6eeeae141463c71011c17188456ed4452a7733ae360ce19d7425f66725dbedb88d42607236b96634c68f5809e17c8aad61ffe63a574606c1dbef857dccb02188c4d8ebb09ab272ca1e111119b11108f34b5f6f2b097292a8081c6003105ec7ad8c7ebc3fff78d8f8439b84d091d8b054e2ef07e7767c3e4677f23e37b0d18766c3f6539e985fa3890d3eb8318553ebf4a17d3663d8d84359723e5d4e66499a6c04078e0458e00b1c0940c0170360820d3d9ca3344b2f6645f33de2061b79d03b86a5d292d41c5e196a030fd87d4a9d34d8465a4c8fb1388460e30e961ccdf2c758265d9f1111913270e0c08183063c70800106185e81911e619840c7fa040430041b7650c3c558f405736f933a74296df6a7ce29a32d18d8a00399367892d2a5d41eae1d3d726cc0c61ccebad996251b72b0118706d88083086cbcc1861bba183bc5542d3555272322223870e8d0b12222dd612c8f11d4c2461b5ea93fb99bce64a18e8888e0e0e13a7428c1061b6cacc1861accd6dcdb15cb3458ea7db3695153cf828652d3d8af650bb92d8911c648190b701d677bc4c00636b8808d337421338b7b85869d981e6670206d982129766fca6e8c0a8888908d32183f46f2a268de31391b6438735327314de51327b731061b62d854f62a47951c9d6f0c00600936c270ae884c2687b8aaa50536c08057bb9bfc254459f6bfc0fa9514fe6a2b3b6f2f9cf24d8ce139ecf53f5d7833936c9d423f473f5cd8d3d45375bf052d9e870b796b921c5c2dbc26ef9d35a7deef4d16b6fed2f83199749b27164cf29ae6fc28af90a58d85778ad7785ba1b53579f3ca899a5caa5007f39cd4cc53619b9d5dd97d0a5df260c92af3b44f7646eefeaf9744373b2a05b3674c9fef8e9bb38a023362617632e64972c8061436cb4a17d3fe4f28093d2366531a26f44e68dc6ba2d7a6d29e98261c1afa848b52315712c384d29cce8c49ea12f09442538b7be9e6540974ad9628ff65128e163215535a43af44425275b86ec97e51e34768aab4b5b423b66423a42575cc7bb614c1923c27138385fa8f1622a0b9a76e936819c229af6a3a0ff21aaf22842c4c73fce7d92f4d1204e7fac4526e2f6a4902044da8b294543939e11f38b16fe9db4bf8e8a00fee98a655c343d32dec4172a6ea6acfe29acfb3c18353facdb21f9562bcd8d8817e65a1e9ccf2e489e5e2709b3ccbc2936431c3453987784e15eeb6c4dc828cfdb21eb9b14653b6f063b4ea865f0c19ad5a741f96642b7ba690d3e224e7e796551d557516c97ec6ae6d9ada8a2c8c5a3fdba639d4268945e2bd7f4cf2b0c864cd154aee0f9ff30ad2d352ba5fa8862b744bbba1df2ca63b53a315459f7c16b3163a9562400d56eca1d2788c59a72faab18afce64327b14655dc5942a7756d899169e46ba4e2ff30d63b1a324af651614b7bc79b3329e9d353dc1e4d3b059fafaadb14daa6491a5fdc236a538aa3a5749d426dde478614bf79d9491ab392f11c05ebe5369f3e799255a2a82e064d8f7d8722b97359547c5c668da0d8234da8f8197e02fb9d3c41fc2f4d344f6ca7559ddad6e8c4bdd69d36329de4e73951889b982e7788be5c46cc2823478d4d54178384967ceb397b1dd4d0c4af6142892989d59a18eb39585023137d4a828f6ee8aaa6e08888488e31c268811f11111c62acf3e821821a98a81a97f04dd02d39ca9550f9b1442d23b3f14cf8f14cd5a884f37162cc46710ddf5022afbd157dbd4c22cb571b3e1549e07171a5666e7daf241286bde78f61b2458d2224b84e8b0cd714a36bf6883aec099d3a49496dae1111116f010f174301351c81c69855be57ce7fb511f6670bebf39862efc788e63c5f12ffc2b6c9b10bd45844f29daff7a5d777b06b28e2580b65733326c2b49b9354258487ed1c22ccf2294965e2f69a10d5388431659557e37ad2ac6108525683e8897f624c76215e4b9276e646ed5429215e2b596ddd548d41a8d9aeaa25b66aeabcc250431089a94b0e8dae918fd70884f9bea7e4f47e11d27d412de001010d20000c1ab806cad80be030ab220203016004e00a350061c59ceae4ea28a651db428d3f549b5a5557df166af8c16c153c567c5b18ef64a1461fd2f3cc993a53123267460451830ff87bb0cf51f3175ff0f011eeb11cf8221035f680c74f1d27dd9b8ec5f5e057d49fcd59f6dbf13c701933ebb3bff86bae061ec8d6191b8b312ec9528d3b1c33c9672b518d9ab90e6ad8c18cfcb0152c6f99656ad4a1bc6925996d7fce4fc2841a74a864cf51531a89c71c9eadd69bac1e9f53e560363da9c4f113632e3f0e86ccf2f5134cfbda048c315a30861a70a8a48f99172a87ce9303430d35de70d46f7ef455b950c30d35da7067a89ba0292fe758f3176094010130d46043722987bf4949638ad51aae0ea59311e6b15351831f4b92ee73dd1a69502ec61e93aa57420d34509736ee93c12ad438c351375be75c9937941c3394c2768e3b5d8f90100935caf0e71cb4630eb9176a90e194b28f7569d8d94b72851a6358dfb2db5636bd64660d31d499e464bda9b9ecd12fc090428d301816ff4d30135acdad0106a574c74d8c974cb352e30bb6b9965b5893ef25abe18582b6f7c9492969ccdc854b9364d693148f21178a5dd2b3697ed1a3dd02f979ab3d27514d162dfc71ed52f5422a579a053ba592d2db8decfa8805fb84fb92ba0b1f931a57384ac518abf875a18615faaf8bf2a136cacc328228d4a8c2eab929c748ddf97cd6a00227ca9b86303120a8310556df73d2093d8dcb8c8ca00435cec8448f498efd99d22621d4908279b7335d837cc64b22841a51283a7e3a392a87c21999aeee5f3fc1a01d915116abe244279cab32ab6c6c16a0816ba046135233b1bc1ff77be562826126f4e5f999d0a6d758821525a64c92eca7977b25ac5125ef6cb6c65e3b09c6575fbfe7cdf5398b04b76c66d2e6632a2b8f60f0ceb5b4e6f1359a18e16c363fd2d391e6c12294a66dbb1faeef3911780f9767643fbaa40ce15cd6fbf71bc42d7842785533effdd86f495b10ceb0f69972f06092a118d40042c2979fc996ea49ecfc0ff4cd92d37e9093f3eec9bda6ecebcb3da02fd3ab46ed0e179507bd5b9d9924a544cfa5c60e8c5d1bff44d372f1aff96eec103de7232ea833ff0be551ee3db758ada6e3c4f417605001c41674e6b212a2bf5aac73f14ea3ea6bc6b00c105aec6916feb2ff4c4af12cbc0d9fb9e477c26224822f4064b187cee9c3c99dd24f2a01482cca974a72ba13ea36a64060718b9614d595fa63f8415ed185defd9ca4b232c7f0007145a2bc67d6cc0cfbdbb622513379b7c69f15bab4edc4e635b1a36415deef45f52ebda0d551c51635c5aa8fa162c73a159e5c96ba1c6db359870a53c346cd983cf99265414eb17d3cb9ecc355f6ca127ca10104f000c4146cac183a4e637680948255ab4e4d69ffb7450ccc00841445e449e12f2703905124e76c939325c75c587af0d841861861dc004414aae79aa912fca4349b30404251be37b3f48ae92469040105a5f2296a9b9ca97b62807ce22faf91ffba1ca4de1a8078c22813552dc72c27d89d50bc3be5b425c500841387eaf18fe1a40bf5e52676d76ddbb8e38368c208cf9572d46b727bc500c944c256c590a8a451bed6018289facabc6733935d692ed169b0cd9ef26cb45b73ece8b101104b549ffa32644d5afa6704032095586c2aef72faee28e911119119788f11060e098041031e3dc6a0008f0980008412fd25fd2d2926db24c9910364127e57fecd643512f691c4c9c2892b97894441a2bc19cc32ff6f7af708e4111b0071044823088411f5a55e5c96dd2448b8081045fce92776ec9b39de43d06347071e009208cf37491d45fe92e409224a31d5f1ff52af6c9c801c22e9aa933497e8c9e33a0110433c16fd79637288e100904260ba63417653bb496208444498070e1042b427c84e9f55c6993cc820ceb379cb1727e3a5452082c043939424a930b31803817ec6768bb15ed30182f8b9ddbd92f29d83063c7a20c81f40fc00d287f32c25d72a31e3e4fe8b3a80f001640f207ad87394ccf29cce59520692073a3aaab9f85f4e173c144b16cdfe50a27af577684be89367a3e5d7e376d8b5c4b72c23ef593a75e0b652122ae68f31534b07bd25f553cc5057b799c3e184927f4e0c1bec4ce4905f8e7a899bc5c14ad209d9e5db71661038f01f6c4c25be7b4dfc0d764cdf9c95ba44ab1c0d40dcd0e54865bec79462f8b4e1b3184de1e425d72a6c005903b656b162399d2da76200a28692c61fdd745fd6d9930666d23f897e399daa860182064dfe8ac9ebd899337f863c5949a26856f5134b339431434685bd499b9707294361adad92e50e129f26035149922535c6e55d4b0b40c6b076eabd20b69da6fa8888888388e194529e3379b5a58d191111c1010490302c551fb2c13434aa25061030e829e789e7cf8f994fc200f205e552f6015cb87447f36f869438b21abcd8429da6fdc2438a55e5bdd0022759ccc569ce1c5af7220bc997dc3d070977cb9e1758b04d8c976a2e26f97dbf42ba9acea460423ff0c20acd57d41c57a3043b31811755a86b4fd6f453c97330a142e5b1fc5f4be8ca929b82fb12fd651e3ca3a872f51377224c365278dff2fc454d63872f0ac67c49ba16f1fd8dd60b2828edd1925892f5853af1e20909731f99bf79fefa96c42e90a3055e3861c92c1d9e539f7edaccc02fc0c365b06303e74513126e2f863139ef4e0e322129fbe8f1635dda1c8988a0c08b2598cb36dee63cb1174ae02e7544df476bf64d12920c2b2fbb8db28e174878b35a6c59abc9ce40f0e208cfbb7c0edde1b39d07c10b23a071ff95b5522f8a907b8a61a246d38bb57a418434734e5bad62482f298117434862e4fa3f752a49be464444729021068f910c782184c4bc51d2d8d547710f8c3176e80003065e04414bd3d44ce7193bc4235e0081aeec952e39f1e2075da67cb3132316ebf5c16ea57657967ad1034c08bdfc549d3e989c173cd03d89e14209bf173bc8e4eff4bed6e4e2f0b31853caffdc14c2c55f7ed1a544b593ff6edc82f154af35196d5fa62dfc934e0a5369a30916d602c9ddd2a0716562a932c4581efb8131768451851bb428458d2715ee714accf4583178eca840136ecce24a9dae4cb8332995243eb8210bf6e6f286109108376291ec27b445cfc92ce7062c9cd36cb2b9ca9c94dd2bcad3e3536263d193e50a4f23a4e48d9d9e62c9375a816b8c72eb5b6d35de60c59bb6923c9fec6ec75c45729460724315cdc7ed7c7792ab339b0af34443addccbc6b3a0e28ada09cd24ad4cf6a7c0e44f1c350d261e2353606ba9a4f7914a31b4521827e27bc1bf1d614ce00629b23849be4f8893d5f65124e47db2b5cadb499217459bb9a149c8ac492f09c5394ece1dc7e66f3e06856137aac6949ff82e79ce959573ec03dcf0849e52aa8ff43cf163df094bcc7251b76ebbc10973b6ccd049124fd69cdf04af96f64b33ebe8eb9a307c757aa5b89863994c147ae3dec57e127b4b4c70694d8afb957a57e52530a1639b5c62124bb4662fdaf973d907b11257a62c1b6ff529cd45898286cae4dc875b4c93f0f359f74b676519cbc8df90842e5f9331857c033722b1c7585772b2ac2f71dd1b9078c499952b7c6c762a9329b8e18846a819372ce3249d136b466c7289593a986611a426f9dce92c75de9822ba4a2786bf0e25021188c5bb8f52524f25934360254fe8452baf142c86b0ece2574aade73e3912dc28c45772c8749610c6b86c1b423ff9973d88efc4abec79b1e4f094208a591596525e3a702310576acdc13586dcdc261fb80188c35c34e658fbdbf172e30f09967cd3c7f8e1dbf7cfdd5f135ea51b7d604ccc727b15cc54734644443670830faac5e6253539a58a9eaa3d3c2e73659d72f460f9ce9b667cf2f0da5787fe10f1503eb724e7ae060046b87187a24e65a7fb7dc30e747ebc9e68b93c2d37b851072f4f784b9b59fe2cbb4187f6c2e6c46fce8d39b492a9b2496398d34f0ecb4fe6ae68784444040716330e5037e2d0c6dff4f36bd287cede80837ed1d9444fdc709772e30dfb9fff85f9f9861bec50627c70cf9f35a7dc6883b77bb79e62fc34d9b261f514eeef2ebfb10663c3537373264f366a30f767b409a149831f529d5967d2438386bb355a5ff0ef5f5dcf60ba9db7134c0e629f630643868a1b7de23454ee821b65b0e26792579334fbbe91a1e8bb9e3e3de13aa58c217162937ca92c86fbe2f38991d147a21306ddaf76dd6a73ef53c0c049ba7151f2b9a6bc2f24547a4a29e4e585f36712134b9e5efd4f172a29765ffde9c5b8172ef8c12a05894db531de42ddddf6365a2795a8d10255dd9e3979f0922e9785a4ab24999453da8b08b1e0687637ff38b3dd922be43e93baabd37f79f1e08615aaacba6beabdab2658052fe5f1ca69eb539fdc0d2a2449e375abef4dc1747917b393d276cedc3823fdf493c2e45c0a46cd7a14182d39aee67fc7ae1814f858e142834b6d0afd095e7a0fcd2e713169de708249cbc73fcda5bf343de046133853ddcc9c1627327783094586be1079d9f7ccf2821b4bb834564aa6b162b89ec6d851c67a086e28a1f85895c42895dbcb6f2421b7dc71a784bdd45f8fe408838ccde164e4c891801b48383d5df6318911d54fc7971b47c8a4ea3c27d8af9ff819c11b46c8834b98ac952f89a16e0b766cc00065ac01f446114a6266aaccadfb1f69a4052dd8b1013276744044a4053b7430e00611b4b0179de4209be4b5474444fe15706308f7efc96ed2ec52de8ef4e00183324444467a9c307424e08610d835a14fb6b024a74d42c68d20244b8f3d222282630234e81d11b801843fcc93a710b7bf13ff408bb7d9120d9dc398f8a0d5d96b8f23f7a0ac1b321ee52dc3563dcce08087c163043c68eedff73ce560ede98d1d7042d76c068f29a4948c2024179a609daf36e6f39c847071e6bf9f9e8f9e982d23b7e0332761cee36b45cf3510620b3b7deed6c5b415aa5a18f67236493da57fb7d0e293b43c5116b4c4dd46444466d1ecbf262d69ae57c5911984f1b2783c6babbdab4a5a3a16c4e7b1b9f4ce3dee082f8b84c0223bbbcf5433e2d552ebd891630321af38d427214f8a49fbe95c919d1c1a97be1bffc356e0ead571e54c0ca7e7888808045c043dbc0c13c20acdaa722cfe1e1111e9b1ab505ce363c87ac71861e4a040882ab4f148b7f91c329e1a8190541499794a47a29360192aecfd9c3779b60121a730fbd7bf6c09affb27a6682c5b49f1245eea844a51bdfde4765b364f92e2a9cd27784a4faf854741797a4fd13149122d5198a662fc182c76ceb48482f5eeb5498d40a1c624ded98be7554b09f9c4dbd1961534b467a6f0d891c3c70843c706708478a24c65398cc51cd11f1ad94048270c7e27bb66118fbb8470c21beb18d35ed0ff8d03219bd82dea4e88ff9c142c219aa03fe6ac417f3aaffd219938c3ea0713780a66b7bbe1904bfc397dfd3a93c69cb2104b9827577ab7a6981152093f3e097f69e65347354283e5c1632911328910498444220412218f0871c427a6cd185bea6d2e8d086144c822421481e7268d9d256fd4abd4202411e6acd9435f9c98e2abde3b3a40831044bc79922cff77dac9f287287c8e7b512bb9a87a0cb1c5fd94b76b2f4992a610f48915a75952bcff2021922ec5d866b9db23531b8040c820ba29db8f41e673eb17220893c996993c7120fe9d950e5e42c75c170288903f149ae23587b4b99ad106217e30a7ce597ad9f7a15dff4bbeb14c3ada7c384d575e8eba9fc992903d68de937765692c84e861dbecae16fdad6f435608c9c363defe9a25945c1f9c42081e780deed1c1cd92e532e40e57aafc266a94acb7b21342ecf05565fe8ef13e25eb2584d4a1f2b6136dcee39f9cd0a124f57796d6e5f190e7e08ea4a7dbd613cfad1ccef49c3c49927d925c1287d3eefe048b66e169389055c1e46493ff3051c81b309f896b4fdfaab3cbd011460f337084b82139573eba9684b4818ad72b1d3b49d7f18e8888e0b03303013a086143c81ac8a09fffc4107e62f88c8051460fe7c163ec9040191868c118667c8e327c847bac184c0851039da2c55889a7d9bce441481a48934d9ea4f36d335934a853c1c27bb6a9b12907216748f03ce9c450fb8a97cca09434f91821652897c7b9a86d5e9e941032a039ec274b72caaa4a3121640c795b12326ddfc4299f032162a83ca2f2c8099eb27a216160c52762e3463cfc25040c9f987d35ad9cac6fe109847cc1d8dd52f2fee7ba8e19215ea8936dc658db9830614817cc56c9a498b6ba6dac111111108470e1126a3d74d88acade866c21440b8ea5e827e5e5936af4911c215940365a3a2281102c901e4f322f290d3dfd880942ae90b4416c638a9d4a3e0942acf046ae093393e1e18447444444105285ecef3a93242ef99753e1b425e6caec3a5963a6508e92b6fd722423e33330d1f1acfc4bb9df9142c1dc3a89c16efbc58dc292e7c1a42a2e571a0a0733512eca8969fd354fa8438fa68c8469cea413f6d89be26493f234569a700e97f6729242266067f92f46b3255c79714c7cf9327dc9580eb4e730458812b63d315fd0c7e81192044fa8aecbd1caf7a9f2c005c00841eb0863440222223508410215d231664bc81072842fbb7348dd14239459e75593e0559d9b2f8414013fa94de3f3fecfc4c21042847aabb3cb68e6d82fd942c810f8cbe572f2ce7f0cfb0a2142b8d422b3332d794c33089f9b584254bd87bc3c109a8b976228a937dfa55008f981319c54c1e40bd6a59114427c505e074ba953eaffec7b90c5667ec46cb685f009213cf8bca24c887a74486884901d68276646f7be50adae083672418979e6c627ca7d2a3670f17fd7f789796585a560e3167808f76cd8223fa9e4f21f3f7e593dc6f018f80a6cd4225b0f172d34d940b0410b2ded096fda291eb1d1a0471864b0310bdc43e54b322abd1672c1862c8ce1f963c9b164ad0e9d61231688789eac277a6000e008366081096252c9c764dd53db78c5714343ffff988597365ce17d1293a5eb5cae44c1462b92b618638c5af1523722223ad89b8c32ceb071cf7ebbc3c62accbdb199735e4a27bb2aaecd154f826b231549e25b32d11f1558c6a09addc398c43a62e314bdf7c6d730d737e69961c314e6ace12effbeb56dc705364a817a4a4eff6d3c71f7911024364881a74ee98fa9d0d14c70606314dab486cef2b052f18c88889cc08628b8f6cecdbd0e1d2b811e6e0118d808451dcde432593c21e5d2a16325008a423f498d04a8a4cfc2e1b148240e8883c140000812dabb06d31308204044228dc462c1601c89a21f140000402816464422202616181a1018120c87c3e150301c0c03c260302824108402cd79a0064d721d007b4208431be17724f462e92658d85b6a93caba93be90232b90ac50b5e943d08d09e8198fdc539f0fc0d32fef6f7553e902f9432bcb92fa739ba5dca2b0d4acefd94a23be588101d2166d16d6305a7149e58cbc00b832c18dfbd67c31891f483d836721c8d7ce0cccf07b00655b09dcd17cce79d2c3e0c86c21362f0c19cbfd4b283bbac07a4a09a689c13f24468d51966d64d35a14a589c9f924957ec458ab99db09efe085263948c0a628f1a7899fa8ce166d90e0052f0d0506276cadba33d0562d80a239da4cdd8e652fc51b2d8064ea6ba1fa1e0a9a300ef228a87230748362d6de7a3cc47559d63be127eeb0e607bb852cd153b9012d8cc33b599f51a618fe8d07a2dab51a2bc53fdd07cc1dc5d849a28dc1fc0e541e8d710c8c73ded98ed7ad8af45d8028ae307cba5afe501e9cdf540a84eca055baf8c85129f7b3c5324388a59cf2070aae5400e3740020d9fb890c14f6fcaebb4011d4624b297aa3e8a772bbe358cb28bbb58f74dbc46df6b2a5a060d2459ea7a37e5e37f137523f4a852aba424a876f5818ce159ba0ccebad02b31973c08e1e9f07add890ffb6d096339ba08e47904377976ac07724ccbe71c9e7500101ed8400ce585e75821d572357dbde269b4a60919f8eb93079dede39682bb74b1a30c114a695eb4f4bcb13c6583b3fe155f9273edb5e0c3122a8068a8af121f9cbf12236e0de243b9b133b5b67c2c1c33ff5a4fb797ea6ede7609013b01007482487aef73be90049b8aeb535a5403be8ca22d7f9b8743803b02a7487ed5f1381d1aabba85c36322168cbf8665f0131b41d1a2a9352e480a77da1719e2ca6a360261fd530d340c8d62aab6a701330234d149ef68e9b9ca52c9e3b8c8b2fab9f1cb3a965153687cef05c382b16979925fd5395b941a9582b860094f4e4af2c15bf436bea7c460b86a0d0a5f45a23f801934719b3f5c5666a24e1ecf9e4d0c9e4f0c60db07f037bcdb184e7ac71ef93545d97d98af10ce92e4d1016595461f13927e2aadc4de26889a187b1a6c427cb1f56c9bc6423b1e1c28dbca713f4fb7d5a59bd7e682d2fcfb1288473be136c94c32105923bbfb2c0f039c51dd1ce8ac58c4f932afa2f9f507443ea756d11651f52f682494970cafc0e196574f80830558b9caaa73dfbd7aac67ac6c0220f219540213f828cb8adb1b4345cee7202137a19f0482f97b3ee4a6b9546427b8508032152912a8423a8927e7b03209f2db637adee87fa3708875dd8ac74058bea66ca25d94fc1f45854ed44d9d4a71eb8b0bf9847501fb178142bdb2c14ed2f947aaf23853f1891296aefbdda9346a24cf5867fcd59d8181c2b982141f2ceac6167e3ba2b2c11941278e578dbd7b1b174401ce4b04dd1a063e420ffa4ab152d0c5369dbadfd0f5a101809ef424b0f00aeb0d50ff705f0c7a3461e2624a0c9c6d12592f40c147c002571894c9934652fe032de80dd3ddd6695f812d7338a7b61b68e293a12c450c759709f9f87918dfb96daadc217892ae152055a29d9d5ef9391988a2f8de024deb73116a9eb06cd038125648d79d04867af03d7bc42cdb257db89d06b47c588d964956f1e5aa4f8ffdb7d15d8caa74ea7c7732f476c1c4a98125b44c2cff1e5019ce9a305a8594fc24b0bbf5663f389168f8a09943eec384d31aff925abba225ac2990668838abd2972c2ce699648f2d8c8453d4db4c17b89a1a3d0137010f8cfa291258ada6041f79cb0f64364ad7c715c98153e84e8fefaefd79999d10548ebe35a80b74a8dfc8de1cd694e807d7801e4a1f62b7ea6e5a7c48a484d54b708fa383ca83d9fce8118ec8dcf696a128b649105fad72aeeb8c04eefaeb8d17449b93206ac22436144a74947b6ab9a44cb6c2d8eedafa2bd6460e29fe15464097d36b2eedbb8dee70b41a016fe7646b4ef8786fa4a44511c0042ac56aabd713e25394a259e62dd24ea1eb03efc394ed0ec0a582a76718fdcfd6368e3c1e4667c99d9854df03059a0229d232fb12347b9671d9830ef44ec8ee7e9fb92c9a943064428cf6e7dcd25cb1df648964e1be0612002f5016a0484fd6556243a44abc256f2f1b7fc13bf4b9b5cd3072ed8b6415bb76fe9440f895e60a0ab59445832e94dc5e9397bcfb0c4a9f37f5b5a25371511b2505e373a2a5d910769de2d906fe3ad72ec855ea7e2e2e84794c49b891d2661db85807e5570dcc2bc9a4d5a4de5bc5feb2af4f4119619226892177c99b4c85e385c1e9fadfc21cd6ad73ef3ab3ca73762b71b8da5cc7ed15a0b1bd84e1a60b4087c30e98324c8da163dbfb6530d34eb26b47d09b14a5a6d306e4ac62bea5d47bb7c0855502704ce70c141140c45103280e858afd813fca2b075d72027a36efe951a7c04a7514d8fa53d2bffef812ead4cd7c20dbd5eef0ae1077fc4d7d2b6f9351b0a59cf101898e31cef42555a57369b0072d8a54a82415955a8539215500d97c6bdfafee2b8de8205e56a2120cebfe4454a7874b86fb3424b8b53126638e943d3c755c57715b6eeccb40f8e00a33eac528841d97d46adbe7730de78d1191c123b7dd03dae6f1743d11aae6c82cf561624941e6432110abd6511e54ee8d8d53434746a042e47c4bd34bf276f8cc1bc850399a6f23329aa91c16429f2a566a70779a8015ebcc8c209936223809b2ef0f7bfbb96adcc1107b56bee5cb3f518bd2cff78d8a116674be885e29f5652d8015683860e4f443f543e2d4368a7a508993b014086d9844787d1a8addcbe1fa2fc93c86fff0a2574b95e1ce25e2054ec5f118762e2d68234c0bcd1422e82f0112d9d24f8bbbd34bd7fc391c2c28320a5f083c5152eec76464ce1f6ab8faec2bc024e552c9d38b249e0f191c5c9a064293c5f92a9350fd676a4eedbd974837b110657c33429162f4ab8a642f1c0edb7753055e7c8cfb5fdc30ec36abad663578db3c4b680af0ac88215430fda9ca3b3c7ce735c25861f13cede0303b837eab627e23ddfbe5b574477250b6b788de42f65d3475a3eaf42702ddbc5756ebfdc62e2b6b21bd7dcca73cb35b873fc0bb9cfc2e3ce05657969f2e1ce27e636200ad929442ee1294219b971d5f06c3f589e16013a8d3d13fd504b45c894863cda7672b73099ca4713009f819de6dc2a541cf874e3813dba783eba1a4e5c3109b57b002b6d47a9aec5cc61fd870fff2fee393fc91b65ef89016a39c894b853175711adb7829533c64e29a2652a5d463b3f33ae6cee432e307dea2a5a1dd75f2f589acbcb952e6a5ce36ec99e22202e9839585d666ab594db6c9f79c3f434f170087183948a9440d617ec480c3475fb56a910a351926df808ba108109c327256fba41d0e7b0c029ffbc9da8e15fd7061191584bfe9151f4c0b0844d7789d14e5b8e9990972e3a1e94d76b641202967aeaa51ee1f01c8c6bdd604eb59e8cb8ab50650e0f4812ec3ff51e4ceed7eaa65aadd34dec1b42f3b73884150c19f30fa8b66dfbd0f168dd4fe592348fda005d8aa988400ca49ee059c7584c15e23669a53ba96094241f8426904f202b13d374752d2a621a08806ea51c11d13ee9771c5378aef583f107c4b6d106f6f713d41caf56217c3a60736ac4a4e7eb9cf90801e2390e273e07d92cc4d4b83522042e08c9b3de71ca9c4250de6598dfe9608a0415f4346d00d9ccaf4b8d5cfb930159131720d464fe85658286f670365b631cde28159ef4f5117e2cc3e18833b8a4fb7972dc97b4d34c40576aa13a3f015eac809324de04493f345dd2120915eee240f85cb0c8218a7c6299c7d5c5e450a692741224c9037bb5ddbdcbf5a5a080fe3f9d54c65a1e6149014cc85dd81b2c0c1ea7a246d517d3a498405d3cf72fe9cca010c1ccd85d8e36b7938e3b7b6c8c9fd25897557637cc821bf65fd4ce16634496bb6838b0a3af6dd1cee96f9be774a7a2fbc74cca4480d3fb6b2b2778fe88b0eeb0fd413ba1349974efd16137e00543783da5b9467297ddcfa97305a4fc9569d4b9ba792556a92da4f036685085f9fa5e089133b656d93b6217b8d34eb9734a9224ff93e54d3b729544e8be4c98df29ae646da139bf41bce654223a3148d0218a8a9dada930eb8f86272d8dd09c110baffc7744ffc24921a334ab58d1fad2c1491690d73759f097b27916060fefe809b7f39f513bf1d08549d90125aa3bf802b5c78364b1cf28dc769c5e41d3e1aeb4321b5643df389fa566994309b5ec74985b1f73978723d7589b5bf7f5410756f5f1697d3f5052bbf5f82b2ab462d0c975562d20f6e2bbbb0af23dfa88f4ac32722ec151c414a91025f605b5bdbb1e5abfde4a6ab1e860eadebb2431c9d97fc95353fe6f817b2c604d116eb990dcc5fec0125e9e2395647bcae4129b9cc9d2fde847cfbf94984bddf1e5f3ce74b843808b3d93e6c5f52b7758804a5314a927e80d8bdf6822fa31a2983421fa1cb3df2da167c88a79012975cace86fef07a21a8b5a05ef4e52209beac1f57b99562ad4cacf24b5909ebd930e1c0bc81807fc539de7f82037de5da25caf1997418d410c45d5b4e425f2f4f46070132a1c48ccac92e92e3438568eda58d460871950c2f5ee933531b758cab9b3f435b79c8b2247153a7fc332685375081c1b695df2ab1738c1cb2d943d71098c9a2ec19a20d85fc4d255791e99f56972420c9ebc386b3e0e2bbae6688e41b14b9d80003301c04629c08951b9940ae87a0a2f49f49d973f3556d156be78a700cf583da81bd2f908187ce2ad6e83dd2510476f01b5ade97d6681d78f1cdbf6a479d9866d135350c06caa90beaef2d3ce78b1adbc7ea35e8cf92068d17dc592d562aa17cb3e1e8b875409754c5c37b8229a853bd6260f3a60e713e1300b463cccacb62e119dec93acccdc1122861e6e671bfe49584f744d4dc7e4e2595ce545d4ccdb083f857771a07a0a2b5b068570be2ca8f5481ed0dd52b293ac8cad48e685d2de4aeac7eab2f49c61cb792362a109ee5f5d978e99046d2745a52ccb4209a6ce420811ccfe53c2ad07be128046840cd98ccb06a93298bfa917d87f2efd94efe3c27b07697cdbe4d0a9a4d6af4599b75092ab7ed36e4dc0b78f073f3964f1940a54a1401717df666eaee12485a1f564f509dfb74997ba2a3d67d1c26a546ff7ec6b69a7b0ee9292545dd94872acc865d3e2ecb242b0a4ed20916c480163564fd88deba5bb1ec32ba470d799c15b23fefa3bbd857bbe66c9ff8d042b6555129aae5baf4851eb55d502c93cdbe86d9c4bc54424949dbe8ae7fe3984be6854f0f3a8186f10311f6ddeb07d7e2ec1fe4e1d833908590a08ab29bc93f6efc1b2c24fa46f8c7fba7dfd0db882627f9419aaf63f1b69d3ad27970e701b9a1de501c22018ec54dd05276126378670bb068245898c8fd3b7d0ffcf25b17b6b704af532c4cc319d0ecda587767ec36d232e9182a2a254a03e7ba2f38583a2cb1af8d18359d3f2aa2bddcceb12c3fa73f24e0e4ffe6964fe7538597b561f4c4af4ce2af87109a5efe67e6ab50ee75dc5dc40e8cbb62cd51747b77c7779f41134ae7d935904532a0d313b9011c020fa26d5084c0a4de6dc0f3611a813e8a39c0201846706f21cb18d591adf8cd061b120d165bc0432535f682b340767decb1ce5831f03b5b7dfc03c967aac0afc6b898d1fa52c23cbb45eeafff2cbc93059cd1ca5c32e664986a9df9974d921c017d326a3410ef86c40756f00ffc79aeadaa66a8546125a6b8d9ccc7c0a036f68d1a1c86e0bd7375042315f695ceef2712524fadc7c86441925c6fe314845be3c2eedb908189ec82d3f701450be8bad0a96be94368b1e5651a508258a96bf09c85a2a209007e68538b4c419df16bf50bd6e041e900296a6a009c4fc39717ce61511a6f129648a0e69fe0ccc84f83b808753d55b9828cf00d4f598749c861c969df399c1cc56714d9fb4db3839703aa95b64916243c23d0695a4f9b40a400c587cddef104736d622a2a9e8cd91c5de7b82e44281ebfbe7974c5cb6c39ad8c394e58e5d4619fc189f764d0e14cd1f5d31213a7b1fda97c13b8cf726b3145b27408d7726577b4cf58236803ca5bd6e9c631f56a921fe68184260d7d0038250aac485b2c8057372aab0ec631257d223d7ca34f5d75dbc8c5300b80e183899480410a04d0fbe2ffdc0370b445b773b8f8b8b5993838d451641906bda778b150c4ef5a77c0db1503fb9efa15115fc335f289f301a96ada71d8044cdd1c65e0099a6663bc07b405efbb56cb4d83337e3ac253fc26b8894224b87b61a2f81e11efb2704bb0c0b8dc8ebbf3364f7c956dfbf7c7dc33430bc4f86be75966af484c4f94859ac5589fded56c93f1b58d75cc751ffb7961d86553edd55bdf74fd84f11ed6b45dc14f970c605cac58c7f752c4d6db762a94bea70f51f68f18fe1471ecc11367752f5b0241978307a15d42fbdbebe2c1567d2f1ae9e300cb3c86b0bbb309e937b114e3a5ae648f67cdaf7553f48c6fe5953bb47e5ef816a51b0fd10b3acdad86e655d6fb56863bcbfb53c4a9a477cdd58e443fde91bf3a52bd000683a00ea0c0fda26f0ae22fb8b622b82942581a150322a6ba73175942875621e8d085ba07a4713a3fd680d5d55b67028c6ef1d1a114895f7982098d9b0dabe1e486f92a9df32fb14d00e7877c470c09df5ed6cd5e732309c07fc9169db440d615d92357528fc7701c02ff4e2ef7084b6f0f78b8dd48ce89bc4c65d9ad4d4d0f33ee084a4b2118a3252e308d5925618532a8160a6098b4101e5a194c12ba833e30be43bd439fb902adc2995372999326c72f0d38cdc9f75e33f469915b9c840052f549d3cbaf21e9cce0b2c3dc2c399cc2dc59058b4430cde959b42ed42db79609172794158cd94d104b9f2ebcf4e94249999227e65da945e5ae142579e0b80c9ca116d3272170b8324cab0af0cc556b5d434c08b895948982c9346601db3a8b6d810e7253a75b7fc2d5938f2a7dccc1f9eaa350a7765e8189eaba51d08bff438d3a706f020bfffd3122df551b1c4d1408397f9eeceb170e15d1785f114e3e8b29780cad80e1977ee636d8dd197d3c724349c8a16ccde23667cc2c9be6b6fb4534c3f92b00568fd913627a4d1eb23a8185166a66547e10cf137a97784da577cf3cc5842275c723286d82662b8082f7b5a54ae7df90ebb19ac5232710da98ee1de6f3552b2017473297647cddce69649b8865f7be5cefb60af0522348a2e0aa56553dd547487eb17aa59dce04f30067a6f7cd749621988965b9fee25d1bade47f34c83501bc2a3a9c86532738fa725dd58402e3ddee45b7a31a297ba5619951cd2c388d60ac9c55462325b23de38d6a8473efaabc036263d871f125cada48da0d10419b824dbe4d10339e435ea15d2683140d452d59fd8ab863a5124381a6edecc9f08a3339ff223d34bcc62071d533915c7796f77347a36adc17679bc111bd54c09d555328f7f815675bade03d91b1bebdd55a28d8bf22f23b9ee2b09bcf9f6dcf68335fc3f2b945df4e262323f12c5ae529998d51849f4b8ac3a0ac4985353490fb080f306c1ad211da5546e41f0fc327f65f5369d5c90fcc8866526086f99aede3a6076ec8435b9c25b9a4d7898a58e2bc0f0fb09fd9965cd9bf16480b520126d5ac83e801133660a7cbd37c1a08a6953101812d86b6d8ec6cc6b68cce1b904c788e5955070581e8afd678a168409c00a353336acbe09355ce288206d30b2ebb4e97494b0601747e3463b2edf577948dd3eb8b28ae2a9da674a828b9f5baf7ba7584f8a11b9517f31da4a1d200a2354ec59dd88fa0e3a21ff1562f7bcdaead0e2f7159befbc977ac75f6b54a9d1db7afe8291fff255af1e86669f69a9e73c00291cf44880c210f9341c697e0dccef584c111cec1e6adefa4be8ac377bcc63f3e0b3f6cc9caf08c0559cf52c46193e80fa15554ba80a8e98c0816fe762f51c8bc2a642966de86b32adb4c13160c65d144909ee2598157d53ea4e26b6e030e0a9dc31715683165b1a1c2804c1e52ad6edbb8689d1459b7a7ab9f1ab37b870ddcf2e9ba01f212f9050f7540b5d78bdf66288730eb63f4c2d1783d3fd6f82aeaabd8357f17da869f6c7e3749f1b4ab3a68fd529a94d5ef07c85a9292ed14076240f8a663666404248fa762f7e65e01fa7904a4ca4a5976465d18987a4e78ea40f11c9aea15ac355c3efcbd85de42ffa1bfc444a8f105170ed1f27dccaac63a4d443bcf5440002e0f2b189f66ec164218232529c5e1b1d74f597de78acfa36f3172acbc0346290cfd8c9c751c6162e53068c998a67d0c82d693c42c64d261c20b3e8930bd47ce5228ffb3b235baa061922bb6e874ec3fb9c4242428c9df9e1e124879b6a5c13dcfe15c6e6e5465074e5b7458bdeede6c1cbaadcd7f6c43ea80e581058297a0bdda85da819b08de46564be350cfa637dd986ad691969f39a08e7ab740322f8a3dc3459b22755fe2bd0959504e9968df350d07443ae940c2851925526efd68ecc111f01ab9414aa2c0ad5f515a927e17902918c456f32eee84d8d89ca72760ad6ddd50eccbef0417c40c6aa2a176ee5c9f961f0d41458acf8615b59792d1114e73fda49554cd0602177ee6a360d23be76a4f32afed9203a4b5a19245eefac289afa629419ecb8022cb78c8ed6408d06171f51569b2248f70699c178eb116610c6ae48a9da253b92433e4a380c4f1596049a85e4222be47c80a879be0964088fe775ba63a3e233b0c16c9ba3cf8312820e739bc016068458c898dc4782e991e92cf28c61f457f008e1069c0846c64bea1c780cbcfcbaea5adca7b6c750c1cf7b394b164ada44d9fe8f1ab641cc58aaae0eaf652d0a45a1dc9c526ad04891bede5d12b037f6ce035efe213f1ab34356c427986fcd4d9cc84a33ea337f7ce06c47db34b406b76a44e22534f44dc9e7074ec3039e7ce6a2ec680d88b10802948be46848766001de4fc4f66c80c345fec749854dab0bb144833ff429b20a1fc29290cac7d49e9c2d7556c1dc0946a446313d3aba2a0017525c1aa4d179aaff06b091eea6b598a13dee84acfc0fa88ce4cfcd9f1030b8f17807c6152e8ef5842c7d19a9d501a8dc4e36f9fc75be3cc4b942a380b99797814f576fe5727ffeb1350567b50832c9f9359b88aa0e9da5657b5999174fe0a15451272fabc21ce9f136dd79ded0002138368e960f68f9b119feb28a7135b06c8422ad90b28ecf12ea9be2602bb4192f3175788021e0dba149b41ac9d821a5429898eb3cdf7bc04871b608594cd20294f4fb24597fdbc7a252b36a53971e83bae65a000ab052452ef874218d27fc734c4f7a24976c4822d09afa696d5d638f5912fadb48ceec98e273cfdaea560c9c5fe8ff97a5ed83ef4af8b762f818a14e83fe346bf00831e538494260c03299457d3a4060407a64f429a6d60ccf9062af12363eca57ba155a96142bcadef437f1b034256409d739e509efc91a1ba30ea4ce48cd50163dc9476236f844ea3d9f6946da609616c62a42d1fdcdd2de5c357012a7a35bfce4783dc900156b4f32d472e72d60ff66cc7bf347002c78c88d128ae31d13c33ed4c8c61586d2cac34192d80521407fc8392e8b5a114c46957bb0c99a76a2bb785d8ab479b9715b4be845b9dd0b13c19c0462298c8340276b68cbca386b1f872668687a9b3bfa639fcd99e90df11caa8493bd433c0ca583ef3ba49fcdfe48e140cd2f82dc39cce8e1dca7de58b617a7dd3a8219fea94b59059022a1b907a1da21e41b81908bd8750bd0ee4060f2cda8b7e0812b564fc1bcc7772e2d170f716a2d39a8abb8b584be2fbcc63948e5deeb9053d6be966977ad8527a5a0bd14f4448ac0eec42c4fe6a0ef9c8b614aab894ae16a165dee45c88b0e9d4b0a76a79e95b94d849eb3250992b9da25e6f70bb5c89287caa0690250c93e209a61b5813aa44ac2a58d27c68eb2538656ca4225252f53b4b3089dd3455435a6d36ba8f390a68e0285398966e9aebccf12fc3d9765d73728be102b82dddfa5ca3f75b27667aad485f384773518f2b5d810a3299093c9bf1f74b26c6bf63497c26bf14f3571cdb91c45e3b32cd758f7bbdcce1a192bad5a80d3b2d9f42dd96e882a6028c7745bbe9d0fa76488e8304a7e5bb7204bcd48142299df3548dab14b26e1be70930b0aa1c9112d3a389a6c1465a62bc7f036df61de2ae21fdc16a7b96dbe261e661c93f3be9f9ae431b72074e2989ddcbdd4bdd39eb90028d7c6f9100d93abc3f43c4b9d3e4252fd905c712ae892b445b43e1454a5ba068d20d356e51e34bc17783608e7e15249672990328024201c05cad0665c468b440dc4b8b4d87754b892b5f439070ed44919b5e1236ab1a92048b61f325b67ab228bdf4ebe50bb71fda9b6c468892e59e7ca190bff79b2a543c77003b5ad5ca69a6945e56bbaddad29eb5b6d86595edf658b785e5fb11357b844b2f028956db6880d15317ac90a181d4eb13198ca88720cfec3898a2a903c8ce5f4d3f60081e5af52bb4e15a4834242318a8055dcaeee9b613b31a57c756b6e70b22df770ef6434523224c9e9089abc002fcb5d71b1dd6f21a652fb979a54e171ab4f351077b09f1a8325a586a573849d3b1c1ac13db341955515a0e8b01d711a77a074a9b62a810d10b90ac29021bb7687797a093ace59413bd03a755715489e90d082b5774498044185cb3a144b8c0413d29dd9f4c0050992f9b8ab70628f67a4d9448b3675b459b972be975b2d889115ae22c04ce96e44a4f9464ea3b6909945054c2956e193055ff685fe70e1c7b20d37539aa129182a8a0b8e2355c45f3658aae138b410b5a9c4b6b5fc0f411abab2590d330883a4342377aadb775eea8d102adf7af2da1b0f6606d0fa9a63756e0bf760c8489478312568646b3451540aa5cdb95d2da5872a76b7e1aaad7b407bddc6bcff70102f44b094bb36b63a503d82aebea4b6bb87558a5272b8b3bb5e91406222dd4b7648e099677a6a8b70279efcc927cf3e0717a6f7117c314eac906cb385fac23d4576c8165d75c49f91254ae6cb382a7c73068ec5a1b4e5d6867aec0e7488182f70f450aef1489ae4dc44984708ef14563955a6b993d1d1b11b9378461eb41e3a0383a397148c3ce212a565961ef6deefb388e699d07430f2b576e1d29ea6a6d722c30236209d23545702bd656d778b25e4fa09c25a5a05f6f5a616487d507b5bdcbbac307d38f489aa4202c3343e5b5cfcae0a811e5952d278a5ee5dc54379bc177a35cb4002f51f866e8ea3f71cccc89607ee302e507ea494fe3d1666ff35ef004a0e262d2dffb5858d1b88d562519153d3fa8d5d2a12e56369221c1e5a7ed5e8c15a83a6a892856bc62fec5ba32f6cb817142daf9840dfc524112e647d7d531c4a92c36ae23a8ddf9e4a1d7b840bf22589c09cfc7531d976afe116e703bbd79965a749d05197b57ceb00e253de116172f2af83a5addeb3a98ab569e05d7801d765605458d71f19400d9d5ebabcf1a5751952351d7e9dae0ed321a0885a59aa8c93393c9be85d59493e85aaca95221ab6f54ee5a3ca7d5ae37e65be99ba41070156a5fac9ef67f7536182c4673601371790b3bfe29e50fe3eafb5f5a3be3a011b5cf7b2f6134442450018a4cf3254b4e5341d6c829dac85302d92e2363621cc85862e3c1f08d986058c350dd02ad9a18895b4f4a57b7f39ff4bf587072bf241832d9b04003f3b3d1429e25475d2d70aa4d1e543af98d47c4e054e8a8cb3ff784785e22d5e435b44ec122f6a8c09980aa9a59a12c445b6fa2831e3a1220fba239430fa9114869899ca4c32bdf5d5811273d1cb8e9052c85e45e573198b79e6c6b905b42119a06729c6161034244ec517fe9c603037ac966e552ee97f82e1d7be9d525e380525d3761b1198552baba8967bf6bdf244dfa894474d894754250f309db6e12d6db678f15455e4eca7f4af11cef9f2936f7e494ad87006ce07889d5aa93969645e9ccff670c4e78b2c36f5d1fde9d472e9a4aec810582193aacc81ee2039bfa84df50b84ea28631d2750c87713f2d890d5fa7e045399e671ebc105fabcb7aa11544edfdc74485a41a22aeafac4c3c609968fa837de551d0dae765f7384fee2c367146e8acaa15565289af029d24615f88107c7b1106178f8711f99bbdd207e80e129b542a76bd5249ac4ecfc260c605adbd25261bee91f0bab2c87e5bf874e1a58fe2586a641b6f53ef13d8d090f9e173f78b2c57de94fde77272af9167613939949ff2443b0c09610effdfe7e0d77a1c3b1bd3f79e2fd9e61767564639495de28ac69e71df49e0f11c02ae1d4630f1a6a80296dc35d4f245ca79230bc1e6ad3aa7445b619e75678e1962ddcf2939139e31671db3dc091f024a3aecc71afc217f7d0d8494c06d3be51a7607bd5792c1acac82bba1e7b918be7b44a63b2159486188cfdd05e9e59731b8e72c561423f49ac4d9468a56f3cf7884d64522f04737a827ff139f413164ca50b4966893674428f00b94b7111cdd0e138537ae795c0b4540dce2556925b520468591e939bd31a12659cc4c9b5daa03bbc72cc9a64e56a58c515dd46a5ef0ad063c107432a8e247c52108f5132f50e7106e580a9b7da6a8cf29a3042c75667c3c8bd0d95c8588496eec0b493e47c74a6cf8266c4048ef00211058610b927000603a18fd53249eafde245bac7e2c32d15bd2081c2fc7131b1e6ecf8ac8bd463539e02c78cbb45a564d70eda92a5610d6672641552dc080c8c19341ccaa88cf8932c6b3e820137e23613107e5979f53620f5eb1dd2110b22fec5ee9972ebe04899393bae98d36e7697324a1b6ff9c5547897be909a89e687801a4505a61f3cae94c47ea6bf192a2848152ab0df827c1b9aa0ed3ac00f2420d351a3e13c830a00fdadc267bf0f20191766e206689a1e19872543a5fef028f16a7be69f8295b87f9aa0cbbbb36b52a632e4ba4058cc61e050f5aee6a12ab1b813eee036824dee50ed3e350e013915093d3650cf138b51b3ea403cbe993b07fc230af614f08133483b0020d37626f407d86382538a71e315d8714e6ae3db2b58e94d6b92431ea9383ac2b97c922a4d42c680b1392d52ed8e6e02ab7bb346d08ad72022eaac4190c3340aea69003033ccff33ccff33ccf9f73c6f715ad6df81b33534e28e9fa5493bb228504838784e1eca36f11ec01fb0907e3335ee90bb40b450c7686605c2d57fc63ac2a294492265937643b5c6a8438899766e5e23f7695417499ad43c6e5fd5d10dfc69f4a990f4492bfc8f9ea80f0a4c88ea1c4ec8afa1f50fdcf506278c95efbe1edcecbff3829c9dc874543492d9feb35c57cc82a6e4bccecc1dbbef6a0c144b5a387e43c41bea49cd3a59a07328693ce92f87db2784834a6dd106d9278e60e98f54a8e69123759ec90d5874b259b2651cb3a1873ad59e99eb6413a9c3625778f69bdb23950164377532407523cf705298943be279c9bce5a7c068746cdd25abbd6e73718c2663447d30d64dfbc0936651bdaeee9bc265ae699920d46d79c3fc5f020feaf41cb73669a2a6a59ad06c54e12422f8a6ace69e0e412fdc237aea5190d680cd14c776e1af319ce1d4acf92b8169763864fcc491227dd32286a73824f9bc79f0c66cb6996d173f7eb18cebcb9359fb653573118b5d7353375c748c3d05d5605bb90ff32c1508c7c37a1f25f30e47fbd64be454b2f9c73baf279d8d21c7681cfbdefb41b2e3c1db37b5a395c7eb8856acd3beebb4cec0eb5906870cfbe2e0b854f7df93b8a6bdc100bec8c887dffe6eb105ec1f210afeaf2bf21422b34bf63ad72f193fd553079d99870a9fc2f4e053f36e6a2a849f9e25328469b934f28f774e25278939ca46019ed4aee289c9d2ce7d5c47a9fa1508c7e7be69c2790dee182c9fe84749c50122bab5ddec4746f13a8bd964c629c09941c969635e759dc2538a9e9553ccaa66d94f0aa9b54927aa8ef9424f4310969162dba3405092691ec13537904aeaa772a9c6433e1028c90187e255cf20d26750b2842bfb1a3f9e494ec250b204272f0de60591b867167c2575a278c64a998bfadba60201519dbfa4d4a2674c0e036a7985416e2fbffc2ad9e1899f3168ffb02f914db7ab32696dd0b4bb44d828f871768ceb68a71dd316677a1949cad1e76b24baa8bc25dad49bb714fbee4a255b9dcb865828ba4f00a6fdfdc268ec92d5a4ddf15bdfbde62628b4ccaf2324933d262520bd3e68cf6c9e2d57f092dca255d7c8f929224b96416650f7fc2b594c8a2d4231a329d5fce1e0b537cea874b312c8561c1ae7daca449b21ecf2bae89d4942d497ef7bae28f1759af31f3096f2bcc541de37c3435aeacc0be35e599c9b24f57610acb98d4b7c3778c2afa74ffb71b54bb2d960a4f2ebd13c762a8c863d44e622829639262a7d0d456e393866f26cd1465ac6c628c29689ba09522b192e3768949e99218294afe55171ab2ad24b1513037d3eeb1e375fe258add6eb54c8c5728282fcf38fd319be4058ab367f08f266fbf78ea13a59ceb73e80d569d294ff87e826c4ec164f3647582881363c3e660156171623dc9ba449352ce196fc293ec3707398db15e4d24d849523eb96a8b6d263cdf93fc3bb9d2a998d0530ea5169b4bdc162ee79454742a638937254f216a26c69395b0eb36ab3b5fab98944894dfacc88b4e3a4e22cb701a4b58f7687292385fed6b6f17895ad2df537eaf0c2590e8720e97aef48ebf3d02d1c9958ba9f9528a4a0d47d4257e7c49294d8119d4680497252ee6b7395e20a8c108bd3643aaaf6511769a891efd367dc983c78e1c28c2ac4bebbe3cd6498024a2fa18a5ea3168ecbe88a8cc5b2e7dee1ce23229f86535d916d430c427e618ae4db8be702904aaa1dbdda127f845085f472edd27c9645b89418d41f051366596e92aa821086fd35edd3b7a09265b231056ae56c9ed9ebc4b1f11110104265e941c99a4cecf921111913f90bf7d395876dccd0435fc90f8355d52f2cf8888c80d6af4c15dcf766159b12d1fca6d961fc4e4e90f096aeca1fecf7d59294b0c1ed4439ea438652668569df2d0af47896f491e35f05049628ecd7ad165d358e30e65f8f071801a76e81e3b78d0e30c1d41809cf1430135eaf025a1e4528ee924d177440235e850630ec7dd0e9656bb93ff669411021f680008904581b78f0d8888f8e004a1861c32e9a494c3895dd39fdcf15f0316ccc00521f080077c04e911021d3ca811876ec7fa4b56754444040e9525d1a3bab6e6f43df206e3cc652c223798b367ca759239e9d32322226d2895ec6e26e5d565100535d860caf196554f5a3b5c80ac61d330d14edc4d96a30644bb539570426f92ed11119115d448432bd9795637de400d347469951b258f67584aca145367ca0cbc89cee50d1e256baa0c9ffbe5efc939cccf92821a64b0929c7ff4c337821a63d8ca7bbce6c3811a62e052d4145667190983f2362129762949579501864bf670dfbcff95b2ff1da8f185723ea5754327636d4644442e3d50c30bd598ba6438a91111910fd4e84252bb7aa638f12eb83a222292685c68452c2afcbe24f1b71111111d234076240435b6804585ac7ab134e5fe888848072850430b6dc99de4d7e8c966f51a59488c7f5b0d2ce0151f3beec84b9d9c2b5c4255fcec5a7a528e5a81f0fb14fa4e26dd3519a8510553ae9deaafa8cf691b1111b14003b00615cc976ed42e5635a6607678ea54b7f09c3b35a4a0e85b7fee5ef09c7a0dd488029b33965e90959304cd0e1f2e78410d28683ae739b9269fe0ad663a0df99d90a95f484e78668a2507359a40ecd9ab075379d46042d969769deb7f734b3d6a2c214bfd373673c1ddd34a38a2c2e48ce513f4846a24c1cd62a94294381212f5d62a87cfd53802a75392d8c164bcc4ac8611b4dc4db71d9d09d42802ae529294c9ea64fe1a4478b37f548a339549461ac350c7c744af7e8bc96d619c4e8c232326e5b68341ceb76b958ac070c4ac4a63e58897eb177ba8ac9a7b110e68f8c2a4b95b32fc7f4ffa7cf0580190203e78002983462fb6b3b9b429c679919c34893d9fb5919adec525ddd349721fcd99d605e6314a684ffdfed5b928cbc6fd95ba2462155c34d6a5153a2e86aeef16f7794a97d233c57851a6610bdda48bf17356437e5c8b9350dee97b4733bea3c53a61c92f5e67779367e189972f4c89dfe74c65f1894cd46ce662d15edeebd824c3a2134c92d3b55f0260041aaff82d6d3b589a9aa70c0768b8a2381627d5a336ad8e2322223bd8d1ad6853a794765247ced0b1831d4d831585c7509544d992364a65ac22e96a54544b92662b664444e49c0144159dc9bbd75b3829654ea1910a442efea5aa14b7d33f8200e1d10232766840444484062a3a29b5cc7d3840e31476923f4b732fca4f698a2cc58ea94df618f17d29d47cb9ebc7336bc42385265ae2bfa5d419059ae49439ab6bc7ff6c4719a2a0cfddc49f927faf21d0080557df7e1b9df2c92f826253cb9f1f2d3c9edf3b70158888ecc07f3c8d4fdcebe16e4a4e164d12f5c1d1e1031e6678808627ca7f619fe6ac111a9db84cfabf4ea26dc5b939514e269364a27fceab4d60e9a6c233fd4aee4913dded78ac184c8aba66266e510df1164cd2e819268e2aa1a493d45d3e511a97503e64729bb5cfd2ab258ca99a3159b42cd17311d0a8041727da37064f266e8d888858a00121a041096a354864f4d5d900d961684ca294c4125a73361a92304a8e3adbde6844c2d12dc94e129de30ff701066840223153e712e24d2bf94be311c9af5ca45965fcf0e1011191327ef8f8a5e188da454b2a61c3558c25ce3dfc0c1df80ac8a0d108fe7389b9eb4fc7ee770eb8193e60c1d260047f17fcbea67e3eee8b68a2c3a9bb879e77ac08a384d9db4c25df3e0a281064070f335660031a89307db7b3e79456d7c411e1bbc5d9123a35af36340e415af5caea48c3104a4576d8922a9958960ff6053e78c08209d02884de97b6449373421c442ea4973508fae32471936da3bff7000708e2d0969acea653a85f8cd51981303bea25f1a41310ec89d1638a93d215e63f94925cea312a9e75060d3f205a39dbd23e94a09615d0e803f226495f793ba658250f1f3e4e0b68f041ff3f399a7b1c2921df8325a78b9d177f993a1a7ab85256739abf743e3179402b9358592d99b7cb78d8e6a674fc2b34ee70cead7cc952ba4d274ec30e87dfca9e2acd626ed3a8836b3998e85e6b0968d08149d70c91161d1111a1008d39b433bad6211daa931b0d3914fb9a45b4c4c492f691208b02119191204168c4413349b48e33d7fd3c69c0a1b4ee155fb3c6cbe9e1638793f1c3c7c780c61b92cbe436cded249db4fef0a1a3c70f0fb2011a6ec83f63d33de7671d417e6c10203acad8f12348101a6dc8726ec51c34cf867c2da896487d4cd86b7055b7d2ca58ee18590d9b6092606a1d26a57e69c09245fb96fd49740a0d99d0b12bb442e724446740631ccf395989b9d4e441af384ca7d7b85f2f4b29f7f13d42d03c768c6cc002365c510eb66e9597d652345b6198ea6f937372ce2256946216327786043656f1a5b4681399a20ac35956a8d96bc449928a7bc552db665ceb1815d8408595539aca9ef26026e6140957e2daab055160c314981c2d6a0aa6de162d13d82845a9977e52ed660ab749618bd6ded697fc2795364691a698febbf2b2210a329d6cfe304f2814abd061acaf911f1ea48783e2102bae6695d61eef4f5431bfa9af3785578a0d4f68e6a359633ce690754444a413691cbf8db654b1f2d1c006273097bdceb38cd4c0c626f470ed14a36bd024e70c6c68c29cf41836674368683261baeca6d6270971b6c00626b62ff95e42bd32257d818d4b944e927b2f7cf8f5675260c3129724bc7b4aa913f263a312fe9e347d97c9a64f4e0f1b94f84a8acd6ede1d3c536c4ca2ac9db56c6539672d2591d0ee9de39c2cdffd0f1fe1810e1b91f853ce1543db070953d6e899fe2b203e783019361ee15a9bf96daeb1cbdc11cf5aa4574999072b1b9158720cf10af6e0c19a014444c40623bc98e4605653f7a392055c408118d858841537c939458b9db5838a28635f9626891351878fca37bf9543758838cd337df610d93804a11d33eb67137a5e1b86305efbf9d44a68a31065e98e1dbf351b84b863bf73b6c7d564e11111111ff4581e780f1d3f7ce868818d413c1bab9d5fe7d3de0fd81084c15a5356ba87cb8845446c04e224896d8706c9ce1eccc0056c00220d6b79f354dbf8c322152e53753ac9f3d8f0c331674cd264de544fd5461fe88f12d34aaa54a7f9d0a538b114351e3ba47b587e5f4b8ca7fbf1aab5a1073268e70b17ff27d6d9c8c325cd869ffd98f1d28a073b85cf209f1bb943c1e6e47c3945cc3d6f07d4fcf44bf3f9f486ebb0dcc613725d63a8f8daa0837a714ad058a2e4cd3e874f63e8babeb817bb23872c9469ca267736e2501615ff3d29070e85ead4d9a11e2b72c2635d50071b6fa0dcc74f9244b9306ddd508fe7cb959eda6843966526e3ce3d975cb1c186fa2d5e8af39bb35866630d5adc2bcbb11c4ed7e16458a01436d470b6241e44ebb632c60c33ce48436212cc2b4847f7fc9e1fce031f3cdc0c1fb0c00a36d0705e9ca77dfc8d29e933947df3c68cf917e23a665034c6d2d6d7efa54c19eeb0972b5bea904f910d3264292591133b1b03e6e749f37ecab1d9410ef860430ce74b628fe5362dc94cc280ac26e1d41de440c7aff3d061010bb860046eb00186e6eefdf3b5c9267cf985bd9344e97c64b4b70d2f984f9c1a6fe9cb9665173c2fb12aab84467eac193a6e60830b99c7ce21938c5b202f49111ad724690d3242c68e1f33b0a1859250e1315478cd97e92c9c3c478f693d9bf3931111111eeb418090d163870c6c600113e3c34f5986fa585f41ebb41a374a63ccf758015db938397b599415ab806887ceb99c96595236a8904926adc9257b4fda36a68007b9cce9a48b92df9f810d297ce249b1fa9566cf3b35b011054cd22273d23662536a030aa7fa58322a964bd6121b4fc892ea499de14d6cfd8a60c309c6cbafd68aef4bb947444478ec193ae8808d26b4498a5b27e707ff776d30019bcde1b11fd2164a54c0c3c6128ccd4fddcaaa0e1b4a283b2531a35bc349a6b5c0461268d9ea9c6294cb1f95111b48c83eb62d9dd758a718b6718453122aa65f6f0f17b2b76184e4ec24b1dd0411ffd4076c14a1ce3149493c5133625c1e9b031b4430a282860a7d1dc3ad166318cf9af49b31438618c20846524ae6f47a81b1c71375ff63ea890c7f51cc5ef7a9e4920362f8a20a92b69b63740df17ad1995e723f3df1ac42bc58ecb3e4a68fc5702523ef3f9c032222ef3f7c0462eca29c4abef431fd2766a60bbd7f73c949e72a1e8b918b4b642e6336c32f67c5c085993abd75f9ccd49eb748ca9eb5bf92790a95440c5b98cdf773aa0bb23f6d408c5af0e92d85126328062d36c17ddca386f43861327aecf81164052bc62c0aab18154316c62b31a425555320462c8cb2f943a650afea0462c00271ff99cd954fee50ae408c5720bb2136de2ec406ff879341860f1e2e10c3157ad69aaa707262b4822be9fdb029ca0ad36a2e4d82a4a594bf556cf2775f909154911cfd4aca27ffeac79c18a9f06f33cff6d33dfb62a0628bf7fcd939f57edcc438c5b2b2e796ae167545314cc18978559b27e9562d6294c213367aaefc11831449d2c7f29462db628cc228ee151dd79b6563bcc78e53860f1611114314fac449b2e78b9bf9b32646288eb6e8df1253a3f989010aeeef4d8812ea63abe713c5508ff324a68d1b544fb4b197aaa1315a513481189dd084d69a4f163f58c68933a5f4d4246bd0ac7813d68aa9e754a7a25f2286268cdaf0132a264626d8eef1a017b493e7550c4c641a73ea798ecad55f224f82bc89c6124952d449172dc64f250c9575712ca644921c1e66939c49541b42c7047999922309dbd42fcfceff47351255dc7479a979b02824da33b7ce2cea6f9b479c3afc444d318e38d949f3f1a4eccb298d50c3d289fd7feb71322239a6a65de46e3ab9085a53e9fe85e8894945d8e9a27d9c57d2f212716e30d9c3e774a2da2302cb9322bcb23f84b1f76ac3a6957cf586385a465b5372d4f38558b37232d9278425fca718e792f7df83286341e41a2f97f0371f534e204c911f9541f3a5ba80484c5952ac5cd570ed1fb2cd5e5e92988492a37e586a75b573da241ded83692d7a2a25a1f444f9907cdcce96927bd8365a5aeca8bbd4e9c1d6d7d19ffce8c9833e1b4c9397e0e1a4d21d7529bfc3f92658acb0dc0ee55c95d335659793af83312a5b5b311db6b0c9a7040dd5eb99832705cb41d22c6378e4902c9b5e7b9d34af130737baa9ce49ba1e2f1c9cb21061aaf61bf4b0ed9df76cff44db0d5a923d4bbd9ef7996e43e3e937bd9b6643317e8962b916dfce5e8393ab5963ce65af64aba1fc5d1fe161a24fec34f097dad532e718b3d768b84bb39209119925499fe177f5e8eb3949a24e6d06c4e492b2aca58a6a97c1d35059f6c3dfc6990ce6b89825951076238f214b51638e9b3c53ce11c3a1e2a4a84d18924e6a619e3abe4f3038566e6f315d62975f3066dbb0c8ae943be805ea2f6638a9169304bb60e74d62f0701d4e3d2e1436998e493a9782b705d724315635c65ae062be6b980fea96e22c246759a66c29c6423b2d6752e558effc0abe5dd4491ea7acb6c297cabe4aec54ab55618b66bf392b265153c1125af5ab22a652780a597a958e66eb751f2930252639af30d93a0ac6da8afa98e95da250709374163767abbf3ca178d2119d643d68c609995a4e8faf9e4cb409c518aad5a3c284938f4fe53297b056fde47fde8c71548266e25bf5de5f92c524941b1a36599060ba8979a5b1d7131ee110a557f12d4a32498c50774ea496e827945504bab4bc53832549580c22d0965dfcc48bbc8cce308e396fce947436692e0cbfcafe57efbb831d0c2f4affed4ca8c78171b0d8d549927f6146abb0b41d5fece31f3647a717957b8e89cd49085f79e15de7989d734a3e65176a49993f8c554a9bba3873724b92f4ae5be6e6824b4df659d1c29be4e2c2fc177e9dae25ddb6b7b0a4deaa8e97a44ddada029d8c8bb12574e8d0d6e22a3951aea2a585b173ccf5a09ab2cfe29cdb1f73295e525e166689fa5b6365fac762fb4a1b52e193870e0bc6437ef6569f1c7f4541e22a9470bbc2f73d29dfd28a2ba7c961f2cb0a55e4c42ce9c6f26557919cd32c747d4bbaac2ab8d92012692a6cb9cbdfd94e92370615f49b78aafb2acdc15398c14ef5e2723e318929aa8a1d3b5b164b41ebe4e84ea6a4e87476ca2d560ee69b513c972b7326ae5172238ac2a38fb69ad0f3b3090529de27650a1f898e01c5d973bcc914fd84c14c4a3d9af544de9a829c143d65a79d78e673ba6ca29c3005ffee184efc8b7413efa6d8f1faa3b3929a68c524eb18aa5e92998976ddd2ce2f73ce1113849c677c3e2989365ee2af8b19b7048d4f27c61246cf4998dd601a6b622a8169ee6edae839d50c254e1e4ce8e8a9492c7aa255cea92f3e1949a8a962fa3c96a7346422a1a6deefac92a3720e893a4c3e495ae9904c3f82090f9b5392f37ed48e205fbbd7fd466c91f67df2e2e965c4c9447c6cb54524f756ae6d4611a60ccf1d3313614a4952f02d11f1c97a33ea9942c4580e71d6b5fc58858feb80514afb116e296b97e417c7daac2cb1b147b5f345d69f1dc6b472cef4a28912ad33e42a8bca8b33622edf5a925d947a5b46244b745166d83befce2768dc7291249bf473921c5c9463c6badfdce172bd852fb99ba45db7cbce1649269c78684c655f2d084f56f983949849125ad81b372f616ef9a46c167f75c8abb855b2a9b2405f442b4a86c5271695cc5c9c98050bf368eb85755e51ccdd4cef5d4194c64be6f4462b0c235b2e5579ca2a3758c1c92584bc891dbadf8d55b02e613147dd64f2ca0d553ce239cca4a993379cfce0462a7eed4fab317ed0b669083750d15c6f850c3dde3885f12edf4a8e9e0028e18629cc5dc9efd214336dc5dc28c50d52a053628c3831c8c38c3276001985575bf339aed286b77788e2988bf38c7fd375f131c23dd67f68e046289c7df5134e3cb47526480f1f3ffe033740c1262173c8a896d99c5a1e17b8f10936487866f80f333c70c313cd7a69ba4f3db1fdf21120679891811b9df0dbd375924c4d4a1dfed8f13a307083139cfbb99724d71db8b1892bb8e58cd4abdd1835c10d4d1cabab84b5949992345526cc1753adcf2b3cde392222620110dcc0045fd531a74ef12095ba7189a3e5d2c855d4fec796b8f7cec498339dcf27404e70a3129c94abc52ec5547e7228614aeb3989de319794e1248ea5559e720ae639ceef4307101e3b829c81811b92b03f4a924bf26884d824b81189725d2cc56ec718e66fe006240ea557429e14d54cad3276906024c88e1768e0c623d2484ff2e196714f8c096e38a2118c70ea53fb55a323b8b1885762cb72c99e2df62fc10d453c25b9aca92719494425d6ffcadda630f176e006224ed15f25d16b65f70f337ae087203bebd649e13344a7bf5321d662b4a677dc28c4d1d1e54f0c950fdc20049b3fdaf13574daefc08d4124df49612aaeff9924dd801b82585dbd447faf03d15b5811b38afab3df00049a3bb51e92fea1ac66a1267ed420bb1f4a16993f5df08d2a297d605c3fbfac870fc99826b9be2437f6d0a4e634df19e2c3fa1b7ad8bceb6a4b5263c52507bc4156400116dcc80395df261eb8a4498a65963b7bccdde19ec928da1e3325791e017286197630e61353fc10bd1234372222f2e3a4e0461d92e53352ae2da7c83e2222f23b74fc3874d05583f55e4fdd9e9c11119117dc98c3e1c2588e9e528e39891cca12de33c51c32a6b0c70e1adc88c36e7af3b9520c13bf1d81032a2267afc137781e6cdefe7f32dc60f691f9709ae3969a3614de952ca729613bc546444474b80781c10d3698e4f8d29aafc858c329cb89cd87ca8888888e200e240637d4e048eb6549bd8f8888f4fae091863ce4c79885f498cc8f8888a0e10a167385d6689cb42335b87186d733579a104b2695340f7cfc20430637cc609244973f0fd2bad28f888894c1d9381bf37e2b83db403c480b6e90c1a99c5a2be5ec17931c1efe630c8689d26c89cb192bb821864e3da5bcd18c661deab1e384a1ccc9b7efa2af095e901d300b6e80e19798cf2ff198f185c664c4a477eb125b752f14a675f9444d829cdce88219323ed1a6f6494d4644443a70830b7b97e6d8952e2322226678102022b8b10564e7a39bb8a6cc096d200437b4901ccce2e637e936b61b5930776696a48e4d652b07bc41808ce00616ecb5d590c1d3574898af9edf0fb927c9562874e70695bf54e1ec1b9b5db3e5654c72830addac577654f5cedb8d29942c32e6e44ac28fab37a4806ef6a657bb6f44c1f195d194c4923d437e030a9eea9648c7cc0f760039a301c98d27bc49ccb14d3be716dddc70c2e9af93a8c7c951e263379af089e1de5ec3fee3f34c30bf4659face3af99b25709d34e9a5509a29c43794f0568cd163483bd8f1a3e94612927ecf297b120282043253ec2495cd6428b97184af92b02775987af5e72c0b6e18c197b0be6aaf9415c61b456053fff69de4ae256e011e7e96040ed0c10d2228a915aa844c19069672d969daf9ca5bf2081186b1556963d04b39c97d4830d8f6fcd177f273127460d87ef371163332f32f0a5ab17ef7c5cb2bc517ddaca5eb98a10538a4179cbc639e72ee59d29f176f7469d23457132387ece294adf95d2fa645bf105d94a2697ca54af685e4e24ef193c5b0181725392d06db1b47cc581f09b9c5a77e6d61769a4205f2e30cf61f1008b1851362b7e349ebe16347482dcc595b5d33988c888800d19183f51f871675a957d0ab94319450101f3bd861860e07e2c3c7085f2064165afaf4e9e8f7b9290a222212220bd7de427cef1c8b93cd7e8e1dd3ff6517165bc85bdc50d29f84f515ad05cb4b8b9ea282405c51c8244f9c9c5ed592109056a01aa7514e63b8996904435861a792d462d2bb4d79aea2543e9724174d52dc50156cf82611cba622296f674a42760619a870aaac2dafa4d3dce1299c12a3895eada5f83a06424cb198758dbbcd5b69ca0cf7115820a414253139070f2565444444c7080759529c264999e39f69a57f812c900a198528ce9c93e5513175c59a7df0701588882c901d1708098539752ad9cf35282e615cf3536ff557e713988ae8097c47936c496227d23a3931c59a8df2214ed02d53e1b2d7bea9de442787ecccee29162dab094bafa408b74d263ad78d29ebd1aad6c484fee599931c3f845d2e9164e9ae3d3f9aff434b98e52e49278d96a0d919e9815720a412478ff6ebafe6b8d1522261e3f4869c14e66f8a844ce27fcd4c51b672a50f477448e2f83cae6b67044222612af74d6287a8f4a0193d701ebb03a71048a829caac7abd376eaec3074707f738e31f518cc1d277c967933e7b20c411218d086184314996256e2717619eac7cd25d36bf308628e2cb7acb321642dfa71e3b4660c6fe604105421261870c526b21bad13f88c046d52f7bdb57d63a04165229c9ebeae5a521f6547652e5d97b3c40fcc706591f3c3c608907444482ac0f1eaf838c1e3bccd0d1637bf020a410873441d73d27cbb38a10c909a1b69d3a78c95d0742067194e0c92ddf32831041fc279ac8d47f49e2f62181687abd3ff895bf6f0f08ae24a9de3e5fa684c542fe509b9493f5a549ca3bfa81699363da788b161af581e8d20d31f67fb26542f8e06996142ba57cc81eae7459a4aabe103de4c1136fefc2cfe59f2ec1c3c1f4c424dd664acf70c81daeece9999e536ccf93910bb1c3abab415bfab59375f87248b331bb4fd92d1d74603eae3ca7314935cf7bcca1d861e793a58a9b6a881cf6db6c89ce29bc3f392222f2031db88e1f4747901d65780542e260dc94cb43364495640981c3616327fa5952e8eb46444474e4a0c78e154c20e40d5a9e28759348881bb23d79e6a443daf0f687eaa9d425f6193a4210c206f7d27cbccc7a89fc708f333cb001336c10b2064acc4eeea9fbe2518640881a6ecb0fdb5031d75a2e240d99d8b9156e634c2731233a42d0b0476f3e7913ac9033509b1e359a9504934b3324fb67eaad92d3a945216560dbcdcfd37cdd7f327eac8e124206fa3f6a53ac982163384cfeb7a0a5f935a62322223dcef8a1c3475b20440c75cefc986dd3853b790b09c379c1ed639d6c51730d014356f285bba859c817349f97d735a9c25818e4778c00d1a1215ea8927cebc9ca1fe9b13c5050215db892a7eb7492c494291fc28583aa7be8b0b7c94a0cd9427d92fb5438cf70710ad14215b73366893997961fd1d13d56870e1efb23240b774c2325f468adc4664444040b6434f976a39aa03a2290e5a1c30c1f3f9a062157383a77aa3c6136c7335b1062054d5354f47f4e42d8352222c2ee821e2e08a942d1c4b0fa65f78805566082fe7102111133cae011428584ca92f3d6c2685a5006215348c62d69b009488f1b844861afd0aaaf5f92c9b689885860052600d26306215130abe333fa53ecdff08888880e0f81429b62daa4762947650526d011f2844cecf06629bf0f71422e9dc4ca2449e8bc8d8c9026205116f32e7a9aa0e20b429850ce90c1f7cfe42d5e5c10b204e2cd3447aec6546e429490542efa1b2fb947d14392d046cd6c924ffedf2c2148387e947a042ed5d5777c3bf66a26083182d1e735e7d58d6f7b8714c124c5fe5adb9c9b84438870ccfd69314826083686a1e74d5925f6c7a5778461a7cebb7e88f9a0a18d60a09526ef772669226b1bc0c0a4d38fd2254545a66dfc42f399eeedd6d824a9367c718d5f86a6529b4f3bdbe80525fd5a196d2b09ffb3c0062fb4dbb0124d8e3c69da5d7025e62ef1bfdd62886de822a9248bca87cb8888c8aff3c8c551a7c4123c9b06c91c21d8c0059db13a68e7a5e0fddf82cb163c8a49f93f7cd8167bc4ea8d756573316bc1474bb247e618ab8869a1e58bcf445ccce8de2c4a29c9a153949273896159b869415b7cf558b4329992766e60619c133c5a8aa90fa0040247103023c3919ae5ce7171000e1ff0083242c68e1e10a0085846a018408000f8e0402001000802e40c150c20004ec69e41468fe571000100f9e17c46fbf86106025a00003a850d3113d6616a332222f26f811c8b681f65fc007228c2f612fc636490ec9447da47194f811c8930a30c44589dade3f9a4470ea1ba4565c41006cd2a3bbfdd72144259b5d8dcfbe7b50fcce032bc7210a2075bc60f20c720921d41da47198248b424a4487472c4589d21225286ffd0b1831dada381f4d81184c78e338e8e1f24c811886447901f234078e8d081801c80487604e131026475e840408e3f7cfb28e30990c30fdf6347194f801c7df08119cc87200ea40c2fa30039f690e8d071801c7ae8b1a38c1f408e3cf80e7c9451869761801c78487604d9c18e3e43870e04e4b8c3f760cb7802e4b043d581e8f0b8ed7b12a3a77c529f630e39e4c0c92f7ef953093d3dc6010e85a793337a6fde7e99e30d747cdbaac636bbd9dd60968bdb61ab1c6dd84c3cd94a7a7be184d9c0d8cdc99bd144443a6b386e787acbbbfdb599430dfeaf580e2bab1df5ce910634587afb5eb94aaa58fd488f1c673064c6da65bee618e41c66482cc92e55f0f2d05f739481a94dfe254f671313739081ce95c71c6348f4d817e62fe36dc339c4b0be492d9e3a0bc39e33ed678b599a644490030c097d1bebd71e3bcab81c5f482c93a2e410ea3189520e2fbc71434bcaf1f373964644442a90a30b94fc9ede37cd442d8f0ec7400e2e24a75f2539e5ace6d842295df8b03a779ba61c11113139b450b670a2db9d3ba2c3cb3803c83903888808900be4c8421e53ed7564c6d4f479410e2c5c21216bf3c49c3fd9d52e2bf4b5532173b7911c55c841851c539042143a3999cd64678757370714f6b67193a6ed7b231ef11c2c0b723ce14c72fcb4b8d91c4ec8d1044462e54eca559a4b9209a5f530f1d4c4144af4cdb1843c5eeee5b54ce2caad04c6b3d2fe7d921e399260821c48c871848288f64e48694ae91bc1f027f4ca499e491cbb08cb6f5d398870da8f2713b11a97a661e87936ddb7a5b59f5e186f6ef6244cfbc4b43d822318b4af660bb1615d24fd000e60fca9ee72722b61539923bff0051a3cd45bdee5af54e1e8c5d772e974d45e3aca8bfdc345f76c8e7b693876e15e12d4b2a7ac2e0a97a2bd5faaff89955ce08255b1e87995ba45d9a216c941b63d563269310b328a9ff968d8831050e087f7e811821f1e24044ec60f2f010e59c4c2c9e84f27eb16021cb0e8aa3d7cf84b79824caf20bfb2fd67cf24576157241b5c764e4eb58215ab2055a40215fb8634c9bfa2537ac7718a2d2f477bae92e2b26e8a52147625c70b259d858d21c5284491887ff66efe85445b071ca1c0d7663d89c9fc436c74c0018ae62bbf52c6868f49fcc4d316bf5b3c2ef66a383c91dba6aa4c31db89542ec4ebe7a954390a021c9c20f6fb2f63866313688edf617334213cda38347154798c5fda4d3b1b8e4c7cc975d4623c4a35070726aa4c573575e16d93288e4b9ca932e3cb6ea82dd3127699f41b3c7fa0c05109afe4e49e2beb94302ccfb56928f1203b74bc02c724d40c1e519f937d3197046fde315daedc3822915a10493b13e42f4b2081dcefc64eb9703c024b62a6a858e79dc4138723d4ebdcdfa29dc49c4a1c8dd0eebfe22a4d85de1c0723d0cb26a4f7644c3511c7223acd316795a877098f22d6cca9eaea0cbfb3e248c42668ced417242fd4090e4428a6d944a9e496a2a40fa14bc9e92d5a583f2967082a4d2e790b904044640c380a5184a041a0492c8d0c0d59525d7008628d731eb35574af6c822310aaeafc49f9c267f76bc9190e6880087000c20f3dde612d53acf0fea1b89e63c8e8e4080e3f6c7fb26e282f4912741c7d303e9487dfbbdfd5ca07ce3d6a8a229925e0d883277ecc886a8a8e258ea800871ebeb93c62b9fb929c8b230f26c081071c77c0618763a3e78a2eb90e77e4590a9b5209fb211ddcee338ddee198c393ddad3562b6d93438e4902463ae1699c292e87130c5bcef924d8e25d40b87dd42ea3f2715c71bfcd54f1e6a5c6374c4010e37e83a9257a945a236e839bacded656b80830dc78e394fa8d63380630dea5c1edbac69f22bea1ebe82c6a18634e4f1aa62aa8ce97489030d5dc66f45eda7a50ce338435e52c7bce99eb922c6610635a6cb32ea1f4ada1fc15106cae23dfda6170719b27dd30638c6e04954decc97d7000e3114f43adac2f47db5895918aa98113babed9ac4b40be000038e2f1cb2b464d5c9140e2fe879ad3457c6fc8a1be1e8c236b196a4baf2a616890738b87006cb6439b55bc0f6a43bff335a305cc773c78bd2121f8e2c98ad36dd4dccdba71213e0c082a9538e9acb9b7e47afb09efcad923be2b0822765ca9bff5437d487a30aaf7bec8a5a4a87f37050a18ad9533bffa2e325714c81e94f29df7420e090c261f7dbbcacd399f62bc011052b4d77d8b449566be380821d3d3d55bf46896d9bc78e17e078c29d1f3ea54c3e26f17642569f2429ad899fda571c4d30c93f931793ad9eb8ed0007131232dae60ee2592ddf1f3896a05ec467f1541e53f63dc0a18424d8392cace8677a0f1f7d0007124880e3087bd69c59d35add8f531570184133c9dd546ea33766232222dd1ee4878f14e028827af163bc60c1c3965c48c0418443643b7928dfc92007000a630ca33ca17b4349e9996ba41f8c210cb7356e66364f30741352d3a72b395745050c4a0c9e118cf10b5ff42249b77c939897525e73640c5eb07b52febe65230d186317fbe76eea93dc4f97ebc26c31c95b6e712ece27e5489a10baa7415c78d1f2cd440bdea2241f9b1b452a5dcc4c30862db292b393ac29bd6932a9c59f56e1b2d765fe525a94e93d49f39b4cfa2c9945a1eddcebd3278bb3769ef0aa272661b258246b65dcb59b647855678c018bf4f67322fa324c4c4284315e91346d72d8e5e44d5e4563b8e2b43979de64a93ea4654444c47fb083c7f28e1e3e7a2c7f608c56281ec72e3c6b3de56805c66085ff56561e1a79608c55f4214b98b0cc266b9e70600c55a4a2b07dd2cf65670c548c718aa6a4589763ea95fdb48e314c4159ce31a5e4c91da3142f188314350a188c210a1a231497f4884c6f80a0600c502c972753b690ea18a4111f417a8480022a18e3139eb82d9df8d1eea626e923a582313ac109369b6fcabce94dd439478ff5a911a9b126def1393158767b30462630a1e692f44acc15374cfc1284f7bd7a47d91275708faeb2ddb6c15389529c18a36fd4d4ba29b1e59cd2378dc99da99350ad62740c2565652551da6c560e154f366c22e1feb947a66450ab0b24928a71df9279ed9cd823d8f08c6abd2f9efd72c45212ff6a25e958a611a590cb0f1bec5b93c888e57ceee7c4f4fc1c5bc49f724a6e1e538ac8bd2ac6ca7f678b344622ca18595265cc265dcb632042d7ac13ad3b93701b1be31025d9a7be53764374b29bbd89a9e41c3a222a8467b91d4dee984b4a7c0c4234111b52222c4eb584cc18631074f8dc59521e57b2e2600c417c7699c30917bbc54a6a8c4078bb21de2243eca20f0826433ddacccb45a77f3045bdb0d112118ce187828a9ee5b2983e24a9a99c20951aee2bfac0187c305f184f1932a718d73d24951ce6b453e770be8da187a4c40fa59aadea5276062718230f74fd4e4df43f8331f090f01fade47207efac608c3b3480c6b083b9436c690e73d26f86608c3abc96b4243dbb95ecd71874304c8c33213ba614537d8c31074d5ed52e13dbe6e45f0ee77f1363a59992e4fce3e0bcf78d85b4ca0f3b1c52ef524da2ef85a9fe063ea666ae9baef6c6dd6027d9a6429585f8146f43193a5366fc4fb6dd6ce04c2eda8766f1f9f41acc8992db3654f646ad06eb75e53470371b5a4c92a43e93d160fe978f4d585510f90cdcac7bfba7fad28bcd40a718349fe03f26485c862fde5734abc9507ea8ac9204cfb4e119c36126f7a6f9c9d2d01143a151d3e7cc6599390c09af29ea76ef711f305821eb2f6846d575bec0c466b7318bf9c5f502ee16434f2e5dc03b7b3f57fcff60b25c40a36ddf75db2d14def67be92e36762d58b93b49779b854c673e2d8d8a856ebdbab2f25770baf4f6a458dbb1ada0a5ca29c4cea60a58cc621ef2e4b8d2315448ce92d47be144aa335378355fc57dca48c113bee35d3687de270ac7781af4d3975cba81c29e7a3e84948e55e60967ddd3d034199ba414279c6af21ebddd5f6669c29f26a728c15d7f739209a84929bc8433462a7b89635aba120c315deb94249867d52aa5cf98c41a09e7950cd1d9fc24478f5087888c1a7f53d68b11884f3929a7307be115c15049f38c652dc1321c83086acc54d92fb54cce0fa3b9e4d1e4b4bd31d6c2c0cc4fcce12ea73c6f30ca61e1825f018a8fa8442cc4c1e201e27020180904612038606d9b0200a3130800485c1c8c8662b1308c34591e148001662a223a3c1c161e140c1c160c0884c15020100e8601a14028100c0d03a1d06b98a7b9843dd66c760a883bba04addca77ec95ef5bc0423956defd68b057c1267359e40e15db84e84dfbb06eea932f0b1571510e3b172dd2e52dd1c269ddefd7ddd303b5119b329fd87e6a4b00d15730fdfbf3ea3e8aface0427c75ffc331a6c2fdfc44a0f8e0f2ad8d5e80c53b6c708584b3364ea9eb5a76b4f8c01bb1dc70a0208b7150f3c556de809a14e5e10a090537f8706005048ee432143a31ebead6cc62456cc5a14aea5005b202208f2c4db7c00cec32de81e9780e087c889ee4c423622e895ed82699d227ed01ce1302977092adb35ccbb04cf724a99516d75f222bf9b889b16b88fa187589457d4186ccf2a7a8c0b6fba86cd5030cff39f189ceadcf3ea333f9b13835249c6145d2e39bcac2f783f81152e463ac86dc1def1ba798ac66719720cfde764f128eb4a8aab2fedd05c7bb998afdd22ba93bd677e905296d3c11d14a73156e69a752ea64dd0f368e118bb1e997172e6af714eca014d3e77458524c92b6fda54cdada7013ece8887a887493b783e38142af1dad9515848568c59fbf89f993438a9c620093e19c2362df28be22347d0e4ec626087950d8122a6a74c0676c02125453e4432374e5f10dad54e018a2410a2a759d689683273363d93bd6267df8a7a3b7fd84860da9d4393b1aa6643adcd3ea4e6515b45c92edc98c49556609d40936ec6ecc3c5a06a09291f6aee71fd8288f248633e4e7f15f0bfcad05b23c640930029b5a004290fde10284e41cffbb45889aa4760b1a6a83dcaa0d3eda1ee6be29b1141c23a87fc24dce0c02d660851e1b88238332ecca1ae6d7f09a40925853eee134ceae06dc0a7cf2be003cebd4cdc1ace390250af032d697d4a8e2d0bd691677aee94dadbcfffed0e9ba64578dec247cbe193637a0117aa7a4cafaeab0fb96d79c681be45f7974b444a5c81e1621ce793c7cbe5c0d2bec4d55669c2ca225a709894d50113bdfe0e4eae8e880707ac6c949d13ba4a35f610b91dc9459de0522285999bd2a065d3d9241b17aec7814a25ce22fbb266a6f47f58a9c703327f62a83f524e398e737c11cafd7ebe53d2aa84c7deb93c3c652540ee4560eb768d01c1809dc9df2740bd43f04aed577bec0e81d0585cc408bd90bafe8a55c569a90aaa3324b250d895272faa57bc99b4f9920d29f73555627d38272214cc95dddf40571df3c0427dcf42a9685bc72b7af41fd96169ca28935b8b46bfdb30f5e6724aedcebf92afd9d7e74b910b616223f66338c0d892ebddb8a90f8b0f41c3498344a412992b11d45b565e00382b2e8fd9fc4301c5f8c72320103519d96cf1efe675336cb6c51e189154085d55915c629c07470064ef93a7a5157805744c05424a556a36de1645f45f96bec8bbe085fde5485bd188405875455573aa60fd697d494e98bc996de90ccd0cc965cb47f335177ad97fba9a4f0603c63900b47bf36f8e8fe9e0793c0e1cfa469a8aca94037c60bfb4eb86e07eeefa3d8bcdf1adb9ef25ec15382b998123c573d7e563a4fe4c17d26ad624455ec587da626dc9a8f9b6faa0e9b5b70c29d6c56b38a084c16716cdecf151e0c7fa46d2a388fa5d979b49a17636bbd1832831677439435ded7e8125b171ab73a311af92d6a3141265c22402657ceb3a32261bef1197085f1ba9c9b01fa40c85e0b857a7dc25798be648cbc1d5168909dd82e873e83b7a7f3e81a00eacab395cac630fa47738c2920f9db8ff9bd2a0057474a952d3d6c3c01981911c594640656accda5308782a838a3c3f7bc1bb589907b29728b8d6318d982474d4eaa0893746e1d748cf2fcc332a6abb2e78f5d4c80b529a48cb29cfa4ce8eefa06873b89c5972929a4de1d0a6b8c911379b8cc4b8ba43a6281f0255ab3213d9c1d6f5c27737fb913ffa81161c97c9f8c6a2065f9c79fc4d2ed3456766a920fa7908cada4cac10d6da424d950d0c2f8fa443040133fffa1ac4a1f81ee8764598b0ec8407d3ee7f1bc63220dba4d03358bdf22041e7c5ddf83b9f793fb719c40d266286c9e0ee791a3de18884b948a4a313b71f44beef79bf86be81c30e923d88ff83c02d4123081bcca81f158c69e0706a135d5ce74e64322eaea55edfb3d31903867c2344146d10868ac540bc38e0a1a3e65b17f2509e8b3e0d148b64b242fc13cf02f037b57744db1a8909c48d8d38901dbf808b8cb369f273e0eff0a320a869f73fc0221c36959977b854d2e5b4ddd3ac24b22ba8ee307251dbce07d03dd97e4a0da144ba4c8fe2622276006fd2701ebb744dafa898e5f7dfb5fe49b0f6a773e9c1a35b06741ab2c29a8241b21e970442ac363e5eec91e24db34ca87a08631985387cf1212ceed5291865c2c7c3b818a2c69ed1f44d10875b31352f3cf9564ae0cd8f20cde928ebac1d21f23a2168804d6a93e8e212e61f351bea2e48af607863afca955fba4b4000ee3d649a4a02f6d28c479ba10cf576b3b4a853995565df85f8e82bc831c3694fc106e9b2c34efee98ce9faba17791fab48d0308d2497e1f055274006cf9e0de616c3a409a02fc22bedb70ba05a1e2cf0904c6cc63174e14be63770ab5f411cbad183e24f8507456448a34dcfc33248457d3d538c0e3131c460fd41fb0f6f82ead91e54d5ab6cacba61441dbcd7fd9165fd223a46d4a104894945f20d0629d212ccb206ec3166808ecdbd7465b7c593711a2f6f4699dc45f7dd733e0dbf98911c9242175fa1a4c568ee2135a520faf84122819e62bf7ab314a7a4051b39854a44c0d8c08857aad58271be25f607483eb7a654919a944b77e2c94d0ece722a0c60d093f06a64fbf13ae7a08011476a0f9c425f73da08fd3fd84087cee7f9c881da01755eb9678a09f4f1405707a0463f544163f602d8390bca7bf17f0826e9788709fc8e7117d7b620a93c957f5287101d44c076240d535b5a807622d1bfd81e349f8e51185e64a12ac23c26cd89845d29dbad21442f6f6d6a27c922f05430c2d167f18d5aa35e6e53f642340f01bd34b41d897bd0314af107c0d0b0edcce32d51651ea52b2a7a4aa46f63cb6499346906ac92c487d1fc929c1f1ae188995d27ba01084a8afca5dee0d2cc448b9fda213407a665fbe6504bd7baa843ee209d763e6b923186ad5c095898c28850aaad1a6df9879ace5f6b12f5242fd65074afc158c526a0c31234201499fea6a522bb5d1589b00c2d8083b981378440c372a024042021fd36eb18f67d9b3491f30fed606a2d6f2a5574687c91ed681c7e71912d8c7050289661e3af07cab441186693c984b2aa3e59e4000f5b2237042b55831fe7f9f9b4443e937dbe5091ad883ab0d164533c239439bbd19387e4b2aa2406c1a88b5fe542b82d9a46972f2c8414bb9275f41018432369323393fef34363d244a371bbf1bc012e52544222d11326c3c135afe6b8148050db8feb144ff8f6893b92d36d852b479fdc70c4850e993f8ce42482709a85b203df69a5cd1ba655c09338d101d1ce741adf1c50ebde10c640b820db16be00909e1de93f91fd2571842f080bc1432970765388ece3c6774cc85b048764c373e002820a2aefe355b1b1f0f8f442cfe4346c9f640da887a513243302a7881827bf0d0bcc76ee15333bfef7b46826a5a53df1079200c24ea98ebac9034af008e6411a948272a7bc78f37a55a8d94a01774930e8367de6f622748db39fbde3da0ae820c0978164fed5a2a555bf18a436ac5bd5b4702c646d35d3c77e6609bb47ded9a028f83c32b1e6a5ef09d7d6619680d2b2e9e961d9f065aaddb90d0dfd6499be162d5f2a2faffd8e575fa150678605d29bd627d8ecbaa96791e204ad078c74d2a39ada3f2aaf507182dae348bf6b0cce82349d988c1b94b62050360eda7029a0828b9b4c96227407b779f4e80a368f947ed1882c0f509de4118cafbbd5a455997c4f18017f49ae83db6f4cc8608d2f2208f645da7562ad17021dae3e0a6ecebdc9187976c75ef3bc78fd303c5dd55045d71eec6a859f95a208db3686c8795a08fdf28db3cc7e95b2631ccd73996e6b3c3d8ed5b2a4083995de65d2c4fb20299f5f3c26f73d2a0156264c68fba9c0bb7d5e41b7065c3ed71fc9924fc1a4d74f04dae5f4e4dd973ef60f9e3d812f34c85f13260d3726e62854e6fee9ee824827e93d782b34d5dfe86c394f2d8ffa8db692d315541d601fec09a1ef4991be34a3f069722b6bbb9879c31744808863cf81378979df9fedcf8afe622aba0c15e35ad01b99020caf75ec0670555b90b87d6258c6181f28e6ef7755a0e759bb2b49c9c4b9ca2d87570ee49dd2cb12f3c4ab05c134e502f2b9c368416c757fe60f741400f9fb58b88bb3013d1f452b4379bb66944e84956a9bb3bb91f1cd54d46db54509acfbe9f97494e897a61fb412350c5c3ff446e74dfc68df41ea3dffb434f0688fcc530208ea772f76f6c3823e92c804d11028470bd14fe97ba075271c57b47d3ec97cb31f2f1c1f192e6f694b1c363d67573e88ec55e8138ee04d913b3ef1c9f61bbe9f946fa3931c40a5660518adf0385f27941f176021d3cf862b05c4124e3436154eee8fece447d7e4b5339572c6eba3ad5cd53a5ad0bd232c31a5e8b6b2865dd14462634588303da8c1342f793254d31c6136d1da961a6f216e3d5543bb364ef0bd16b2cde6c27fac108d2a792dba4feda947fd0adb705721e37adb0ae0e7beae6cac00aaced38e8401f2d06cc37c22b6c22a5b6446f2ef3af5991910075fb427cc8cf436aa02390887bdde40b83ea9dfaed7563eb2a6f477eb8f20d92c5ee6ebc9d84ea99b97fc44bb7de2db4e5409741078269959fcf75b3e82b9d8838c9202bf56e5d70092445983585f36046b1b0d471ed6096fb7ecd4c74b88822ff773de3309aea2ec4d2b880da89e09e16215b4f555aa396236ad22a842bdf85707d292e9ccf24d8fc83dce81ceca26d6a735f090909f20125e31bbe045227dccc9fa2d5802e17a6e5c32f0ec6eb75d8cb0d74a105c65bad3125f82b108bac09fdc52d1ef7888375829f3e95bc91ac813c4de0f051d86600e28ed354db2988f626801cf38e7358a8adb7c35b41ea176a8836091e58ea518a922aeb048cba801ef292af8d0d4017d9b6d1c4b0762b3bc45776bb3863fc154186861fb75de3ddb6b5c4b6c3432e46b8a42f7a96c231c0c59512bc605a055631bb16964cbb429ea838f104db01985d84213a829efcdcb1f7220153fa582a258833e37c1a8684bb4d59ac149aa39262f80ac2114562457231a8147006ddf744bed0e06a93ca029e0310247ab27f0cc537278378b86498d3ef2db652f1be3950dc345cc02be6bcbed3859974026d206da365174cd4cc2484dd9a2475d1841c69b0e3245a19e30375889917c4d528b820bf9d031b696b1cc7b28b3664c5cfa85114ec59b01298fc8aca9cd91b553d500ae78040b89922747dd4d91a7ca7963cb7aea83b70e0a1e84c3f467c2298a5d78cc1837eb7ebe8122546646655c4e639b0139ae7505a5ad1bf3fd9959dbae1085fdd1f04bf8d9bdd2482f0480eea395ff89fad055a91cc8085e1decdd18ed52620f6af0d8b929a9ad0d18b8c1e89eb4a5722ab210c421ea245163a299b911a4d8173025ca83fdbd9bd7437b42394a3c230a6048bb118dc5b00274e6921dc0a6fc411e776f3a033ada89c450dff9bb1302c9288dc1f9537787b076af1ad2f222ca18e3fea01b455bcfa194c1810ae27005300c6715549a00b14aa98b02b41bb1b2bb6b3bfd44e74c0ac5bb0fbfc489c4ae1f7a9c686d29b42c181f43358d4befd04cab40cd4537b726514dd1eb61584b118a9f781b0b76c2c469863e8e3456468fd088bce0698f65572f2c937d941eddef98a63c06c3219c7faf4f1575e3bd6258295d234f49eb56726f80c9f2a6dae7c295904c0efd89a665a3144ce3509b6d44f8b8d3d68329c0f0d7c37bbe266217bb0202fe2c066800049672ffe870ff661e1b8a9ac9ae67e4bf79477e601553a63ff85d2fc8933b7d7fefa588386e687a9259cb5501720d39931927ed30e6a057249e7b21ac6fe50d56a425dcd888b266e877affb7f653cd432aa417d462b2d444b04cc6b9c15d5ea8d061c602a2506682aa254155c976514c5263bf2d26bd78e35a69f44ca57d69a16f2aadb3a3a67828da3c85d2f917a0a653048fb79025ea88b6a4afd849ef60c67104869da8709d10511973d8c85b775762981a347b617b2fc1513d837cafd7977303eae06bdf2a0a8d307c731eda6ba4a4ccbdeddbd81d7ca8cacc349d095a503335f2a6a198f890b4c05cbf5318c96eefec2c47426014e3411492f0946d185d6679c7d66d0441ff6b97b40c2f55a83f99e4e7120281e131dc7a4dff63ca1cfbed02053ac57ad998d573f999ec22bc1ba9bdd5b1bc0dec1b98a271013b9f64183bffa2803088d2d05aa5ef5c196bdd9604d65c8619f3059bd8c874ce76f000ba3a37c74204193bb96c02eefbdeeb15cdfb5967e8cf3387ce991f6e661838249658ebf9baf302517e35620860885f42cc73f90ac329a4f5d46ba4744b34f866e693a3b01ac33094f9793e649089ce9383c74ea168edaaf75b750ba0018f8560f2d9f92c0d8c1447484f5d90a164d30f2fa5149781e39439d0f392ff26675467d0429943c0ada3ed2fafb1cac58da85a73d3e7be74cb369df7b40c2cec038a1e053a9951b596d760b4080facd4803c6b9e8e3ca957c306ec3b8240e788bd20d895a8b937470306cb03aff6a3412d2a41a0def95e40bf119d3e43115e8573fd12b4006e2c8c8dbd401c480c926115771a714207b7faf6f1fcce36314f1864062cf7809f13f393232ce08ff8c3aede2b4370442fa49c872024727da71be58f78c56e21aa61710976060b7ac292b760f91ed78853cb4ef578324bcadacb3dd54a210c30c26b1406f5439a015c96be0d85cb5da6795d52399dba0ab7b78170bd4f4355d0af9af45605438729c38ba29e1920612cca4f8e31c5f2384d12a761a8d275172f6f0273c0165db67566d60a6299468c9692aebf5b57cea31e2fb93d24baa6ae685e0cd338b5b84430bc515df60d8676dfdf0a55768513e0e24d37ecfab456b0b3d20f00c3ea66f20f6ff8b9b60e81aba1e4e958355bc048483040eb6b23d064ba160c5030f83d411b6217265e25734a37667a8e317dc1d8e71b2b744806c4023ef071a338844125ae6f983ab4a155b5f260f6dc09b19afa5d417f60e71222b9d3fe14ca7018961c9b1625dede1b4b046b3b8e4dc6d94630d6730b02f730611b64cf1b45a3f0333d8c7681083c8e115f588c23aab0da9369fb349f79cdc4d21698bd133021d452b2ce217b561b93b603144fad8e0116b4b407d341e83e3c886b8371708d7feed2bb04511a8e4712a09e605e04c32cb5446807dd4c123b912a49447ffef897f604fe595551edbf754babf48a0d3c8ed01f4d361196d8012272405d43d5dc6dc7328d89aeb32f7938dc003387d61c877ca74becd86d08e6f84cb5665c8b52f1916935312de3b3e062c9af2a8157a6fd64e66bb75452f6195c9276cca1fe3be1d34b8789f00db5c79b6733c1d9a8e5bea164e1adbeab5b368828e1ceeb14208b79ab3593029e6a9ae978f35d8b742205a9d011f2af5c7625b9ed70e2ce3221ef8b5d893f4bb02c6fe8abe222efdd57bcbc0f5321e4949f9cf4f190c06cc070f4f4c8a24fd46957094ae0f519a0972086d9dbd183f6f83b96b7522da6432d1d6ee68a286e217eea2c404f0dfc99471929b6af088be5e1d8c5260b31076536644ad90702d1d1703e4d941ffc2c564bcd4fa99fd641de22523732ede5980a244d32168516724c2be5fddca17ff22810ab03c7c02084b264c723de469b4fd592e267ba598f4e7962ac50224a1fab346260d029afdb06147f27d702c49419ec33b5b95ae49a92005484a20618565c7e1c53f33f51ca0c01b2cceaf1e214896cd79b0ef14beed69d50a013c0ce12a597b9758a37df9ac23eb626145253e732ae4063be0e02b486b15a58aade4208e92fd65d9f895dc0e869f4deb84d6d6b24cb7d1b6ea5bd3324b4eb879f6708008dfb3e7e03d445053d78f0caa6a12945dee97acbfb51711ef36cf91ab3bcc6f7126279ca48c1d96d65605d6324b00885a8e91a76f65ed87b638fb1167603090f6bb91682d4b65faab452da312bbed2013ecdf3400c623267c4c9281e9da816cd5fc8fbe5bfac01383684a759dd2eb8be5c831e89e4e5c890401df4deee1c43035f95e5a6036c50a07c2cfca558d09b004586aed96ce0458ac62c171c105081a177a48ff5fb8a454976f99fc01097e3dabf5d54618beb8f8470fa91f766c4ef9a23a36075eed443a132a9b722a420f83f3c94e0ecf7182cb2fd0355c24fdfa64a12c05e72f1f6c892254457aa951b40a5fde9a29889ca8503ccbd2a854fadcbe8d566f8ee1a8306515e5e4319f24eef11b05676bc69b46aa1e89a2245a6e72a4bac1afc2ac5d519c59631c8dc2b53ea33769e42ec4774f3d398914951a40215201d69da8698e3a76d574cc230c315c8ed761ac3d2031fc9a333ef92978d58915e675b95dcb7c5107cebc4ae52708a59001e14c76777a46ee2924389383a73f90a09b7c312e8fa2e7934195c37208bff8aaaf4522bcfa2955cb34c73c4235a131cccbb216c4d261a5250d01ba54c7c71ab6db75850a44e928dfe1cc18bf7ce4ca10bce1059fbe8c8adce28f78b663993cb7e3b2ca0fe8677cc2ad078dfae3bce1d9049578621250a40308289649b5f6c7a6ba5deae38913e01e6e87a20ac26641c72da26f4bbeebb7b9003796ff7e36340d7d1ec211d79b3851ca536565ec014ee5257e61e854c449919b1091e28a7179f9b24c33812566aea86178e91a588240ed45231a081358bd3828d939e5853bcd1f82f0db40229cf4664c8efa23fc968876ba8039a79b514b74aec9b6a40c581d55ab7bdb5061810e9cb446f16ad8f1aab808ac825122745579680d2b9644b0ef2c6cec4c55300b9d98fdea092bc86175aa33f6e56f4af691ccdb437a1d7582396196bb40a9980b303d32d3b957269f43a9dc593939f61d066d47028e9a370957324d7295b6077596cdd09adb5d85ee8029f0f06a624642189d31aa95165e8a513278c4f3749fac02a8b00d5034558651b98a7d0ae393d686934a3929adbb7315fdb5b133c51fa8ad8d733ba8a3fdb2c26462a06a8581887b80cebd0ca551843f530a20f1751c77348eb72f4854a0bacfd5422c1ce528e18222af3db50ddf756575d99eec80c6f32697cec42d08ff618139b7853ff7e410ce3a406291daa0e1108cc0521d2f98295b73f7e9aef57025fa84fb69d30f09e9f06906f516b00a3b1c6fe1f2853893ca9a208c8eee652196362b708f33f2707178864c10918467ef857bc52fd0c15cbd07a57d032990780891fda67ad5c18b399ae2a13e4def61030ece3b2ad407af40483ab0ff9d00330e53257f893865635aea8a9b42571cf26e683beed5dcf40fa9e7772d37626fd9458d01c92ccdc6d5f9739853f00b26ded58e255e95c4c46fe612f46a904bb36b929468a55fe6148251f194c73b5f62ac335bf6c3d89d50fd2ab649c8dc021bbb450bb4196c232daea0b4f14fd1d2ff157bd698eaa088fd8e5d20db20fea59275679e4e7a02f990fffb2aa60d0b223a9dc36f6216c69092b7bdc7458c0574994e96259644e024db3c3dcd4529ab57ea35f447f7323559c3de5fc0e6b19f8ca50a5083fcd44843e7bf5d841d922c02b5b67952da48c77e2d0ad930b6da462d6d48a77d4b7b07eced2679a6848993c15564317c58411972631f5d734db2678733e51d898b31865a8c27ad0dfe93d7839117caf0afc5aabf008728f9374d1c5d33f42b996a28e1e09df72c0d6eb60712745f883427f464a1741aa1c169dba627f8043e1b9868ac21a4aa10c6d498f7ab1ca24d7b3990601b190b98e1f77c702b95b117ae25bf3dbc3af0723fb992602e053e2b3f1dc4b760b86ae42af41a4990cced22f16c4266ad332d8d7d15053ba2c247ca70b6d092d55a4f93cbfddff54822a697b9d5265256443b67e32b755ab006a080514052059e2a20169304b38f3ca63e519403c231243df94598b34d368662b62a52eee5b9470e40340945c7a74e0dab5149e5fab8778a37346187802319ada1f19b1bb400e3c83ffb21aa6a0dc5bc744c1b4d7fc63e8807555a67ce057702565959ba0948e3e609749e6d38fffb3a5ae6e160be10da285946c8a6541d8ab730ae5391b0c9ff0ae8f01d2638735e9c08ce6a3beb6bc22e3d0cc54c62f7f61a008df6a9726cbd506d45b2bcb3d72ebceee1a8ac839ce070cc90399ad928a2092721a20c3df3bb7d71696f2cab68ed2cbbcf498dfc082b2dc1013b12c1414cced1f633531a8e14913e3675007270d5da48cbd4b5d225d06ed117186c158586c9d6b68018d3b120a5910820b84d3a5b179543a633c0060c333301be35aa710ce37ec6696a0868a97bc27b507811d8fa8866dfd7da8e68f2b1650d7e1b98979cb3b422cb48f0279ed27cbdb5b18ee88644a9c72a19ee61d1e42887563242144e280556eac067300931ef2369d9c3facd058de1937a68cdbd462ed71c195f08d1138b9111323f1ab9a80e3df7c9e5c30fb01d7acd7baf8e8263cbf7f7db4114735d6dcee4ba1838d08662704920e00ab56f9dd9ecd63208cd390a9b28d9212961a361b1de8d6e81b0a070cb7ef20d9844509", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x083c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0300", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x083c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0x5bef2c5471aa9e955551dc810f5abb394e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xf430c3461d19cded0bb3195af29d2b0379a96836c714ceb8e64d3f10902cec55", + "0x5e8a19e3cd1b7c148b33880c479c02814e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5f27b51b5ec208ee9cb25b55d87282434e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x69b0cd37e17334d058ccf33c2291bd754e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xbd2a529379475088d3e29a918cd478724e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x000012c002c05ea20000000000000000", + "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3c87852424d0a2a33ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239": "0xea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3f63729798a3b5c9d3c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49": "0x3c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195004248e1cebdb00f66175726180ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239": "0xea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d0d7a002a99fa58d61757261803c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49": "0x3c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x083c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x083c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a493c4679c868ee7edce446812310d0d952374157ea2f68a9d3afb0c0207b272a49ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239ea55d832eda0d27865866ef6b01c4edf6bf83bf6d33784e9bc03c8289d2e7239", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xdb1cb4e33f2ba1297d9dde340195ff694e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d86323ae84c43568be0d1394d5d0d522c4": "0x02000000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" + }, + "childrenDefault": {} + } + } +} diff --git a/tinkernet/node/src/chain_spec.rs b/tinkernet/node/src/chain_spec.rs index 0e3ee067..b524cb2c 100644 --- a/tinkernet/node/src/chain_spec.rs +++ b/tinkernet/node/src/chain_spec.rs @@ -19,35 +19,20 @@ //! Learn more about Substrate chain specifications at //! https://docs.substrate.io/v3/runtime/chain-specs/ -#[cfg(feature = "tinkernet")] use tinkernet_runtime::{ - AccountId, AuraId, BalancesConfig, CollatorSelectionConfig, GenesisConfig, ParachainInfoConfig, - PolkadotXcmConfig, SessionConfig, SessionKeys, Signature, SudoConfig, SystemConfig, - EXISTENTIAL_DEPOSIT, WASM_BINARY, + AccountId, AuraId, RuntimeGenesisConfig, SessionKeys, Signature, EXISTENTIAL_DEPOSIT, + WASM_BINARY, }; -//#[cfg(feature = "brainstorm")] -//use brainstorm_runtime::{ -// AccountId, AuraId, BalancesConfig, CollatorSelectionConfig, GenesisConfig, ParachainInfoConfig, -// PolkadotXcmConfig, SessionConfig, SessionKeys, Signature, SudoConfig, SystemConfig, -// EXISTENTIAL_DEPOSIT, WASM_BINARY, -//}; - use cumulus_primitives_core::ParaId; use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}; use sc_service::ChainType; -// use sp_consensus_aura::sr25519::AuthorityId as AuraId; -// use hex_literal::hex; use serde::{Deserialize, Serialize}; use sp_core::{sr25519, Pair, Public}; use sp_runtime::traits::{IdentifyAccount, Verify}; -// use std::{collections::BTreeMap, str::FromStr}; - -// 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 ChainSpec = sc_service::GenericChainSpec; +pub type ChainSpec = sc_service::GenericChainSpec; /// The default XCM version to set in genesis config. const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; @@ -101,65 +86,63 @@ pub fn template_session_keys(keys: AuraId) -> SessionKeys { SessionKeys { aura: keys } } +pub fn tinkernet_live() -> ChainSpec { + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("tokenSymbol".into(), "TNKR".into()); + properties.insert("tokenDecimals".into(), 12u32.into()); + properties.insert("ss58Format".into(), 117u32.into()); + + ChainSpec::from_json_bytes(include_bytes!("../res/tinker-raw.json").to_vec()) + .expect("Should never fail.") +} + pub fn development_config() -> ChainSpec { // 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("tokenSymbol".into(), "TNKR".into()); properties.insert("tokenDecimals".into(), 12u32.into()); - properties.insert("ss58Format".into(), 42u32.into()); + properties.insert("ss58Format".into(), 117u32.into()); - ChainSpec::from_genesis( - // Name - "InvArch Dev Net", - // ID - "invarch_dev_net", - ChainType::Development, - move || { - testnet_genesis( - get_account_id_from_seed::("Alice"), - // 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"), - ], - 1000.into(), - ) - }, - // Bootnodes - Vec::new(), - // Telemetry - None, - // Protocol ID - None, - // Properties - None, - None, - // Extensions + ChainSpec::builder( + WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), // TODO: You MUST set this to the correct network! para_id: 1000, }, ) + .with_name("Tinkernet Dev Net") + .with_id("tinkernet-dev") + .with_chain_type(ChainType::Development) + .with_properties(properties) + .with_genesis_config_patch(testnet_genesis( + 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"), + ], + get_account_id_from_seed::("Alice"), + 1000.into(), + )) + .build() } pub fn solo_dev_config() -> ChainSpec { @@ -169,58 +152,46 @@ pub fn solo_dev_config() -> ChainSpec { properties.insert("tokenDecimals".into(), 12u32.into()); properties.insert("ss58Format".into(), 117u32.into()); - ChainSpec::from_genesis( - // Name - "InvArch Solo Dev Net", - // ID - "invarch-solo-dev", - ChainType::Development, - move || { - testnet_genesis( - get_account_id_from_seed::("Alice"), - // 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"), - ], - 1000.into(), - ) - }, - // Bootnodes - Vec::new(), - // Telemetry - None, - // Protocol ID - None, - // Properties - None, - None, - // Extensions + ChainSpec::builder( + WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "dev".into(), // TODO: You MUST set this to the correct network! - para_id: 1000, + para_id: 2125, }, ) + .with_name("Tinkernet Solo Dev Net") + .with_id("tinkernet-solo-dev") + .with_chain_type(ChainType::Development) + .with_properties(properties) + .with_genesis_config_patch(testnet_genesis( + 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"), + ], + get_account_id_from_seed::("Alice"), + 2125.into(), + )) + .build() } pub fn local_testnet_config() -> ChainSpec { @@ -230,90 +201,67 @@ pub fn local_testnet_config() -> ChainSpec { properties.insert("tokenDecimals".into(), 12u32.into()); properties.insert("ss58Format".into(), 42u32.into()); - ChainSpec::from_genesis( - // Name - "InvArch Local Testnet", - // ID - "invarch_local_testnet", - ChainType::Local, - move || { - testnet_genesis( - get_account_id_from_seed::("Alice"), - // 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"), - ], - 1000.into(), - ) - }, - // Bootnodes - Vec::new(), - // Telemetry - None, - // Protocol ID - None, - // Properties - None, - None, - // Extensions + ChainSpec::builder( + WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { - relay_chain: "kusama-local".into(), // You MUST set this to the correct network! + relay_chain: "kusama-local".into(), // TODO: You MUST set this to the correct network! para_id: 1000, }, ) + .with_name("Tinkernet Local Testnet") + .with_id("tinkernet-local-testnet") + .with_chain_type(ChainType::Local) + .with_properties(properties) + .with_genesis_config_patch(testnet_genesis( + 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"), + ], + get_account_id_from_seed::("Alice"), + 1000.into(), + )) + .build() } -/// Configure initial storage state for FRAME modules. fn testnet_genesis( - root_key: AccountId, invulnerables: Vec<(AccountId, AuraId)>, endowed_accounts: Vec, + root: AccountId, id: ParaId, -) -> GenesisConfig { - GenesisConfig { - system: SystemConfig { - // Add Wasm runtime to storage. - code: WASM_BINARY - .expect("WASM binary was not build, please build it!") - .to_vec(), +) -> serde_json::Value { + serde_json::json!({ + "balances": { + "balances": endowed_accounts.iter().cloned().map(|k| (k, 1u64 << 60)).collect::>(), }, - balances: BalancesConfig { - // Configure endowed accounts with initial balance of 1 << 60. - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 60)) - .collect(), + "parachainInfo": { + "parachainId": id, }, - parachain_info: ParachainInfoConfig { parachain_id: id }, - collator_selection: CollatorSelectionConfig { - invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), - candidacy_bond: EXISTENTIAL_DEPOSIT * 16, - ..Default::default() + "collatorSelection": { + "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), + "candidacyBond": EXISTENTIAL_DEPOSIT * 16, }, - session: SessionConfig { - keys: invulnerables + "session": { + "keys": invulnerables .into_iter() .map(|(acc, aura)| { ( @@ -322,27 +270,11 @@ fn testnet_genesis( template_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(), - parachain_system: Default::default(), - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), + .collect::>(), }, - sudo: SudoConfig { - // Assign network admin rights. - key: Some(root_key), + "polkadotXcm": { + "safeXcmVersion": Some(SAFE_XCM_VERSION), }, - treasury: Default::default(), - vesting: Default::default(), - maintenance_mode: Default::default(), - #[cfg(feature = "tinkernet")] - asset_registry: Default::default(), - #[cfg(feature = "tinkernet")] - tokens: Default::default(), - core_assets: Default::default(), - } + "sudo": { "key": Some(root) } + }) } diff --git a/tinkernet/node/src/cli.rs b/tinkernet/node/src/cli.rs index e484ca0e..4de46637 100644 --- a/tinkernet/node/src/cli.rs +++ b/tinkernet/node/src/cli.rs @@ -11,8 +11,8 @@ pub enum Subcommand { Key(sc_cli::KeySubcommand), /// Export the genesis state of the parachain. - #[clap(name = "export-genesis-state")] - ExportGenesisState(cumulus_client_cli::ExportGenesisStateCommand), + #[command(alias = "export-genesis-state")] + ExportGenesisHead(cumulus_client_cli::ExportGenesisHeadCommand), /// Export the genesis wasm of the parachain. #[clap(name = "export-genesis-wasm")] diff --git a/tinkernet/node/src/command.rs b/tinkernet/node/src/command.rs index 5a535506..c8a6f2ba 100644 --- a/tinkernet/node/src/command.rs +++ b/tinkernet/node/src/command.rs @@ -1,51 +1,29 @@ -// This file is part of Substrate. - -// Copyright (C) 2017-2021 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. - -#[cfg(feature = "tinkernet")] -use tinkernet_runtime::{Block, VERSION}; - -//#[cfg(feature = "brainstorm")] -//use brainstorm_runtime::{Block, RuntimeApi, VERSION}; +use tinkernet_runtime::Block; use crate::{ chain_spec, cli::{Cli, RelayChainCli, Subcommand}, service::{new_partial, ChainIdentify, ParachainNativeExecutor}, }; -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; +use sc_chain_spec::ChainSpec; use sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, - NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, + 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 std::{io::Write, net::SocketAddr}; +use sp_runtime::traits::AccountIdConversion; +use std::net::SocketAddr; fn load_spec(id: &str) -> std::result::Result, String> { Ok(match id { "solo-dev" => Box::new(chain_spec::solo_dev_config()), "dev" => Box::new(chain_spec::development_config()), "template-rococo" => Box::new(chain_spec::local_testnet_config()), - "" | "local" => Box::new(chain_spec::local_testnet_config()), + "local" => Box::new(chain_spec::local_testnet_config()), + "" | "tinkernet" => Box::new(chain_spec::tinkernet_live()), path => Box::new(chain_spec::ChainSpec::from_json_file( std::path::PathBuf::from(path), )?), @@ -84,10 +62,6 @@ impl SubstrateCli for Cli { fn load_spec(&self, id: &str) -> std::result::Result, String> { load_spec(id) } - - fn native_runtime_version(_: &Box) -> &'static RuntimeVersion { - &VERSION - } } impl SubstrateCli for RelayChainCli { @@ -122,31 +96,14 @@ impl SubstrateCli for RelayChainCli { fn load_spec(&self, id: &str) -> std::result::Result, String> { polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()).load_spec(id) } - - fn native_runtime_version(chain_spec: &Box) -> &'static RuntimeVersion { - polkadot_cli::Cli::native_runtime_version(chain_spec) - } -} - -#[allow(clippy::borrowed_box)] -fn extract_genesis_wasm(chain_spec: &Box) -> Result> { - let mut storage = chain_spec.build_storage()?; - - storage - .top - .remove(sp_core::storage::well_known_keys::CODE) - .ok_or_else(|| "Could not find wasm file in genesis state!".into()) } macro_rules! construct_async_run { (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ let runner = $cli.create_runner($cmd)?; runner.async_run(|$config| { - let $components = new_partial::< - _ - >( - &$config, - crate::service::parachain_build_import_queue, + let $components = new_partial( + &$config )?; let task_manager = $components.task_manager; { $( $code )* }.map(|v| (v, task_manager)) @@ -210,50 +167,20 @@ pub fn run() -> Result<()> { Ok(cmd.run(components.client, components.backend, None)) }) } - Some(Subcommand::ExportGenesisState(params)) => { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_profiling(sc_tracing::TracingReceiver::Log, ""); - let _ = builder.init(); - - let spec = load_spec(¶ms.shared_params.chain.clone().unwrap_or_default())?; - let state_version = Cli::native_runtime_version(&spec).state_version(); - let block: Block = generate_genesis_block(&*spec, state_version)?; - let raw_header = block.header().encode(); - let output_buf = if params.raw { - raw_header - } else { - format!("0x{:?}", HexDisplay::from(&block.header().encode())).into_bytes() - }; - - if let Some(output) = ¶ms.output { - std::fs::write(output, output_buf)?; - } else { - std::io::stdout().write_all(&output_buf)?; - } + Some(Subcommand::ExportGenesisHead(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| { + let partials = new_partial(&config)?; - Ok(()) + cmd.run(partials.client) + }) } - Some(Subcommand::ExportGenesisWasm(params)) => { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_profiling(sc_tracing::TracingReceiver::Log, ""); - let _ = builder.init(); - - let raw_wasm_blob = extract_genesis_wasm( - &cli.load_spec(¶ms.shared_params.chain.clone().unwrap_or_default())?, - )?; - let output_buf = if params.raw { - raw_wasm_blob - } else { - format!("0x{:?}", HexDisplay::from(&raw_wasm_blob)).into_bytes() - }; - - if let Some(output) = ¶ms.output { - std::fs::write(output, output_buf)?; - } else { - std::io::stdout().write_all(&output_buf)?; - } - - Ok(()) + Some(Subcommand::ExportGenesisWasm(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|_config| { + let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; + cmd.run(&*spec) + }) } Some(Subcommand::Benchmark(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -261,7 +188,16 @@ pub fn run() -> Result<()> { match cmd { BenchmarkCmd::Pallet(cmd) => { if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) + use sc_executor::{ + sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch, + }; + type HostFunctionsOf = ExtendedHostFunctions< + sp_io::SubstrateHostFunctions, + ::ExtendHostFunctions, + >; + 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`." @@ -315,7 +251,7 @@ pub fn run() -> Result<()> { 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); + let info_provider = timestamp_with_aura_info(tinkernet_runtime::MILLISECS_PER_BLOCK); runner.async_run(|_| { Ok(( @@ -342,12 +278,22 @@ pub fn run() -> Result<()> { let collator_options = cli.run.collator_options(); runner.run_node_until_exit(|config| async move { + let hwbench = (!cli.no_hardware_benchmarks) + .then_some(config.database.path().map(|database_path| { + let _ = std::fs::create_dir_all(database_path); + sc_sysinfo::gather_hwbench(Some(database_path)) + })) + .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.")?; if is_solo_dev { - return crate::service::start_solo_dev(config).map_err(Into::into); + return crate::service::start_solo_dev(config) + .await + .map(|r| r.0) + .map_err(Into::into); } let polkadot_cli = RelayChainCli::new( @@ -364,12 +310,6 @@ pub fn run() -> Result<()> { &id, ); - let state_version = - RelayChainCli::native_runtime_version(&config.chain_spec).state_version(); - let block: Block = generate_genesis_block(&*config.chain_spec, state_version) - .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) @@ -377,7 +317,6 @@ pub fn run() -> Result<()> { info!("Parachain id: {:?}", id); info!("Parachain Account: {}", parachain_account); - info!("Parachain genesis state: {}", genesis_state); info!( "Is collating: {}", if config.role.is_authority() { @@ -387,10 +326,16 @@ pub fn run() -> Result<()> { } ); - crate::service::start_parachain_node(config, polkadot_config, collator_options, id) - .await - .map(|r| r.0) - .map_err(Into::into) + crate::service::start_parachain_node( + config, + polkadot_config, + collator_options, + id, + hwbench, + ) + .await + .map(|r| r.0) + .map_err(Into::into) }) } } diff --git a/tinkernet/node/src/rpc.rs b/tinkernet/node/src/rpc.rs index 79b7c3ed..b2f9d98e 100644 --- a/tinkernet/node/src/rpc.rs +++ b/tinkernet/node/src/rpc.rs @@ -5,11 +5,7 @@ #![warn(missing_docs)] -#[cfg(feature = "tinkernet")] -use tinkernet_runtime::{opaque::Block, AccountId, Balance, Hash, Index as Nonce}; - -//#[cfg(feature = "brainstorm")] -//use brainstorm_runtime::{opaque::Block, AccountId, Balance, Hash, Index as Nonce}; +use tinkernet_runtime::{opaque::Block, AccountId, Balance, Hash, Nonce}; use sc_client_api::AuxStore; pub use sc_rpc::DenyUnsafe; diff --git a/tinkernet/node/src/service.rs b/tinkernet/node/src/service.rs index eb67473e..95fcb1bb 100644 --- a/tinkernet/node/src/service.rs +++ b/tinkernet/node/src/service.rs @@ -1,72 +1,91 @@ -//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. - -// Local Runtime Types -#[cfg(feature = "tinkernet")] -use tinkernet_runtime::{api, native_version as _native_version, opaque::Block, Hash}; - 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_collator::service::CollatorService; +use cumulus_client_consensus_aura::{ + collators::basic::{self as basic_aura, Params as BasicAuraParams}, + SlotProportion, }; +use cumulus_client_consensus_common::ParachainBlockImport as TParachainBlockImport; +use cumulus_client_consensus_proposer::Proposer; +use cumulus_client_parachain_inherent::{MockValidationDataInherentDataProvider, MockXcmConfig}; use cumulus_client_service::{ - prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams, -}; -use cumulus_primitives_core::ParaId; -use cumulus_primitives_parachain_inherent::{ - MockValidationDataInherentDataProvider, MockXcmConfig, + build_network, build_relay_chain_interface, prepare_node_config, start_relay_chain_tasks, + BuildNetworkParams, CollatorSybilResistance, DARecoveryProfile, StartRelayChainTasksParams, }; -use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult}; -use jsonrpsee::RpcModule; -use polkadot_service::CollatorPair; +use cumulus_primitives_core::{relay_chain::CollatorPair, ParaId}; +use cumulus_relay_chain_interface::{OverseerHandle, RelayChainInterface}; +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; +use sc_client_api::HeaderBackend; use sc_consensus::ImportQueue; -use sc_executor::NativeElseWasmExecutor; -use sc_network::{config::FullNetworkConfiguration, NetworkBlock}; +use sc_executor::{ + HeapAllocStrategy, NativeElseWasmExecutor, WasmExecutor, DEFAULT_HEAP_ALLOC_STRATEGY, +}; +use sc_network::NetworkBlock; use sc_network_sync::SyncingService; use sc_service::{ ChainSpec, Configuration, PartialComponents, TFullBackend, TFullClient, TaskManager, }; use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle}; use sp_keystore::KeystorePtr; -use sp_runtime::traits::BlakeTwo256; use std::{sync::Arc, time::Duration}; use substrate_prometheus_endpoint::Registry; +use tinkernet_runtime::{ + opaque::{Block, Hash}, + RuntimeApi, +}; -// Our native executor instance. +/// Native executor type. pub struct ParachainNativeExecutor; impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { - /// Only enable the benchmarking host functions when we actually want to benchmark. - #[cfg(feature = "runtime-benchmarks")] 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> { - api::dispatch(method, data) + tinkernet_runtime::api::dispatch(method, data) } fn native_version() -> sc_executor::NativeVersion { - _native_version() + tinkernet_runtime::native_version() } } type ParachainExecutor = NativeElseWasmExecutor; -type ParachainClient = TFullClient; +type ParachainClient = TFullClient; type ParachainBackend = TFullBackend; type ParachainBlockImport = TParachainBlockImport, ParachainBackend>; +/// Assembly of PartialComponents (enough to run chain ops subcommands) +pub type Service = PartialComponents< + ParachainClient, + ParachainBackend, + (), + sc_consensus::DefaultImportQueue, + sc_transaction_pool::FullPool, + ( + ParachainBlockImport, + Option, + Option, + ), +>; + +pub type ServiceSolo = PartialComponents< + ParachainClient, + ParachainBackend, + sc_consensus::LongestChain, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::FullPool, + (Option, Option), +>; + pub trait ChainIdentify { fn is_solo_dev(&self) -> bool; } impl ChainIdentify for Box { fn is_solo_dev(&self) -> bool { - self.id().starts_with("invarch-solo-dev") + self.id().starts_with("tinkernet-solo-dev") } } @@ -74,38 +93,7 @@ impl ChainIdentify for Box { /// /// 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< - PartialComponents< - ParachainClient, - ParachainBackend, - (), - sc_consensus::DefaultImportQueue, - sc_transaction_pool::FullPool, - ( - ParachainBlockImport, - Option, - Option, - ), - >, - sc_service::Error, -> -where - sc_client_api::StateBackendFor: sp_api::StateBackend, - BIQ: FnOnce( - Arc, - ParachainBlockImport, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue, - sc_service::Error, - >, -{ +pub fn new_partial(config: &Configuration) -> Result { let telemetry = config .telemetry_endpoints .clone() @@ -117,10 +105,24 @@ where }) .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 = ParachainExecutor::new_with_wasm_executor(wasm); let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::( + sc_service::new_full_parts::( config, telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), executor, @@ -154,7 +156,7 @@ where &task_manager, )?; - let params = PartialComponents { + Ok(PartialComponents { backend, client, import_queue, @@ -163,83 +165,25 @@ where transaction_pool, select_chain: (), other: (block_import, telemetry, telemetry_worker_handle), - }; - - Ok(params) -} - -async fn build_relay_chain_interface( - polkadot_config: Configuration, - parachain_config: &Configuration, - telemetry_worker_handle: Option, - task_manager: &mut TaskManager, - collator_options: CollatorOptions, -) -> RelayChainResult<( - Arc<(dyn RelayChainInterface + 'static)>, - Option, -)> { - if !collator_options.relay_chain_rpc_urls.is_empty() { - cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node( - polkadot_config, - task_manager, - collator_options.relay_chain_rpc_urls, - ) - .await - } else { - cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain( - polkadot_config, - parachain_config, - telemetry_worker_handle, - task_manager, - None, - ) - } + }) } /// Start a node with the given parachain `Configuration` and relay chain `Configuration`. /// /// This is the actual implementation that is abstract over the executor and the runtime api. -#[allow(clippy::too_many_arguments)] #[sc_tracing::logging::prefix_logs_with("Parachain")] -async fn start_node_impl( +async fn start_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, - _rpc_ext_builder: RB, - build_import_queue: BIQ, - build_consensus: BIC, -) -> sc_service::error::Result<(TaskManager, Arc)> -where - sc_client_api::StateBackendFor: sp_api::StateBackend, - RB: Fn(Arc) -> Result, sc_service::Error> + Send + '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, - ) -> Result>, sc_service::Error>, -{ + para_id: ParaId, + hwbench: Option, +) -> sc_service::error::Result<(TaskManager, Arc)> { let parachain_config = prepare_node_config(parachain_config); - let params = new_partial::(¶chain_config, build_import_queue)?; + let params = new_partial(¶chain_config)?; 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(); @@ -251,31 +195,27 @@ where 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 = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let import_queue_service = params.import_queue.service(); - let net_config = FullNetworkConfiguration::new(¶chain_config.network); - let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = - cumulus_client_service::build_network(cumulus_client_service::BuildNetworkParams { + 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: params.import_queue, relay_chain_interface: relay_chain_interface.clone(), - para_id: id, - net_config, + import_queue: params.import_queue, + sybil_resistance_level: CollatorSybilResistance::Resistant, // because of Aura }) .await?; @@ -302,14 +242,39 @@ where task_manager: &mut task_manager, config: parachain_config, keystore: params.keystore_container.keystore(), - backend: backend.clone(), + backend, network: network.clone(), + sync_service: sync_service.clone(), system_rpc_tx, tx_handler_controller, telemetry: telemetry.as_mut(), - sync_service: sync_service.clone(), })?; + 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. + match SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) { + Err(err) if validator => { + log::warn!( + "⚠️ The hardware does not meet the minimal requirements {} for role 'Authority'.", + err + ); + } + _ => {} + } + + if let Some(ref mut telemetry) = telemetry { + let telemetry_handle = telemetry.handle(); + task_manager.spawn_handle().spawn( + "telemetry_hwbench", + None, + sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench), + ); + } + } + let announce_block = { let sync_service = sync_service.clone(); Arc::new(move |hash, data| sync_service.announce_block(hash, data)) @@ -321,8 +286,25 @@ where .overseer_handle() .map_err(|e| sc_service::Error::Application(Box::new(e)))?; + start_relay_chain_tasks(StartRelayChainTasksParams { + client: client.clone(), + announce_block: announce_block.clone(), + para_id, + relay_chain_interface: relay_chain_interface.clone(), + task_manager: &mut task_manager, + da_recovery_profile: if validator { + DARecoveryProfile::Collator + } else { + DARecoveryProfile::FullNode + }, + import_queue: import_queue_service, + relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle.clone()), + sync_service: sync_service.clone(), + })?; + if validator { - let parachain_consensus = build_consensus( + start_consensus( client.clone(), block_import, prometheus_registry.as_ref(), @@ -332,42 +314,12 @@ where transaction_pool, sync_service.clone(), params.keystore_container.keystore(), - force_authoring, - )?; - - let spawner = task_manager.spawn_handle(); - - let params = StartCollatorParams { - para_id: 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_collator(params).await?; - } else { - let params = StartFullNodeParams { - client: client.clone(), + para_id, + collator_key.expect("Command line arguments do not allow this. qed"), + overseer_handle, announce_block, - task_manager: &mut task_manager, - para_id: id, - relay_chain_interface, - relay_chain_slot_duration, - import_queue: import_queue_service, - recovery_handle: Box::new(overseer_handle), - sync_service, - }; - - start_full_node(params)?; + )?; } start_network.start_network(); @@ -375,45 +327,104 @@ where Ok((task_manager, client)) } -use sc_client_api::HeaderBackend; - /// Build the import queue for the parachain runtime. -#[allow(clippy::type_complexity)] -pub fn parachain_build_import_queue( +fn build_import_queue( client: Arc, block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, -) -> Result, sc_service::Error> { +) -> Result, sc_service::Error> { + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; + + Ok( + cumulus_client_consensus_aura::equivocation_import_queue::fully_verifying_import_queue::< + sp_consensus_aura::sr25519::AuthorityPair, + _, + _, + _, + _, + >( + client, + block_import, + move |_, _| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + Ok(timestamp) + }, + slot_duration, + &task_manager.spawn_essential_handle(), + config.prometheus_registry(), + telemetry, + ), + ) +} + +fn start_consensus( + client: Arc, + block_import: ParachainBlockImport, + prometheus_registry: Option<&Registry>, + telemetry: Option, + task_manager: &TaskManager, + relay_chain_interface: Arc, + transaction_pool: Arc>, + sync_oracle: Arc>, + keystore: KeystorePtr, + relay_chain_slot_duration: Duration, + para_id: ParaId, + collator_key: CollatorPair, + overseer_handle: OverseerHandle, + announce_block: Arc>) + Send + Sync>, +) -> Result<(), sc_service::Error> { + // NOTE: because we use Aura here explicitly, we can use `CollatorSybilResistance::Resistant` + // when starting the network. + 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 { + let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( + task_manager.spawn_handle(), + client.clone(), + transaction_pool, + prometheus_registry, + telemetry.clone(), + ); + + let proposer = Proposer::new(proposer_factory); + + let collator_service = CollatorService::new( + client.clone(), + Arc::new(task_manager.spawn_handle()), + announce_block, + client.clone(), + ); + + let params = BasicAuraParams { + create_inherent_data_providers: move |_, ()| async move { Ok(()) }, block_import, - client, - create_inherent_data_providers: move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); + para_client: client, + relay_client: relay_chain_interface, + sync_oracle, + keystore, + collator_key, + para_id, + overseer_handle, + slot_duration, + relay_chain_slot_duration, + proposer, + collator_service, + // Very limited proposal time. + authoring_duration: Duration::from_millis(500), + collation_request_receiver: None, + }; - let slot = - sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *time, - slot_duration, - ); + let fut = + basic_aura::run::( + params, + ); + task_manager + .spawn_essential_handle() + .spawn("aura", None, fut); - Ok((slot, time)) - }, - registry: config.prometheus_registry(), - spawner: &task_manager.spawn_essential_handle(), - telemetry, - }) - .map_err(Into::into) + Ok(()) } /// Start a parachain node. @@ -421,106 +432,44 @@ pub async fn start_parachain_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, + para_id: ParaId, + hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc)> { - start_node_impl::<_, _, _>( + start_node_impl( parachain_config, polkadot_config, collator_options, - id, - |_| Ok(RpcModule::new(())), - parachain_build_import_queue, - |client, - block_import, - prometheus_registry, - telemetry, - task_manager, - relay_chain_interface, - transaction_pool, - sync_oracle, - keystore, - force_authoring| { - 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(), - ); - - Ok(AuraConsensus::build::< - sp_consensus_aura::sr25519::AuthorityPair, - _, - _, - _, - _, - _, - _, - >(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, - id, - ).await; - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - let slot = - sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *time, - slot_duration, - ); - - let parachain_inherent = parachain_inherent.ok_or_else(|| { - Box::::from( - "Failed to create parachain inherent", - ) - })?; - - Ok((slot, time, 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, - })) - } + para_id, + hwbench, ) .await } -pub fn start_solo_dev(config: Configuration) -> Result -where - sc_client_api::StateBackendFor: sp_api::StateBackend, -{ - let sc_service::PartialComponents { - client, - backend, - mut task_manager, - import_queue, - keystore_container, - select_chain, - transaction_pool, - other: (mut telemetry, _), - } = new_solo_partial(&config)?; +pub async fn start_solo_dev( + config: Configuration, +) -> sc_service::error::Result<(TaskManager, Arc)> { + start_solo_node_impl(config).await +} - let net_config = FullNetworkConfiguration::new(&config.network); +#[sc_tracing::logging::prefix_logs_with("Parachain")] +pub async fn start_solo_node_impl( + config: Configuration, +) -> sc_service::error::Result<(TaskManager, Arc)> { + let params = new_partial_solo(&config)?; + let mut telemetry = params.other.0; + let net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); + + let role = config.role.clone(); + let force_authoring = config.force_authoring; + let backoff_authoring_blocks: Option<()> = None; + let client = params.client.clone(); + let backend = params.backend.clone(); + let mut task_manager = params.task_manager; + let prometheus_registry = config.prometheus_registry().cloned(); + let transaction_pool = params.transaction_pool.clone(); + let import_queue = params.import_queue; + let select_chain = params.select_chain; + let keystore_container = params.keystore_container; let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { @@ -532,14 +481,9 @@ where block_announce_validator_builder: None, warp_sync_params: None, net_config, + block_relay: None, })?; - let prometheus_registry = config.prometheus_registry().cloned(); - - let role = config.role.clone(); - let force_authoring = config.force_authoring; - let backoff_authoring_blocks: Option<()> = None; - let command_sink = if role.is_authority() { let proposer_factory = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), @@ -599,6 +543,7 @@ where raw_horizontal_messages: vec![], para_blocks_per_relay_epoch: 0, relay_randomness_config: (), + additional_key_values: None, }; Ok((slot, timestamp, mocked_parachain)) @@ -646,41 +591,25 @@ where sc_service::spawn_tasks(sc_service::SpawnTasksParams { rpc_builder, - client, - transaction_pool, + client: client.clone(), + transaction_pool: transaction_pool.clone(), task_manager: &mut task_manager, config, keystore: keystore_container.keystore(), backend, - network, + network: network.clone(), + sync_service: sync_service.clone(), system_rpc_tx, tx_handler_controller, telemetry: telemetry.as_mut(), - sync_service, })?; network_starter.start_network(); - Ok(task_manager) + Ok((task_manager, client)) } -#[allow(clippy::type_complexity)] -pub fn new_solo_partial( - config: &Configuration, -) -> Result< - PartialComponents< - ParachainClient, - ParachainBackend, - sc_consensus::LongestChain, - sc_consensus::DefaultImportQueue, - sc_transaction_pool::FullPool, - (Option, Option), - >, - sc_service::Error, -> -where - sc_client_api::StateBackendFor: sp_api::StateBackend, -{ +pub fn new_partial_solo(config: &Configuration) -> Result { let telemetry = config .telemetry_endpoints .clone() @@ -692,10 +621,24 @@ where }) .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 = ParachainExecutor::new_with_wasm_executor(wasm); let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::( + sc_service::new_full_parts::( config, telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), executor, @@ -721,7 +664,7 @@ where let import_queue = { // aura import queue - let slot_duration = sc_consensus_aura::slot_duration(&*client)?; + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; let client_for_cidp = client.clone(); sc_consensus_aura::import_queue::( @@ -758,6 +701,7 @@ where raw_horizontal_messages: vec![], para_blocks_per_relay_epoch: 0, relay_randomness_config: (), + additional_key_values: None, }; Ok((slot, timestamp, mocked_parachain)) @@ -772,7 +716,7 @@ where )? }; - let params = PartialComponents { + Ok(PartialComponents { backend: backend.clone(), client, import_queue, @@ -781,9 +725,7 @@ where transaction_pool, select_chain: sc_consensus::LongestChain::new(backend), other: (telemetry, telemetry_worker_handle), - }; - - Ok(params) + }) } mod instant_finalize { @@ -806,7 +748,6 @@ mod instant_finalize { I: BlockImport + Send, { type Error = I::Error; - type Transaction = I::Transaction; async fn check_block( &mut self, @@ -817,7 +758,7 @@ mod instant_finalize { async fn import_block( &mut self, - mut block_import_params: sc_consensus::BlockImportParams, + mut block_import_params: sc_consensus::BlockImportParams, ) -> Result { block_import_params.finalized = true; self.0.import_block(block_import_params).await diff --git a/tinkernet/runtime/Cargo.toml b/tinkernet/runtime/Cargo.toml index 64204290..3b81fb1e 100644 --- a/tinkernet/runtime/Cargo.toml +++ b/tinkernet/runtime/Cargo.toml @@ -12,133 +12,124 @@ edition.workspace = true targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.43" } +substrate-wasm-builder = { workspace = true } [dependencies] -codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false, features = ["derive"]} -hex-literal = { version = "0.3.4" } -log = { version = "0.4.14", default-features = false } -scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.132", optional = true, features = ["derive"] } -smallvec = "1.6.1" -getrandom = { version = "0.2.4", default-features = false, features = ["js"] } +codec = { workspace = true } +hex-literal = { workspace = true } +log = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true, optional = true } +smallvec = { workspace = true } +getrandom = { workspace = true } -# InvArch Pallets -pallet-inv4 = { git = "https://github.com/InvArch/InvArch-Frames", rev = "07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f", default-features = false } -pallet-ocif-staking = { git = "https://github.com/InvArch/InvArch-Frames", rev = "07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f", default-features = false } -pallet-checked-inflation = { git = "https://github.com/InvArch/InvArch-Frames", rev = "07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f", default-features = false } -pallet-rings = { git = "https://github.com/InvArch/InvArch-Frames", rev = "07fc0de337cb9856d165d56d4f9ce42ff4bc5f9f", default-features = false } +## InvArch Pallets +pallet-inv4 = { workspace = true } +pallet-ocif-staking = { workspace = true } +pallet-checked-inflation = { workspace = true } +pallet-rings = { workspace = true } -#pallet-inv4 = { path = "../../../InvArch-Frames/INV4/pallet-inv4", default-features = false } -#pallet-ocif-staking = { path = "../../../InvArch-Frames/OCIF/staking", default-features = false } -#pallet-checked-inflation = { path = "../../../InvArch-Frames/pallet-checked-inflation", default-features = false } -#pallet-rings = { path = "../../../InvArch-Frames/pallet-rings", default-features = false } +pallet-maintenance-mode = { workspace = true } -pallet-maintenance-mode = { git = "https://github.com/Moonsong-Labs/moonkit", default-features = false, features = ["xcm-support"], rev = "51e3068808fb58f30ffb16bfdaa81d0890f98fd8" } - -modified-construct-runtime = { path = "../../modified-construct-runtime", default-features = false } +new-modified-construct-runtime = { workspace = true } ## Parity's Unique -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } - +pallet-uniques = { workspace = true } ## ORML Pallets -orml-traits = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xcm = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-vesting = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-asset-registry = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xtokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-xcm-support = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-unknown-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-currencies = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } +orml-traits = { workspace = true } +orml-xcm = { workspace = true } +orml-vesting = { workspace = true } +orml-asset-registry = { workspace = true } +orml-xtokens = { workspace = true } +orml-xcm-support = { workspace = true } +orml-unknown-tokens = { workspace = true } +orml-currencies = { workspace = true } +orml-tokens = { workspace = true } -orml-traits2 = { package = "orml-traits", git = "https://github.com/arrudagates/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } -orml-tokens2 = { package = "orml-tokens", git = "https://github.com/arrudagates/open-runtime-module-library", default-features = false, rev = "7ecebeab7e3dbc2226ed58d32ee159271a8176ae" } +orml-traits2 = { workspace = true } +orml-tokens2 = { workspace = true } ## Substrate Dependencies # Substrate FRAME Dependencies -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.43" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.43" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.43" } +frame-benchmarking = { workspace = true, optional = true } +frame-executive = { workspace = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +frame-system-benchmarking = { workspace = true, optional = true } +frame-system-rpc-runtime-api = { workspace = true } +frame-try-runtime = { workspace = true, optional = true } # Substrate Pallet Dependencies -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-identity = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-preimage = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-scheduler = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-treasury = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } +pallet-assets = { workspace = true } +pallet-asset-tx-payment = { workspace = true } +pallet-aura = { workspace = true } +pallet-authorship = { workspace = true } +pallet-balances = { workspace = true } +pallet-identity = { workspace = true } +pallet-multisig = { workspace = true } +pallet-message-queue = { workspace = true } +pallet-preimage = { workspace = true } +pallet-scheduler = { workspace = true } +pallet-session = { workspace = true } +pallet-sudo = { workspace = true } +pallet-timestamp = { workspace = true } +pallet-treasury = { workspace = true } +pallet-transaction-payment = { workspace = true } +pallet-transaction-payment-rpc-runtime-api = { workspace = true } +pallet-utility = { workspace = true } # Substrate Primitive Dependencies -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } +sp-api = { workspace = true } +sp-block-builder = { workspace = true } +sp-consensus-aura = { workspace = true } +sp-core = { workspace = true } +sp-genesis-builder = { workspace = true } +sp-inherents = { workspace = true } +sp-io = { workspace = true } +sp-offchain = { workspace = true } +sp-runtime = { workspace = true } +sp-session = { workspace = true } +sp-std = { workspace = true } +sp-transaction-pool = { workspace = true } +sp-version = { workspace = true } # Polkadot Dependencies -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } +pallet-xcm = { workspace = true } +polkadot-parachain = { workspace = true } +polkadot-runtime-common = { workspace = true } +xcm = { workspace = true } +xcm-builder = { workspace = true } +xcm-executor = { workspace = true } # Cumulus dependencies -cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -pallet-collator-selection = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } -parachain-info = { git = "https://github.com/paritytech/cumulus", default-features = false, branch = "polkadot-v0.9.43" } +cumulus-pallet-aura-ext = { workspace = true } +cumulus-pallet-dmp-queue = { workspace = true } +cumulus-pallet-parachain-system = { workspace = true } +cumulus-pallet-session-benchmarking = { workspace = true } +cumulus-pallet-xcm = { workspace = true } +cumulus-pallet-xcmp-queue = { workspace = true } +cumulus-primitives-core = { workspace = true } +cumulus-primitives-timestamp = { workspace = true } +cumulus-primitives-utility = { workspace = true } +pallet-collator-selection = { workspace = true } +parachain-info = { workspace = true } +parachains-common = { workspace = true } [dev-dependencies] -xcm-simulator = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.43" } -pallet-message-queue = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.43" } +xcm-simulator = { workspace = true } +polkadot-core-primitives = { workspace = true } +polkadot-runtime-parachains = { workspace = true } [features] aura = [] -default = [ - "std", - "aura", - ] +default = ["std", "aura"] manual-seal = [] # A feature that should be enabled when the runtime should be build for on-chain # deployment. This will disable stuff that shouldn't be part of the on-chain wasm # to make it smaller like logging for example. -on-chain-release-build = [ - "sp-api/disable-logging", -] +on-chain-release-build = ["sp-api/disable-logging"] # By default some types have documentation, `no-metadata-docs` allows to reduce the documentation # in the metadata. @@ -150,13 +141,13 @@ std = [ "scale-info/std", "serde", "cumulus-pallet-aura-ext/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", - "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", + "cumulus-pallet-dmp-queue/std", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -182,7 +173,7 @@ std = [ "pallet-xcm/std", "pallet-collator-selection/std", "parachain-info/std", - "polkadot-parachain/std", + "polkadot-parachain/std", "sp-api/std", "sp-block-builder/std", "sp-consensus-aura/std", @@ -195,9 +186,9 @@ std = [ "sp-std/std", "sp-transaction-pool/std", "sp-version/std", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", + "xcm-builder/std", + "xcm-executor/std", + "xcm/std", "orml-xcm/std", "orml-vesting/std", "orml-unknown-tokens/std", @@ -213,7 +204,7 @@ std = [ "pallet-checked-inflation/std", "pallet-rings/std", "pallet-asset-tx-payment/std", - "modified-construct-runtime/std", + "new-modified-construct-runtime/std", ] runtime-benchmarks = [ diff --git a/tinkernet/runtime/src/assets.rs b/tinkernet/runtime/src/assets.rs index 8c153109..87c12526 100644 --- a/tinkernet/runtime/src/assets.rs +++ b/tinkernet/runtime/src/assets.rs @@ -2,7 +2,7 @@ use crate::{ common_types::AssetId, constants::TreasuryAccount, AccountId, Balance, Balances, BlockNumber, ExistentialDeposit, MaxLocks, MaxReserves, Runtime, RuntimeEvent, RuntimeOrigin, Tokens, }; -use codec::{Decode, Encode}; +use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ parameter_types, traits::{Contains, EnsureOrigin, EnsureOriginWithArg}, @@ -19,6 +19,7 @@ pub const KSM_ASSET_ID: AssetId = 1; parameter_types! { pub const NativeAssetId: AssetId = CORE_ASSET_ID; pub const RelayAssetId: AssetId = KSM_ASSET_ID; + pub const StringLimit: u32 = 255; } pub struct AssetAuthority; @@ -29,7 +30,7 @@ impl EnsureOriginWithArg> for AssetAuthority { origin: RuntimeOrigin, _asset_id: &Option, ) -> Result { - EnsureRoot::try_origin(origin) + as EnsureOrigin>::try_origin(origin) } #[cfg(feature = "runtime-benchmarks")] @@ -38,7 +39,7 @@ impl EnsureOriginWithArg> for AssetAuthority { } } -#[derive(Debug, TypeInfo, Encode, Decode, PartialEq, Eq, Clone)] +#[derive(Debug, TypeInfo, Encode, Decode, PartialEq, Eq, Clone, MaxEncodedLen)] pub struct CustomAssetMetadata { pub fee_per_second: Option, } @@ -51,6 +52,7 @@ impl orml_asset_registry::Config for Runtime { type AssetProcessor = orml_asset_registry::SequentialId; type CustomMetadata = CustomAssetMetadata; type WeightInfo = (); + type StringLimit = StringLimit; } pub struct DustRemovalWhitelist; diff --git a/tinkernet/runtime/src/lib.rs b/tinkernet/runtime/src/lib.rs index 867adecc..ac4b0015 100644 --- a/tinkernet/runtime/src/lib.rs +++ b/tinkernet/runtime/src/lib.rs @@ -29,6 +29,11 @@ use cumulus_primitives_core::DmpMessageHandler; use frame_support::{ dispatch::{DispatchClass, RawOrigin}, pallet_prelude::{ConstU32, EnsureOrigin}, + traits::{ + fungible::HoldConsideration, + tokens::{PayFromAccount, UnityAssetBalanceConversion}, + LinearStoragePrice, + }, weights::constants::WEIGHT_REF_TIME_PER_SECOND, }; pub use frame_support::{ @@ -48,6 +53,7 @@ use frame_system::{ limits::{BlockLength, BlockWeights}, EnsureRoot, }; +use pallet_identity::legacy::IdentityInfo; use pallet_inv4::{origin::INV4Origin, INV4Lookup}; use pallet_transaction_payment::{FeeDetails, InclusionFee, Multiplier}; use polkadot_runtime_common::SlowAdjustingFeeUpdate; @@ -62,7 +68,9 @@ use sp_core::{ pub use sp_runtime::BuildStorage; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdConversion, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify}, + traits::{ + AccountIdConversion, BlakeTwo256, Block as BlockT, IdentifyAccount, IdentityLookup, Verify, + }, transaction_validity::{TransactionSource, TransactionValidity}, ApplyExtrinsicResult, FixedPointNumber, MultiSignature, Perquintill, }; @@ -96,7 +104,7 @@ mod fee_handling; use fee_handling::TnkrToKsm; mod inflation; mod inv4; -mod migrations; +// mod migrations; mod nft; mod rings; mod staking; @@ -116,8 +124,8 @@ pub type AccountId = <::Signer as IdentifyAccount>::Account /// Balance of an account. pub type Balance = u128; -/// Index of a transaction in the chain. -pub type Index = u32; +/// Nonce of a transaction in the chain. +pub type Nonce = u32; /// A hash of some data used by the chain. pub type Hash = sp_core::H256; @@ -162,7 +170,14 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - (), + ( + pallet_identity::migration::versioned::V0ToV1, + pallet_scheduler::migration::v3::MigrateToV4, + pallet_preimage::migration::v1::Migration, + pallet_collator_selection::migration::v1::MigrateToV1, + cumulus_pallet_xcmp_queue::migration::v4::MigrationToV4, + pallet_xcm::migration::v1::MigrateToV1, + ), >; /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know @@ -171,7 +186,10 @@ pub type Executive = frame_executive::Executive< /// to even the core data structures. pub mod opaque { use super::*; - use sp_runtime::{generic, traits::BlakeTwo256}; + use sp_runtime::{ + generic, + traits::{BlakeTwo256, Hash as HashT}, + }; pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; /// Opaque block header type. @@ -180,6 +198,8 @@ pub mod opaque { pub type Block = generic::Block; /// Opaque block identifier type. pub type BlockId = generic::BlockId; + /// Opaque block hash type. + pub type Hash = ::Output; } impl_opaque_keys! { @@ -193,7 +213,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("tinkernet_node"), impl_name: create_runtime_str!("tinkernet_node"), authoring_version: 1, - spec_version: 22, + spec_version: 23, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -352,14 +372,7 @@ impl pallet_maintenance_mode::Config for Runtime { type NormalCallFilter = BaseFilter; type MaintenanceCallFilter = MaintenanceFilter; type MaintenanceOrigin = EnsureRoot; - // We use AllPalletsReversedWithSystemFirst because we dont want to change the hooks in normal - // operation - type NormalExecutiveHooks = AllPalletsWithSystem; - type MaintenanceExecutiveHooks = MaintenanceHooks; - type XcmExecutionManager = (); - type NormalDmpHandler = NoHandler; - type MaintenanceDmpHandler = NoHandler; } // Configure FRAME pallets to include in runtime. @@ -372,19 +385,19 @@ impl frame_system::Config for Runtime { /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = INV4Lookup; /// The index type for storing how many extrinsics an account has signed. - type Index = Index; - /// The index type for blocks. - type BlockNumber = BlockNumber; + type Nonce = Nonce; /// 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 block type. + type Block = Block; /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type RuntimeOrigin = RuntimeOrigin; + /// The runtime task type. + type RuntimeTask = RuntimeTask; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Version of the runtime. @@ -454,11 +467,11 @@ impl pallet_balances::Config for Runtime { type WeightInfo = pallet_balances::weights::SubstrateWeight; type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; - type MaxHolds = ConstU32<1>; type FreezeIdentifier = (); type MaxFreezes = (); - type HoldIdentifier = [u8; 8]; + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = RuntimeFreezeReason; } parameter_types! { @@ -536,12 +549,13 @@ impl cumulus_pallet_parachain_system::Config for Runtime { type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; - type DmpMessageHandler = DmpQueue; + type DmpQueue = frame_support::traits::EnqueueWithOrigin; type ReservedDmpWeight = ReservedDmpWeight; type OutboundXcmpMessageSource = XcmpQueue; type XcmpMessageHandler = XcmpQueue; type ReservedXcmpWeight = ReservedXcmpWeight; type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; + type WeightInfo = cumulus_pallet_parachain_system::weights::SubstrateWeight; } impl parachain_info::Config for Runtime {} @@ -552,6 +566,7 @@ parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; pub const MaxAuthorities: u32 = 100_000; + pub const AllowMultipleBlocksPerSlot: bool = false; } impl pallet_session::Config for Runtime { @@ -572,6 +587,7 @@ impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = MaxAuthorities; + type AllowMultipleBlocksPerSlot = AllowMultipleBlocksPerSlot; } parameter_types! { @@ -592,7 +608,7 @@ impl pallet_collator_selection::Config for Runtime { type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; type MaxCandidates = MaxCandidates; - type MinCandidates = MinCandidates; + type MinEligibleCollators = MinCandidates; type MaxInvulnerables = MaxInvulnerables; // should be a multiple of session or things will get inconsistent type KickThreshold = Period; @@ -620,11 +636,16 @@ parameter_types! { pub const ProposalBond: Permill = Permill::from_percent(1); pub const ProposalBondMinimum: Balance = 100 * UNIT; pub const SpendPeriod: BlockNumber = DAYS; + pub const PayoutSpendPeriod: BlockNumber = 30 * DAYS; pub const Burn: Permill = Permill::from_percent(1); pub const TreasuryPalletId: PalletId = PalletId(*b"ia/trsry"); pub const MaxApprovals: u32 = 100; } +parameter_types! { + pub TreasuryAccount: AccountId = TreasuryPalletId::get().into_account_truncating(); +} + impl pallet_treasury::Config for Runtime { type PalletId = TreasuryPalletId; type Currency = Balances; @@ -642,6 +663,12 @@ impl pallet_treasury::Config for Runtime { type MaxApprovals = MaxApprovals; type ProposalBondMaximum = (); type SpendOrigin = frame_support::traits::NeverEnsureOrigin; + type AssetKind = (); + type Beneficiary = AccountId; + type BeneficiaryLookup = IdentityLookup; + type Paymaster = PayFromAccount; + type BalanceConverter = UnityAssetBalanceConversion; + type PayoutPeriod = PayoutSpendPeriod; } parameter_types! { @@ -718,10 +745,9 @@ impl pallet_scheduler::Config for Runtime { } parameter_types! { - // Max size 4MB allowed: 4096 * 1024 - pub const PreimageMaxSize: u32 = 4096 * 1024; - pub const PreimageBaseDeposit: Balance = deposit(2, 64); - pub const PreimageByteDeposit: Balance = deposit(0, 1); + pub const PreimageBaseDeposit: Balance = deposit(2, 64); + pub const PreimageByteDeposit: Balance = deposit(0, 1); + pub const PreimageHoldReason: RuntimeHoldReason = RuntimeHoldReason::Preimage(pallet_preimage::HoldReason::Preimage); } impl pallet_preimage::Config for Runtime { @@ -729,32 +755,42 @@ impl pallet_preimage::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Currency = Balances; type ManagerOrigin = EnsureRoot; - type BaseDeposit = PreimageBaseDeposit; - type ByteDeposit = PreimageByteDeposit; + type Consideration = HoldConsideration< + AccountId, + Balances, + PreimageHoldReason, + LinearStoragePrice, + >; } parameter_types! { pub BasicDeposit: Balance = 5 * UNIT; - pub FieldDeposit: Balance = 2 * UNIT; pub const MaxAdditionalFields: u32 = 5; pub const MaxRegistrars: u32 = 10; pub const MaxSubAccounts: u32 = 10; pub SubAccountDeposit: Balance = 5 * UNIT; + pub const ByteDeposit: Balance = deposit(0, 1); } impl pallet_identity::Config for Runtime { - type BasicDeposit = BasicDeposit; type Currency = Balances; type RuntimeEvent = RuntimeEvent; - type FieldDeposit = FieldDeposit; type ForceOrigin = EnsureRoot; - type MaxAdditionalFields = MaxAdditionalFields; type MaxRegistrars = MaxRegistrars; type MaxSubAccounts = MaxSubAccounts; type RegistrarOrigin = EnsureRoot; type Slashed = Treasury; type SubAccountDeposit = SubAccountDeposit; - type WeightInfo = pallet_identity::weights::SubstrateWeight; + type WeightInfo = (); + type BasicDeposit = BasicDeposit; + type ByteDeposit = ByteDeposit; + type IdentityInformation = IdentityInfo; + type OffchainSignature = Signature; + type SigningPublicKey = ::Signer; + type UsernameAuthorityOrigin = EnsureRoot; + type PendingUsernameExpiration = (); + type MaxSuffixLength = (); + type MaxUsernameLength = (); } parameter_types! { @@ -773,7 +809,7 @@ impl pallet_multisig::Config for Runtime { type WeightInfo = (); } -use modified_construct_runtime::construct_runtime_modified; +use new_modified_construct_runtime::construct_runtime_modified; impl From for Result, RuntimeOrigin> { fn from(val: RuntimeOrigin) -> Self { @@ -789,64 +825,61 @@ impl From for Result, RuntimeO // Create the runtime by composing the FRAME pallets that were previously configured. construct_runtime_modified!( - pub enum Runtime where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic + pub enum Runtime { // System support stuff - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Utility: pallet_utility::{Pallet, Call, Event} = 1, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 2, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 3, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 4, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 5, - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 6, - MaintenanceMode: pallet_maintenance_mode::{Pallet, Call, Config, Storage, Event} = 7, + System: frame_system = 0, + Utility: pallet_utility = 1, + ParachainSystem: cumulus_pallet_parachain_system = 2, + Timestamp: pallet_timestamp = 3, + ParachainInfo: parachain_info = 4, + Scheduler: pallet_scheduler = 5, + Preimage: pallet_preimage = 6, + MaintenanceMode: pallet_maintenance_mode = 7, // Monetary stuff - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event} = 12, + Balances: pallet_balances = 10, + TransactionPayment: pallet_transaction_payment = 11, + Treasury: pallet_treasury = 12, AssetTxPayment: pallet_asset_tx_payment = 13, // Collator support. The order of there 4 are important and shale not change. - Authorship: pallet_authorship::{Pallet, Storage } = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, + 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::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Event, Origin, Config, Call} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, + XcmpQueue: cumulus_pallet_xcmp_queue = 30, + PolkadotXcm: pallet_xcm = 31, + CumulusXcm: cumulus_pallet_xcm = 32, + // needs to be removed https://github.com/paritytech/polkadot-sdk/pull/1246 + DmpQueue: cumulus_pallet_dmp_queue = 33, + MessageQueue: pallet_message_queue = 34, // FRAME - Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 41, - Identity: pallet_identity::{Pallet, Call, Storage, Event} = 42, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 43, + Sudo: pallet_sudo = 41, + Identity: pallet_identity = 42, + Multisig: pallet_multisig = 43, // InvArch stuff - CheckedInflation: pallet_checked_inflation::{Pallet, Storage, Event, Call} = 50, - OcifStaking: pallet_ocif_staking::{Pallet, Call, Storage, Event} = 51, + CheckedInflation: pallet_checked_inflation = 50, + OcifStaking: pallet_ocif_staking = 51, - INV4: pallet_inv4::{Pallet, Call, Storage, Event, Origin} = 71, - CoreAssets: orml_tokens2::{Pallet, Storage, Call, Event, Config} = 72, - Rings: pallet_rings::{Pallet, Call, Storage, Event} = 73, + INV4: pallet_inv4 = 71, + CoreAssets: orml_tokens2 = 72, + Rings: pallet_rings = 73, - Uniques: pallet_uniques::{Pallet, Storage, Event} = 80, + Uniques: pallet_uniques = 80, OrmlXcm: orml_xcm = 90, - Vesting: orml_vesting::{Pallet, Storage, Call, Event, Config} = 91, - XTokens: orml_xtokens::{Pallet, Storage, Call, Event} = 92, - UnknownTokens: orml_unknown_tokens::{Pallet, Storage, Event} = 93, - AssetRegistry: orml_asset_registry::{Pallet, Call, Config, Storage, Event} = 94, - Currencies: orml_currencies::{Pallet, Call} = 95, - Tokens: orml_tokens::{Pallet, Storage, Call, Event, Config} = 96, + Vesting: orml_vesting = 91, + XTokens: orml_xtokens = 92, + UnknownTokens: orml_unknown_tokens = 93, + AssetRegistry: orml_asset_registry = 94, + Currencies: orml_currencies = 95, + Tokens: orml_tokens = 96, } ); @@ -954,8 +987,8 @@ impl_runtime_apis! { } } - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Index { + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Nonce { System::account_nonce(account) } } @@ -1081,6 +1114,16 @@ impl_runtime_apis! { Ok(batches) } } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn create_default_config() -> Vec { + frame_support::genesis_builder_helper::create_default_config::() + } + + fn build_config(config: Vec) -> sp_genesis_builder::Result { + frame_support::genesis_builder_helper::build_config::(config) + } + } } struct CheckInherents; diff --git a/tinkernet/runtime/src/xcm_config.rs b/tinkernet/runtime/src/xcm_config.rs index 0734ddf2..5dbd0b60 100644 --- a/tinkernet/runtime/src/xcm_config.rs +++ b/tinkernet/runtime/src/xcm_config.rs @@ -1,16 +1,16 @@ use super::{ - AccountId, Balance, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, - RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, Balance, Balances, MessageQueue, ParachainInfo, ParachainSystem, PolkadotXcm, + Runtime, RuntimeBlockWeights, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use crate::{ assets::CORE_ASSET_ID, common_types::AssetId, constants::TreasuryAccount, AllPalletsWithSystem, AssetRegistry, Currencies, DealWithFees, UnknownTokens, Weight, }; use codec::{Decode, Encode}; -use cumulus_primitives_core::ParaId; +use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use frame_support::{ match_types, parameter_types, - traits::{Everything, Get, Nothing}, + traits::{EnqueueWithOrigin, Everything, Get, Nothing, TransformOrigin}, }; use frame_system::EnsureRoot; use orml_asset_registry::{AssetRegistryTrader, FixedRateAssetRegistryTrader}; @@ -22,10 +22,12 @@ pub use orml_xcm_support::{ DepositToAlternative, IsNativeConcrete, MultiCurrencyAdapter, MultiNativeAsset, }; use pallet_xcm::XcmPassthrough; +use parachains_common::message_queue::{NarrowOriginToSibling, ParaIdToSibling}; use polkadot_parachain::primitives::Sibling; +use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; use scale_info::TypeInfo; use sp_core::ConstU32; -use sp_runtime::traits::Convert; +use sp_runtime::{traits::Convert, Perbill}; use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, @@ -35,7 +37,6 @@ use xcm_builder::{ TakeWeightCredit, UsingComponents, }; use xcm_executor::XcmExecutor; - #[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)] pub struct AssetLocation(pub MultiLocation); @@ -60,6 +61,7 @@ parameter_types! { pub const RelayNetwork: NetworkId = NetworkId::Kusama; pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); + pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub UniversalLocation: InteriorMultiLocation = X2(GlobalConsensus(RelayNetwork::get()), Parachain(ParachainInfo::parachain_id().into())); } @@ -208,7 +210,6 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = XcmOriginToTransactDispatchOrigin; type IsReserve = MultiNativeAsset; type IsTeleporter = (); // disabled - type Barrier = Barrier; type Weigher = FixedWeightBounds; type Trader = Trader; @@ -216,7 +217,6 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type UniversalLocation = UniversalLocation; type AssetLocker = (); type AssetExchanger = (); @@ -227,6 +227,7 @@ impl xcm_executor::Config for XcmConfig { type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; type SafeCallFilter = (); + type Aliasers = (); } impl cumulus_pallet_xcm::Config for Runtime { @@ -236,21 +237,21 @@ impl cumulus_pallet_xcm::Config for Runtime { impl cumulus_pallet_xcmp_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; - type ExecuteOverweightOrigin = EnsureRoot; type ControllerOrigin = EnsureRoot; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; type WeightInfo = cumulus_pallet_xcmp_queue::weights::SubstrateWeight; - - type PriceForSiblingDelivery = (); + type PriceForSiblingDelivery = NoPriceForMessageDelivery; + type XcmpQueue = TransformOrigin; + type MaxInboundSuspended = ConstU32<1000>; } +// Deprecated impl cumulus_pallet_dmp_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; - type ExecuteOverweightOrigin = EnsureRoot; + type DmpSink = EnqueueWithOrigin; + type WeightInfo = cumulus_pallet_dmp_queue::weights::SubstrateWeight; } parameter_type_with_key! { @@ -259,6 +260,32 @@ parameter_type_with_key! { }; } +parameter_types! { + pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; + pub const MessageQueueMaxStale: u32 = 8; + pub const MessageQueueHeapSize: u32 = 128 * 1048; +} + +impl pallet_message_queue::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_message_queue::weights::SubstrateWeight; + #[cfg(feature = "runtime-benchmarks")] + type MessageProcessor = + pallet_message_queue::mock_helpers::NoopMessageProcessor; + #[cfg(not(feature = "runtime-benchmarks"))] + type MessageProcessor = xcm_builder::ProcessXcmMessage< + AggregateMessageOrigin, + xcm_executor::XcmExecutor, + RuntimeCall, + >; + type Size = u32; + type QueueChangeHandler = NarrowOriginToSibling; + type QueuePausedQuery = NarrowOriginToSibling; + type HeapSize = MessageQueueHeapSize; + type MaxStale = MessageQueueMaxStale; + type ServiceWeight = MessageQueueServiceWeight; +} + impl orml_xtokens::Config for Runtime { type RuntimeEvent = RuntimeEvent; type Balance = Balance; diff --git a/tinkernet/runtime/src/xcm_simulator/mod.rs b/tinkernet/runtime/src/xcm_simulator/mod.rs index 2435c9d1..e7aae2b9 100644 --- a/tinkernet/runtime/src/xcm_simulator/mod.rs +++ b/tinkernet/runtime/src/xcm_simulator/mod.rs @@ -1,9 +1,10 @@ mod parachain; mod relay_chain; -use frame_support::sp_tracing; +use frame_support::__private::sp_tracing; +use sp_runtime::{traits::TryConvert, BuildStorage}; use xcm::prelude::*; -use xcm_executor::traits::Convert; +use xcm_executor::traits::ConvertLocation; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain, TestExt}; pub const ALICE: sp_runtime::AccountId32 = sp_runtime::AccountId32::new([0u8; 32]); @@ -56,7 +57,7 @@ decl_test_network! { pub fn child_account_id(para: u32) -> relay_chain::AccountId { let location = (Parachain(para),); - relay_chain::LocationToAccountId::convert(location.into()).unwrap() + relay_chain::LocationToAccountId::convert_location(&MultiLocation::from(location)).unwrap() } pub fn child_account_account_id(para: u32, who: sp_runtime::AccountId32) -> relay_chain::AccountId { @@ -67,7 +68,7 @@ pub fn child_account_account_id(para: u32, who: sp_runtime::AccountId32) -> rela id: who.into(), }, ); - relay_chain::LocationToAccountId::convert(location.into()).unwrap() + relay_chain::LocationToAccountId::convert_location(&MultiLocation::from(location)).unwrap() } pub fn sibling_core_account_id(core: u32) -> parachain::AccountId { @@ -82,14 +83,14 @@ pub fn sibling_core_account_id(core: u32) -> parachain::AccountId { ), }; - parachain::HashedDescription::convert(location.into()).unwrap() + parachain::HashedDescription::try_convert(location.into()).unwrap() } pub fn tinkernet_ext(para_id: u32) -> sp_io::TestExternalities { use crate::{PolkadotXcm, Runtime, RuntimeOrigin, System}; - let mut t = frame_system::GenesisConfig::default() - .build_storage::() + let mut t = frame_system::GenesisConfig::::default() + .build_storage() .unwrap(); pallet_balances::GenesisConfig:: { @@ -119,8 +120,8 @@ pub fn tinkernet_ext(para_id: u32) -> sp_io::TestExternalities { pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { use parachain::{MsgQueue, PolkadotXcm, Runtime, RuntimeOrigin, System}; - let mut t = frame_system::GenesisConfig::default() - .build_storage::() + let mut t = frame_system::GenesisConfig::::default() + .build_storage() .unwrap(); pallet_balances::GenesisConfig:: { @@ -141,8 +142,8 @@ pub fn para_ext(para_id: u32) -> sp_io::TestExternalities { pub fn relay_ext() -> sp_io::TestExternalities { use relay_chain::{Runtime, RuntimeOrigin, System}; - let mut t = frame_system::GenesisConfig::default() - .build_storage::() + let mut t = frame_system::GenesisConfig::::default() + .build_storage() .unwrap(); pallet_balances::GenesisConfig:: { diff --git a/tinkernet/runtime/src/xcm_simulator/parachain.rs b/tinkernet/runtime/src/xcm_simulator/parachain.rs index 6b2e925e..d8cac682 100644 --- a/tinkernet/runtime/src/xcm_simulator/parachain.rs +++ b/tinkernet/runtime/src/xcm_simulator/parachain.rs @@ -13,20 +13,18 @@ use polkadot_parachain::primitives::{ use scale_info::TypeInfo; use sp_core::{blake2_256, ConstU32, H256}; use sp_runtime::{ - testing::Header, - traits::{Hash, IdentityLookup}, + traits::{Hash, IdentityLookup, TryConvert}, AccountId32, }; use sp_std::prelude::*; use xcm::{latest::prelude::*, VersionedXcm}; use xcm_builder::{ - Account32Hash, AccountId32Aliases, AllowUnpaidExecutionFrom, - CurrencyAdapter as XcmCurrencyAdapter, EnsureXcmOrigin, FixedRateOfFungible, FixedWeightBounds, - IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, + AccountId32Aliases, AllowUnpaidExecutionFrom, EnsureXcmOrigin, FixedRateOfFungible, + FixedWeightBounds, FungibleAdapter as XcmCurrencyAdapter, IsConcrete, NativeAsset, + ParentAsSuperuser, ParentIsPreset, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, }; -use xcm_executor::{traits::Convert, Config, XcmExecutor}; +use xcm_executor::{traits::ConvertLocation, Config, XcmExecutor}; use xcm_simulator::PhantomData; pub type SovereignAccountOf = ( @@ -45,14 +43,14 @@ parameter_types! { impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; + type Block = Block; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup; - type Header = Header; type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; type BlockHashCount = BlockHashCount; type BlockWeights = (); type BlockLength = (); @@ -85,10 +83,11 @@ impl pallet_balances::Config for Runtime { type WeightInfo = (); type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; - type HoldIdentifier = (); type FreezeIdentifier = (); type MaxHolds = ConstU32<0>; type MaxFreezes = ConstU32<0>; + type RuntimeFreezeReason = (); + type RuntimeHoldReason = (); } parameter_types! { @@ -141,8 +140,8 @@ impl DescribeLocation for DescribeFamily { } pub struct HashedDescription; -impl Convert for HashedDescription { - fn convert(value: MultiLocation) -> Result { +impl TryConvert for HashedDescription { + fn try_convert(value: MultiLocation) -> Result { log::trace!(target: "xcm::HashedDescription", "HashedDescription: location: {:?}", value); if let Some(l) = DescribeFamily::::describe_location(&value) { let a: AccountId = blake2_256(&l).into(); @@ -155,6 +154,19 @@ impl Convert for HashedDescription { } } +impl ConvertLocation for HashedDescription { + fn convert_location(location: &MultiLocation) -> Option { + if let Some(l) = DescribeFamily::::describe_location(&location) { + let a: AccountId = blake2_256(&l).into(); + log::trace!(target: "xcm::HashedDescription", "HashedDescription Some: location: {:?} account: {:?}", location, a); + Some(a) + } else { + log::trace!(target: "xcm::HashedDescription", "HashedDescription None"); + None + } + } +} + pub type LocationToAccountId = ( ParentIsPreset, SiblingParachainConvertsVia, @@ -217,6 +229,7 @@ impl Config for XcmConfig { type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; type SafeCallFilter = Everything; + type Aliasers = (); } #[frame_support::pallet] @@ -506,16 +519,12 @@ impl pallet_rings::Config for Runtime { } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub enum Runtime { - System: frame_system::{Pallet, Call, Storage, Config, Event}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - MsgQueue: mock_msg_queue::{Pallet, Storage, Event}, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin}, - + System: frame_system, + Balances: pallet_balances, + MsgQueue: mock_msg_queue, + PolkadotXcm: pallet_xcm, INV4: pallet_inv4, Tokens: orml_tokens, CoreAssets: orml_tokens2, diff --git a/tinkernet/runtime/src/xcm_simulator/relay_chain.rs b/tinkernet/runtime/src/xcm_simulator/relay_chain.rs index 70a0250a..af7d6824 100644 --- a/tinkernet/runtime/src/xcm_simulator/relay_chain.rs +++ b/tinkernet/runtime/src/xcm_simulator/relay_chain.rs @@ -17,8 +17,8 @@ use polkadot_runtime_parachains::{ use xcm::latest::prelude::*; use xcm_builder::{ Account32Hash, AccountId32Aliases, AllowUnpaidExecutionFrom, ChildParachainAsNative, - ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, - CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, + ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, FixedRateOfFungible, + FixedWeightBounds, FungibleAdapter as XcmCurrencyAdapter, IsConcrete, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, }; use xcm_executor::{Config, XcmExecutor}; @@ -33,14 +33,14 @@ parameter_types! { impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup; - type Header = Header; + type Block = Block; type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; type BlockHashCount = BlockHashCount; type BlockWeights = (); type BlockLength = (); @@ -73,10 +73,11 @@ impl pallet_balances::Config for Runtime { type WeightInfo = (); type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; - type HoldIdentifier = (); type FreezeIdentifier = (); type MaxHolds = ConstU32<0>; type MaxFreezes = ConstU32<0>; + type RuntimeHoldReason = (); + type RuntimeFreezeReason = (); } impl shared::Config for Runtime {} @@ -145,6 +146,7 @@ impl Config for XcmConfig { type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; type SafeCallFilter = Everything; + type Aliasers = (); } pub type LocalOriginToLocation = SignedToAccountId32; @@ -230,18 +232,16 @@ impl pallet_message_queue::Config for Runtime { type MessageProcessor = MessageProcessor; type QueueChangeHandler = (); type WeightInfo = (); + type QueuePausedQuery = (); } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub enum Runtime { - System: frame_system::{Pallet, Call, Storage, Config, Event}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - ParasOrigin: origin::{Pallet, Origin}, - XcmPallet: pallet_xcm::{Pallet, Call, Storage, Event, Origin}, - MessageQueue: pallet_message_queue::{Pallet, Event}, + System: frame_system, + Balances: pallet_balances, + ParasOrigin: origin, + XcmPallet: pallet_xcm, + MessageQueue: pallet_message_queue, } ); diff --git a/tinkernet/rust-toolchain.toml b/tinkernet/rust-toolchain.toml index fba59145..afab8639 100644 --- a/tinkernet/rust-toolchain.toml +++ b/tinkernet/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2023-12-01" +channel = "nightly-2024-02-06" targets = ["wasm32-unknown-unknown"] -components = [ "rustfmt", "rustc", "rust-std", "cargo", "clippy", "llvm-tools-preview"] +components = [ "rustfmt", "rustc", "rust-std", "cargo", "clippy", "llvm-tools-preview", "rust-src"]